Project

General

Profile

Miscellaneous » History » Version 33

Anonymous, 03/31/2025 07:11 AM
adding note

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