220 lines
6.6 KiB
Markdown
220 lines
6.6 KiB
Markdown
# Scripts
|
|
|
|
- [Configure SSH connection helper (remote pc not server)](#configure-ssh-connection-helper-remote-pc-not-server)
|
|
- [Docker commands](#docker-commands)
|
|
- [Remove every user R packages](#remove-every-user-r-packages)
|
|
- [Setup Git SSH key](#setup-git-ssh-key)
|
|
- [Font ligature test](#font-ligature-test)
|
|
- [QEMU cheat sheet](#qemu-cheat-sheet)
|
|
- [Share internet between two Linux interfaces using connman](#share-internet-between-two-linux-interfaces-using-connman)
|
|
- [IP Host (eth1 has internet, eth0 is remote)](#ip-host-eth1-has-internet-eth0-is-remote)
|
|
- [IP Remote](#ip-remote)
|
|
- [Remove DRM from Adobe Digital Editions](#remove-drm-from-adobe-digital-editions)
|
|
- [Prerequisites](#prerequisites)
|
|
- [Setting up Calibre](#setting-up-calibre)
|
|
- [Getting the DRM-free PDF](#getting-the-drm-free-pdf)
|
|
- [Loop devices](#loop-devices)
|
|
- [Install img.xz](#install-imgxz)
|
|
- [Raise Linux open files limits](#raise-linux-open-files-limits)
|
|
- [Verify a PGP Signature](#verify-a-pgp-signature)
|
|
- [Self-signed OpenSSL](#self-signed-openssl)
|
|
- [interactive](#interactive)
|
|
- [non-interactive and 10 years expiration](#non-interactive-and-10-years-expiration)
|
|
- [Bind to port 80 or 443](#bind-to-port-80-or-443)
|
|
|
|
## Configure SSH connection helper (remote pc not server)
|
|
|
|
In the file ~/.ssh/config
|
|
|
|
```conf
|
|
Host \$HOST_NAME
|
|
HostName \$SERVER_IP
|
|
Port \$SSH_PORT
|
|
User \$USER_NAME
|
|
IdentityFile ~/.ssh/\$SSH_KEY_NAME
|
|
```
|
|
|
|
Now you can just connect using ssh \$HOST_NAME
|
|
|
|
## Docker commands
|
|
|
|
```sh
|
|
# Remove every images
|
|
docker images --format='{{.ID}}' | xargs docker rmi
|
|
# Remove every containers
|
|
docker ps -a --format='{{.ID}}' | xargs docker stop | xargs docker rm
|
|
# Remove every volumes
|
|
docker volume ls --format='{{.Name}}' | xargs docker volume rm
|
|
# Remove every anonymous images (cached)
|
|
docker images --format='{{.Repository}};{{.Tag}};{{.ID}}' | grep '<none>;<none>' | cut -d ';' -f 3 | xargs docker rmi
|
|
# Get all used images tag in dir $PATH_ANALYSE
|
|
find $PATH_ANALYSE -name 'Dockerfile*' | while read file; do cat $file; echo ''; done | grep -e FROM | cut -d ' ' -f 2 | sed $'s/[^[:print:]\t]//g' | sort -u | xargs -n1 docker pull
|
|
# Calculate total docker images size
|
|
docker images --format {{.ID}} | xargs -n1 docker inspect | jq '.[0]["Size"]' | paste -sd + | bc | format_bytes_str
|
|
```
|
|
|
|
## Remove every user R packages
|
|
|
|
```R
|
|
my_packages = as.data.frame(installed.packages()[, c(1, 3:4)])
|
|
my_packages = my_packages[my_packages$Priority != 'base',]
|
|
for(lib in .libPaths()) lapply(my_packages$Package, remove.packages, lib = lib)
|
|
```
|
|
|
|
## Setup Git SSH key
|
|
|
|
```sh
|
|
# Generate a SSH key pair
|
|
ssh-keygen -t rsa -b 4096 -o -a 100 -C 'email@example.com' -f ~/.ssh/$KEY_NAME
|
|
ssh-keygen -t ed25519 -a 100 -C 'email@example.com' -f ~/.ssh/$KEY_NAME
|
|
# Copy the public key to clipboard
|
|
cat ~/.ssh/$KEY_NAME.pub | xclip
|
|
# Paste the contents into a new SSH key holder in https://github.com/settings/keys
|
|
# Test if the key is working
|
|
ssh -T git@github.com
|
|
# Set the remote stream of a git repo
|
|
git remote set-url origin git@github.com:username/your-repository.git
|
|
# Add key to SSH config file (~/.ssh/config)
|
|
echo -e "\n\nHost github.com\n\tIdentityFile ~/.ssh/$KEY_NAME" >> ~/.ssh/config
|
|
cat KEY_FILE | ssh REMOTE 'cat >> ~/.ssh/authorized_keys'
|
|
```
|
|
|
|
## Font ligature test
|
|
|
|
```c
|
|
-> --> => ?. == ===
|
|
... >>- >=
|
|
!= ~> := .= // /* */
|
|
/= ~= WWW 0xFF <>
|
|
&& || >-> =>> |>
|
|
<!-- -->
|
|
```
|
|
|
|
## QEMU cheat sheet
|
|
|
|
```sh
|
|
# Creating the disk image
|
|
qemu-img create -f qcow2 DISK_NAME.img 15G
|
|
|
|
# Starting the VM
|
|
qemu-system-x86_64 $DISK_NAME.img \
|
|
-cdrom $CDROM_NAME.iso \
|
|
-m $RAM_SIZE \
|
|
-smp $NB_CORES \
|
|
-name $VM_NAME &
|
|
```
|
|
|
|
## Share internet between two Linux interfaces using connman
|
|
|
|
### IP Host (eth1 has internet, eth0 is remote)
|
|
|
|
```sh
|
|
# Enable kernel port forwarding
|
|
sysctl -w net.ipv4.ip_forward=1
|
|
# Enable at reboot
|
|
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
|
|
# See interfaces
|
|
ip a
|
|
# Configuration of interfaces
|
|
connmanctl
|
|
services <ethX>
|
|
config <eth0> --ipv4 manual 192.168.137.1 255.255.255.0 192.168.137.1
|
|
config <eth1> --nameservers <DNS-SERVER>
|
|
# Configure packets redirections
|
|
iptables -I INPUT -s 192.168.137.2/30 -j ACCEPT
|
|
iptables -I FORWARD -o eth0 -s 192.168.137.2/30 -j ACCEPT
|
|
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
|
|
```
|
|
|
|
### IP Remote
|
|
|
|
```sh
|
|
connmanctl
|
|
config <eth0> --ipv4 manual 192.168.137.2 255.255.255.0 192.168.137.1 --nameservers <DNS-SERVER>
|
|
```
|
|
|
|
## Remove DRM from Adobe Digital Editions
|
|
|
|
### Prerequisites
|
|
|
|
On Windows, you must have _Adobe Digital Editions_ and _Calibre_ using Chocolatey
|
|
|
|
```sh
|
|
choco install -y adobedigitaleditions calibre
|
|
```
|
|
|
|
### Setting up Calibre
|
|
|
|
- Download the DeDRM plugin on [GitHub](https://github.com/noDRM/DeDRM_tools).
|
|
- Extract the plugin archive
|
|
- Install the plugin in Calibre → Preferences → Plugins → Add from file
|
|
|
|
### Getting the DRM-free PDF
|
|
|
|
- Open the PDF using _Adobe Digital Editions_
|
|
- Navigate to C:/Users/\<USER\>/My\ Digital\ Editions
|
|
- Add the PDF to calibre
|
|
- The DRM free PDF is available at C:/Users/\<USER\>/Calibre\ Library
|
|
|
|
## Loop devices
|
|
|
|
```sh
|
|
# Create loop device to $BLOCK_PATH of 4G
|
|
dd if=/dev/zero of=$BLOCK_PATH bs=1M count=4096
|
|
# Create loop filesystem
|
|
losetup -f $BLOCK_PATH
|
|
# Check if the loop was created and get LOOP_ID
|
|
losetup -a
|
|
mkfs.ext4 /dev/loop$LOOP_ID
|
|
mount /dev/loop$LOOP_ID $MOUNT_POINT
|
|
# Detach and remove loop file
|
|
umount $MOUNT_POINT
|
|
losetup -d /dev/loop$LOOP_ID
|
|
rm $BLOCK_PATH
|
|
```
|
|
|
|
## Install img.xz
|
|
|
|
```sh
|
|
xzcat $IMG_FILE | dd of=/dev/$DEVICE bs=64k oflag=dsync status=progress
|
|
```
|
|
|
|
## Raise Linux open files limits
|
|
|
|
In the file /etc/security/limits.conf add this :
|
|
|
|
```conf
|
|
* soft nofile 64000
|
|
* hard nofile 64000
|
|
root soft nofile 64000
|
|
root hard nofile 64000
|
|
```
|
|
|
|
## Verify a PGP Signature
|
|
|
|
```sh
|
|
mkdir /home/$USER/.XDG/data/gnupg
|
|
chmod 700 /home/$USER/.XDG/data/gnupg
|
|
gpg --import $PUBLIC_KEY
|
|
chmod 600 /home/$USER/.XDG/data/gnupg/$PUBLIC_KEY
|
|
gpg --verify $SIGNATURE.sig $FILE
|
|
```
|
|
|
|
### Self-signed OpenSSL
|
|
|
|
#### interactive
|
|
```sh
|
|
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365
|
|
```
|
|
|
|
#### non-interactive and 10 years expiration
|
|
```sh
|
|
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj '/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=CommonNameOrHostname'
|
|
```
|
|
|
|
## Bind to port 80 or 443
|
|
|
|
[Is there a way for non-root processes to bind to "privileged" ports on Linux?](https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-on-linux)
|
|
|
|
[Allow non-root process to bind to port 80 and 443?](https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443)
|