Project

General

Profile

Miscellaneous » History » Version 16

Anonymous, 01/19/2024 07:50 AM
fix formatting mistake

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