Category: linux

  • Come mandare un segnale SIGINT (Ctrl-C) ad un programma che gira nella console di Eclipse

    Quando si sviluppa un programma che deve girare ininterrottamente nella console, non ci sono problemi se si lancia il programma da console e lo si termina tramite la più classica delle combinazioni: Ctrl-C. Ma come si termina lo stesso programma se lo si è lanciato da Eclipse?

    Si deve lanciare un segnale al processo, e più in particolare un SIGINT (interruzione): apriamo una console:

    kill -s INT pid

    o, se usiamo pkill:

    pkill -s INT <nome dell’interprete che sta runnando il programma: Java, Ruby, Python, etc.>

  • proctools: (pgrep, pkill): gli strumenti per operare sui processi

    Quando ci si trova davanti ad un terminale e si deve operare sui processi, si filtra l’output di ps auxw con grep (ed eventualmente con kill). Ad esempio:

    michele@delta:~ % ps auxw | grep -i yes [ 6:20PM]
    michele 92888 8.7 0.0 2434788 372 s002 S+ 6:20PM 0:00.52 yes
    michele 92914 0.0 0.0 2425580 296 s005 R+ 6:20PM 0:00.00 grep -i yes

    In alcuni casi, l’operazione più comune che segue la grep è quella di kill:

    michele@delta:~ % kill -9 92888 [ 6:20PM]
    michele@delta:~ % ps auxw | grep -i yes [ 6:21PM]
    michele 92934 0.0 0.0 2425480 244 s005 R+ 6:22PM 0:00.00 grep -i yes

    Gli autuori di proctools hanno pensato bene di introdurre 3 utility che ci possono venire incontro per questi casi:

    • pgrep <pattern>: effettua una ricerca all’interno dei processi attivi, ritorna il PID dei processi che matchano il pattern specificato come argomento:

      michele@delta:~ % pgrep yes [ 6:28PM]
      93026
      93053

    • pkill <pattern>: è l’equivalente di kill (quindi bisogna specificare il tipo di signal da passare al processo) ma applicato ai processi: assicuratevi di specificare un pattern univoco, perché tutti i processi che matchano il pattern riceveranno il kill:

      michele@delta:~ % pkill -9 yes [ 6:28PM]

    proctools (il pacchetto che contiene i due comandi citati) è (solitamente) installato di default su Linux (se non è così, cercate proctools tra i pkg della vostra distro). Su MacOSX, invece, va installato (ma scriverò un post a riguardo).
    L’utilizzo che ve ne ho descritto è basic: per ulteriori informazioni, vi rimando alla manpage.

  • Ksplice: aggiornare il kernel di Ubuntu senza riavviare

    Segnalo che con Ksplice (ora Oracle) è possibile applicare gli aggiornamenti di sicurezza (in particolare quelli del kernel) senza dover riavviare. Un’opportunità davvero interessante per tutti i server che devono mantenere un certo uptime e che, di conseguenza, non possono essere riavviati facilmente. Il servizio è disponibile a pagamento per le versioni di Ubuntu server, mentre è gratuito per le versioni desktop. Ecco come installarlo:

    1. Richiedere una chiave di accesso che vi verrà recapitata via email
    2. Loggatevi come utente root, e create il file /etc/apt/sources.list.d/ksplice.list
    3. Incollate nel file le seguenti direttive che servono ad aggiungere le sorgenti dei pacchetti da installare:
      deb https://www.ksplice.com/apt oneiric ksplice 
      deb-src https://www.ksplice.com/apt oneiric ksplice
    4. Lanciate i seguenti comandi, che servono ad installare i pacchetti di Ksplice:
      apt-get install ca-certificates
      wget -N https://www.ksplice.com/apt/ksplice-archive.asc
      apt-key add ksplice-archive.asc
      apt-get update
      apt-get install uptrack
    5. Modificate il file /etc/uptrack/uptrack.conf impostando l’opzioneautoinstall al valore yes
    6. Lanciate il comando uptrack-upgrade -y

    Tutti gli updates di sicurezza  del kernel verranno quindi installati automaticamente, senza dover riavviare. Comodo, vero? Dal 2005 al 2008, Ksplice ha applicato con successo 64 patch senza dover riavviare.

    Per i più curiosi: come funziona Ksplice? Il segreto sta nel fatto che Ksplice aggiorna dinamicamente il kernel, direttamente in memoria, grazie ad un confronto sugli oggetti ELF allocati in memoria. Questo processo è di per sé rischioso e deve essere fatto con la massima attenzione: prima di fare un patch “a caldo” di un oggetto, viene freezata l’esecuzione del processo che accede a tale oggetto, sostituita la chiamata ai vecchi oggetti con la chiamata ai nuovi oggetti, e viene quindi ripresa l’esecuzione.

  • Munin e phpSysInfo: monitorare server remoti tramite un’interfaccia web

    Monitorare dei server remoti è un’attività che richiede tempo, capacità e gli strumenti corretti. Per monitorare quotidianamente alcuni server aziendali che amministro, ho recentemente scoperto due comodi strumenti a cui si accede tramite interfaccia web (e di conseguenza molto comodi): si tratta di phpSysInfo e di munin.

    Come si evince dal nome, phpSysInfo si basa su PHP (e quindi vi obbligherà ad utilizzare apache-prefork anziché il più performante apache-mdm-worker). L’interfaccia di phpSysInfo è molto semplice e riassuntiva, presentando le informazioni principali del sistema (CPU, RAM utilizzata, occupazione dei vari file-system) in una schermata pulita e ordinata.

    munin invece è più complesso, ma anche più potente: si presenta come una serie di grafici che rappresentano il comportamento di tutti i principali componenti di sistema e le grandezze di sistema (numero di processi attivi, % dei processi attivi e sleeping, etc.). Ogni quantità viene rappresentata su un grafico giornaliero e su un grafico settimanale. Munin è scritto in Perl, ed è sicuramente più dettagliato ed approfondito. Inoltre, è possibile estendere le funzionalità di munin grazie ai plugin.

    In caso di problemi, però, non è possibile sfruttare nessuna delle due interfacce qui esposte: dovremo quindi ricorrere ad uno strumento “attivo” (come ssh, vnc, o Teamviewer) per apportare le modifiche necessarie.

    munin e phpSysInfo sono disponibili per tutte le distribuzioni Linux.

  • Ubuntu: esportare/importare la lista dei pacchetti installati

    Il punto di forza di Ubuntu, è, tra gli altri, l’utilizzo del package manager di Debian: apt-get (e più in basso nello stack applicativo, di dpkg); alcune volte realizzo un setup (in termini di pacchetti) su una particolare box Ubuntu che vorrei poter esportare su un’altra box. In altre parole, vorrei generare una lista di tutti i pacchetti installati e installarli, automaticamente, su un’altra macchina.

    dpkg offre questa possibilità. Cominciamo con la creazione dell’elenco dei pacchetti installati:

    dpkg --get-selections | grep -v deinstall > installed.txt

    Sulla macchina target, impostiamo la selezione dei pacchetti da installare e installiamo i pacchetti mancanti:

    dpkg --set-selections < installed.txt
    sudo dselect

    Finito!

  • Ubuntu: avviare X senza uno schermo

    Mi è capitato di dover gestire una macchina con Xubuntu (ma questa soluzione si applica a tutte le *Ubuntu) che doveva essere utilizzata da remoto (tramite TeamViewer) e senza uno schermo attaccato.

    Ubuntu, intelligentemente, se non trova uno schermo attaccato allo startup non esegue X. Se X non viene eseguito, tuttavia, Teamviewer non può partire. Come risolvere questo problema?

    Apriamo una shell di root e modifichiamo la configurazione di grub (nel file /etc/default/grub; una volta questo file era era /boot/menu/grub.lst). Modifichiamo l’opzione seguente aggiungendo ‘nomodeset’:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

    salviamo e riavviamo. Risultato raggiunto!

  • Creare un panorama “incollando” più foto tra di loro con Hugin

    Le foto ad alta risoluzione ed incollate fra loro mi hanno sempre affascinato ed incuriosito: come possono essere prodotte con una semplice fotocamera tascabile?
    Ebbene, dopo varie ricerche ed aver provato diversi software, sono arrivato allo zen della composizione di foto.
    Innanzitutto, partiamo dal prodotto finale. Quella che vedete qui sotto è una vista panoramica di quello che si può ammirare dalla torre Eiffel, a Parigi: ho ottenuto questa vista incollando tra loro 6 fotografie, ottenute con una fotocamera digitale comune, senza un treppiede e senza apparecchiatura specialistica.

    Il risultato è davvero spettacolare, per una risoluzione finale di 4122×1438. Veniamo ora alla teoria: la fotografia panoramica prevede di “incollare” tra loro più fotografie, scattate in sequenza e con angolature diverse (per esempio ruotando leggermente la posizione di scatto della fotografia). Esistono software (il migliore è Hugin) che permettono di incollare queste foto in modo semi-automatico: il punto chiave del processo, come potete immaginare, è trovare dei punti di connessione tra le foto, ovvero dei punti di controllo che rendano il processo di “incollatura” il più preciso possibile. Ovviamente, più sono i punti di controllo tra due foto, più preciso sarà il merge tra le foto scattate.

    Hugin automatizza e semplifica il processo: se non siete dei virtuosi della fotografia panoramica (come il sottoscritto), il procedimento per l’unione delle foto viene presentato con un comodo wizard che vi permette di inserire le immagini, validare i control point identificati automaticamente del programma e creare il vostro primo panorama.

    Segnalo anche alcuni utili tutorial di Hugin, che spiegano come scattare correttamente le fotografie in modo che siano pronte per creare un panorama perfetto; inoltre, i tutorial spiegano anche come fare il tuning delle varie opzioni che possiamo trovare nel programma, per creare delle foto panorama personalizzate.

    In definitiva, Hugin è davvero un ottimo programma, che permette di creare facilmente delle foto panorama sia ad utenti principianti che foto panorama personalizzate per utenti esperti.

  • Ubuntu: l’aggiornamento a 11.04 corrompe grub. Ecco come risolvere

    Il 28/04, incuriosito dalla nuova release di Ubuntu (11.04) ho subito aggiornato dalla versione 10.10 usando la funzionalità di aggiornamento integrata nel sistema.

    Tuttavia, con mia grande sorpresa, l’aggiornamento corrompe la configurazione di grub, lasciando il sistema in uno stato inavviabile (in particolare, il sistema si arresta sulla schermata di grub prima del boot); e sembra che sia un problema generalizzato! Non tutto è perduto: il problema deriva da un’errata configurazione di grub prodotta dalla procedura di aggiornamento, ma possiamo recuperare il sistema senza dover reinstallare. Per risolvere il problema, procediamo nel seguente modo:

    • Prendete un CD di Ubuntu che abbia la stessa architettura del sistema da recuperare (i386 o amd64; se non sapete quale scegliere, usate i386);
    • Avviate il sistema da LiveCD e aprite un terminale
    • Trovate la partizione contenente la /boot del sistema da recuperare (aiutatevi con fdisk -l) e montatela (ad es. sudo mount /dev/sda1 /media/linux)
    • Montiamo le directory su cui dobbiamo operare:

      sudo mount -B /dev /media/linux/dev
      sudo mount -B /dev/pts /media/linux/dev/pts
      sudo mount -B /proc /media/linux/proc
      sudo mount -B /sys /media/linux/sys

    • E rilocalizziamo il sistema sul sistema target da recuperare: sudo chroot /media/linux
    • A questo punto ripariamo la configurazione di grub:

      grub-install /dev/sda
      update-grub

    • Smontate il filesystem e riavviate: il vostro sistema si avvierà con la versione di Ubuntu appena aggiornata!
  • I componenti certificati per Ubuntu

    Ora, anche per Ubuntu, esistono componenti hardware certificati: li trovate nel catalogo Ubuntu-certified hardware.

    Prima di acquistare dei componenti per un nuovo PC, quindi, verificate sul catalogo. A quando i primi PC con lo sticker “Designed for Ubuntu”?

  • Linux: monitorare i consumi energetici

    Dopo aver parlato dei consumi energetici di Windows 7 e di come tenerli sotto controllo, vorrei oggi illustrarvi le potenzialità di PowerTOP, un utility per Linux (e Solaris) per monitorare i consumi energetici della Linux box su cui è installato. PowerTOP, infatti, analizza i programmi in esecuzione, i drivers e altre variabili (es. il polling del CD-ROM) per identificare i problemi (programmi, opzioni del kernel e non, etc.) che causano un consumo energetico eccessivo (in particolare, un numero eccessivo di wakeups della CPU che impediscono di entrare negli sleep states della CPU).

    Il programma è molto semplice da installare: lo trovate nei repositories Ubuntu e si può lanciare semplicemente da terminale. Una volta identificati eventuali problemi, il programma si offre inoltre di suggerire alcune soluzioni per risolverli. Da avere!