Project

General

Profile

Miscellaneous » History » Version 31

Anonymous, 11/27/2024 10:49 AM
adding note

1 1
h1. Miscellaneous
2
3 31
h2. Update Nextcloud External Files
4
5
<pre>
6
$ cd /var/www/nextcloud
7
$ sudo -u www-data php ./occ files:scan --all 
8
</pre>
9
10 30
h2. Change Windows 10 Version
11
12
* *Disconnect from internet*
13
* Go to "Settings" > "Update & Security" > "Activation" > "Change productkey"
14
* Enter @VK7JG-NPHTM-C97JM-9MPGT-3V66T@
15
* Press "Ok" and wait for the process to run
16
* Reboot after error message is displayed
17
18
Codes for all editions:
19
<pre>
20
[cmi]
21
namespace=urn:schemas-microsoft-com:unattend
22
ClientServerSplit=true
23
AnswerFileFormat=1
24
professionalworkstationn=WYPNQ-8C467-V2W6J-TX4WX-WT2RQ
25
enterpriseneval=MNXKQ-WY2CT-JWBJ2-T68TQ-YBH2V
26
serverazurecor=QN7G3-4RM92-MT6QR-PR966-FVYV7
27
serverrdshCore=NJCF7-PW8QT-3324D-688JX-2YV66
28
onecoreupdateos=NFDPX-3MV8X-THC2X-QQ9QP-P9YY6
29
serverstandardeval=BGHNQ-64HFC-WD7WG-K2T34-8477T
30
serverdatacenterevalcorCore=RNJ27-KR4TJ-DX6FB-XFJJ2-2DQMJ
31
iotenterprisek=P8Q7T-WNK7X-PMFXY-VXHBG-RRK69
32
ServerStandardEvalCor=KGKTQ-NWWW9-Q8KKW-4M2R9-66TFB
33
iotenterprise=XQQYW-NFFMW-XJPBH-K8732-CKFFD
34
educationn=84NGF-MHBT6-FXBX8-QWJK7-DRR8H
35
serverdatacentereval=K4NJQ-WBJ89-PJGPP-9MTY4-R3QK2
36
serverazurecorCore=QN7G3-4RM92-MT6QR-PR966-FVYV7
37
enterpriseseval=Y22YQ-HNV92-HWMXQ-PMDQ9-7XRGJ
38
coresinglelanguage=BT79Q-G7N6G-PGBYW-4YWX6-6F4BT
39
professionalcountryspecific=3XP6D-CRND4-DRYM2-GM84D-4GG8Y
40
core=YTMG3-N6DKC-DKB77-7M9GH-8HVX7
41
coresystemserver=6DWFN-9DBPB-99W4C-XYWKQ-VXPFM
42
serverdatacenterevalcor=RNJ27-KR4TJ-DX6FB-XFJJ2-2DQMJ
43
serverstandardcor=B2NYV-R6JT2-H9YTQ-VQ4X3-979YK
44
serverdatacentercorCore=DCXHG-67NR6-6CRMW-2PYFW-PKGD7
45
serverazurenano=9JQNQ-V8HQ6-PKB8H-GGHRY-R62H6
46
coren=4CPRK-NM3K3-X6XXQ-RXX86-WXCHW
47
EnterpriseSNEval=VW76H-NXCYD-PPWKF-JG63K-KQFGM
48
starter=D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ
49
professional=VK7JG-NPHTM-C97JM-9MPGT-3V66T
50
professionaln=2B87N-8KFHP-DKV6R-Y2C8J-PKCKT
51
enterprise=XGVPP-NMH47-7TTHJ-W3FW7-8HV2C
52
education=YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY
53
serverwebCore=3WN48-GVPXF-VHWK4-29Y8D-KKTD2
54
ServerTurbine=3Y8N7-3R679-4XFFH-6BTCM-X4W7X
55
serverazurestackhcicor=YP2N4-KHPFV-F2D34-PXFJH-MBK3B
56
enterprisegn=FW7NV-4T673-HF4VX-9X4MM-B4H4T
57
enterpriseg=FV469-WGNG4-YQP66-2B2HY-KD8YX
58
serverweb=3WN48-GVPXF-VHWK4-29Y8D-KKTD2
59
serverrdsh=NJCF7-PW8QT-3324D-688JX-2YV66
60
serverdatacenternanoCore=BFM6D-TKNBY-X6RGR-PHJ4G-723B6
61
ServerDatacenter=9DYFC-FNGM2-KQGHQ-BTRK4-JHYT3
62
serverstandard=J768X-NXC7R-GFB9Q-BHF4H-GCVBB
63
enterprisesn=2D7NQ-3MDXF-9WTDT-X9CCP-CKD8V
64
serverdatacenternano=BFM6D-TKNBY-X6RGR-PHJ4G-723B6
65
ServerStandardEvalCorCore=KGKTQ-NWWW9-Q8KKW-4M2R9-66TFB
66
serverstandardnano=69NHX-WQQ7G-QVBPG-4HPQP-8XDB7
67
cloudeditionn=K9VKN-3BGWV-Y624W-MCRMQ-BHDCD
68
professionaleducation=8PTT6-RNW4C-6V7J2-C2D3X-MHBPB
69
serverazurestackhcicorCore=YP2N4-KHPFV-F2D34-PXFJH-MBK3B
70
serverstandardevalCore=BGHNQ-64HFC-WD7WG-K2T34-8477T
71
serverturbinecorCore=H7XNC-JYM86-7B27X-8MJ9W-TKFX9
72
professionaleducationn=GJTYN-HDMQY-FRR76-HVGC7-QPF8P
73
professionalworkstation=DXG7C-N36C4-C4HTG-X4T3X-2YV77
74
enterprises=PJB47-8PN2T-MCGDY-JTY3D-CBCPV
75
cloudedition=KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W
76
iotenterprisesk=N979K-XWD77-YW3GB-HBGH6-D32MH
77
startern=3NFXW-2T27M-2BDW6-4GHRV-68XRX
78
EnterpriseEval=VPMWD-PVNRR-79WJ9-VVJQC-3YH2G
79
serverturbinecor=H7XNC-JYM86-7B27X-8MJ9W-TKFX9
80
iotenterprises=CGK42-GYN6Y-VD22B-BX98W-J8JXD
81
ServerDatacenterCore=9DYFC-FNGM2-KQGHQ-BTRK4-JHYT3
82
wnc=TMP2N-KGFHJ-PWM6F-68KCQ-3PJBP
83
ServerTurbineCore=3Y8N7-3R679-4XFFH-6BTCM-X4W7X
84
serverazurenanoCore=9JQNQ-V8HQ6-PKB8H-GGHRY-R62H6
85
iotenterpriseseval=R63DV-9NPDX-QVWJF-HMR8V-M4K7D
86
holographic=H4MND-KF7J8-PWBTV-2P3JG-BP4FC
87
serverdatacenterevalCore=K4NJQ-WBJ89-PJGPP-9MTY4-R3QK2
88
corecountryspecific=N2434-X9D7W-8PF6X-8DV9T-8TYMD
89
serverstandardcorCore=B2NYV-R6JT2-H9YTQ-VQ4X3-979YK
90
enterprisen=WGGHN-J84D6-QYCPR-T7PJ7-X766F
91
professionalsinglelanguage=G3KNM-CHG6T-R36X3-9QDG6-8M8K9
92
serverstandardnanoCore=69NHX-WQQ7G-QVBPG-4HPQP-8XDB7
93
serverdatacentercor=DCXHG-67NR6-6CRMW-2PYFW-PKGD7
94
serverstandardCore=J768X-NXC7R-GFB9Q-BHF4H-GCVBB
95
gvlkcoresinglelanguage=7HNRX-D7KGG-3K4RQ-4WPJ4-YTDFH
96
gvlkcore=TX9XD-98N7V-6WMQ6-BX7FG-H8Q99
97
gvlkprofessionalworkstationn=9FNHH-K3HBT-3W4TD-6383H-6XYWF
98
gvlkserverazurecor=FCNV3-279Q9-BQB46-FTKXX-9HPRH
99
gvlkserverrdshCore=CPWHC-NT2C7-VYW78-DHDB2-PG3GK
100
gvlkenterprisesn=92NFX-8DJQP-P6BBQ-THF9C-7CG2H
101
gvlkiotenterprises=KBN8V-HFGQ4-MGXVD-347P6-PDQGT
102
gvlkServerDatacenterCore=D764K-2NDRG-47T6Q-P8T8W-YP6DF
103
gvlkServerTurbineCore=XGN3F-F394H-FD2MY-PP6FD-8MCRC
104
gvlkcloudeditionn=6XN7V-PCBDC-BDBRH-8DQY7-G6R44
105
gvlkprofessionaleducation=6TP4R-GNPTD-KYYHQ-7B7DP-J447Y
106
gvlkcoren=3KHY7-WNT83-DGQKR-F7HPR-844BM
107
gvlkprofessional=W269N-WFGWX-YVC9B-4J6C9-T83GX
108
gvlkprofessionaln=MH37W-N47XK-V7XM9-C7227-GCQG9
109
gvlkeducationn=2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
110
gvlkeducation=NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
111
gvlkenterprise=NPPR9-FWDCX-D2C8J-H872K-2YT43
112
gvlkServerTurbine=XGN3F-F394H-FD2MY-PP6FD-8MCRC
113
gvlkprofessionaleducationn=YVWGF-BXNMC-HTQYQ-CPQ99-66QFC
114
gvlkprofessionalworkstation=NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
115
gvlkcloudedition=37D7F-N49CB-WQR8W-TBJ73-FM8RX
116
gvlkenterprises=M7XTQ-FN8P6-TTKYV-9D4CC-J462D
117
gvlkcorecountryspecific=PVMJN-6DFY6-9CCP6-7BKTT-D3WVR
118
gvlkenterprisegn=44RPN-FTY23-9VTTB-MP9BX-T84FV
119
gvlkenterprisen=DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
120
gvlkserverazurecorCore=FCNV3-279Q9-BQB46-FTKXX-9HPRH
121
gvlkenterpriseg=YYVX9-NTFWV-6MDM3-9PT4T-4M68B
122
gvlkserverrdsh=CPWHC-NT2C7-VYW78-DHDB2-PG3GK
123
gvlkServerDatacenter=D764K-2NDRG-47T6Q-P8T8W-YP6DF
124
gvlkserverstandardCore=TVRH6-WHNXV-R9WG3-9XRFY-MY832
125
gvlkserverstandard=TVRH6-WHNXV-R9WG3-9XRFY-MY832
126
127
[BuildInfo]
128
</pre>
129
130
Sauce: https://forums.mydigitallife.net/threads/how-to-upgrade-from-home-sl-to-pro-or-any-other-higher-sku-and-license-switching.85294/
131
132 26
h2. Find all files matching regex pattern
133
134
All PNG images starting with 5 digits followed by a dash:
135
<pre>
136
$ find . -regextype posix-extended -regex "\./[[:digit:]]{5}-(.*).png
137
</pre>
138
139 25
h2. Change all file or directory permissions
140
141
<pre>
142
$ find . -type d -exec chmod 755 {} \;
143
$ find . -type f -exec chmod 644 {} \;
144
</pre>
145
146 24
h2. List Root Device
147
148
<pre>
149
$ findmnt -n -o SOURCE /
150
</pre>
151
152
h2. List Block Devices with Serial Numbers
153
154
<pre>
155
$ lsblk --nodeps -o name,serial 
156
</pre>
157
158 23
h2. Useful rsync Examples
159
160
* Synchronize directories (one way):
161
<pre>
162
$ rsync -auhrP --delete --info=del,name,stats2 "/mnt/phalanx/" "/storage"
163
</pre>
164
* Copy with progress:
165
<pre>
166
$ rsync -ahr --info=progress2 some_file.mp4 /storage/
167
</pre>
168
169
170 22
h2. Patch Youtube App using Revanced Manager (6/22/2024)
171
172
h3. Install Steps
173
174
* Delete Revanced app, Micro G, Revanced manager prior installation any of mentioned apps.
175
* Download *but not install* following:
176
** Micro G - https://github.com/ReVanced/GmsCore/releases/tag/v0.3.1.3.240913
177
** Revanced Manager - https://revanced.app/patches?s=Mic
178
** YT App version 19.16.39 (must be this version; revanced manager will warn if not): https://www.apkmirror.com/apk/google-inc/youtube/youtube-19-16-39-release/youtube-19-16-39-android-apk-download/
179
* Install Micro G.
180
* Next install Revanced Manager
181
* Open Revanced manager
182
** Go to Patches
183
** Select an app
184
** Bottom right corner choose Storage
185
** Find YT APK you downloaded, select patch on the bottom right corner
186
* Wait for patch and compile to finish, then choose install app
187
* Open it, check if its Vanced, restart the phone.
188
* If you have stock YT app, uninstall updates and disable it
189
190
Source: https://www.reddit.com/r/revancedapp/comments/1bq92r7/me_rn_trying_to_patch_youtube_revanced/
191
192 19
h2. Combine find and GNU parallel
193
194
Example:
195
<pre>
196
$ find . -name '*.jpg' | parallel convert -geometry 120 {} {.}_thumb.jpg
197 21
$ find . -name '*.png' | parallel --eta convert '{}' -quality 90 '{.}.jpg'
198 29
$ ls -1 *.png | parallel convert '{}' -quality 90 '{.}.jpg'
199 21
$ find . -name '*.png' -delete
200 19
</pre>
201
Note @{.}@ is the filename without the @.jpg@ portion.
202
203
* See: https://www.gnu.org/software/parallel/parallel_examples.html#example-compute-intensive-jobs-and-substitution
204
205 18
h2. Setup ttyd
206
207
* Download @ttyd@ and put it in @/opt/local/bin/ttyd@:
208
** https://github.com/tsl0922/ttyd/releases
209
* Create systemd service file @/etc/systemd/system/ttyd.service@: 
210
<pre>
211
[Unit]                                                                                                                                                                                           
212
Description=TTYD
213
After=syslog.target
214
After=network.target
215
 
216
[Service]
217
ExecStart=/opt/local/bin/ttyd -W -p 9772 login
218
Type=simple
219
Restart=always
220
User=root
221
Group=root
222
 
223
[Install]
224
WantedBy=multi-user.target
225
</pre>
226
** Start and enable service:
227
<pre>
228
$ sudo systemctl start ttyd && sudo systemctl enable ttyd
229
</pre>
230
* Setup apache configuration (add to existing)
231
<pre>
232
        ProxyRequests Off
233
        ProxyPreserveHost On
234
        RewriteEngine on
235
        RewriteCond %{HTTP:Upgrade} websocket [NC]
236
        RewriteCond %{HTTP:Connection} upgrade [NC]
237
        RewriteRule /terminal/?(.*) "ws://localhost:9772/$1" [P,L]
238
        ProxyPass /terminal http://localhost:9772/
239
        ProxyPassReverse /terminal http://localhost:9772/
240
</pre>
241
** Enable necessary apache modules:
242
<pre>
243
$ a2enmod proxy proxy_http proxy_wstunnel mod_rewrite
244
</pre>
245
246
247 17
h2. Increase tmux scrollback
248
249
<pre>
250
$ cd 
251
$ echo "set -g history-limit 9999999" >> ~/.tmux.conf
252
</pre>
253
254 16
h2. Setup VNC
255 15
256
On the server side:
257
# Install @x11vnc@:
258
<pre>
259
$ sudo apt install x11vnc net-tools
260
</pre>
261
# Set VNC password:
262
<pre>
263
$ x11vnc -storepasswd
264
</pre>
265
# Start VNC service from command line:
266
<pre>
267
$ sudo x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/dsorber/.vnc/passwd -rfbport 5900 -shared
268
</pre>
269
# To start at boot using systemd service create: @/etc/systemd/system/x11vnc.service@:
270
<pre>
271
[Unit]
272
Description=x11vnc remote desktop server
273
After=multi-user.target
274
275
[Service]
276
Type=simple
277
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/dsorber/.vnc/passwd -rfbport 5900 -shared
278
279
Restart=on-failure
280
281
[Install]
282
WantedBy=multi-user.target
283
</pre>
284 28
** Setup service
285
<pre>
286
$ sudo systemctl daemon-reload
287
$ sudo systemctl enable x11vnc.service 
288
$ sudo systemctl start x11vnc.service
289
</pre>
290 15
291
On the client side:
292
# Install @remmina@:
293
<pre>
294
$ sudo apt install remmina
295
</pre>
296
# Open @remmina@, select "VNC", and type in the server's IP address.
297
298
* Source: https://forums.linuxmint.com/viewtopic.php?t=369092
299
300 14
h2. sshuttle
301 15
302
Poor man's VPN:
303 14
304
<pre>
305
$ sshuttle --dns -NHr dsorber@phalanx.homelinuxserver.org:3268  192.168.0.0/16
306
</pre>
307
308 13
h2. Batch Convert PNG to JPG
309
310
NOTE: @convert@ comes from ImageMagick
311
<pre>
312
& ls -1 *.png | parallel --eta convert '{}' -quality 90 '{.}.jpg'
313
</pre>
314
315 12
h2. Crop Video with ffmpeg
316
317
<pre>
318
$ ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
319
</pre>
320
321
* @out_w@ is the width of the output rectangle
322
* @out_h@ is the height of the output rectangle
323
* @x@ and @y@ specify the top left corner of the output rectangle (coordinates start at (0,0) in the top left corner of the input) 
324
325
Test using @ffplay@:
326
<pre>
327
$ ffplay -i input -vf "crop=out_w:out_h:x:y"
328
</pre>
329
330 10
h2. Build Custom Windows ISOs
331
332
* https://uupdump.net/
333 11
* https://forums.mydigitallife.net/threads/kms_vl_all-smart-activation-script.79535/
334 10
335 9
h2. Script to Convert Local manpages to html
336
337
Note use @zcat@ if the manpages are compressed:
338
339
<pre>
340
#!/bin/bash
341
342
mkdir -p html
343
for file in *; do
344
        if [ -f $file ] && [ "${file: -3}" != ".sh" ]; then
345
                echo $file
346
                #echo "${file%.*}"
347
                pandoc --from man --to html < $file > html/${file%.*}.html
348
        fi
349
done
350
</pre>
351
352 6
h2. Display Total rsync Progress
353
354
<pre>
355 7
$ rsync -a --no-i-r --info=progress2 /path/to/src /path/to/dest/
356 6
</pre>
357
358
NOTE: @-v@ does not work with @--info=progress2@
359
360
Source: https://serverfault.com/a/441724/472586
361
362 5
h2. Slice Video File 
363
364
<pre>
365
$ ffmpeg -ss 00:01:00 -to 00:02:00  -i input.mp4 -c copy output.mp4
366
</pre>
367
368
Explanation of the command:
369
370
* -i: This specifies the input file. In that case, it is (input.mp4).
371
* -ss: Used with -i, this seeks in the input file (input.mp4) to position.
372
* 00:01:00: This is the time your trimmed video will start with.
373
* -to: This specifies duration from start (00:01:40) to end (00:02:12).
374
* 00:02:00: This is the time your trimmed video will end with.
375
* -c copy: This is an option to trim via stream copy. (NB: Very fast)
376
377 4
h2. Add new drive SW RAID5
378
379
# Format drive if needed (see below for steps).
380
# Add new drive to SW RAID:
381
<pre>
382
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1
383
</pre>
384
# Grow array:
385
<pre>
386
$ sudo mdadm --grow --raid-devices=4 /dev/md0
387
</pre>
388
389
h2. Replace failed SW RAID drive
390
391
# If drive is brand new be sure to create a partition on it:
392
<pre>
393
sorber@file2:~$ sudo parted /dev/sdg
394
GNU Parted 3.3
395
Using /dev/sdg
396
Welcome to GNU Parted! Type 'help' to view a list of commands.
397
(parted) mklabel gpt
398
(parted) mkpart primary 2048s 100%                                        
399
(parted) print                                                            
400
Model: ATA ST2000DM008-2FR1 (scsi)
401
Disk /dev/sdg: 2000GB
402
Sector size (logical/physical): 512B/4096B
403
Partition Table: gpt
404
Disk Flags: 
405
406
Number  Start   End     Size    File system  Name     Flags
407
 1      1049kB  2000GB  2000GB               primary
408
409
(parted) quit
410
</pre>
411
# If needed, mark bad drive as failed:
412
<pre>
413
$ sudo mdadm --manage /dev/md0 --fail /dev/sdd
414
</pre>
415
# Add new drive to replace failed:
416
<pre>
417
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1 /dev/sdg1
418
</pre>
419
# Improve rebuild speed slightly:
420
<pre>
421
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_min"
422
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_max"
423
</pre>
424
# Monitor rebuild:
425
<pre>
426
$ watch -n1 cat /proc/mdstat 
427
</pre>
428
429
h2. Get detailed drive information
430
431
<pre>
432
$ udevadm info --query=all --name=/dev/sda
433
</pre>
434
435 1
h2. Split flac with cue
436
437
<pre>
438
$ sudo apt install cuetools shntool
439
440
$ shnsplit -f file.cue -t %n-%t -o flac file.flac
441
</pre>
442
443
h2. Fix Chrome Display Glitches
444
445
Somewhere around Chrome 86 display glitches started happening on wake. Here is how to fix:
446
447 3
Enabling @enable-vulkan@ in @chrome://flags@ then restarting the browser fixed it. If that does not work, you can also try enabling `ignore-gpu-blacklist` as well.
448 1
449
h2. Setup SSH Public Key
450
451
# On host machine generate a key pair. This key can be reused for multiple remote machines so it's not really necessary to change the name unless multiple keys are generated, which is also not really needed.
452
<pre>
453
$ ssh-keygen -t rsa
454
</pre>
455 3
 *NOTE:* for NetBeans to use/recognize the ssh key you must use the old PEM format:
456 1
<pre>
457
$ ssh-keygen -m PEM -t rsa
458
</pre>
459
# Now use `ssh-copy-id` to copy the key to the remote machine (for example):
460
<pre>
461
$ ssh-copy-id -i ~/.ssh/phalanx_rsa.pub dsorber@phalanx
462
</pre>
463
464
h2. Read Windows Product Key from ACPI Firmware
465
466
Boot into Linux and run:
467
468
<pre>
469
$ sudo strings /sys/firmware/acpi/tables/MSDM
470
</pre>
471
472
h2. Windows 10 Install and SysPrep Instructions
473
474
Very good instructions: https://theitbros.com/sysprep-windows-10-machine-guide/
475
476
477
h2. Search and Replace on Binary Files
478
479
A good hex editor can do search and replace on binary files but sometimes that's not practical:
480
481
* BBE - https://sourceforge.net/projects/bbe-/
482
 BBE is a binary editor with SED-like syntax:
483
<pre>
484
$ bbe -e 's/\x0a\x0d\x0a/\x0d\x0a/' infile > outfile
485
</pre>
486
* binwalk - https://github.com/ReFirmLabs/binwalk
487
 binwalk can search for hex strings (and do many other things)
488
<pre>
489
$ binwalk -R "\x0a\x0d\x0a" infile
490
491
WARNING: Signature '0    string    \x0a\x0d\x0a    Raw signature (\x0a\x0d\x0a)' is a self-overlapping signature!
492
493
DECIMAL       HEXADECIMAL     DESCRIPTION
494
--------------------------------------------------------------------------------
495
242           0xF2            Raw signature (\x0a\x0d\x0a)
496
412           0x19C           Raw signature (\x0a\x0d\x0a)
497
580           0x244           Raw signature (\x0a\x0d\x0a)
498
749           0x2ED           Raw signature (\x0a\x0d\x0a)
499
. . .
500
</pre>
501
502
h2. Wake-on-LAN WOL
503
504
Must be enabled on interface; need MAC
505
<pre>
506
$ sudo apt install etherwake
507
$ sudo etherwake <target MAC> -i <outgoing interface>
508
509
$ sudo etherwake b4:2e:99:a5:1e:f0 -i enp30s0
510
</pre>
511
512
h2. Allocator Shim
513
514
From Chromium, this is really interesting
515
* https://chromium.googlesource.com/chromium/src/base/+/master/allocator/README.md
516
517
However it is not clear how to use it outside of Chromium.
518
519
h2. Update Geany
520
521
# Install prereq packages (this obviously only needs to be done once):
522
<pre>
523
$ sudo apt install libgtk-3-dev libgtkspell-dev libgtkspell3-3-dev
524
</pre>
525
# Set compile flags:
526
<pre>
527
$ export CFLAGS="-O3 -march=native" 
528
$ export CXXFLAGS=$CFLAGS
529
</pre>
530
# Build geany and set to install in /opt so it won't collide with the packaged version:
531
<pre>
532
$ tar xf geany-1.30.tar.bz2
533
$ cd geany-1.30/
534
$ ./configure --prefix=/opt/local --enable-gtk3
535
$ make -j20
536
$ sudo make install
537
</pre>
538
# Set PKG_CONFIG_PATH environment variable so we can build the plugins.
539
<pre>
540
$ export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/
541
</pre>
542
# Build geany-plugins:
543
<pre>
544
$ tar xf geany-plugins-1.30.tar.bz2 
545
$ cd geany-plugins-1.30/
546
$ ./configure --prefix=/opt/local --enable-gtk3
547
$ make -j20
548
$ sudo make install
549
</pre>
550
551
h2. Find and replace across multiple files
552
553
<pre>
554
$ find /home/www -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'
555
</pre>
556
557
h2. Useful IPMI commands
558
559
560
Power measurement on the SuperMicro (probably won't work on Dell chassis as they have some proprietary version of ipmi):
561
562
<pre>
563
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.136.108 dcmi power reading
564
</pre>
565
566
Check power status (i.e. on/off) of chassis:
567
<pre>
568
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power status
569
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power off
570
</pre>
571
572
Get IPMI IP address (look for "IP Address"):
573
<pre>
574
sudo ipmitool lan print 
575
</pre>
576
577
h2. Full sshfs Connect Command
578
579
<pre>
580
sudo sshfs -o idmap=user -o uid=$(id -u) -o gid=$(id -g) -o allow_other -o follow_symlinks ryftuser@sm-X11DGQ:/home/ryftuser /mnt/sm-X11DGQ/
581
</pre>
582
583
h2. Side-by-side Color Diff
584
585
<pre>
586
$ sudo apt-get install colordiff
587
$ colordiff -y --suppress-common-lines data.txt /ryftone/data.txt
588
</pre>
589
590
h2. x86 ABI
591
592
* https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
593
594
h2. clang-format and clang-tidy
595
596
* http://www.labri.fr/perso/fleury/posts/programming/using-clang-tidy-and-clang-format.html
597
598
h2. Shared Library and Related Resources
599
600
* http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
601
* https://blog.qt.io/blog/2011/10/28/rpath-and-runpath/
602
* http://www.bnikolic.co.uk/blog/linux-ld-debug.html
603
* http://insanecoding.blogspot.com/2012/07/creating-portable-linux-binaries.html
604
* https://stackoverflow.com/questions/4156055/static-linking-only-some-libraries
605
606
h2. Ubuntu: List Grub Entries
607
608
<pre>
609
gawk  'BEGIN {                                                                                                                       
610
  l=0                                                                                                                                
611
  menuindex= 0                                                                                                                       
612
  stack[t=0] = 0                                                                                                                     
613
}                                                                                                                                    
614
615
function push(x) { stack[t++] = x }                                                                                                  
616
617
function pop() { if (t > 0) { return stack[--t] } else { return "" }  }                                                              
618
619
{                                                                                                                                    
620
621
if( $0 ~ /.*menu.*{.*/ )                                                                                                             
622
{                                                                                                                                    
623
  push( $0 )                                                                                                                         
624
  l++;                                                                                                                               
625
626
} else if( $0 ~ /.*{.*/ )                                                                                                            
627
{                                                                                                                                    
628
  push( $0 )                                                                                                                         
629
630
} else if( $0 ~ /.*}.*/ )                                                                                                            
631
{                                                                                                                                    
632
  X = pop()                                                                                                                          
633
  if( X ~ /.*menu.*{.*/ )                                                                                                            
634
  {                                                                                                                                  
635
     l--;                                                                                                                            
636
     match( X, /^[^'\'']*'\''([^'\'']*)'\''.*$/, arr )                                                                               
637
638
     if( l == 0 )                                                                                                                    
639
     {                                                                                                                               
640
       print menuindex ": " arr[1]                                                                                                   
641
       menuindex++                                                                                                                   
642
       submenu=0                                                                                                                     
643
     } else                                                                                                                          
644
     {                                                                                                                               
645
       print "  " (menuindex-1) ">" submenu " " arr[1]                                                                               
646
       submenu++                                                                                                                     
647
     }                                                                                                                               
648
  }                                                                                                                                  
649
}                                                                                                                                    
650
651
}' /boot/grub/grub.cfg
652
</pre>
653
654
* https://askubuntu.com/a/941993/392271
655
656
657
h2.GCC Disable Unused Variable Warnings
658
659
<pre>
660
#pragma GCC diagnostic push
661
#pragma GCC diagnostic ignored "-Wunused-variable"
662
( your problematic library includes )
663
#pragma GCC diagnostic pop
664
</pre>
665
666
See: https://stackoverflow.com/a/22708539/73878
667
668
h2. Fix Steam after NVidia driver update
669
670
Since this has now bitten me twice... Steam requires the 32 bit version of the GL library.
671
672
<pre>
673
$ sudo apt install libnvidia-gl-418:i386
674
</pre>
675
676
h2. Restart Cinnamon from TTY
677
678
# Cinnamon freezes
679
# Switch tty. I usually go to tty6, `Ctrl+Alt+F6`
680
# If you need to login first, do so.
681
# Type `w` (yes, just the letter) and press enter. This commands does a lot of different things, but you need it to figure out the number of the display you are using. The display number is in the column FROM. Mine is `:0` (yes, including the colon).
682
# Assuming that cinnamon is already dead (which you would notice by the windows lacking titles and that you can't move different windows around, and perhaps even not being able to use the keyboard), you type `export DISPLAY=:0; cinnamon &`, and don't forget the colon. I add the ampersand (&) only not to keep that tty busy.
683
684
Sauce: https://askubuntu.com/a/198935/392271
685
686
h2. Ubuntu Set Specific Kernel to Boot
687
688
* Use this command to get a list of available options:
689
<pre>
690
$ grep -Ei 'submenu|menuentry ' /boot/grub/grub.cfg | sed -re "s/(.? )'([^']+)'.*/\1 \2/"
691
menuentry  Ubuntu
692
submenu  Advanced options for Ubuntu
693
    menuentry  Ubuntu, with Linux 4.4.0-34-generic
694
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (upstart)
695
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (recovery mode)
696
menuentry  System setup
697
</pre>
698
* Backup grub configuration, just in case:
699
<pre>
700
$ sudo cp /etc/default/grub /etc/default/grub.bak
701
</pre>
702
* Edit grub configuration and change `GRUB_DEFAULT` to something like this:
703
<pre>
704
$ sudo vim /etc/default/grub
705
706
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 3.13.0-53-generic"
707
</pre>
708
* Update grub configuration
709
<pre>
710
$ sudo update-grub
711
</pre>
712
* See also: https://askubuntu.com/questions/216398/set-older-kernel-as-default-grub-entry
713
714
h2. Ubuntu Networking Resources
715
716
* https://blog.ubuntu.com/2017/12/01/ubuntu-bionic-netplan
717
* https://help.ubuntu.com/lts/serverguide/network-configuration.html.en
718
* https://netplan.io/
719
720
h2. Win10 Licensing Info
721
722
* https://www.windowscentral.com/how-change-product-key-windows-10
723
* https://www.tenforums.com/tutorials/49586-determine-if-windows-license-type-oem-retail-volume.html
724
* https://www.tenforums.com/windows-updates-activation/104569-win-10-activation-expiring-volume-license.html
725
726
h2. Python GTK Development Resources
727
728
* https://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html
729
* https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Box.html#Gtk.Box.pack_start
730
* https://lazka.github.io/pgi-docs/Gtk-3.0/mapping.html
731
732
h2. cpufrequtils Governor Configuration
733
734
These instructions are intended for Ubuntu 16.04 and later (using systemd init).
735
736
* Check the available and currently set governors. Ubuntu has an โ€œondemandโ€ service that sets the governor to ondemand after boot.
737
<pre>
738
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
739
conservative ondemand userspace powersave performance schedutil
740
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 
741
ondemand
742
</pre>
743
744
* Configure cpufrequtils to set the governor to performance at boot
745
<pre>
746
$ echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
747
GOVERNOR="performance"
748
</pre>
749
750
* Disable the automatic ondemand service. 
751
<pre>
752
$ sudo systemctl disable ondemand
753
</pre>
754
755
* Reboot.
756
757
* Now check that the governor is set to performance for every CPU:
758
<pre>
759
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
760
performance
761
performance
762
performance
763
performance
764
โ€ฆ
765
performance
766
performance
767
performance
768
</pre>
769
770
* Check current CPU speeds:
771
<pre>
772
$ watch -n 1 bash -c 'cpufreq-info | grep "current CPU frequency"'
773
</pre>
774
775
h2. rsync via ssh example
776
777
<pre>
778
$ rsync --info=progress2 -ahz --compress-level=9 -e "ssh -i ~/ryft-pat-f1.pem" data/ ryftuser@18.205.65.5:/ryftone/regression/pubmed/data/
779
</pre>
780
781
h2. Read Performance using AIO
782
783
Use this fio command (run from temp directory on disk in question) to measure max disk read performance:
784
785
<pre>
786
$ fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=10g --io_size=10g --blocksize=512k --ioengine=libaio --fsync=0 --iodepth=32 --direct=1 --numjobs=1 --runtime=300 --group_reporting
787
</pre>
788
789
Note that DIRECT_IO is required when using AIO. (see also: https://askubuntu.com/a/991311/392271)
790
791
h2. Remove Source Files While Creating Tarball
792
793
This is handy as it saves on disk space.
794
<pre>
795
$ tar --remove-files -cf pictures.tar Pictures/
796
</pre>
797
798
h2. Linux Find and Remove Files
799
800
Find and remove files (even with spaces in the path) using case insensitive matching for the wildcard:
801
<pre>
802
$ find . -type f -iname "*.jpg" -print0 | xargs -0 rm
803
</pre>
804
805
h2. Convert ASCII hex to binary
806
This problem seems to come up every so often. There is no need for a one-off solution:
807
808
<pre>
809
$ xxd -r -p input.txt output.bin
810
</pre>
811
812
https://stackoverflow.com/questions/7826526/transform-a-hex-info-to-binary-using-linux-command
813
814
h2. Well Said
815
816
https://developers.slashdot.org/comments.pl?sid=12326098&cid=56908942
817
818
h2. Hex Editor
819
820
I had been using [[https://hexinator.com/|Hexinator]] but I've had some minor issues with it. Today I tried [[https://www.wxhexeditor.org/home.php|wxHexEditor]] and I was pleasantly surprised.
821
822
Download from here: https://github.com/EUA/wxHexEditor
823
824
You'll need the latest version of libwxgtk<version>-dev package.
825
826
I had some minor issues with the build (which seems a somewhat bizarre arrangement...) modify the makefile to set `CC` and `CXX` directly, right about line 90.
827
828
Finally, to get it installed in the right place:
829
<pre>
830
sudo make install DESTDIR=/opt/local BINDIR=bin DATADIR=share
831
</pre>
832
833
h2. Preprocessor Fun
834
835
To invoke the preprocessor directly:
836
<pre>
837
gcc -E -DSOME_DEFINE=SOME_VALUE somefile.c 
838
</pre>
839
840
See also [[https://linux.die.net/man/1/unifdef|unifdef]]: "The unifdef utility acts on #if, #ifdef, #ifndef, #elif, #else, and #endif lines, and it understands only the commonly-used subset of the expression syntax for #if and #elif lines."
841
842
h2. Convert Oversampled .flac to 16 bit 44.1 khz .flac
843
844
<pre>
845
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox {} -b 16 -r 44100 output/{/.}.flac"
846
847
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox -v 0.98 {} -b 16 -r 44100 output/{/.}.flac"
848
</pre>
849
850
h2. Aligned C++ STL Types
851
852
<pre>
853
#include <vector>
854
#include <boost/align/aligned_allocator.hpp>
855
856
template <typename T>
857
using aligned_vector = std::vector<T, boost::alignment::aligned_allocator<T, 4096>>;
858
</pre>
859
860
h2. Command line convert .png to .jpg
861
862
<pre>
863
$ for x in *.png; do convert $x $(basename $x .png).jpg; done
864
</pre>
865
866
You can also add the "`-quality 90`" option if needed.
867
868
h2. Determine CPU Family Name
869
870
<pre>
871
$ gcc -march=native -Q --help=target|grep march
872
</pre>
873
874
h2. Convert .flac to .m4a (AAC)
875
876
Requires `ffmpeg` built with libfdk_aac:
877
878
<pre>
879
$ /opt/bin/ffmpeg -i input.flac -vn -c:a libfdk_aac -vbr 3 output.m4a
880
</pre>
881
882
All together using `find` and `parallel` for magic:
883
<pre>
884
$ find . -type f -name "*.flac" | parallel -j16 "/opt/bin/ffmpeg -i {} -vn -c:a libfdk_aac -vbr 4 {/.}.m4a"
885
</pre>
886
887
h2. PyGObject
888
889
This is the magic needed to have stuff happen quasi asynchronously using PyGObject (GTK+):
890
891
<pre>
892
# Yield to the main loop temporarily
893
while Gtk.events_pending():
894
    Gtk.main_iteration()
895
</pre>
896
897
h2. FUSE Code
898
899
 *https://pastebin.com/wavKntiu
900
901
h2. Use Windoze Schtuffs
902
903
 * https://support.microsoft.com/en-gb/help/17588/fix-problems-that-block-programs-from-being-installed-or-removed (gotta love how this requires a separate program)
904
 * [[http://landinghub.visualstudio.com/visual-cpp-build-tools|MSVC Tools]] - compiler (seems to be the rough equivalent of `build-essential`)
905
 * [[https://docs.microsoft.com/en-us/sysinternals/downloads/procmon|Process Monitor]] - useful debug tool
906
  * https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi - example for using Process Monitor
907
 * http://download.microsoft.com/download/7/2/E/72E0F986-D247-4289-B9DC-C4FB07374894/wdexpress_full.exe - (required by wingtk below)
908
 
909
* https://github.com/wingtk/gvsbuild - haven't tried this yet but looks amazing... 
910
911
h2. Build Handbrake Git Build
912
913
Steps for building Handbrake using AOCC:
914
915
<pre>
916
$ source /home/dsorber/Downloads/aocc/setenv_AOCC.sh
917
$ export CC=clang
918
$ export CXX=clang++
919
$ export CFLAGS="-g -O3 -mtune=native"
920
$ export CXXFLAGS=$CFLAGS
921
$ cd ~/Downloads/HandBrake/
922
$ rm -rf build/
923
$ ./configure --prefix=/opt --enable-x265 --enable-fdk-aac --gcc=/home/dsorber/Downloads/aocc/AOCC-1.1-Compiler/bin/clang
924
$ cd build
925
$ make -j17
926
$ sudo make install
927
</pre>
928
929
----
930
931
Regular build (18.04 and later):
932
<pre>
933
$ rm -rf build/
934
$ ./configure --prefix=/opt/local --enable-x265 --enable-fdk-aac
935
$ cd build
936
$ make -j17
937
$ sudo make install
938
</pre>
939
940
h2. Politically Correct Linux
941
942
* https://entertainment.slashdot.org/comments.pl?sid=11493671&cid=55759997
943
944
h2. This guy gets it
945
946
Regarding software purist ideology vs pragmatism
947
948
* https://linux.slashdot.org/comments.pl?sid=11156367&cid=55256437
949
950
h2. "Rotate" Video Playback via Metadata
951
952
<pre>
953
$ ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
954
</pre>
955
956
957
h2. Ubuntu Remove Old Kernels Oneliner
958
959
<pre>
960
$ sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done)
961
</pre>
962
963
* [[https://askubuntu.com/questions/2793/how-do-i-remove-old-kernel-versions-to-clean-up-the-boot-menu/571360#571360|Sauce]]
964
965
h2. Remove New Lines (command line)
966
967
For a file:
968
<pre>
969
$ tr -d '\n' < yourfile.txt
970
</pre>
971
972
Or for output of a command (e.g.):
973
<pre>
974
$ find . -type f -name '*.txt' | tr -d '\n'
975
</pre>
976
977
h2. Convert from .mp4 to .mkv Container
978
979
Use `avconv` to convert container without re-encoding:
980
<pre>
981
$ sudo apt-get install libav-tools
982
983
$ avconv -i filme.mp4 -c copy filme.mkv
984
</pre>
985
986
h2. Remove String From Many File Names
987
988
On Ubuntu use Perl rename utility, e.g.:
989
990
<pre>
991
$ rename 's/ \(1920x1080\) \[WaifuKenny\]//' *.mp4
992
</pre>
993
994
h2. Change Default Text Editor
995
996
I always have to Google this...
997
998
<pre>
999
$ sudo update-alternatives --config editor
1000
</pre>
1001
1002
h2. Linux View System RAM Speed
1003
1004
View RAM speed (actual) on Debian/Ubuntu/Mint:
1005
1006
<pre>
1007
$ sudo lshw -short -C memory
1008
H/W path                      Device      Class          Description
1009
====================================================================
1010
/0/0                                      memory         64KiB BIOS
1011
/0/b                                      memory         32GiB System Memory
1012
/0/b/0                                    memory         [empty]
1013
/0/b/1                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
1014
/0/b/2                                    memory         [empty]
1015
/0/b/3                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
1016
/0/d                                      memory         768KiB L1 cache
1017
/0/e                                      memory         4MiB L2 cache
1018
/0/f                                      memory         16MiB L3 cache
1019
</pre>
1020
1021
h2. Linux Memory Schtuff
1022
1023
* [[https://github.com/jbert/exmap|exmap]]
1024
* https://jameshunt.us/writings/smaps.html
1025
* https://techtalk.intersec.com/2013/07/memory-part-2-understanding-process-memory/
1026
* http://bmaurer.blogspot.com/2006/03/memory-usage-with-smaps.html
1027
1028
* https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt
1029
1030
* From: http://stackoverflow.com/questions/24484481/entry-in-proc-meminfo
1031
<pre>
1032
  2. Active(file), Inactive(file) has file back-end which means its original file is in disk but to use it faster it was loaded on RAM.
1033
</pre>
1034
1035
1036
* From: http://unix.stackexchange.com/questions/56879/tracking-down-missing-memory-usage-in-linux
1037
1038
  The "memory used by a process" is not a clear cut concept in modern operating systems. What can be measured is the size of the address space of the process (SIZE) and resident set size (RSS, how many of the pages in the address space are currently in memory). Part of RSS is shared (most processes in memory share one copy of glibc, and so for assorted other shared libraries; several processes running the same executable share it, processes forked share read-only data and possibly a chunk of not-yet-modified read-write data with the parent). On the other hand, memory used for the process by the kernel isn't accounted for, like page tables, kernel buffers, and kernel stack. In the overall picture you have to account for the memory reserved for the graphics card, the kernel's use, and assorted "holes" reserved for DOS and other prehistoric systems (that isn't much, anyway).
1039
1040
  The only way of getting an overall picture is what the kernel reports as such. Adding up numbers with unknown overlaps and unknown left outs is a nice exercise in arithmetic, nothing more.
1041
1042
 * [[http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html|Understanding memory usage on Linux]]
1043
1044
 * https://linux-mm.org/LinuxMM
1045
1046
h2. Reinstall grub on UEFI System
1047
1048
Reinstalling grub on a UEFI system is slightly different than on a traditional legacy BIOS system:
1049
1050
<pre>
1051
# Mount the primary drive root partition and the boot EFI partition
1052
sudo mount /dev/sda# /mnt            # Mount root (/) partition
1053
sudo mount /dev/sda# /mnt/boot       # Mount boot (/boot) partition (if separate from root partition; typically not)
1054
1055
sudo mkdir -p /mnt/boot/efi          # Create EFI partition mount point
1056
sudo mount /dev/sda1 /mnt/boot/efi   # Mount EFI partition
1057
1058
# Mount your virtual filesystems:
1059
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
1060
1061
# Chroot
1062
sudo chroot /mnt
1063
</pre>
1064
1065
Now, if you have networking you'll need DNS. If using `resolvconf` (for recent versions of Ubuntu):
1066
1067
# Edit ` /etc/resolvconf/resolv.conf.d/head` and add the following line (OpenDNS server).  Then save and exit:
1068
<pre>
1069
add nameserver 208.67.222.222
1070
</pre>
1071
# Next enable updates and update:
1072
<pre>
1073
sudo resolvconf --enable-updates
1074
sudo resolvconf -u
1075
</pre>
1076
# Now you should have DNS. Test by pinging something.
1077
1078
Finally, back to fixing grub. Note that the grub install should run smoothly with no errors or warnings. If you see any something is probably wrong.
1079
<pre>
1080
apt-get install grub-efi-amd64  # Install grub EFI bootloader (this should be all you need to do)
1081
1082
1083
# manual steps if you need them for some reason
1084
grub-install --recheck --no-floppy --force /dev/sda1  # Install grub bootloader in EFI partition
1085
1086
#####
1087
echo "configfile (hd0,gpt#)/boot/grub.cfg" > /boot/efi/ubuntu/grub.cfg # Tell grub to load grub.cfg from /boot
1088
1089
update-grub                          # Create grub menu list
1090
#####
1091
1092
exit                                 # Exit chroot
1093
</pre>
1094
1095
Reboot and you should be back in business.
1096
1097
h2. Convert flac to VBR mp3 using ffmpeg/lame
1098
1099
<pre>
1100
for file in *.flac; do name=$(echo $file | sed "s/\.flac//g"); ffmpeg -i "$file" -codec:a libmp3lame -qscale:a 0 "$name".mp3; done
1101
</pre>
1102
1103
h2. Create UEFI/legacy BIOS Bootable ISO
1104
1105
* http://askubuntu.com/questions/625286/how-to-create-uefi-bootable-iso
1106
1107
h2. Getting rEFInd to work on Mac OS 10.11
1108
1109
* http://mattjanik.ca/blog/2015/10/01/refind-on-el-capitan/
1110
1111
h2. Convert DTS 5.1 to FLAC
1112
1113
<pre>
1114
sudo apt-get install libdca-utils ffmpeg sound-juicer gnome-terminal easytag vlc 
1115
1116
for file in *.wav; do name=$(echo $file | sed "s/\.wav//g"); dcadec -o wavall "$file" > "$name"_decoded.wav; ffmpeg -i "$name"_decoded.wav "$name".flac; rm -f "$file" "$name"_decoded.wav; done
1117
</pre>
1118
1119
Source: http://ubuntuforums.org/archive/index.php/t-1849260.html
1120
1121
h2. Windows Utils
1122
1123
* http://windirstat.info/download.html
1124
* https://www.raymond.cc/blog/safely-delete-unused-msi-and-mst-files-from-windows-installer-folder/
1125
1126
h2. SSH Security
1127
1128
https://stribika.github.io/2015/01/04/secure-secure-shell.html
1129
1130
h2. Windows 10
1131
1132
* http://ultimateoutsider.com/downloads/ - GWX Control Panel to disable GWX (Windows 10 update nagging)
1133
* [[https://www.safer-networking.org/spybot-anti-beacon/|Spybot Anti-Beacon]] - Disable Micro$oft "telemetry" data gathering from Windows 10, 8.x, and 7
1134
1135
<pre>
1136
The newest version of the KB3035583 update includes a background process which scans the 
1137
system's Windows Registry twice a day to see if the values for the four aforementioned registry 
1138
inputs were manually edited to disable the upgrade prompt. If they were, the process will alter 
1139
the values, silently re-download the Windows 10 installation files (about 6 GB in total), and 
1140
prompt the user to upgrade.
1141
</pre>
1142
1143
1144
h2. gpg-agent
1145
1146
* http://www.infrastructureanywhere.com/documentation/additional/mirrors.html
1147
1148
These instructions are geared toward reprepro but should be useful in general for setting up `gpg-agent`.
1149
1150
1151
h2. Resolve DNS While VPN Connected
1152
1153
How to configure dnsmasq for DNS overrides while using a VPN connection: https://chawlasumit.wordpress.com/2014/06/15/linux-mint-openconnect-vpn-dns-issues/
1154
1155
h2. Pretty Print Python Traceback
1156
1157
<pre>#!python
1158
import traceback
1159
1160
 ...
1161
1162
try: 
1163
    with open('/dev/null', 'w') as void:
1164
        rc = not bool(subprocess.call('modprobe -r {:s}'.format(mod_name), 
1165
                                      shell=True, stdout=void, stderr=void))
1166
except Exception as e:
1167
    print_failure_status()
1168
    exc_type, exc_value, exc_traceback = sys.exc_info()
1169
    print('\n')
1170
    traceback.print_exception(exc_type, exc_value, exc_traceback)
1171
    print('\n')
1172
</pre>
1173
1174
h2. Generating Random Data Files for Testing
1175
1176
One approach is to use /dev/urandom (non-blocking pseudorandom device):
1177
<pre>
1178
$ dd if=/dev/urandom bs=32M count=32 of=data_1GB.bin
1179
</pre>
1180
Unfortunately /dev/urandom is a bit slow. However, you can alternatively use openssl to generate pseudorandom numbers a bit faster:
1181
<pre>
1182
 $ openssl rand 1073741824 > data_1GB.bin
1183
 $ for run in {1..30}; do echo $run; openssl rand 1073741824 >> data_30GB.bin; done
1184
</pre>
1185
1186
h2. Cloning HDDs
1187 8
1188 1
When configuring multiple chassis it is necessary to clone an HDD. There are all sorts of disk imaging tools out there but it's hard to beat the trusty dd command. The pv (pipe viewer) portion isn't strictly necessary but it prints out a very useful textual status bar. The back ticked blockdev command reports the size of the drive in bytes, which pv then uses to determine overall progress. The bs argument to dd should correspond to the cache size of the drive for optimum performance (32MB is a sane default for most drives these days).
1189
1190
To clone a single drive to another identical drive (assuming sda is the source and sdb is the destination):
1191
<pre>
1192
 $ sudo dd if=/dev/sda bs=32M | pv -s `sudo blockdev --getsize64 /dev/sda` | sudo dd of=/dev/sdb bs=32M
1193
</pre>
1194
To clone to multiple drives all at once (assuming sda is the source and sdb, sdc are destinations):
1195
<pre>
1196
 $ sudo dd if=/dev/sda bs=32M | pv -s `sudo blockdev --getsize64 /dev/sda` | tee >(sudo dd of=/dev/sdb bs=32M) | sudo dd of=/dev/sdc bs=32M
1197
</pre>
1198
It is entirely possible to clone more drives by adding additional `>(sudo dd of=/dev/sdX bs=32M)` arguments to the tee command. Note that tee outputs to stdout so it is necessary to pipe the output of tee to the final dd command as shown above. If you don't do this then tee will spew the raw contents of the source HDD to your screen, which will make the clone take forever and look especially ugly!
1199
1200
For some reason RedHat/CentOS do not have the pv command or even a package for it in their repos!!! Therefore, boot from a Debian-based OS in order to clone.
1201
1202
h2. Generating ISOs
1203
1204
<pre>
1205
 $ genisoimage -R -J -o <output.iso> <some directory>
1206
</pre>
1207
To deal with long file names:
1208
<pre>
1209
 $ genisoimage -R -J -l -D -joliet-long -o <output.iso> <some directory>
1210
</pre>
1211
1212 2
h2. BIOS/grub
1213 1
1214 2
* http://forums.linuxmint.com/viewtopic.php?f=46&t=119832
1215
* http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html
1216
* https://wiki.archlinux.org/index.php/GRUB2
1217
* http://unix.stackexchange.com/questions/28443/does-grub2-support-putting-boot-on-a-raid5-partition
1218 1
1219
h3. Creating a BIOS Boot Partition on a GPT system
1220
1221
<pre>
1222
$ sudo parted /dev/sda
1223
(parted) mkpart primary 0 1024k
1224
(parted) set 2 bios_grub on
1225
</pre>
1226
1227 2
h2. Actiontec Router
1228
1229
* http://transition.fcc.gov/oet/ea/fccid/
1230
* http://opensource.actiontec.com/mi424wref.html
1231 1
1232
h2. Temp
1233
1234
https://www.grumpyland.com/blog/183/installing-software-raid-on-centos-567-via-ssh/
1235
<pre>
1236
# swap is on /dev/md1
1237
/dev/md1 none            swap    sw              0       0
1238
1239
# storage is on /dev/md0
1240
/dev/md0        /storage        xfs     noatime,barrier=0 0 0
1241
//faramir/production/sw /sw     cifs    username=samba,password=w00tw00t!,file_mode=0666,dir_mode=0777  0       0
1242
</pre>
1243
1244
----
1245
[[../|Back home]]