Project

General

Profile

Miscellaneous » History » Version 23

Anonymous, 06/30/2024 09:47 AM
adding note

1 1
h1. Miscellaneous
2
3 23
h2. Useful rsync Examples
4
5
* Synchronize directories (one way):
6
<pre>
7
$ rsync -auhrP --delete --info=del,name,stats2 "/mnt/phalanx/" "/storage"
8
</pre>
9
* Copy with progress:
10
<pre>
11
$ rsync -ahr --info=progress2 some_file.mp4 /storage/
12
</pre>
13
14
15 22
h2. Patch Youtube App using Revanced Manager (6/22/2024)
16
17
h3. Install Steps
18
19
* Delete Revanced app, Micro G, Revanced manager prior installation any of mentioned apps.
20
* Download *but not install* following:
21
** Micro G - https://github.com/ReVanced/GmsCore/releases/tag/v0.3.1.3.240913
22
** Revanced Manager - https://revanced.app/patches?s=Mic
23
** 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/
24
* Install Micro G.
25
* Next install Revanced Manager
26
* Open Revanced manager
27
** Go to Patches
28
** Select an app
29
** Bottom right corner choose Storage
30
** Find YT APK you downloaded, select patch on the bottom right corner
31
* Wait for patch and compile to finish, then choose install app
32
* Open it, check if its Vanced, restart the phone.
33
* If you have stock YT app, uninstall updates and disable it
34
35
Source: https://www.reddit.com/r/revancedapp/comments/1bq92r7/me_rn_trying_to_patch_youtube_revanced/
36
37 19
h2. Combine find and GNU parallel
38
39
Example:
40
<pre>
41
$ find . -name '*.jpg' | parallel convert -geometry 120 {} {.}_thumb.jpg
42 21
$ find . -name '*.png' | parallel --eta convert '{}' -quality 90 '{.}.jpg'
43
$ find . -name '*.png' -delete
44 19
</pre>
45
Note @{.}@ is the filename without the @.jpg@ portion.
46
47
* See: https://www.gnu.org/software/parallel/parallel_examples.html#example-compute-intensive-jobs-and-substitution
48
49 18
h2. Setup ttyd
50
51
* Download @ttyd@ and put it in @/opt/local/bin/ttyd@:
52
** https://github.com/tsl0922/ttyd/releases
53
* Create systemd service file @/etc/systemd/system/ttyd.service@: 
54
<pre>
55
[Unit]                                                                                                                                                                                           
56
Description=TTYD
57
After=syslog.target
58
After=network.target
59
 
60
[Service]
61
ExecStart=/opt/local/bin/ttyd -W -p 9772 login
62
Type=simple
63
Restart=always
64
User=root
65
Group=root
66
 
67
[Install]
68
WantedBy=multi-user.target
69
</pre>
70
** Start and enable service:
71
<pre>
72
$ sudo systemctl start ttyd && sudo systemctl enable ttyd
73
</pre>
74
* Setup apache configuration (add to existing)
75
<pre>
76
        ProxyRequests Off
77
        ProxyPreserveHost On
78
        RewriteEngine on
79
        RewriteCond %{HTTP:Upgrade} websocket [NC]
80
        RewriteCond %{HTTP:Connection} upgrade [NC]
81
        RewriteRule /terminal/?(.*) "ws://localhost:9772/$1" [P,L]
82
        ProxyPass /terminal http://localhost:9772/
83
        ProxyPassReverse /terminal http://localhost:9772/
84
</pre>
85
** Enable necessary apache modules:
86
<pre>
87
$ a2enmod proxy proxy_http proxy_wstunnel mod_rewrite
88
</pre>
89
90
91 17
h2. Increase tmux scrollback
92
93
<pre>
94
$ cd 
95
$ echo "set -g history-limit 9999999" >> ~/.tmux.conf
96
</pre>
97
98 16
h2. Setup VNC
99 15
100
On the server side:
101
# Install @x11vnc@:
102
<pre>
103
$ sudo apt install x11vnc net-tools
104
</pre>
105
# Set VNC password:
106
<pre>
107
$ x11vnc -storepasswd
108
</pre>
109
# Start VNC service from command line:
110
<pre>
111
$ sudo x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/dsorber/.vnc/passwd -rfbport 5900 -shared
112
</pre>
113
# To start at boot using systemd service create: @/etc/systemd/system/x11vnc.service@:
114
<pre>
115
[Unit]
116
Description=x11vnc remote desktop server
117
After=multi-user.target
118
119
[Service]
120
Type=simple
121
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/dsorber/.vnc/passwd -rfbport 5900 -shared
122
123
Restart=on-failure
124
125
[Install]
126
WantedBy=multi-user.target
127
</pre>
128
129
On the client side:
130
# Install @remmina@:
131
<pre>
132
$ sudo apt install remmina
133
</pre>
134
# Open @remmina@, select "VNC", and type in the server's IP address.
135
136
* Source: https://forums.linuxmint.com/viewtopic.php?t=369092
137
138 14
h2. sshuttle
139 15
140
Poor man's VPN:
141 14
142
<pre>
143
$ sshuttle --dns -NHr dsorber@phalanx.homelinuxserver.org:3268  192.168.0.0/16
144
</pre>
145
146 13
h2. Batch Convert PNG to JPG
147
148
NOTE: @convert@ comes from ImageMagick
149
<pre>
150
& ls -1 *.png | parallel --eta convert '{}' -quality 90 '{.}.jpg'
151
</pre>
152
153 12
h2. Crop Video with ffmpeg
154
155
<pre>
156
$ ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
157
</pre>
158
159
* @out_w@ is the width of the output rectangle
160
* @out_h@ is the height of the output rectangle
161
* @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) 
162
163
Test using @ffplay@:
164
<pre>
165
$ ffplay -i input -vf "crop=out_w:out_h:x:y"
166
</pre>
167
168 10
h2. Build Custom Windows ISOs
169
170
* https://uupdump.net/
171 11
* https://forums.mydigitallife.net/threads/kms_vl_all-smart-activation-script.79535/
172 10
173 9
h2. Script to Convert Local manpages to html
174
175
Note use @zcat@ if the manpages are compressed:
176
177
<pre>
178
#!/bin/bash
179
180
mkdir -p html
181
for file in *; do
182
        if [ -f $file ] && [ "${file: -3}" != ".sh" ]; then
183
                echo $file
184
                #echo "${file%.*}"
185
                pandoc --from man --to html < $file > html/${file%.*}.html
186
        fi
187
done
188
</pre>
189
190 6
h2. Display Total rsync Progress
191
192
<pre>
193 7
$ rsync -a --no-i-r --info=progress2 /path/to/src /path/to/dest/
194 6
</pre>
195
196
NOTE: @-v@ does not work with @--info=progress2@
197
198
Source: https://serverfault.com/a/441724/472586
199
200 5
h2. Slice Video File 
201
202
<pre>
203
$ ffmpeg -ss 00:01:00 -to 00:02:00  -i input.mp4 -c copy output.mp4
204
</pre>
205
206
Explanation of the command:
207
208
* -i: This specifies the input file. In that case, it is (input.mp4).
209
* -ss: Used with -i, this seeks in the input file (input.mp4) to position.
210
* 00:01:00: This is the time your trimmed video will start with.
211
* -to: This specifies duration from start (00:01:40) to end (00:02:12).
212
* 00:02:00: This is the time your trimmed video will end with.
213
* -c copy: This is an option to trim via stream copy. (NB: Very fast)
214
215 4
h2. Add new drive SW RAID5
216
217
# Format drive if needed (see below for steps).
218
# Add new drive to SW RAID:
219
<pre>
220
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1
221
</pre>
222
# Grow array:
223
<pre>
224
$ sudo mdadm --grow --raid-devices=4 /dev/md0
225
</pre>
226
227
h2. Replace failed SW RAID drive
228
229
# If drive is brand new be sure to create a partition on it:
230
<pre>
231
sorber@file2:~$ sudo parted /dev/sdg
232
GNU Parted 3.3
233
Using /dev/sdg
234
Welcome to GNU Parted! Type 'help' to view a list of commands.
235
(parted) mklabel gpt
236
(parted) mkpart primary 2048s 100%                                        
237
(parted) print                                                            
238
Model: ATA ST2000DM008-2FR1 (scsi)
239
Disk /dev/sdg: 2000GB
240
Sector size (logical/physical): 512B/4096B
241
Partition Table: gpt
242
Disk Flags: 
243
244
Number  Start   End     Size    File system  Name     Flags
245
 1      1049kB  2000GB  2000GB               primary
246
247
(parted) quit
248
</pre>
249
# If needed, mark bad drive as failed:
250
<pre>
251
$ sudo mdadm --manage /dev/md0 --fail /dev/sdd
252
</pre>
253
# Add new drive to replace failed:
254
<pre>
255
$ sudo mdadm --manage /dev/md0 --add /dev/sdd1 /dev/sdg1
256
</pre>
257
# Improve rebuild speed slightly:
258
<pre>
259
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_min"
260
$ sudo bash -c "echo 9999999 > /proc/sys/dev/raid/speed_limit_max"
261
</pre>
262
# Monitor rebuild:
263
<pre>
264
$ watch -n1 cat /proc/mdstat 
265
</pre>
266
267
h2. Get detailed drive information
268
269
<pre>
270
$ udevadm info --query=all --name=/dev/sda
271
</pre>
272
273 1
h2. Split flac with cue
274
275
<pre>
276
$ sudo apt install cuetools shntool
277
278
$ shnsplit -f file.cue -t %n-%t -o flac file.flac
279
</pre>
280
281
h2. Fix Chrome Display Glitches
282
283
Somewhere around Chrome 86 display glitches started happening on wake. Here is how to fix:
284
285 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.
286 1
287
h2. Setup SSH Public Key
288
289
# 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.
290
<pre>
291
$ ssh-keygen -t rsa
292
</pre>
293 3
 *NOTE:* for NetBeans to use/recognize the ssh key you must use the old PEM format:
294 1
<pre>
295
$ ssh-keygen -m PEM -t rsa
296
</pre>
297
# Now use `ssh-copy-id` to copy the key to the remote machine (for example):
298
<pre>
299
$ ssh-copy-id -i ~/.ssh/phalanx_rsa.pub dsorber@phalanx
300
</pre>
301
302
h2. Read Windows Product Key from ACPI Firmware
303
304
Boot into Linux and run:
305
306
<pre>
307
$ sudo strings /sys/firmware/acpi/tables/MSDM
308
</pre>
309
310
h2. Windows 10 Install and SysPrep Instructions
311
312
Very good instructions: https://theitbros.com/sysprep-windows-10-machine-guide/
313
314
315
h2. Search and Replace on Binary Files
316
317
A good hex editor can do search and replace on binary files but sometimes that's not practical:
318
319
* BBE - https://sourceforge.net/projects/bbe-/
320
 BBE is a binary editor with SED-like syntax:
321
<pre>
322
$ bbe -e 's/\x0a\x0d\x0a/\x0d\x0a/' infile > outfile
323
</pre>
324
* binwalk - https://github.com/ReFirmLabs/binwalk
325
 binwalk can search for hex strings (and do many other things)
326
<pre>
327
$ binwalk -R "\x0a\x0d\x0a" infile
328
329
WARNING: Signature '0    string    \x0a\x0d\x0a    Raw signature (\x0a\x0d\x0a)' is a self-overlapping signature!
330
331
DECIMAL       HEXADECIMAL     DESCRIPTION
332
--------------------------------------------------------------------------------
333
242           0xF2            Raw signature (\x0a\x0d\x0a)
334
412           0x19C           Raw signature (\x0a\x0d\x0a)
335
580           0x244           Raw signature (\x0a\x0d\x0a)
336
749           0x2ED           Raw signature (\x0a\x0d\x0a)
337
. . .
338
</pre>
339
340
h2. Wake-on-LAN WOL
341
342
Must be enabled on interface; need MAC
343
<pre>
344
$ sudo apt install etherwake
345
$ sudo etherwake <target MAC> -i <outgoing interface>
346
347
$ sudo etherwake b4:2e:99:a5:1e:f0 -i enp30s0
348
</pre>
349
350
h2. Allocator Shim
351
352
From Chromium, this is really interesting
353
* https://chromium.googlesource.com/chromium/src/base/+/master/allocator/README.md
354
355
However it is not clear how to use it outside of Chromium.
356
357
h2. Update Geany
358
359
# Install prereq packages (this obviously only needs to be done once):
360
<pre>
361
$ sudo apt install libgtk-3-dev libgtkspell-dev libgtkspell3-3-dev
362
</pre>
363
# Set compile flags:
364
<pre>
365
$ export CFLAGS="-O3 -march=native" 
366
$ export CXXFLAGS=$CFLAGS
367
</pre>
368
# Build geany and set to install in /opt so it won't collide with the packaged version:
369
<pre>
370
$ tar xf geany-1.30.tar.bz2
371
$ cd geany-1.30/
372
$ ./configure --prefix=/opt/local --enable-gtk3
373
$ make -j20
374
$ sudo make install
375
</pre>
376
# Set PKG_CONFIG_PATH environment variable so we can build the plugins.
377
<pre>
378
$ export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/
379
</pre>
380
# Build geany-plugins:
381
<pre>
382
$ tar xf geany-plugins-1.30.tar.bz2 
383
$ cd geany-plugins-1.30/
384
$ ./configure --prefix=/opt/local --enable-gtk3
385
$ make -j20
386
$ sudo make install
387
</pre>
388
389
h2. Find and replace across multiple files
390
391
<pre>
392
$ find /home/www -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'
393
</pre>
394
395
h2. Useful IPMI commands
396
397
398
Power measurement on the SuperMicro (probably won't work on Dell chassis as they have some proprietary version of ipmi):
399
400
<pre>
401
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.136.108 dcmi power reading
402
</pre>
403
404
Check power status (i.e. on/off) of chassis:
405
<pre>
406
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power status
407
sudo ipmitool -U ADMIN -P ADMIN -H 10.17.70.45 power off
408
</pre>
409
410
Get IPMI IP address (look for "IP Address"):
411
<pre>
412
sudo ipmitool lan print 
413
</pre>
414
415
h2. Full sshfs Connect Command
416
417
<pre>
418
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/
419
</pre>
420
421
h2. Side-by-side Color Diff
422
423
<pre>
424
$ sudo apt-get install colordiff
425
$ colordiff -y --suppress-common-lines data.txt /ryftone/data.txt
426
</pre>
427
428
h2. x86 ABI
429
430
* https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI
431
432
h2. clang-format and clang-tidy
433
434
* http://www.labri.fr/perso/fleury/posts/programming/using-clang-tidy-and-clang-format.html
435
436
h2. Shared Library and Related Resources
437
438
* http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
439
* https://blog.qt.io/blog/2011/10/28/rpath-and-runpath/
440
* http://www.bnikolic.co.uk/blog/linux-ld-debug.html
441
* http://insanecoding.blogspot.com/2012/07/creating-portable-linux-binaries.html
442
* https://stackoverflow.com/questions/4156055/static-linking-only-some-libraries
443
444
h2. Ubuntu: List Grub Entries
445
446
<pre>
447
gawk  'BEGIN {                                                                                                                       
448
  l=0                                                                                                                                
449
  menuindex= 0                                                                                                                       
450
  stack[t=0] = 0                                                                                                                     
451
}                                                                                                                                    
452
453
function push(x) { stack[t++] = x }                                                                                                  
454
455
function pop() { if (t > 0) { return stack[--t] } else { return "" }  }                                                              
456
457
{                                                                                                                                    
458
459
if( $0 ~ /.*menu.*{.*/ )                                                                                                             
460
{                                                                                                                                    
461
  push( $0 )                                                                                                                         
462
  l++;                                                                                                                               
463
464
} else if( $0 ~ /.*{.*/ )                                                                                                            
465
{                                                                                                                                    
466
  push( $0 )                                                                                                                         
467
468
} else if( $0 ~ /.*}.*/ )                                                                                                            
469
{                                                                                                                                    
470
  X = pop()                                                                                                                          
471
  if( X ~ /.*menu.*{.*/ )                                                                                                            
472
  {                                                                                                                                  
473
     l--;                                                                                                                            
474
     match( X, /^[^'\'']*'\''([^'\'']*)'\''.*$/, arr )                                                                               
475
476
     if( l == 0 )                                                                                                                    
477
     {                                                                                                                               
478
       print menuindex ": " arr[1]                                                                                                   
479
       menuindex++                                                                                                                   
480
       submenu=0                                                                                                                     
481
     } else                                                                                                                          
482
     {                                                                                                                               
483
       print "  " (menuindex-1) ">" submenu " " arr[1]                                                                               
484
       submenu++                                                                                                                     
485
     }                                                                                                                               
486
  }                                                                                                                                  
487
}                                                                                                                                    
488
489
}' /boot/grub/grub.cfg
490
</pre>
491
492
* https://askubuntu.com/a/941993/392271
493
494
495
h2.GCC Disable Unused Variable Warnings
496
497
<pre>
498
#pragma GCC diagnostic push
499
#pragma GCC diagnostic ignored "-Wunused-variable"
500
( your problematic library includes )
501
#pragma GCC diagnostic pop
502
</pre>
503
504
See: https://stackoverflow.com/a/22708539/73878
505
506
h2. Fix Steam after NVidia driver update
507
508
Since this has now bitten me twice... Steam requires the 32 bit version of the GL library.
509
510
<pre>
511
$ sudo apt install libnvidia-gl-418:i386
512
</pre>
513
514
h2. Restart Cinnamon from TTY
515
516
# Cinnamon freezes
517
# Switch tty. I usually go to tty6, `Ctrl+Alt+F6`
518
# If you need to login first, do so.
519
# 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).
520
# 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.
521
522
Sauce: https://askubuntu.com/a/198935/392271
523
524
h2. Ubuntu Set Specific Kernel to Boot
525
526
* Use this command to get a list of available options:
527
<pre>
528
$ grep -Ei 'submenu|menuentry ' /boot/grub/grub.cfg | sed -re "s/(.? )'([^']+)'.*/\1 \2/"
529
menuentry  Ubuntu
530
submenu  Advanced options for Ubuntu
531
    menuentry  Ubuntu, with Linux 4.4.0-34-generic
532
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (upstart)
533
    menuentry  Ubuntu, with Linux 4.4.0-34-generic (recovery mode)
534
menuentry  System setup
535
</pre>
536
* Backup grub configuration, just in case:
537
<pre>
538
$ sudo cp /etc/default/grub /etc/default/grub.bak
539
</pre>
540
* Edit grub configuration and change `GRUB_DEFAULT` to something like this:
541
<pre>
542
$ sudo vim /etc/default/grub
543
544
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 3.13.0-53-generic"
545
</pre>
546
* Update grub configuration
547
<pre>
548
$ sudo update-grub
549
</pre>
550
* See also: https://askubuntu.com/questions/216398/set-older-kernel-as-default-grub-entry
551
552
h2. Ubuntu Networking Resources
553
554
* https://blog.ubuntu.com/2017/12/01/ubuntu-bionic-netplan
555
* https://help.ubuntu.com/lts/serverguide/network-configuration.html.en
556
* https://netplan.io/
557
558
h2. Win10 Licensing Info
559
560
* https://www.windowscentral.com/how-change-product-key-windows-10
561
* https://www.tenforums.com/tutorials/49586-determine-if-windows-license-type-oem-retail-volume.html
562
* https://www.tenforums.com/windows-updates-activation/104569-win-10-activation-expiring-volume-license.html
563
564
h2. Python GTK Development Resources
565
566
* https://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html
567
* https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Box.html#Gtk.Box.pack_start
568
* https://lazka.github.io/pgi-docs/Gtk-3.0/mapping.html
569
570
h2. cpufrequtils Governor Configuration
571
572
These instructions are intended for Ubuntu 16.04 and later (using systemd init).
573
574
* Check the available and currently set governors. Ubuntu has an โ€œondemandโ€ service that sets the governor to ondemand after boot.
575
<pre>
576
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
577
conservative ondemand userspace powersave performance schedutil
578
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 
579
ondemand
580
</pre>
581
582
* Configure cpufrequtils to set the governor to performance at boot
583
<pre>
584
$ echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
585
GOVERNOR="performance"
586
</pre>
587
588
* Disable the automatic ondemand service. 
589
<pre>
590
$ sudo systemctl disable ondemand
591
</pre>
592
593
* Reboot.
594
595
* Now check that the governor is set to performance for every CPU:
596
<pre>
597
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
598
performance
599
performance
600
performance
601
performance
602
โ€ฆ
603
performance
604
performance
605
performance
606
</pre>
607
608
* Check current CPU speeds:
609
<pre>
610
$ watch -n 1 bash -c 'cpufreq-info | grep "current CPU frequency"'
611
</pre>
612
613
h2. rsync via ssh example
614
615
<pre>
616
$ rsync --info=progress2 -ahz --compress-level=9 -e "ssh -i ~/ryft-pat-f1.pem" data/ ryftuser@18.205.65.5:/ryftone/regression/pubmed/data/
617
</pre>
618
619
h2. Read Performance using AIO
620
621
Use this fio command (run from temp directory on disk in question) to measure max disk read performance:
622
623
<pre>
624
$ 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
625
</pre>
626
627
Note that DIRECT_IO is required when using AIO. (see also: https://askubuntu.com/a/991311/392271)
628
629
h2. Remove Source Files While Creating Tarball
630
631
This is handy as it saves on disk space.
632
<pre>
633
$ tar --remove-files -cf pictures.tar Pictures/
634
</pre>
635
636
h2. Linux Find and Remove Files
637
638
Find and remove files (even with spaces in the path) using case insensitive matching for the wildcard:
639
<pre>
640
$ find . -type f -iname "*.jpg" -print0 | xargs -0 rm
641
</pre>
642
643
h2. Convert ASCII hex to binary
644
This problem seems to come up every so often. There is no need for a one-off solution:
645
646
<pre>
647
$ xxd -r -p input.txt output.bin
648
</pre>
649
650
https://stackoverflow.com/questions/7826526/transform-a-hex-info-to-binary-using-linux-command
651
652
h2. Well Said
653
654
https://developers.slashdot.org/comments.pl?sid=12326098&cid=56908942
655
656
h2. Hex Editor
657
658
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.
659
660
Download from here: https://github.com/EUA/wxHexEditor
661
662
You'll need the latest version of libwxgtk<version>-dev package.
663
664
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.
665
666
Finally, to get it installed in the right place:
667
<pre>
668
sudo make install DESTDIR=/opt/local BINDIR=bin DATADIR=share
669
</pre>
670
671
h2. Preprocessor Fun
672
673
To invoke the preprocessor directly:
674
<pre>
675
gcc -E -DSOME_DEFINE=SOME_VALUE somefile.c 
676
</pre>
677
678
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."
679
680
h2. Convert Oversampled .flac to 16 bit 44.1 khz .flac
681
682
<pre>
683
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox {} -b 16 -r 44100 output/{/.}.flac"
684
685
mkdir -p output && find . -type f -name "*.flac" | parallel -j16 "sox -v 0.98 {} -b 16 -r 44100 output/{/.}.flac"
686
</pre>
687
688
h2. Aligned C++ STL Types
689
690
<pre>
691
#include <vector>
692
#include <boost/align/aligned_allocator.hpp>
693
694
template <typename T>
695
using aligned_vector = std::vector<T, boost::alignment::aligned_allocator<T, 4096>>;
696
</pre>
697
698
h2. Command line convert .png to .jpg
699
700
<pre>
701
$ for x in *.png; do convert $x $(basename $x .png).jpg; done
702
</pre>
703
704
You can also add the "`-quality 90`" option if needed.
705
706
h2. Determine CPU Family Name
707
708
<pre>
709
$ gcc -march=native -Q --help=target|grep march
710
</pre>
711
712
h2. Convert .flac to .m4a (AAC)
713
714
Requires `ffmpeg` built with libfdk_aac:
715
716
<pre>
717
$ /opt/bin/ffmpeg -i input.flac -vn -c:a libfdk_aac -vbr 3 output.m4a
718
</pre>
719
720
All together using `find` and `parallel` for magic:
721
<pre>
722
$ find . -type f -name "*.flac" | parallel -j16 "/opt/bin/ffmpeg -i {} -vn -c:a libfdk_aac -vbr 4 {/.}.m4a"
723
</pre>
724
725
h2. PyGObject
726
727
This is the magic needed to have stuff happen quasi asynchronously using PyGObject (GTK+):
728
729
<pre>
730
# Yield to the main loop temporarily
731
while Gtk.events_pending():
732
    Gtk.main_iteration()
733
</pre>
734
735
h2. FUSE Code
736
737
 *https://pastebin.com/wavKntiu
738
739
h2. Use Windoze Schtuffs
740
741
 * 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)
742
 * [[http://landinghub.visualstudio.com/visual-cpp-build-tools|MSVC Tools]] - compiler (seems to be the rough equivalent of `build-essential`)
743
 * [[https://docs.microsoft.com/en-us/sysinternals/downloads/procmon|Process Monitor]] - useful debug tool
744
  * https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi - example for using Process Monitor
745
 * http://download.microsoft.com/download/7/2/E/72E0F986-D247-4289-B9DC-C4FB07374894/wdexpress_full.exe - (required by wingtk below)
746
 
747
* https://github.com/wingtk/gvsbuild - haven't tried this yet but looks amazing... 
748
749
h2. Build Handbrake Git Build
750
751
Steps for building Handbrake using AOCC:
752
753
<pre>
754
$ source /home/dsorber/Downloads/aocc/setenv_AOCC.sh
755
$ export CC=clang
756
$ export CXX=clang++
757
$ export CFLAGS="-g -O3 -mtune=native"
758
$ export CXXFLAGS=$CFLAGS
759
$ cd ~/Downloads/HandBrake/
760
$ rm -rf build/
761
$ ./configure --prefix=/opt --enable-x265 --enable-fdk-aac --gcc=/home/dsorber/Downloads/aocc/AOCC-1.1-Compiler/bin/clang
762
$ cd build
763
$ make -j17
764
$ sudo make install
765
</pre>
766
767
----
768
769
Regular build (18.04 and later):
770
<pre>
771
$ rm -rf build/
772
$ ./configure --prefix=/opt/local --enable-x265 --enable-fdk-aac
773
$ cd build
774
$ make -j17
775
$ sudo make install
776
</pre>
777
778
h2. Politically Correct Linux
779
780
* https://entertainment.slashdot.org/comments.pl?sid=11493671&cid=55759997
781
782
h2. This guy gets it
783
784
Regarding software purist ideology vs pragmatism
785
786
* https://linux.slashdot.org/comments.pl?sid=11156367&cid=55256437
787
788
h2. "Rotate" Video Playback via Metadata
789
790
<pre>
791
$ ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
792
</pre>
793
794
795
h2. Ubuntu Remove Old Kernels Oneliner
796
797
<pre>
798
$ 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)
799
</pre>
800
801
* [[https://askubuntu.com/questions/2793/how-do-i-remove-old-kernel-versions-to-clean-up-the-boot-menu/571360#571360|Sauce]]
802
803
h2. Remove New Lines (command line)
804
805
For a file:
806
<pre>
807
$ tr -d '\n' < yourfile.txt
808
</pre>
809
810
Or for output of a command (e.g.):
811
<pre>
812
$ find . -type f -name '*.txt' | tr -d '\n'
813
</pre>
814
815
h2. Convert from .mp4 to .mkv Container
816
817
Use `avconv` to convert container without re-encoding:
818
<pre>
819
$ sudo apt-get install libav-tools
820
821
$ avconv -i filme.mp4 -c copy filme.mkv
822
</pre>
823
824
h2. Remove String From Many File Names
825
826
On Ubuntu use Perl rename utility, e.g.:
827
828
<pre>
829
$ rename 's/ \(1920x1080\) \[WaifuKenny\]//' *.mp4
830
</pre>
831
832
h2. Change Default Text Editor
833
834
I always have to Google this...
835
836
<pre>
837
$ sudo update-alternatives --config editor
838
</pre>
839
840
h2. Linux View System RAM Speed
841
842
View RAM speed (actual) on Debian/Ubuntu/Mint:
843
844
<pre>
845
$ sudo lshw -short -C memory
846
H/W path                      Device      Class          Description
847
====================================================================
848
/0/0                                      memory         64KiB BIOS
849
/0/b                                      memory         32GiB System Memory
850
/0/b/0                                    memory         [empty]
851
/0/b/1                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
852
/0/b/2                                    memory         [empty]
853
/0/b/3                                    memory         16GiB DIMM Synchronous 2134 MHz (0.5 ns)
854
/0/d                                      memory         768KiB L1 cache
855
/0/e                                      memory         4MiB L2 cache
856
/0/f                                      memory         16MiB L3 cache
857
</pre>
858
859
h2. Linux Memory Schtuff
860
861
* [[https://github.com/jbert/exmap|exmap]]
862
* https://jameshunt.us/writings/smaps.html
863
* https://techtalk.intersec.com/2013/07/memory-part-2-understanding-process-memory/
864
* http://bmaurer.blogspot.com/2006/03/memory-usage-with-smaps.html
865
866
* https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt
867
868
* From: http://stackoverflow.com/questions/24484481/entry-in-proc-meminfo
869
<pre>
870
  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.
871
</pre>
872
873
874
* From: http://unix.stackexchange.com/questions/56879/tracking-down-missing-memory-usage-in-linux
875
876
  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).
877
878
  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.
879
880
 * [[http://virtualthreads.blogspot.com/2006/02/understanding-memory-usage-on-linux.html|Understanding memory usage on Linux]]
881
882
 * https://linux-mm.org/LinuxMM
883
884
h2. Reinstall grub on UEFI System
885
886
Reinstalling grub on a UEFI system is slightly different than on a traditional legacy BIOS system:
887
888
<pre>
889
# Mount the primary drive root partition and the boot EFI partition
890
sudo mount /dev/sda# /mnt            # Mount root (/) partition
891
sudo mount /dev/sda# /mnt/boot       # Mount boot (/boot) partition (if separate from root partition; typically not)
892
893
sudo mkdir -p /mnt/boot/efi          # Create EFI partition mount point
894
sudo mount /dev/sda1 /mnt/boot/efi   # Mount EFI partition
895
896
# Mount your virtual filesystems:
897
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
898
899
# Chroot
900
sudo chroot /mnt
901
</pre>
902
903
Now, if you have networking you'll need DNS. If using `resolvconf` (for recent versions of Ubuntu):
904
905
# Edit ` /etc/resolvconf/resolv.conf.d/head` and add the following line (OpenDNS server).  Then save and exit:
906
<pre>
907
add nameserver 208.67.222.222
908
</pre>
909
# Next enable updates and update:
910
<pre>
911
sudo resolvconf --enable-updates
912
sudo resolvconf -u
913
</pre>
914
# Now you should have DNS. Test by pinging something.
915
916
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.
917
<pre>
918
apt-get install grub-efi-amd64  # Install grub EFI bootloader (this should be all you need to do)
919
920
921
# manual steps if you need them for some reason
922
grub-install --recheck --no-floppy --force /dev/sda1  # Install grub bootloader in EFI partition
923
924
#####
925
echo "configfile (hd0,gpt#)/boot/grub.cfg" > /boot/efi/ubuntu/grub.cfg # Tell grub to load grub.cfg from /boot
926
927
update-grub                          # Create grub menu list
928
#####
929
930
exit                                 # Exit chroot
931
</pre>
932
933
Reboot and you should be back in business.
934
935
h2. Convert flac to VBR mp3 using ffmpeg/lame
936
937
<pre>
938
for file in *.flac; do name=$(echo $file | sed "s/\.flac//g"); ffmpeg -i "$file" -codec:a libmp3lame -qscale:a 0 "$name".mp3; done
939
</pre>
940
941
h2. Create UEFI/legacy BIOS Bootable ISO
942
943
* http://askubuntu.com/questions/625286/how-to-create-uefi-bootable-iso
944
945
h2. Getting rEFInd to work on Mac OS 10.11
946
947
* http://mattjanik.ca/blog/2015/10/01/refind-on-el-capitan/
948
949
h2. Convert DTS 5.1 to FLAC
950
951
<pre>
952
sudo apt-get install libdca-utils ffmpeg sound-juicer gnome-terminal easytag vlc 
953
954
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
955
</pre>
956
957
Source: http://ubuntuforums.org/archive/index.php/t-1849260.html
958
959
h2. Windows Utils
960
961
* http://windirstat.info/download.html
962
* https://www.raymond.cc/blog/safely-delete-unused-msi-and-mst-files-from-windows-installer-folder/
963
964
h2. SSH Security
965
966
https://stribika.github.io/2015/01/04/secure-secure-shell.html
967
968
h2. Windows 10
969
970
* http://ultimateoutsider.com/downloads/ - GWX Control Panel to disable GWX (Windows 10 update nagging)
971
* [[https://www.safer-networking.org/spybot-anti-beacon/|Spybot Anti-Beacon]] - Disable Micro$oft "telemetry" data gathering from Windows 10, 8.x, and 7
972
973
<pre>
974
The newest version of the KB3035583 update includes a background process which scans the 
975
system's Windows Registry twice a day to see if the values for the four aforementioned registry 
976
inputs were manually edited to disable the upgrade prompt. If they were, the process will alter 
977
the values, silently re-download the Windows 10 installation files (about 6 GB in total), and 
978
prompt the user to upgrade.
979
</pre>
980
981
982
h2. gpg-agent
983
984
* http://www.infrastructureanywhere.com/documentation/additional/mirrors.html
985
986
These instructions are geared toward reprepro but should be useful in general for setting up `gpg-agent`.
987
988
989
h2. Resolve DNS While VPN Connected
990
991
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/
992
993
h2. Pretty Print Python Traceback
994
995
<pre>#!python
996
import traceback
997
998
 ...
999
1000
try: 
1001
    with open('/dev/null', 'w') as void:
1002
        rc = not bool(subprocess.call('modprobe -r {:s}'.format(mod_name), 
1003
                                      shell=True, stdout=void, stderr=void))
1004
except Exception as e:
1005
    print_failure_status()
1006
    exc_type, exc_value, exc_traceback = sys.exc_info()
1007
    print('\n')
1008
    traceback.print_exception(exc_type, exc_value, exc_traceback)
1009
    print('\n')
1010
</pre>
1011
1012
h2. Generating Random Data Files for Testing
1013
1014
One approach is to use /dev/urandom (non-blocking pseudorandom device):
1015
<pre>
1016
$ dd if=/dev/urandom bs=32M count=32 of=data_1GB.bin
1017
</pre>
1018
Unfortunately /dev/urandom is a bit slow. However, you can alternatively use openssl to generate pseudorandom numbers a bit faster:
1019
<pre>
1020
 $ openssl rand 1073741824 > data_1GB.bin
1021
 $ for run in {1..30}; do echo $run; openssl rand 1073741824 >> data_30GB.bin; done
1022
</pre>
1023
1024
h2. Cloning HDDs
1025 8
1026 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).
1027
1028
To clone a single drive to another identical drive (assuming sda is the source and sdb is the destination):
1029
<pre>
1030
 $ sudo dd if=/dev/sda bs=32M | pv -s `sudo blockdev --getsize64 /dev/sda` | sudo dd of=/dev/sdb bs=32M
1031
</pre>
1032
To clone to multiple drives all at once (assuming sda is the source and sdb, sdc are destinations):
1033
<pre>
1034
 $ 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
1035
</pre>
1036
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!
1037
1038
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.
1039
1040
h2. Generating ISOs
1041
1042
<pre>
1043
 $ genisoimage -R -J -o <output.iso> <some directory>
1044
</pre>
1045
To deal with long file names:
1046
<pre>
1047
 $ genisoimage -R -J -l -D -joliet-long -o <output.iso> <some directory>
1048
</pre>
1049
1050 2
h2. BIOS/grub
1051 1
1052 2
* http://forums.linuxmint.com/viewtopic.php?f=46&t=119832
1053
* http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html
1054
* https://wiki.archlinux.org/index.php/GRUB2
1055
* http://unix.stackexchange.com/questions/28443/does-grub2-support-putting-boot-on-a-raid5-partition
1056 1
1057
h3. Creating a BIOS Boot Partition on a GPT system
1058
1059
<pre>
1060
$ sudo parted /dev/sda
1061
(parted) mkpart primary 0 1024k
1062
(parted) set 2 bios_grub on
1063
</pre>
1064
1065 2
h2. Actiontec Router
1066
1067
* http://transition.fcc.gov/oet/ea/fccid/
1068
* http://opensource.actiontec.com/mi424wref.html
1069 1
1070
h2. Temp
1071
1072
https://www.grumpyland.com/blog/183/installing-software-raid-on-centos-567-via-ssh/
1073
<pre>
1074
# swap is on /dev/md1
1075
/dev/md1 none            swap    sw              0       0
1076
1077
# storage is on /dev/md0
1078
/dev/md0        /storage        xfs     noatime,barrier=0 0 0
1079
//faramir/production/sw /sw     cifs    username=samba,password=w00tw00t!,file_mode=0666,dir_mode=0777  0       0
1080
</pre>
1081
1082
----
1083
[[../|Back home]]