Apt-zip: aggiornamenti senza una connessione veloce: differenze tra le versioni

Riga 1: Riga 1:
==Introduzione==
==Introduzione==


Qualche volta ci troviamo nella situazione di dover aggiornare una macchina con una connessione internet lenta...
Qualche volta ci troviamo nella situazione di dover aggiornare una macchina con una connessione internet lenta o inesistente...
Alcune volte viene suggerito [[Debmirror: creiamo un mirror Debian | Debmirror]] (soluzione che reputo sovradimensionata e dispendiosa), altre viene suggerito il download del primo DVD o dei primi 2-3 CD di Sarge (ma per quanto riguarda sid, non esiste niente del genere)...
Alcune volte viene suggerito [[Debmirror: creiamo un mirror Debian | Debmirror]] (soluzione che reputo sovradimensionata e dispendiosa), altre viene suggerito il download del primo DVD o dei primi 2-3 CD di Sarge (ma per quanto riguarda sid, non esiste niente del genere)...
Cos� ho pensato di organizzare qualche appunto che avevo su apt-zip, un comodo tool che ci viene in aiuto proprio in questi casi!
Così ho pensato di organizzare qualche appunto che avevo su apt-zip, un comodo tool che ci viene in aiuto proprio in questi casi!
Vedremo come utilizzarlo su computer connessi ad internet con una connessione lenta...
Vedremo come utilizzarlo su computer connessi ad internet con una connessione lenta...


==Installazione==
==Installazione==


L'installazione semplicissima:
L'installazione è semplicissima:
<pre>
<pre>
# apt-get install apt-zip
# apt-get install apt-zip
Riga 16: Riga 16:
==Configurazione==
==Configurazione==


Il file di configurazione '''/etc/apt/apt-zip.conf''' e contiene alcuni valori di defalut utilizzati dai due comandi di apt-zip.
Il file di configurazione è '''/etc/apt/apt-zip.conf''' e contiene alcuni valori di defalut utilizzati dai due comandi di apt-zip.
Ecco quello di default:
Ecco quello di default:
<pre>
<pre>
Riga 55: Riga 55:
'''MEDIUM''' e '''DEFAULT_APTGETACTION'''
'''MEDIUM''' e '''DEFAULT_APTGETACTION'''


'''MEDIUM''' indica il path della periferica removibile che verr� utilizzata (io l'ho modificata in /mnt/pen, il mountpoint della mia pennina usb);<br/>
'''MEDIUM''' indica il path della periferica removibile che verrà utilizzata (io l'ho modificata in /mnt/pen, il mountpoint della mia pennina usb);<br/>
'''DEFAULT_APTGETACTION''' l'azione di default da apt-get (a meno che non sia indicata una lista di pacchetti od un'altra azione), quella di default esegue un aggiornamento tramite dselect.
'''DEFAULT_APTGETACTION''' l'azione di default da apt-get (a meno che non sia indicata una lista di pacchetti od un'altra azione), quella di default esegue un aggiornamento tramite dselect.


Normalmente solo '''MEDIUM''' viene modificato, in quanto le opzioni di default sono pi� che corrette per qualsiasi utilizzo.
Normalmente solo '''MEDIUM''' viene modificato, in quanto le opzioni di default sono più che corrette per qualsiasi utilizzo.


==Preparazione del Sistema==
==Preparazione del Sistema==


Ora, prima di passare all'analisi del programma ed al suo utilizzo, prepariamo il sistema per usare apt-zip.
Ora, prima di passare all'analisi del programma ed al suo utilizzo, prepariamo il sistema per usare apt-zip.
Normalmente necessario un disco removibile (penna usb, disco usb, uno ZIP o altro) ma possibile, con alcuni accorgimenti, esportare i due file creati da apt-zip tramite un floppy od una mail, e poi creare in un'altra sede un cd od un dvd con i pacchetti scaricati.
Normalmente è necessario un disco removibile (penna usb, disco usb, uno ZIP o altro) ma è possibile, con alcuni accorgimenti, esportare i due file creati da apt-zip tramite un floppy od una mail, e poi creare in un'altra sede un cd od un dvd con i pacchetti scaricati.


===Supporto Removibile===
===Supporto Removibile===
Nel caso si disponga di un supporto removibile consigliato modificare il file /etc/fstab aggiungendo la seguente riga (riferita al dispositivo):
Nel caso si disponga di un supporto removibile è consigliato modificare il file /etc/fstab aggiungendo la seguente riga (riferita al dispositivo):
<pre>
<pre>
mountpoint device filesystem options 0 0
mountpoint device filesystem options 0 0
Riga 73: Riga 73:
per esempio (nel caso di una penna usb)
per esempio (nel caso di una penna usb)
<pre>
<pre>
/mnt/pen /dev/sda1 vfat rw,users,umask=000,quiet 0 0
/dev/sda1 /mnt/pen vfat rw,users,umask=000,quiet 0 0
</pre>
</pre>


Riga 82: Riga 82:
</pre>
</pre>


Inoltre, se non presente nel sistema, necessario creare la directory indicata nel mountpoint (nell'esempio precedente /mnt/pen ).
Inoltre, se non presente nel sistema, è necessario creare la directory indicata nel mountpoint (nell'esempio precedente /mnt/pen ).


===In una directory locale===
===In una directory locale===
Riga 90: Riga 90:
==Sintassi ed Opzioni==
==Sintassi ed Opzioni==


Apt-zip composto da due eseguibili:
Apt-zip è composto da due eseguibili:
'''apt-zip-list''' e '''apt-zip-inst'''
'''apt-zip-list''' e '''apt-zip-inst'''


; apt-zip-list : ha il compito di generare uno script (ed un file contenente le opzioni per l'installazione dei pacchetti che verranno scaricati) per il download dei pacchetti da una qualsiasi macchina Linux (con un trucchetto possibile eseguire il download anche da macchine con un sistema operativo diverso, purch� con wget installato).<br/>
; apt-zip-list : ha il compito di generare uno script (ed un file contenente le opzioni per l'installazione dei pacchetti che verranno scaricati) per il download dei pacchetti da una qualsiasi macchina Linux (con un trucchetto è possibile eseguire il download anche da macchine con un sistema operativo diverso, purchè con wget installato).<br/>
; apt-zip-inst : ha il compito di installare i file scaricati (vedremo in seguito come).
; apt-zip-inst : ha il compito di installare i file scaricati (vedremo in seguito come).


La sintassi la seguente:
La sintassi è la seguente:
<pre>
<pre>
apt-zip-list [--help] [--version] [--medium=mountpoint]  
apt-zip-list [--help] [--version] [--medium=mountpoint]  
Riga 134: Riga 134:


===Aggiornare il sistema===
===Aggiornare il sistema===
forse la pratica pi� diffusa...abbiamo a disposizione tre opzioni:
forse è la pratica più diffusa...abbiamo a disposizione tre opzioni:


====dselect-upgrade====
====dselect-upgrade====
Riga 143: Riga 143:


e lanciando l'aggiornamento, verranno scaricati gli archivi con le liste dei pacchetti aggiornati, che verranno processati da dselect... inoltre si potranno anche selezionare i pacchetti che si vorrebbero installare (in pratica si usa normalmente il tool dselect, avendo cura di non selezionare l'opzione di installare i pacchetti, ma uscendo dal programma)...
e lanciando l'aggiornamento, verranno scaricati gli archivi con le liste dei pacchetti aggiornati, che verranno processati da dselect... inoltre si potranno anche selezionare i pacchetti che si vorrebbero installare (in pratica si usa normalmente il tool dselect, avendo cura di non selezionare l'opzione di installare i pacchetti, ma uscendo dal programma)...
Una volta fatto, sufficiente lanciare il seguente comando per creare i due script necessari per scaricare, da un altro computer, i pacchetti:
Una volta fatto, è sufficiente lanciare il seguente comando per creare i due script necessari per scaricare, da un altro computer, i pacchetti:
<pre>
<pre>
# apt-zip-list --aptgetaction=dselect-upgrade --medium=/mnt/point
# apt-zip-list --aptgetaction=dselect-upgrade --medium=/mnt/point
</pre>
</pre>


dove '''/mnt/point''' rappresenta il punto di mount del dispositivo; se si tratta di una directory normale, invece, il comando sar�
dove '''/mnt/point''' rappresenta il punto di mount del dispositivo; se si tratta di una directory normale, invece, il comando sarà
<pre>
<pre>
# apt-zip-list --aptgetaction=dselect-upgrade --skip-mount --medium=/mnt/point
# apt-zip-list --aptgetaction=dselect-upgrade --skip-mount --medium=/mnt/point
Riga 155: Riga 155:


====upgrade====
====upgrade====
verr� generata la lista dei pacchetti da scaricare per eseguire un
verrà generata la lista dei pacchetti da scaricare per eseguire un
<pre>
<pre>
# apt-get upgrade
# apt-get upgrade
</pre>
</pre>


il comando per fare questo
il comando per fare questo è
<pre>
<pre>
# apt-zip-list --aptgetaction=upgrade --medium/mnt/point
# apt-zip-list --aptgetaction=upgrade --medium=/mnt/point
</pre>
</pre>
nel caso di un supporto removibile, o
nel caso di un supporto removibile, o
Riga 172: Riga 172:


====dist-upgrade====
====dist-upgrade====
in questo caso, verr� generata la lista dei pacchetti da scaricare per completare il comando
in questo caso, verrà generata la lista dei pacchetti da scaricare per completare il comando
<pre>
<pre>
# apt-get dist-upgrade
# apt-get dist-upgrade
</pre>
</pre>


il comando per fare questo
il comando per fare questo è
<pre>
<pre>
# apt-zip-list --aptgetaction=dist-upgrade --medium/mnt/point
# apt-zip-list --aptgetaction=dist-upgrade --medium/mnt/point
Riga 189: Riga 189:


===Installare i pacchetti mancanti===
===Installare i pacchetti mancanti===
in questo caso, possibile creare la lista di pacchetti necessari per l'installazione di un programma/pacchetto e per soddisfare le sue dipendenze...
in questo caso, è possibile creare la lista di pacchetti necessari per l'installazione di un programma/pacchetto e per soddisfare le sue dipendenze...
il comando
il comando è
<pre>
<pre>
# apt-zip-list --packages=pacchetto,pacchetto1,pacchetto2 --medium=/mnt/point
# apt-zip-list --packages=pacchetto,pacchetto1,pacchetto2 --medium=/mnt/point
Riga 199: Riga 199:
</pre>
</pre>
nel caso di una directory del filesystem...
nel caso di una directory del filesystem...
dove pacchetto,pacchetto1,pacchetto2 la lista dei pacchetti da installare, separati da una virgola...
dove pacchetto,pacchetto1,pacchetto2 è la lista dei pacchetti da installare, separati da una virgola...


Come potete vedere, l'utilizzo veramente semplice ed intuitivo...
Come potete vedere, l'utilizzo è veramente semplice ed intuitivo...




Riga 211: Riga 211:


'''fetch-script-wget-nomemacchina'''
'''fetch-script-wget-nomemacchina'''
che si occuper� di scaricare i pacchetti, di controllarne l'md5 (cos� da evitare i problemi derivanti da una possibile (remotamente) corruzione dei file)
che si occuperà di scaricare i pacchetti, di controllarne l'md5 (così da evitare i problemi derivanti da una possibile (remotamente) corruzione dei file)


In parole povere, sar� semplice, sulla macchina da cui si possono scaricare i pacchetti, lanciare il secondo script:
In parole povere, sarà semplice, sulla macchina da cui si possono scaricare i pacchetti, lanciare il secondo script:
<pre>
<pre>
$ ./fetch-script-wget-nomemacchina
$ ./fetch-script-wget-nomemacchina
</pre>
</pre>


cos� verranno scaricati i pacchetti contenuti nella lista...
così verranno scaricati i pacchetti contenuti nella lista...


Se non si dispone di una shell dove eseguire lo script (se la macchina windows, per esempio, anche se una visitina a [1] sarebbe indicata), possibile scaricare ugualmente i pacchetti...
Se non si dispone di una shell dove eseguire lo script (se la macchina è windows, per esempio, anche se una visitina a [1] sarebbe indicata), è possibile scaricare ugualmente i pacchetti...
sufficiente, infatti, lanciare questo comando:
È sufficiente, infatti, lanciare questo comando:
<pre>
<pre>
$ cat fetch-script-wget-maxer | egrep "://" | cut -d " " -f 1 > lista.txt
$ cat fetch-script-wget-maxer | egrep "://" | cut -d " " -f 1 > lista.txt
Riga 227: Riga 227:


per ottenere una lista 'normale' di file, utilizzabile da wget o da un normale programma per il download di file dalla rete...
per ottenere una lista 'normale' di file, utilizzabile da wget o da un normale programma per il download di file dalla rete...
Se si usa wget (Disponibile anche per windows [2]) sufficiente un
Se si usa wget (Disponibile anche per windows [2]) è sufficiente un
<pre>
<pre>
$ wget -i lista.txt
$ wget -i lista.txt
Riga 237: Riga 237:
==Installazione dei pacchetti==
==Installazione dei pacchetti==


Una volta terminato, possibile installare i pacchetti con il comando
Una volta terminato, è possibile installare i pacchetti con il comando
<pre>
<pre>
# apt-zip-int --medium=/mnt/point
# apt-zip-int --medium=/mnt/point
</pre>
</pre>


(ricorod che la direttiva '''--medium''' pu� essere omessa se presente nel file di configurazione di apt-zip)
(ricordo che la direttiva '''--medium''' può essere omessa se presente nel file di configurazione di apt-zip)
aggiungendo, eventualmente, '''--skip-mount''' se si tratta di una directory locale...
aggiungendo, eventualmente, '''--skip-mount''' se si tratta di una directory locale...


==Nessuna Connessione ad Internet==
==Nessuna Connessione ad Internet==
In questa sezione vedremo come poter usare apt-zip in casi di totale assenza di connessione ad Internet. Premetto che la cosa abbastanza macchinosa, e richiede due accessi al computer provvisto di connessione.
In questa sezione vedremo come poter usare apt-zip in casi di totale assenza di connessione ad Internet. Premetto che la cosa è abbastanza macchinosa, e richiede due accessi al computer provvisto di connessione.


===L'idea===
===L'idea===
L'idea , fondamentalmente, semplice: ''inganneremo'' apt creando sulla nostra macchina un mirror dei repository da cui vorremmo attingere i pacchetti. Il mirror, per�, sar� parziale/fasullo, in quanto conterr� solo i file relativi ai pacchetti contenuti nel repository. Sar� necessario utilizzare Apache, in quanto apt-zip non inserisce nella lista i pacchetti non raggiungibili tramite una connessione (ad esempio quelli su disco..).
L'idea è, fondamentalmente, semplice: ''inganneremo'' apt creando sulla nostra macchina un mirror dei repository da cui vorremmo attingere i pacchetti. Il mirror, però, sarà parziale/fasullo, in quanto conterrà solo i file relativi ai pacchetti contenuti nel repository. Sarà necessario utilizzare Apache, in quanto apt-zip non inserisce nella lista i pacchetti non raggiungibili tramite una connessione (ad esempio quelli su disco..).


===Configurazione di Apache===
È sufficiente installare apache:
<pre>
# apt-get install apache
</pre>
Per una guida più approfondita a riguardo, consiglio la lettura di: [[LAMP: Linux, Apache, MySQL e PHP]].


===Configurazione di Apache===
La configurazione di default di Apache utilizza come directory principale di lavoro '''/var/www/''', che verrà usata anche da noi per creare i nostri repository ''fittizzi''!
 
Apache si ''muove'' come l'utente '''www-data''', quindi dovremo sempre preoccuparci di rendere i dati accessibili a questo utente, in modo da non ricevere errori di tipo ''403'', indicanti una mancanza di permessi.


===La struttura delle Directory===
===La struttura delle Directory===
Prendiamo come esempio il repository '''Nerim''', contenente software come mplayer, w32codecs, ... molto utili per la visualizzazione di filmati.
Prima di tutto, rechiamoci sul sito ufficiale del repository (http://debian.video.free.fr/), così da vedere come è strutturato.
Prendiamo in analisi i repository per Sarge:
<pre>
deb http://ftp.nerim.net/debian-marillat/ sarge main
</pre>
come descritto nella guida [[I repository ed il loro utilizzo]], in questo caso i file che descrivono il contenuto del repository si trovano in '''http://ftp.nerim.net/debian-marillat/dists/sarge/main/''', in particolare nella sottodirectory '''binary-i386'''.
Procediamo, quindi, a ricreare una struttura simile in '''/var/www/''':
<pre>
# mkdir /var/www/marillat
# chown user:www-data $_
# chmod g+s $_
$ cd /var/www/marillat
$ mkdir -p dists/sarge/main/binary-i386/
$ cd $_
</pre>
in questo caso, '''user''' rappresenta l'utente che normalmente utilizziamo, mentre '''$_''' ci permette di riutilizzare il parametro utilizzato nel comando precedente, facendoci risparmiare qualche carattere ([[Bash  tips]] per maggiori informazioni).
La struttura è stata creata, non ci resta che recuperare i file contenuti in quella directory: ''Packages.gz'' e ''Release''.
Una volta scaricati, copiamoli nella directory creata:
<pre>
$ cp Packages.gz Releasee /var/www/marillat/dists/sarge/main/binary-i386/
</pre>


===Modifica di sources.list===
===Modifica di sources.list===
Siamo pronti a modificare il file '''/etc/apt/sources.list''' in modo da utilizzare il repository appena creato.
Nel nostro caso di esempio, quindi, la riga da aggiungere sarà la seguente:
<pre>
deb http://localhost/arillat/ sarge main
</pre>
Una volta terminata la modifica, aggiorniamo il database dei pacchetti disponibili con un
<pre>
# apt-get update
</pre>


===Creazione della lista di pacchetti===
===Creazione della lista di pacchetti===
Ritornando al nostro ragionamento, se tutto funziona come previsto, la richiesta di installazione di un pacchetto dovrebbe ovviamente fallire (perchè non presente realmente nel repository), però dovrebbe avere una corrispondenza con l'url reale del pacchetto...
Un esempio vale più di mille parole: proviamo ad installare il pacchetto '''w32codecs''':
<pre>
# apt-get install w32codecs
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  w32codecs
0 upgraded, 1 newly installed, 0 to remove and 313 not upgraded.
Need to get 13.2MB of archives.
After unpacking 31.9MB of additional disk space will be used.
Err http://localhost sarge/main w32codecs 1:20050412-0.0
  404 Not Found
Failed to fetch http://localhost/marillat/pool/main/w/w32codecs/w32codecs_20050412-0.0_i386.deb  404 Not Found
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
</pre>
come si può vedere, il pacchetto non viene trovato... se sostituiamo a '''localhost/marillat''' '''ftp.nerim.net/debian-marillat''' e proviamo a scaricare il pacchetto da una macchina connessa alla rete, vedremo che effettivamente l'url è corretto.
A questo punto è banare l'utilizzo di ''apt-zip-list'' per la generazione della lista di pacchetti da installare. Procediamo con il nostro esempio, e chiediamo ad apt-zip di creare lo script per scaricare il pacchetto '''w32codecs''':
<pre>
$ apt-zip-list --packages=w32codecs --skip-mount --medium=/path/della/directory/
</pre>


===Conversione dello script===
===Conversione dello script===
Lo script che abbiamo ottenuto, però, contiene dei riferimenti al mirror ''fittizzio'', che devono essere convertiti in url corrette, riferite alla posizione reale del repository.
Per velocizzare questa conversione, ci faremo aiutare da '''sed''':
<pre>
$ sed  -e 's/localhost\/marillat/ftp.nerim.net\/debian-marillat/' \
    fetch-script-wget-knio > fetch-script-wget-knio-url
</pre>


il file '''fetch-script-wget-knio-url''' permetterà di scaricare correttamente i pacchetti.


==Conclusione==
==Conclusione==


L'utilizzo di questa utility veramente semplice, soprattutto rispetto alle innumerevoli comodit� che offre...
L'utilizzo di questa utility è veramente semplice, soprattutto rispetto alle innumerevoli comodità che offre...
Personalmente uso apt-zip con un Hard Disk da 10Gb come supporto removibile, dove sono presenti delle directory per ogni computer che necessita di aggiornamenti/installazioni, cos� da avere tutto abbastanza separato ed ordinato...
Personalmente uso apt-zip con un Hard Disk da 10Gb come supporto removibile, dove sono presenti delle directory per ogni computer che necessita di aggiornamenti/installazioni, così da avere tutto abbastanza separato ed ordinato...




4

contributi