Project

General

Profile

Miscellaneous » History » Version 38

Anonymous, 11/25/2025 09:13 AM
adding note

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