Project

General

Profile

Miscellaneous » History » Version 12

Anonymous, 08/13/2023 10:07 AM
adding note

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