BSD-FAQ-it
Indietro |  | Avanti

# Capitolo 6. L'albero dei ports di FreeBSD

# 6.1. Aggiornare un package, utilizzare portupgrade

Abitualmente è sempre una buona idea rimuovere le vecchie versioni del software utilizzando uno dei metodi che abbiamo descritto in precedenza, ma, nei casi in cui si dispone di macchine in produzione come i servers internet, non è sempre possibile disinstallare un package o rimuovere un ports. FreeBSD, tra i diversi ports di cui dispone, include anche una applicazione denomintata portupgrade.

Il portupgrade è una utility di sistema che consente di tenere aggiornati all'ultima versione tutti ports installati sul sistema, procediamo ora con l'installazione di portupgrade digitando il seguente comando

    #cd /usr/ports/sysutils/portupgrade/
    #make install distclean

La sintassi del comando portupgrade è simile alla seguente

    [root@picard root]# portupgrade [-opzione] [nome del pacchetto da aggiornare]

Di seguito elenchiamo le varie opzioni a linea di comado per il comando portupgrade

    -a / --all               aggiorna tutti i pacchetti installati
    -h / --help              visualizza l'aiuto in linea
    -f / --force             forza l'aggiornamento di un pacchetto
    -F / --fetch-only        scarica solo i file della distribuzione
    -i / --interactive       prima di aggiornare chiede la conferma
    -p / --use-packages      utilizza i packages non i ports
    -PP/ --use-packages-only usa solo i packages
    -r / --recursive         aggiorna anche i pacchetti dipendenti
    -R / --upward-recursive

Vediamo ora come aggiornare un pacchetto presente sul sistema

    [root@picard root]# portupgrade ipcalc

Il portupgrade esegue la compilazione del nuovo package, in caso di errore completa il backup della vecchia versione, se tutto procede come previsto, disinstalla la vecchia versione del pacchetto ed installa la nuova, aggiorna il database dei packages e, per finire, effettua la procedura del make_clean.

Attenzione, portupgrade basa le sue scelte sul database dei packages che contiene tutte le informazioni relative ai pacchetti e alle varie dipendenze tra pacchetti, quindi, prima di utilizzare l'utility portupgrade è buona norma ripulire il database dei packages da eventuali errori utilizzando il seguente comando

    [root@picard root]# pkgdb -F

eseguendo il comando pkgdb -F avremo la possibilità di riparare in maniera interattiva il database dei packages. Un'altro utilizzo dell'utility portupgrade è

    [root@picard root]# portupgrade -FPPR nomedelpacchetto

oppure

    [root@picard root]# portupgrade --all

L'opzione --all ci darà la possibilità di aggiornare tutti i ports installati sul sistema. Per consentire un'aggiornamento ``controllato'' dei ports installati in un sistema in produzione è consigliabile utilizzare il comando

    [root@picard root]# portupgrade --all -i

Come abbiamo visto in precedenza, l'opzione -i consente di verificare in maniera interattiva i ports da aggiornate. Nel caso si dovesse ricorre con frequenza all'utilizzo del comando portupgrade è sempre una buona norma mantenere il database dei ports aggiornato grazie al comando

    [root@picard root]# portsdb -uU

La prima volta che utilizzeremo il comando portsdb verrà generato il file /usr/ports/INDEX.db, questo file è un database e può essere aggiornato ogni volta che verrà eseguita l'utility portsdb. E' buona norma utilizzare il comando portsdb solo dopo aver proceduto all'aggiornamento dell'albero dei ports via CVSup, la procedura del portsdb richiede diverso tempo per essere completata con successo. Molte utility installate con il portupgrade utilizzano il file INDEX.db che non è un semplice file di testo ma un database in formato Btree disegnato per consentire di effettuare delle ricerce su vaste basi dati

    # file /usr/ports/INDEX.db
    /usr/ports/INDEX.db: Berkeley DB 1.85/1.86 (Btree, version 3, native byte-order)

Per comodità si include uno script da inserire nelle procedure periodiche, lo script esegue l'aggiornamento dell'albero dei ports via CVSup e procede con la manutenzione della base dati

    #!/usr/local/bin/bash
    #
    # aggiorna i ports
    /usr/local/bin/cvsup -g -L 2 /usr/local/etc/cvsup/ports-supfile
    #
    # tiene pulita la base dati dei ports
    /usr/local/sbin/portsdb -uU
    #
    # EOF - Djspider8

utilizzando questo script possiamo programmare la nostra macchina FreeBSD per aggiornare, giornalmente, settimanalmente o mensilmente, l'albero dei ports. E' anche possibile verificare la necessità di aggiornare o meno un ports grazie al comando portversion

    # portversion -l "<"

La stessa verifica può essere effettuata utilizzando in modo intelligente l'utility di sistema pkg_version, infatti possiamo fare in modo di ottenere via e-mail un report dettagliato contenente l'elenco delle applicazioni da aggiornare

    # mkdir /etc/periodic/altre
    # ee /etc/periodic/altre/100.pkg_version.sh
    ........
    #!/usr/local/bin/bash
    #
    echo
    echo analizzo i pacchetti da aggiornare....
    echo
    /usr/sbin/pkg_version -vL\=
    #
    ........
    ........
    # chmode u+x,g+x,o+x /etc/periodic/altre/100.pkg_version.sh

a questo punto riprogrammiamo il crontab per eseguire questa procedura il sabato di ogni settimana alle ore 06:05

    # stampa il report dei pacchetti da aggiornare
    05      6       *       *       6       root    /etc/periodic/altre/100.pkg_version.sh

Di seguito un'altro esempio del comando portupgrade che è relativo all'aggiornamento del database MySQL, in questo caso, per aggiornare il server di database sarà necessario ``saltare'' l'aggiornamento delle basi dati che dovranno naturalmente rimanere inalterate

    # portupgrade mysql* -m 'OVERWRITE_DB=yes' mysql-server

Con la compilazione è l'installazione di portupgrade si è anche proceduto alla installazione di un'altro comodissimo programma di utilità denominato portsclean. Questa piccola e preziosa applicazione può essere utilizzata per ripulire tutte le directory temporanee che vengono generate automaticamente al momento della compilazione e dell'installazione dei ports. L'utility portsclean può rilevarsi particolarmente utile per gli utenti che non dispongono di unità a disco molto capienti

    # portsclean -C
    Cleaning out /usr/ports/*/*/work...
    Delete /usr/ports/www/links1/work
    Delete /usr/ports/textproc/xhtml/work
    Delete /usr/ports/textproc/sgmlformat/work
    Delete /usr/ports/textproc/sdocbook-xml/work
    Delete /usr/ports/textproc/scr2txt/work
    Delete /usr/ports/textproc/linuxdoc/work
    Delete /usr/ports/textproc/libxslt/work
    Delete /usr/ports/textproc/libxml2/work
    Delete /usr/ports/textproc/jade/work
    Delete /usr/ports/textproc/html/work
    Delete /usr/ports/textproc/dsssl-docbook-modular/work
    Delete /usr/ports/textproc/docproj/work
    Delete /usr/ports/textproc/docbook-xsl/work
    Delete /usr/ports/textproc/docbook-xml/work
    Delete /usr/ports/print/ghostscript-gnu/work
    Delete /usr/ports/graphics/scr2png/work
    Delete /usr/ports/graphics/peps/work
    Delete /usr/ports/graphics/netpbm/work
    Delete /usr/ports/graphics/jbigkit/work
    done.

Ulteriori riferimenti ed approfondimenti sono anche disponibili in lingua italiana e possono essere trovati nell'articolo Portupgrade istruzioni per l'uso, l'articolo originale in lingua inglese reperibile alla URLs http://www.freebsddiary.org/portupgrade.php.

Indietro | Partenza | Avanti
Note su FreeBSD | Risali | Programmare le attività