Repository 32bit  Forum
Repository 64bit  Wiki

Aggiornare Slackware con SWARET e SLAPT-GET

Da Slacky.eu.


work in progress - gianlucacherubini@mac.com

Indice

Introduzione

Gli utilizzatori di Debian vanno giustamente fieri del loro apt-get (e hanno ragione), un pò come quelli della RedHat con il Live-update, che consentono un aggiornamento efficace della distribuzione prelevando i pacchetti direttamente dai rispettivi mirror.

Per la slackware l’operazione è sempre stata un pò più ostica, si trattava spesso di compilare e reinstallare da zero.

Già da un pò con installpkg e upgradepkg le cose erano diventata un po’ più semplici, bastava avere i pacchetti su di un CD (ad esempio) e si poteva fare l’upgrade dei programmi.

Adesso le cose sono ulteriormente migliorate grazie a due progetti (io per lo meno ho preso in considerazione questi) molto simili, per l’upgrade di sistemi basati sul distribuzione Slackware e sui pacchetti tar.gz: sono SWARET e SLAPT-GET.

Nel tempo ho provato altri sistemi di aggiornamento ma li ho trovati più grezzi e meno funzionali, questo mi sembrano decisamente efficaci.

Cosa serve per una prova: un sistema con la slack connesso ad internet con installati i suddetti programmi.

SWARET

Slackware Pagckage Upgrade

Come detto in precedenza Swaret consente semplicemente di effettuare il download e l’upgrade dei pacchetti prelevandoli dai numerosi mirror slackware esistenti, elencati dentro il file swaret.conf.

Si può installare il pacchetto con installpkg:

root@glock:/usr/src# installpkg swaret-1.3.4-noarch-7.tgz  
Installing package swaret-1.3.4-noarch-7...  
PACKAGE DESCRIPTION: 
swaret: swaret (SlackWARE Tool) 
swaret: 
swaret: swaret Upgrades, Installs, Re-Installs, Downloads, Resumes,... 
swaret: Packages, Patches and Sources (with Build Scripts) and much more! 
swaret: swaret includes Dependency Support, which Tracks and Fixes missing 
swaret: Libraries. It uses several Slackware Linux Mirrors through  
swaret: http/ftp/rsync or a Local Repository. 
swaret: 
swaret: swaret is written and maintained by Luc Cottyn and Michael G. Manry. 
swaret: 
swaret: For more information, see http://www.swaret.org 
swaret: 
swaret: ! NEW CONFIGFILE ! 
swaret: YOU MUST EDIT /etc/swaret.conf.new! (man swaret.conf) 
swaret: Rename it to /etc/swaret.conf and start using swaret. 
swaret: 
swaret:      !!! Take a look to the Documentation Files !!! 
swaret:                 /usr/doc/swaret-1.3.4/ 
swaret:      Read the README File to know how swaret works! 
swaret: 
swaret: ! swaret FAQ can be called with: swaret --faq ! 
swaret: ! swaret HOW-TO can be called with: swaret --htus ! 
swaret: 
swaret: NOTE: If you want to UPGRADE your Slackware Linux System, 
swaret:       consult the F.A.Q. by using 'swaret --faq'. 
Executing install script for swaret-1.3.4-noarch-7...

Fatto ciò occorre rinominare ed eventualmente modificare il file di configurazione swaret.con.new in swaret.conf.

Il suo contenuto è abbastanza semplice da capire e consente di pilotare il comportamento del programma.

Questo sono le direttive più importanti, quasi tutte settate già di default (in grassetto quelle modificate e personalizzate):

slackware (partono dalla 8.1 in su). Nel caso in cui i pacchetti siano ad esempio su di un CDROM si può usare ROOT=file:/mnt/cdrom

  • REPOS_ROOT=Syntax: REPOS_ROOT=REPOSITORYNAME%PROTOCOL:URL, consente di specificare dei repository per Slackware Linux Packages. E’ possibile costruirsi il proprio repository dove depositare i packages che si vogliono rendere disponibili alla collettività, utilizzando swaret-tools. Il sito www.slacky.it mette a disposizione il suo, basta aggiungere in swaret.conf la direttiva: REPOS_ROOT=Slacky.it%http://www.slacky.it/download
  • RANDOMR=0: 0/1 per usare la lista dei mirror in modo random
  • EXCLUDE=kernel lilo swaret: consente di escludere dalla lista pacchetti che è meglio aggiornare a mano
  • DEPENDENCY=1: abilita il controllo delle dipendenze
  • DSEARCHLIB=1: consente di effettuare la ricerca per librerie mancanti
  • DEP_INSTALL=1: effettua l’installazione utilizzando il controllo delle dipendenze
  • DEP_UPGRADE=1: effettua l’upgrade utilizzando il controllo delle dipendenze
  • MD5CHECK=1: effettua l’il controllo dell’MD5
  • DESC=1: mostra la descrizione estesa dei pacchetti durante l’upgrade o l’installazione
  • OFFSET=40: modifica il numero di pacchetti per offset
  • LOG=1: effettua il log delle operazioni in LOG_FILE=/var/log/swaret
  • NIC=eth0: specifica il device da utilizzare per ricercare i pacchetti su internet. Nel caso in cui si utilizzi una ROOT locale occorre specificare NIC=lo.
  • TIMEOUT=35: specifica il timeout per le connessioni
  • RETRIES=5: indica il numero di tentativi di connessione al mirror
  • PASSIVE_FTP=1: abilita l’ftp passivo se necessario.
  • WGET_PROXY=http://proxy.some-domain-name.domain:HTTP_PROXY_PORT o RSYNC_PROXY=IP/Host:Port : consente di specificare un HTPP, FTP o RSYNC proxy per le nostre connessioni

Maggiori informazioni si trovano in how-to-use-swaret

La sintassi in breve è:

root@fly:~# swaret -h 
swaret 1.3.4 
Usage Command: swaret --ACTION [KEYWORD] [OPTION] 
--update 
--upgrade [KEYWORD]     [-a] 
--install [KEYWORD]     [-a|-p|-ap] 
--reinstall [KEYWORD]   [-a|-p|-ap] 
--remove KEYWORD        [-a] 
--get [KEYWORD]         [-a|-p|-ap|-s|-as] 
--dep [KEYWORD]         [-a] 
--resume                [-p|-s] 
--list                  [-p|-s|-i|-u|-n|-np] 
--search KEYWORD        [-p|-s|-i|-u|-n|-np] 
--show [KEYWORD]        [-p|-i] 
--changelog 
--exclude               [-on|-off|-gen] 
--set KEYWORD 
--libmaker 
--smirror 
--pgp                   [-i] 
--log                   [-t] 
--clearlog 
--purge                 [-s|-d #|-ds #|-w #|-ws #|-v] 
--config 
--faq 
--htus 
--manual                [-c] 
--help 
--morehelp 
--version 

Bisogna dire che ha molte opzioni, ma può essere di immediato utilizzo seguendo i passaggi sotto elencati:

  1. Usando il comando swaret –-update come primo, si ottiene la lista dei pacchetti e delle patch (aggiornamenti) disponibili;
  2. Una volta effettuato l’update possiamo listare i pacchetti con il comando swaret –-list e visualizzare un elenco diviso in pagine con tutti i pacchetti disponibili;
  3. Per effettuare un upgrade è sufficiente usare swaret –-upgrade KEYWORD dove la keyword è il nome del pacchetto (o una sua parte) che vogliamo aggiornare. Se swaret trova delle positività ed individua dei pacchetti ci chiede attraverso un prompt [Y/N] se vogliamo procedere all’upgrade;
  4. Per effettuare invece installazioni, la procedura è simile alla precedente solo che il comando da utilizzare è swaret –-install;
  5. Analogamente esiste il comando swaret –-remove per rimuovere il pacchetto installato.;
  6. Se si vuole solo effettuare il download del pacchetto e non la sua installazione si può usare swaret –-get. Tutti i pacchetti verranno depositati nella directory /var/swaret potranno essere manipolati con l’ausilio del programma pkgtool;
  7. Un’altra funzionalità importante consente di verificare le dipendenze: con swaret --dep –a, viene effettuato il controllo automatico delle dipendenze dei pacchetti.
  8. Se si vogliono avere informazioni dettagliate su di un pacchetto si può utilizzare swaret –show KEYWORD, ad esempio:
root@fly:~# swaret --show openssh -i 
swaret 1.3.4 

Please wait.....Description for openssh-3.7.1p2-i486-1: 
---------------------------------------------------------------------- 
ssh (Secure Shell) is a program for logging into a remote machine and 
for executing commands on a remote machine.  It is intended to replace 
rlogin and rsh, and provide secure encrypted communications between 
two untrusted hosts over an insecure network.  sshd (SSH Daemon) is 
the daemon program for ssh.  OpenSSH is based on the last free version 
of Tatu Ylonen's SSH, further enhanced and cleaned up by Aaron 
Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt, and 
Dug Song.  It has a homepage at http://www.openssh.com/ 

Ho provato Swaret con Slack 8.1 e 9.0/9.1 e mi è sembrato funzionale avendo anche il controllo delle dipendenze, che può ovviamente essere disattivato. Ci tenevo comunque a segnalare che l’upgrade del sistema è sempre un’operazione delicata specie se si cerca di upgradare dei software che implicano l’utilizzo di altri programmi che swaret non è in grado di aggiornare automaticamente.

Ad esempio su una Slack 9.1 se volete aggiornare Apache (alla 1.3.29) occorre anche aggiornare mod_ssl e PHP che sono disponibili sul sistema. In questo modo si ottiene un apache completamente aggiornato per cui:

swaret --upgrade apache  
swaret --upgrade mod_ssl 
swaret --upgrade php 
  

Il mio consiglio è sempre quello di provare il sistema di upgrade su un PC di appoggio con la stessa distribuzione. Se il tutto funziona e si rivela affidabile allora si può passare sui sistemi in produzione.

Io lo sto usando abbastanza, ma solo per quei software che non richiedono compilazioni particolari per cui preferisco ancora lavorare a mano.

Ad esempio ssh, ftp e bind, solo per citarne alcuni possono essere tranquillamente upgradati con swaret. Pensate che è addirittura possibile impostare una voce del cron che effettua l’update automatico, un pò come per le firme degli antivirus. Non so se sia una cosa buona, ma per programmi non troppo complessi o vitali direi che si potrebbe anche fare.

#crontab 
00 02 * * * /usr/sbin/swaret --set OFFSET=0 && /usr/sbin/swaret --update  && /usr/sbin/swaret --upgrade ssh -a 
&& /usr/sbin/swaret --set OFFSET=15 

Questo comando ad esempio ogni notte esegue un update per verificare la disponibilità di una nuova versione di ssh e se presente la installa automaticamente (-a). L’unica cosa da notare è l’impostazione dell’OFFSET (set di pacchetti listati) a zero e il flag –a che consentono a swaret di lavorare senza interruzione o senza porre domande.

Esempio di aggiornamento di Apache

root@fly:/var/log# swaret --upgrade apache-1.3.29-i486-1 
swaret 1.3.4 

Please wait.....Making a List of available Packages matching Keyword: apache-1.3.29-i486-1... 
New: apache-1.3.29-i486-1 (1651 kB) - Installed: apache-1.3.28-i486-2 

Upgrade apache-1.3.28-i486-2 to apache-1.3.29-i486-1? (y/n): [y] 
[ ftp://ftp.nluug.nl/pub/os/Linux/distr/slackware/slackware-current ] 
### Fetching apache-1.3.29-i486-1 (1651 kB)...  
--- 2 kB/1651 kB [TOTAL: 2 kB/1651 kB] ~ 0 kB/s
--- 2 kB/1651 kB [TOTAL: 2 kB/1651 kB] ~ 0 kB/s
--- 7 kB/1651 kB [TOTAL: 7 kB/1651 kB] ~ 5 kB/s
--- 14 kB/1651 kB [TOTAL: 14 kB/1651 kB] ~ 7 kB/s
--- 15 kB/1651 kB [TOTAL: 15 kB/1651 kB] ~ 1 kB/s
--- 31 kB/1651 kB [TOTAL: 31 kB/1651 kB] ~ 16 kB/s
--- 38 kB/1651 kB [TOTAL: 38 kB/1651 kB] ~ 

Nel caso in cui swaret rilevi che l’aggiornamento o la patch sono già presenti lo segnala e non effettua alcuna operazione:

root@fly:~# swaret --upgrade apache
swaret 1.3.4 
Please wait.....Making a List of available Packages matching Keyword: apache... 
Installed Package(s) matching Keyword 'apache' up-to-date! 

Aggiornamento di cdrtools

Se volessimo aggiornare i cdrtools presenti sul nostro sistema possiamo semplicemente utilizzare il comando swaret –upgrade in questo modo. Prima accertiamoci della presenza di un update disponibile e verifichiamone lo status sul nostro sistema:

root@glock:~# swaret --list |grep cdrtools          
cdrtools-2.00.3-i486-1 (778 kB) [Status: INSTALLED] 
cdrtools-2.01a27-i486-1sl (834 kB) (Slacky.it) [Status: NOT INSTALLED (Installed: cdrtools- 2.00.3-i486-1)] 

Dopo verificato che si tratta di un pacchetto NOT INSTALLED,possiamo procedere per installarne la nuova versione sul nostro sistema:

root@glock:~# swaret --upgrade cdrtools*     
swaret 1.6.1-3 

Listing available Packages matching Keyword: cdrtools*... 
New: cdrtools-2.01a27-i486-1sl (834 kB) (Slacky.it) - Installed: cdrtools-2.00.3-i486-1 

Upgrade cdrtools-2.00.3-i486-1 to cdrtools-2.01a27-i486-1sl? (Slacky.it) (y/n/A/Q): [y] 
[ http://www.slacky.it/download ] 
### Fetching cdrtools-2.01a27-i486-1sl (834 kB)...  
--- 834 kB/834 kB [TOTAL: 834 kB/834 kB] ~ 2 kB/s DONE! 
=> <MD5CHECK> MD5 for Package cdrtools-2.01a27-i486-1sl OK! 
=> cdrtools-2.01a27-i486-1sl has been saved in: /var/swaret/repos/Slacky.it! 
=> Upgrading cdrtools-2.00.3-i486-1 to cdrtools-2.01a27-i486-1sl... DONE! 
%%% Verifying Dependencies... Libraries resolved successfully! 

Ovviamente se abbiamo un pò di tempo e di banda possiamo anche effettuare l’aggiornamento totale del sistema.

root@glock:/usr/src# swaret --set OFFSET=0 && swaret --upgrade -a   

Io ho preso una slack 9.1 installata di fresco è ho provato a fare l’upgrade totale: il sistema si è aggiornato senza problemi, solo Apache mi ha dato un piccolo problema e ho dovuto reinstallare i moduli.

Gli aggiornamenti effettuati sono analizzabili consultando il file di log /var/log/swaret, che ci consente di capire quali operazioni sono state effettuate sul sistema.

Ad esempio la direttiva function_upgrade indica che è stato effettuato un upgrade verso una versione più recente mentre dependency_check mostra come sia stato necessario soddisfare una dipendenza con l’installazione di librerie aggiuntive.

Per chi volesse analizzare le operazioni di swaret è possibile consultare il relativo file di log:

root@fly:/var/log# tail -f swaret  
Mon Nov 10 17:16:58 AKST 2003: [ dependency_check() ] - 
%%% Verifying Dependencies... Libraries resolved sucessfully! 
Mon Nov 10 17:25:36 AKST 2003: [ GLOBAL ] - swaret --upgrade php      
Mon Nov 10 17:25:36 AKST 2003: [ function_upgrade() ] - Installed Package(s) matching Keyword 'php' up-to-date! 
Mon Nov 10 17:26:12 AKST 2003: [ GLOBAL ] - swaret --upgrade apache      
Mon Nov 10 17:26:13 AKST 2003: [ function_upgrade() ] - Installed Package(s) matching Keyword 'apache' up-to-date! 

root@glock:~# cdrecord --version 
Cdrecord-Clone 2.01a27 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Jörg Schilling 

Installazione di un nuovo package

Se volessimo installare un nuovo pacchetto possiamo usare il comando swaret --install, come nell’esempio mostrato che consente di installare l’ottimo tool di masterizzazione K3b, prelevando il pacchetto dal repositoru slacky.it.

root@glock:~# swaret --install k3b-0.11.7-i486-1sl 
swaret 1.6.1-3 

Listing available Packages matching Keyword: k3b-0.11.7-i486-1sl... 
k3b-0.11.7-i486-1sl (3366 kB) (Slacky.it)  

Install k3b-0.11.7-i486-1sl (Slacky.it)? (y/n/A/Q): [y] 
[ http://www.slacky.it/download ] 
### Fetching k3b-0.11.7-i486-1sl (3366 kB)...  
--- 3366 kB/3366 kB [TOTAL: 3366 kB/3366 kB] ~ 68 kB/s DONE! 
=> <MD5CHECK> MD5 for Package k3b-0.11.7-i486-1sl OK! 
=> k3b-0.11.7-i486-1sl has been saved in: /var/swaret/repos/Slacky.it! 
=> Installing k3b-0.11.7-i486-1sl... DONE! 

INFORMATION: Set DEPENDENCY to 0 in /etc/swaret.conf  to disable Dependency Support.

Costruzione di un Repository con swaret

Attraverso gli swaret-tools è possible costruire un proprio repository, utilizzando due programmi:

  • libmaker: Creates a file, libraries-$VERSION which will either be uploaded (presently by scp) to a webserver, or moved into a directory.
  • Repos: Creates a Slackware style directory, with FILELIST.txt, MANIFEST.bz2, PACKAGES.TXT, CHECKSUMS.md5, and libraries-current.
wget http://www.swaret.org/files/stable/swaret-tools-0.95.tar.gz 
tar xvfz swaret-tools-0.95.tar.gz 

Editare il file libmaker per poter predisporre i file necessari nella directory locale necessari a soddisfare le dipendenze dei pacchetti e poi modificare il file repos.conf inserendo i path del nostro repository sul nostro filesystem locale.

# libmaker Configuration 
VERSION=9.1 
URL_MIRROR=ftp://ftp.cerias.purdue.edu/pub/os/slackware/slackware-$VERSION 
MLOCATION=/var/slackware 
FINAL=/htdir/htdocs/swaret/ 

# repos.conf 
REPOSDIR=/htdir/htdocs/swaret 
REPOSTMP=/tmp/repos 
QUIET=1 
 

A questo punto eseguire ./install

Per creare il repository digitare:

root@glock:/usr/src/swaret-tools-0.95# libmaker 
Uncompressing MANIFEST-main, MANIFEST-extra, MANIFEST-patches. 
Pass 1: Detecting package and library names... 
Pass 2: Attaching package names to libraries 
Progress: 
100%/100%No changes to libraries file 

A questo punto si possono copiare i package nella directory scelta (nel nostro caso /htdir/htdocs/swaret) ed eseguire ad ogni modifica il comando repos:

root@glock:/htdir/htdocs/swaret# repos  
Creating MANIFEST.bz2, PACKAGES.TXT & libraries-repository 
Creating FILELIST.txt 
Creating CHECKSUMS.md5 
Cleaning up temporary directory 
 

A questo punto il nostro sistema, purché accessibile, potrà essere usato come repository per effettuare l’aggiornamento di sistemi remoti, specificando in swaret.conf la direttiva:

Syntax: REPOS_ROOT=REPOSITORYNAME%PROTOCOL:URL 

Da un altro sistema, che ipotizziamo voler aggiornare impostiamo in swaret.conf

REPOS_ROOT=netlink.it%http://www.netlink.it/swaret 

Possiamo ad esempio provare ad aggiornare l’antivirus:

root@server2:~# swaret --list |grep clam 
clamav-0.68.1-i486-1sl (1800 kB) (netlink.it) [Status: NOT INSTALLED] 

root@server2:~# swaret --install clamav  
swaret 1.6.1-3 

Listing available Packages matching Keyword: clamav... 
clamav-0.68.1-i486-1sl (1800 kB) (netlink.it)  

Install clamav-0.68.1-i486-1sl (netlink.it)? (y/n/A/Q): [y] 
[ http://www.netlink.it/swaret ] 
### Fetching clamav-0.68.1-i486-1sl (1800 kB)...  
--- 1800 kB/1800 kB [TOTAL: 1800 kB/1800 kB] ~ 4 kB/s DONE! 
=> <MD5CHECK> MD5 for Package clamav-0.68.1-i486-1sl OK! 
=> clamav-0.68.1-i486-1sl has been saved in: /var/swaret/repos/netlink.it! 
=> Installing clamav-0.68.1-i486-1sl... DONE! 

INFORMATION: Set DEPENDENCY to 0 in /etc/swaret.conf to disable Dependency Support. 
%%% Verifying Dependencies... Libraries resolved successfully! 

Il nostro pacchetto verrà scaricato dal nostro repository di prova e aggiornato sul nostro sistema.

Si tratta solo di un esempio, non ho repository disponibili da offrire (mi spiace), vi consiglio comunque quello di slacky.it, è valido e ben aggiornato:

REPOS_ROOT=Slacky.it%http://www.slacky.it/download 

Autore: Paolo Pavan

Strumenti personali
Namespace

Varianti