Project

General

Profile

Miscellaneous » History » Version 36

Anonymous, 09/06/2025 09:26 PM
adding note

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