Archivio tag: Linux

Linux, spazio su disco esaurito (ma sono gli iNodes)

In questi giorni si è presentato un problema sul server Linux di non facile risoluzione. L’errore che appariva era “spazio esaurito sul device” (No space left on device) ma non era lo spazio, bensì gli iNodes (grazie!) che potete verificare col comando:
df -i

Nella root / avevo il 100% utilizzato senza più un iNodes libero e il problema stava nel fatto che ogni comando dava errore proprio per la mancanza di inodes disponibili. Cosa avesse causato il problema subito facevo fatica a comprenderlo e così la prima cosa da fare è cancellare qualche files “a mano”. Ho iniziato dai log in /var/log/ cancellando ricorsivamente tutti i file .gz. Ho liberato circa 300 inodes e questo mi ha permesso di eseguire un’altra operazione: spostare una directory temporaneamente.

Con questo utile comando ho identificato una directory particolarmente piena di files da spostare per liberare ulteriore spazio (es. in /var/lib):
find /var/lib -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
(il comando restituisce un elenco con numero file per ogni sottodirectory)

Per liberare qualche iNode ho spostato una directory in home che risiede su un’altra partizione (gli iNodes sono riferiti ad ogni singola partizione, su /home ero solo al 3%) e poi ho creato un link simbolico (l’ho fatto per /var/lib/dpkg/info che conteneva oltre 6000 files):
mv var/lib/dpkg/info /home/jazzo/dpkg_info/

Liberato un po’ di “spazio” son riuscito finalmente a lavorare e ad approfondire il problema.
Dopo un po’ di ricerche ho scoperto che erano ancora presenti tutte le versioni del kernel dal momento dell’installazione.
Per conoscere l’elenco di tutte le versioni presenti nel sistema:
dpkg --get-selections | grep linux-image

Schermata 2015-09-17 alle 17.49.35

Ho rimosso una ad una le vecchie versioni con questo comando (lasciando solo le ultime 2):

apt-get remove --purge linux-image-3.13.0-36-generic

Ogni versione occupava circa 150Mb e 5.000 iNodes.
A questo punto ho lanciato l’autoremove e si son liberati oltre 300.000 iNodes!
apt-get autoremove

Questa la situazione prima:
Schermata 2015-09-17 alle 17.58.10
e questa dopo!
Schermata 2015-09-17 alle 17.58.23

E così ora le versioni le cancellerò di volta in volta, senza dar sempre per scontato che lo spazio sia infinito!

Appunti Shell

Variabili Shell

Per interrompere uno script shell e richiedere un parametro all’utente:
read -p "Quale versione ripristino? > " ver
Successivamente potete utilizzare la variabile $ver nello script così (con l’utilizzo anche di double quote):
echo "Versione: $ver"

Encrypting and decrypting files

Per criptare un file con GPG lanciare il comando:
gpg --batch --no-tty -c --passphrase "my_passphrase" file_to_crypt.ext

Per decriptare lo stesso file:
gpg --batch --yes --passphrase "my_passphrase" --output file_to_crypt.ext --decrypt file_to_crypt.ext.gpg

MySQL eseguire query da command line

Per esguire una query da riga di comando bisogna usare il parametro “-e”. Per creare, ad esempio, un database MySql da riga di comando:
mysql -uroot -e "CREATE DATABASE my_db"

SSH su OS X con chiave generata da Putty

osx-snow-leopard

Sto effettuando la migrazione da PC a Mac (OS X Snow Leopard). Su PC utilizzo il mitico PuTTY (programma che non smetterò mai di osannare!) per connettermi ai server in SSH con chiave pubblica. Su Mac non è necessario alcun software aggiuntivo essendo quest’ultimo basato su Unix, tuttavia sono state necessarie alcune operazioni elementari per poter ottenere la stessa operatività.

Per prima cosa ho dovuto convertire le mie chiavi pubbliche, generate a suo tempo da PuTTYgen, in modo che potessero essere usate da qualsiasi client OpenSSH. Per questo il buon PuTTYgen ci viene in aiuto. Per prima cosa è necessario importare la chiave .ppk (Conversions -> Import key). Una volta importata la chiave è possibile esportarla come OpenSSH key (Conversions -> Export OpenSSH key). Salvate poi la nuova key su una chiavetta usb e portatela su Mac.

Sul Mac ho spostato la key nell’apposita directory .ssh presente nella mia Home (/Users/myName). Sempre nella Home ho creato il file mySSH-Server1.sh con questo contenuto:

ssh -i /Users/myName/.ssh/myKey_ssh -p 922 myUser@xxx.xxx.xxx.xxx

In pratica chiamo ssh da riga di comando con:

  • -i serve per agganciare la chiave appena salvata
  • -p perchè non uso mai la porta standard 22 (così si escludono un pò di lamer)
  • myUser@xxx.xxx.xxx.xxx è la classica chiamata ssh composta da user e indirizzo IP

Ho salvato il file e l’ho reso eseguibile con il comando:

chmod 700 mySSH-Server1.sh

Ho creato poi un Alias del file e l’ho posizionato sulla Scrivania in modo da averlo sempre a portata di click.
Appena lanciato, ssh mi ha fatto notare che i permessi della key non erano corretti e quindi li ho impostati:

chmod 600 .ssh/myKey_ssh

Dopodichè è partito, ho inserito la passphrase è via!

Connettere PHP (su Linux) al database MS SQL Express

Sono iniziati i lavori per Anchegiochi.it e il primo passo è interfacciare il server di sviluppo ad un database SQL Express 2005, piattaforma sul quale poi risiederà l’intero sistema in fase di produzione. Dopo aver ricompilato il PHP con le librerie MSSQL (grazie all’ottimo FreeTDS driver) siamo riusciti a connettere il PHP.

Segnalo l’ottimo articolo guida che ci ha aiutato nell’impresa: Making a PHP Site on Linux Work with a Microsoft SQL Server Database.