Project

General

Profile

Miscellaneous » History » Version 37

Anonymous, 09/07/2025 11:33 AM
adding command

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