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

Vai alla navigazione Vai alla ricerca
m
Riga 1: Riga 1:
==Introduzione==
==Introduzione==


Qualche volta ci troviamo nella situazione di dover aggiornare una macchina con una connessione internet lenta o inesistente...
Qualche volta ci troviamo nella situazione di dover aggiornare una macchina con una connessione internet lenta...
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!
Riga 98: Riga 98:
La sintassi � la seguente:
La sintassi � la seguente:
<pre>
<pre>
apt-zip-list [--help] [--version] [--medium=mountpoint]  
apt-zip-list [--help] [--version] [--medium=mountpoint] [--aptgetaction=action] [--packages=package[,package...]] [--fix-broken] [--skip-mount] [--method=method] [--options=opt[,opt...]] [ --accept=accept[,accept...]] [ --reject=reject[,reject...]]
            [--aptgetaction=action] [--packages=package[,package...]]  
            [--fix-broken] [--skip-mount] [--method=method] [--options=opt[,opt...]]  
            [ --accept=accept[,accept...]] [ --reject=reject[,reject...]]


apt-zip-inst [--help] [--version] [--medium=mountpoint] [--aptgetaction=action]  
apt-zip-inst [--help] [--version] [--medium=mountpoint] [--aptgetaction=action] [--packages=package[,package...]] [--fix-broken] [--skip-mount]
            [--packages=package[,package...]] [--fix-broken] [--skip-mount]
</pre>
</pre>


Riga 162: Riga 158:
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 251: Riga 247:
===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===
===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]].
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==
1 487

contributi

Menu di navigazione