Here’s whole stuff I wrote.

(Sorry, only in Italian.)

Bash $IFS

Martedì, 20/11/2018

Nel bash-scripting, può capitare di aver a che fare con dei path all'interno di variabili. Vediamo come utilizzarli evitando brutte sorprese.
Supponiamo di voler cercare tutti i file con una certa estensione in un percorso, per esempio con:

find /mnt/MEDIA/Film/ -name \*.avi -o -name \*.mkv -o -name \*.mp4

Questo comando potrebbe ritornare un elenco di path contente diversi spazi:

/mnt/MEDIA/Film/Ritorno al Futuro (1985).mp4
/mnt/MEDIA/Film/Fuga per la vittoria (1981).mkv
/mnt/MEDIA/Film/Sister Act 2 (1993).mp4
/mnt/MEDIA/Film/Gremlins 2 - La nuova stirpe (1990).mp4

se volessimo effettuare un loop su questo elenco potremmo avere comportamenti inaspettati.
Per esempio, un ciclo for su questo elenco salvato nel file esempio.txt, restituisce questo output:

for path in $(cat esempio.txt)
do
echo $path
done


/mnt/MEDIA/Film/Ritorno
al
Futuro
(1985).mp4
/mnt/MEDIA/Film/Fuga
per
la
vittoria
(1981).mkv
/mnt/MEDIA/Film/Sister
Act
2
(1993).mp4
/mnt/MEDIA/Film/Gremlins
2
-
La
nuova
stirpe
(1990).mp4


Non esattamente quello che serve a noi!
Questo avviene perchè bash utilizza un Internal Field Separator (IFS appunto), cioè una variabile speciale che identifica gli spazi di questo output come separatori e quindi spezza la riga ottenuta in più sotto-stringhe.
Per mantenere completa la riga, è sufficiente inizializzare la variabile speciale $IFS:

IFS=$'\n'
for path in $(cat esempio.txt); do echo $path; done

/mnt/MEDIA/Film/Ritorno al Futuro (1985).mp4
/mnt/MEDIA/Film/Fuga per la vittoria (1981).mkv
/mnt/MEDIA/Film/Sister Act 2 (1993).mp4
/mnt/MEDIA/Film/Gremlins 2 - La nuova stirpe (1990).mp4

Usare Tinc all'interno di LXC su Proxmox VE

Lunedì, 29/10/2018

LXC non permette l'utilizzo diretto di device TUN/TAP, vediamo come utilizzarli all'interno di Proxmox VE.
Prima di tutto, occorre modificare al configurazione del container in modo che possa creare l'interfaccia TUN necessaria al funzionamento di tinc.
Andiamo a modificare il file /etc/pve/lxc/<id-del-container>.conf, aggiungendo alla fine la riga:

lxc.cgroup.devices.allow: c 10:200 rwm

Ora, all'interno del container,creiamo il file /usr/sbin/tinc-wrp, con il seguente contenuto:

#!/bin/bash
mkdir /dev/net
mknod /dev/net/tun c 10 200
ip tuntap add mode tap
/usr/sbin/tincd -n $1 -D

Assegnamogli i permessi di esecuzione:

chmod +x /usr/sbin/tinc-wrp

Andiamo adesso a modificare il file di unit di systemd relativo alla nostra VPN (sostituite VPN con il nome della vostra rete):

/etc/systemd/system/tinc.service.wants/tinc@VPN.service

Sostituiamo la riga:

ExecStart=/usr/sbin/tincd -n %i -D

con la seguente riga:

ExecStart=/usr/sbin/tinc-wrp %i

Salviamo, chiudiamo e riavviamo: voilat! Ora, se avete configurato a dovere la vostra connessione con Tinc, essa dovrebbe essere attiva