====== Sysadmin training ====== ===== Occupazione disco (df/du) ===== L'occupazione delle partizioni si può verificare velocemente con il comando ''df'', mentre l'occupazione delle directory può essere verificata con il comando ''du''. Vedremo di seguito le opzioni e i modi di utilizzo più comuni. Occupazione di directory e files inclusi nella directory corrente: du -sh * Occupazione di directory e files che occupano almeno 1GB: du -sh * | grep G Occupazione di directory e files che occupano almeno 1GB ordinate per dimensione: du -sh * | grep G | sort -n Occupazione di directory e files ordinata: du -sh * | sort -n Occupazione dei singoli files inclusi nella directory ''/home/andrei/'' du sh home/andrei/* Spazio occupato in ogni partizione in formato umano df -h ===== Introduzione a SSH ===== [SSH](https://www.ssh.com) è l'acronimo di Secure Shell che può indicare sia un protocollo di sicurezza, sia un software. La sua implementazione libera è OpenSSH. Gli utilizzi più frequenti di ssh sono: * accedere ad un server remoto per eseguire una shell (o un altro comando); * copiare files; Nei sistemi GNU/Linux si usa il tool da riga di comando `ssh`, invece nei sistemi Windows si è storicamente utilizzato [Putty](https://putty.org/) anche se da [Windows 10 - Aprile 2018 hanno incluso il comando nativo ssh](https://www.howtogeek.com/340688/whats-coming-in-windows-10s-redstone-4-update-available-march-2018/) Tre comandi su server remoto Per accedere ad un host remoto 192.168.42.118 come utente "utente1" (password "utente1") digitare: io@my-laptop:~ $ ssh utente1@192.168.42.118 Potete eseguire tre comandi: utente1@demo1:~ $ cat /etc/hostname utente1@demo1:~ $ uptime utente1@demo1:~ $ dmesg -T E anche altri 2 comandi grazie all'utilizzo della pipe `|` che serve per concatenare 2 comandi: utente1@demo1:~ $ dmesg -T | tail utente1@demo1:~ $ dmesg -T | grep -i network Uno sguardo d'insieme Processi remoti 2 processi remoti per comunicare hanno bisogno di un indirizzo IP (intero a 32 bit se v4) e una porta (intero a 16 bit) ciascuno. Grazie a questi 2 parametri (e non solo) creano un `socket`. Il processo che fa la richiesta si chiama "client", quello che sta in ascolto e offre il servizio si chiama "server". Molti servizi su Internet sono in ascolto su porte note, che sono minori di 1024, **il servizio ssh è in ascolto sulla porta 22** Ogni processo è in esecuzione su un sistema operativo a sua volta in esecuzione su un host. Per esempio spostando la porta su cui è in ascolto il server SSH sulla porta 2222, il client ssh potrà accedere al server tramite il comando: io@my-laptop:~ $ ssh -p2222 utente1@192.168.42.118 Host e indirizzi IP Quindi abbiamo: * Host A: * l'host da cui eseguiamo il programma client `ssh` (pacchetto openssh-client) * ha un indirizzo IP associato ad una delle sue schede di rete * questo perché ha un sistema operativo che implementa lo stack TCP/IP * Host B: * l'host su cui è in esecuzione il server `sshd` (pacchetto openssh-server) * ha un indirizzo IP associato ad una delle sue schede di rete * questo perché ha un sistema operativo che implementa lo stack TCP/IP * l'indirizzo IP del server è **statico** (se è un vero server), perché deve essere sempre raggiungibile * opzionalmente il server ha associato un nome di host riconosciuto dal DNS che fa comodo per raggiungerlo Host B in questo caso: * 192.168.42.118 Utente Ogni volta che utilizziamo un sistema operativo accediamo come utente. Quindi anche quando accediamo al sistema remoto dobbiamo usare un utente. Se non specifichiamo l'utente via ssh allora viene usato l'utente attuale. Di solito visibile nella stringa di ``prompt`` (ad es: `io@my-laptop:~ $`) Altrimenti possiamo specificarlo nel client prima della @ prima dell'hostname Incontro 2: comodità Accesso senza password É possibile sfruttare i meccanismi di crittografia asimmetrica alla base del protocollo SSH per autenticarsi ai server senza password. Per fare ciò è necessario che possediate una coppia di chiavi (pubblica/privata) che poi potete usare per tutti i server o servizi basati su SSH. Successivamente è necessario inserire la propria chiave pubblica nel file del server ``~/.ssh/authorized_keys``. Queste 2 operazioni possono essere svolte facilmente con i comandi: io@my-laptop:~ $ y ssh-keygen # da fare solo se non avete una coppia di chiavi in ``~/.ssh/`` io@my-laptop:~ $ ssh-copy-id -p 2222 utente1@192.168.42.118 Potete provare successivamente ad accedere al server ssh e verificare che potete accedere senza password. Configurazione del proprio client ssh `~/.ssh/config` Opzioni comode Incontro 3: avanzate Tunnel SSH diretti `-L 1234:localhost:8080` Tunnel SSH inversi `-R 1234:localhost:8080` ===== Introduzione a TMUX ===== Piccola teoria : Tmux è un terminale multiplexer. In altre parole, significa che è possibile avviare una sessione Tmux e quindi aprire più finestre all'interno di quella sessione. Le sessioni di Tmux sono persistenti, il che significa che i programmi in esecuzione in Tmux continueranno a funzionare anche se ci si disconnette. Installazione di Tmux: sudo apt install tmux per Ubuntu e Debian sudo yum install tmux per CentOS e Fedora Tutti i comandi in Tmux iniziano con un prefisso, che per impostazione predefinita è ctrl+b Per aprire la tua prima sessione , digta semplicemente la parola tmux nella tua console: tmux Se vuoi avere tutte le informazioni sui commandi tmux digita Ctrl+b puoi Shift+? E consigliato usare un nome per ogni sessione tmux attiva, soprattuo quando si lavora con tante finestre virtuali Il commando per creare una sessione con un nome. tmux new -s sessione_name Per staccarti dalla sessione di Tmux e tornare alla tua shell normale digitando _ Ctrl +b d !!! ATTENZIONE !!! Il programma in esecuzione nella sessione di Tmux continuerà a essere eseguito dopo il distacco dalla sessione. Per ottenere un elenco delle sessione attive: tmux ls Commandi tmux più comuni: Ctrl+b c Crea una nuova finestra (con shell) Ctrl+b w Scegli la finestra da un elenco Ctrl+b 0 Passa alla finestra 0 (per numero) Ctrl+b , Rinomina la finestra corrente Ctrl+b % Dividi il riquadro corrente in orizzontale in due riquadri Ctrl+b " Dividi il riquadro corrente verticalmente in due riquadri Ctrl+b o Vai al riquadro successivo Ctrl+b ; Passa dal riquadro corrente a quello precedente Ctrl+b x Chiudi il riquadro corrente Ctrl+b p Passa alla finestra precedente Ctrl+b n Passa alla finestra successiva ===== Introduzione a GIT ===== Git è un strumento di versionamento che ci permette di tenere traccia delle versione di un file,questo ci permette di poter richiamare una specifica versione in un secondo momento. Utilizza una interfaccia a riga di comando. La prima volta di fare il primo commit con git: git config --global user.name "Andrei Calapod" git config --global user.email "andrei@befair.it" Tale configurazione consentirà di applicare correttamente nome ed email dell'autore ad ogni commit == Comandi base == Se si è creata una directory e la si vuole far diventare un repository Git git init Una volta fatte le modifiche: git add Indica a Git che si desidera includere gli aggiornamenti di un determinato file nel prossimo commit. Le modifiche vengono effettivamente registrate nel repository locale dopo che viene eseguito il comando git commit Per vedere la traccia di tutti i commit nel branch corrente (di default è "master") git log Per vedere i file aggiunti/modificati/eliminati: git status Per spostarsi "nel tempo e nello spazio", ossia andare in una situazione temporale di codice differente (ad es: la versione di codice di 3gg fa) git checkout Per rispostarsi alla versione "principale": git checkout master ===== Esportazione cartelle sul nextcloud con occ dal terminale ===== Questo comando ti mostra la lista completa di tutte le cartelle condivise su nextcloud. sudo -u apache /opt/rh/rh-php72/root/bin/php /usr/share/nextcloud/occ files_external:list -all ===Per aggiungere una cartella condivisa si usa files_external:create=== esempio: sudo -u apache /opt/rh/rh-php72/root/bin/php /usr/share/nextcloud/occ files_external:create Labidee 'smb' password::sessioncredentials -c host=localhost -c share=Labidee --users=7DF8102E-A6DF-4E0E-870F-7E523564FCAC "smb": (smb per sistemi Windows), in questo campo viene inserito il Back-end di archiviazione disponibili password: qui va inserito il tipo di autenticazione ===Per vedere che tipi di autenticazioni sono supportati digitare questo comando=== sudo -u apache /opt/rh/rh-php72/root/bin/php /usr/share/nextcloud/occ files_external:backends -c: ti permette di aggiungere più valori host: l'url del server Samba share: nome della cartella --users= + codice univoco del utente ===Per vedere i codici del utente usare questo comando=== sudo -u apache /opt/rh/rh-php72/root/bin/php /usr/share/nextcloud/occ user:list esempio di un codice univoco: "4A96FE56-8373-403C-BA53-1B8D64C3660E" === Per cancellare una configurazione usare il comando === sudo -u apache /opt/rh/rh-php72/root/bin/php /usr/share/nextcloud/occ files_external:delete + il ===== Ridimensionare una partizione LVM ===== LVM - Logical Volume Manager consente di gestire in modo logico le partizioni. Questo vuol dire che le partizioni si possono ridimensionare al bisogno. È più facile ingrandirle che ridurle, però si può fare. Ora vi elenco le componenti base: - **pv**: Physical Volume, sono i dispositivi a blocchi partizioni/dischi inizializzati per LVM; - **vg**: Volume Group, sono i gruppi di **pv** hanno un nome. Rappresentano "il mucchio" di blocchi allocabili. Per convenzione in beFair il primo lo chiamiamo proprio ''vg'' - **lv**: Logical Volume, sono le partizioni create dentro i **vg** e sono queste che vengono formattate con il filesystem, ad esempio ''ext4'' ==== Ridimensionare un Logical Volume perché esaurito lo spazio ==== Questo è il caso critico più frequente che quindi ci interessa descrivere qui. Spazio esaurito, come si affronta con LVM? Semplice! - Visualizzo i blocchi non allocati nel Volume Group con il comando ''vgdisplay''; - Ridimensiono il Logical Volume corrispondente con ''lvresize''; - Estendo la partizione che nel caso di ''ext4'' può essere fatto senza smontarla con ''resize2fs''; === Esempio === Spazio esaurito su server database: postgres@T-FTSQL01:~/exports$ df -h Filesystem Size Used Avail Use% Mounted on udev 7.9G 0 7.9G 0% /dev tmpfs 1.6G 25M 1.6G 2% /run /dev/mapper/vg-root 15G 1.8G 12G 14% / tmpfs 7.9G 8.0K 7.9G 1% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup /dev/mapper/vg-var 27G 292M 25G 2% /var /dev/mapper/vg-home 922M 2.4M 856M 1% /home /dev/mapper/vg--data-db 393G 373G 0 100% /var/lib/postgresql tmpfs 1.6G 0 1.6G 0% /run/user/0 In questo caso il device è identificato da ''/dev/mapper/vg--data-db'' dove ''vg-data'' è il Volume Group e ''db'' è il nome del Logical Volume (o partizione logica). NOTA: il volume group si chiama ''vg-data'' perché Luca ha deciso di crearne uno apposito per il database. Non sappiamo se è la scelta migliore, ma è sembrato utile separare in quel momento. Quindi guardo i blocchi disponibili con ''vgdisplay'' e vedo che in ''vg-data'' ce ne sono 25599 ossia ''<100GB'' root@T-FTSQL01:/var/lib/postgresql# vgdisplay --- Volume group --- VG Name vg-data System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size <500,00 GiB PE Size 4,00 MiB Total PE 127999 Alloc PE / Size 102400 / 400,00 GiB Free PE / Size 25599 / <100,00 GiB VG UUID MEJIEI-FCew-cjqa-Hxhw-NRC5-97Vb-5LnW75 --- Volume group --- VG Name vg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size <80,00 GiB PE Size 4,00 MiB Total PE 20479 Alloc PE / Size 10942 / 42,74 GiB Free PE / Size 9537 / 37,25 GiB VG UUID zY74Qj-dd6d-udes-2rMX-B80a-UYVQ-Q5RHdY Poi ridimensiono con ''lvresize'' aumentando di 20G la partizione e ridimensiono il filesystem con ''resize2fs'' root@T-FTSQL01:/var/lib/postgresql# lvresize -L+20G /dev/mapper/vg--data-db Size of logical volume vg-data/db changed from 400,00 GiB (102400 extents) to 420,00 GiB (107520 extents). Logical volume vg-data/db successfully resized. root@T-FTSQL01:/var/lib/postgresql# resize2fs /dev/mapper/vg--data-db resize2fs 1.44.5 (15-Dec-2018) Filesystem at /dev/mapper/vg--data-db is mounted on /var/lib/postgresql; on-line resizing required old_desc_blocks = 50, new_desc_blocks = 53 The filesystem on /dev/mapper/vg--data-db is now 110100480 (4k) blocks long. Ultimo passo fondamentale: verifico se effettivamente lo spazio è aumentato root@T-FTSQL01:/var/lib/postgresql# df -h Filesystem Size Used Avail Use% Mounted on udev 7,9G 0 7,9G 0% /dev tmpfs 1,6G 33M 1,6G 3% /run /dev/mapper/vg-root 15G 1,8G 12G 14% / tmpfs 7,9G 8,0K 7,9G 1% /dev/shm tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 7,9G 0 7,9G 0% /sys/fs/cgroup /dev/mapper/vg-var 27G 292M 25G 2% /var /dev/mapper/vg-home 922M 2,4M 856M 1% /home /dev/mapper/vg--data-db 413G 373G 19G 96% /var/lib/postgresql tmpfs 1,6G 0 1,6G 0% /run/user/0 ==== Esempio di creazione partizioni per un nuovo server ==== 20GB / 5GB /dev/mapper/vg--hosting-home /home 50GB /dev/mapper/vg--hosting-var /var remaining disk blocks could be unpartitioned to allow LVM partition resizing on demand. In order to achieve this goal you have to create a volume group (VG) ''hosting'' bound to /dev/sda ===== Installazioni nuovi certificati con acme.sh ===== È presente lo script ''acme-renew.sh'' che si può usare con ''acme-renew.sh befair.it www.befair.it'' Il funzionamento in dettaglio è il seguente: acme.sh --issue --standalone -d befair.it -d www.befair.it mkdir -p /etc/nginx/certificates/befair.it/ acme.sh --install-cert -d befair.it --cert-file /etc/nginx/certificates/befair.it/cert.pem --key-file /etc/nginx/certificates/befair.it/privkey.pem --fullchain-file /etc/nginx/certificates/befair.it/fullchain.pem