Copiare una repository di Debian e Ubuntu

Da Faber Libertatis.

Indice della pagina

Cos'è una repository?

Una repository è un archivio ordinato di pacchetti software. Per pacchetto software si intende il particolare modo in cui una distribuzione di Linux distribuisce il software. In genere un pacchetto è facilmente spiegabile con un archivio compresso contenente i file che si vogliono distribuire (programmi, librerie, documenti, file di configurazione etc), le istruzioni per la configurazione automatica o guidata del software che contiene e altre informazioni utili al suo utilizzo e installazione (da quali altri pacchetti dipende, con quali confligge, con quali conviene che venga installato etc).

Debian e Ubuntu usano pacchetti di tipo deb ma organizzano le loro repository in modo logicamente diverso pur aderendo ad uno standard comune.

In genere un repository si presenta come un sito Web navigabile con un browser o con un client ftp ma se ne può fare anche una copia in un disco fisso interno o portatile.

I vantaggi di avere una copia del repository

Una copia portatile o locale di un repository può essere utile per i seguenti motivi:

  • installare o aggiornare velocemente il software di più sistemi senza dovere scaricare ogni volta i pacchetti dalla rete internet. A volte l'accesso alla rete Internet è assente o troppo lento;
  • gestire più installazioni e aggiornamenti in una stessa rete locale a partire da una repository locale la quale è l'unica che si aggiorna direttamente dalla rete, riducendo quindi lo scarico dei pacchetti ad una sola copia per tutta la rete, gli altri PC in rete potranno utilizzare i pacchetti scaricati nella repository locale.

Nel primo caso conviene disporre di un disco fisso portatile sufficientemente capiente (almeno 25 GByte per repository). Nel secondo invece conviene utilizzare un disco fisso interno, naturalmente con lo spazio sufficiente; a questo si abbinerà un sito web locale per facilitare lo scarico dei file da PC in rete.

La classificazione dei package in una repository

Nelle repository i package sono organizzati una struttura a directory annidate che rispetta la classificazione dei diversi package. Si possono infatti distinguere i package sulla base dei seguenti aspetti:

  • binario o sorgente: nel primo caso si tratta di una pacchetto con del software già compilato per una specifica architettura (Intel a 32 bit, Intel a 64 bit, AMD a 64 bit etc), nel secondo di un pacchetto contenente il software che compilato ha generato i corrispondenti pacchetti binari. Il pacchetto sorgente è multi-piattaforma ma in genere serve solo se si necessità ricompilare il software fornito dalla distribuzione o dalla comunità dei mantainer di pacchetti; per questa ragione in genere una repository locale non necessità dei pacchetti sorgente.
  • l'architettura: la distinzione per architettura è valida solo per i pacchetti binari, ma è fondamentale perchè assicura che il software che scarichiamo si possa installare e funzione sul PC in nostro possesso. In genere si scarica solo i pacchetti dell'archiettura i386, la più comune.
  • la distribuzione: naturalmente distribuzioni Linux diverse usano pacchetti diversi, ma nella terminologia delle repository Debian e Ubuntu per distribuzione si intende la "versione", ad esempio gutsy, hardy e intrepid per Ubuntu, per Debian si possono usare i soprannomi delle versioni, quindi etch, lenny e sid per esempio, oppure il loro stato, stable, testing e unstable. A loro volta queste distribuzione possono essere ulteriormente diversificate, ad esempio in hardy-updates, hardy-security oppure lenny/updates etc, per distinguere gli aggiornamenti di sicurezza dai pacchetti rilasciati originariamente con la distribuzione.
  • la sezione o componente: i pacchetti di una distribuzione sono poi suddivisi per il tipo di supporto e la licenza di utilizzo. In Ubuntu si identificano le sezioni main, restricted, universe e multiverse. Invece Debian ha le sezioni main, contrib e non-free. Altre repository di terze parti possono usare altre nomenclature come ad esempio medibuntu che usa le sezioni free e non-free.

La configurazione di APT

APT è lo strumento base con cui un sistema Debian e Ubuntu gestisce i pacchetti necessari per l'installazione del software e degli aggiornamenti. Per poter reperire i pacchetti è necessario fornire ad APT le informazioni su quali pacchetti scaricare e da dove, cioè configurare le sorgenti software. Per farlo si possono usare gli strumenti grafici Synaptic e Adept, oppure digitare direttamente il file di configurazione /etc/apt/sources.list. Quest'ultimo metodo è da preferire per rapidità e flessibilità.

In genere conviene partire con un file /etc/apt/sources.list il più compatto e lineare possibile. Rinominare dunque quello che viene fornito con l'installazione (in Debian eliminare il sudo dai comandi ed eseguirli come root):

$ sudo mv /etc/apt/sources.list /etc/apt/sources.list-`date +%Y%m%d`

Creare un nuovo file con il seguente comando (sostituire gedit con l'editor preferito):

$ sudo gedit /etc/apt/sources.list

Per Ubuntu, il contenuto del nuovo file può essere ad esempio:

deb http://it.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb http://it.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb http://packages.medibuntu.org/ hardy free non-free

Per Debian, il contenuto del nuovo file può essere invece:

deb http://ftp.it.debian.org/debian lenny main contrib non-free
deb http://security.debian.org/debian lenny/updates main contrib non-free

La struttura di queste righe è la seguente:

deb uri distribuzione [componente ...]

Il tag deb sta ad intentificare che si sta definendo un archivio di pacchetti binari e non sorgente. In questo secondo capo si usa il tag deb-src.

Il descrittore uri corrisponde all'URI di dove si trova la radice della repository. In genere si tratta dell'URI di un sito Web localizzato sulla base del proprio paese d'origine (da questo l'uso nell'esempio del codice ISO dell'Italia per indicare di usare un archivio su di un server in Italia). Visitando questo URI si scopre che al suo interno si devono poter trovare almeno le sotto-cartelle dists e pool. Nella prima cartella si trovano organizzate in sotto-cartelle le stesse suddivisioni per architettura, distribuzione e sezione sopra descritte, i principali file presenti al suo interno sono le liste dei package disponibili. Nella directory di pool si trovano invece, stavolta organizzati per sezione e lettera iniziale, i pacchetti veri e propri.

Il descrittore distribuzione prende il nome, come si è detto di una sotto-cartella della locazione uri/dists.

Dei descrittori componente possono esservene più d'uno e si ritrovano sia al disotto della cartella uri/dists/distribuzione che della cartella uri/pool.

Per assicurarsi che le righe inserite siano corrette, eseguire una volta collegati ad internet il seguente comando:

$ sudo apt-get update

Nel caso apparissero degli errori di file non trovati, verificare che si sia digitato tutto correttamente, anche percorrendo le cartelle della repository sul Web e confrondandolo con quanto il programma apt-get tenta di scaricare.

Strumenti per copiare le repository

Uno strumento di copia di una repository si dice che ne fa un mirror, cioè scarica solo i file che ci interessa ricostruendo correttamente le directory e i file con la lista dei pacchetti disponibili. Inoltre ha il vantaggio, in presenza dell'aggiornamento di una repository già scaricata, di scaricare solo i pacchetti nuovi aggiuntisi nel corso del tempo, evitando quindi di dover scaricare tutto ogni volta che si vuole una copia aggiornata.

Al fine di agevolare la copia in locale di una repository sono disponibili due diversi strumenti con caratteristiche differenti:

  • debmirror: fornito dal pacchetto debmirror, questo programma mi ha a volto causato dei problemi, ad esempio scaricando solo parzialmente i pacchetti richiesti, inoltre richiede una lunga serie di parametri non sempre facili da ricordare. Inoltre non è efficace nello scaricare molti pacchetti velocemente perchè li scarica uno ad uno non sfruttando quindi appieno la velocità della propria connessione. Detto questo lo sconsiglio sebbene abbia un utilizzo forse più immediato dell'atro strumento qui descritto;
  • apt-mirror: fornito dal pacchetto apt-mirror, svolge benissimo il suo lavoro eseguendo più scaricamenti contemporaneamente (in maniera predefinita 20 pacchetti contemporaneamente). Inoltre ha un file di configurazione, quindi una volta impostato si può agevolmente eseguire più aggiornamenti della propria repository locale senza più modificarlo. Questo file di configurazione ha il vantaggio di essere formulato allo stesso modo del file /etc/apt/sources.list. Il principale difetto di cui soffre è che deve essere eseguito come utente apt-mirror, il che comporta una certa fatica nell'effettuare lo scaricamento della repository direttamente in disco fisso portatile.

Lo strumento debmirror

Immaginiamo di voler copiare una repository completa di Ubuntu e Debian nel proprio disco fisso portatile, montato su /media/disk, all'interno della cartella mirror. Usando l'utente con cui si è montato il disco (se ad esempio si sta usanndo Gnome o Kde assicurarsi di aver collegato il disco e che si a visibile e vi si possa accedere con il file manager), eseguire i seguenti comandi da terminale:

Per la repository di Ubuntu:

$ mkdir -p /media/disk/mirror/ubuntu
$ debmirror --progress --verbose --nosource --host=it.archive.ubuntu.com \
--method=http --root=ubuntu --dist=hardy,hardy-updates,hardy-security \ 
--section=main,restricted,universe,multiverse --arch=i386 \ 
--ignore-missing-release --ignore-release-gpg --ignore-small-errors \
/media/disk/mirror/ubuntu 
$ mkdir -p /media/disk/mirror/medibuntu
$ debmirror --progress --verbose --nosource --host=packages.medibuntu.com \ 
--method=http --root=/ --dist=hardy --section=free,non-free --arch=i386 \
--ignore-missing-release --ignore-release-gpg --ignore-small-errors \
/media/disk/mirror/medibuntu

Per la repository di Debian:

$ mkdir -p /media/disk/mirror/debian
$ debmirror --progress --verbose --nosource --host=ftp.it.debian.org \ 
--method=http --root=debian --dist=lenny --section=main,contrib,non-free \
--arch=i386 --ignore-missing-release --ignore-release-gpg \ 
--ignore-small-errors /media/disk/mirror/debian
$ mkdir -p /media/disk/mirror/debian-updates
$ debmirror --progress --verbose --nosource --host=security.debian.org \
--method=http --root=debian --dist=lenny/updates --section=free,non-free \
--arch=i386 --ignore-missing-release --ignore-release-gpg \
--ignore-small-errors /media/disk/mirror/medibuntu

E' meglio eseguire i comandi debmirror su teminali diversi per sfruttare lo scaricamento contemporaneo da più repository.

Il significato dei parametri richiama in parte quello della riga del file /etc/apt/sources.list ed è il seguente:

  • --progress --verbose: visualizza la percentuale di avanzamento del processo e il maggior numero di informazioni;
  • --nosource: non scarica i pacchetti sorgente;
  • --host: fornisce l'indirizzo del server, in un URI del tipo http://www.host.tld/dir vale www.host.tls;
  • --method: fornisce il protocollo da utilizzare, in genere http;
  • --root: è la directory che segue il server nell'URI senza la barra saparatrice, nel caso di un URI del tipo http://www.host.tld/dir vale dir, nel caso di un URI del tipo http://www.host.tld/ vale /;
  • --dist: fornisce una lista separata da virgole delle distribuzione da scaricare;
  • --section: fornisce una lista separata da virgole delle sezioni da scaricare;
  • --arch: fornisce una lista separata da virgole delle architetture da scaricare, in genere si mette solo i386;
  • --ignore-missing-release --ignore-release-gpg --ignore-small-errors: questi parametri servono ad evitare che lo scarica si blocchi per dei piccoli errori di poca importanza;
  • l'ultimo parametro è la directory a partire dalla quale deve essere costruito il repository locale.

Per configurare APT ad usare la repository locale di Ubuntu inserire le seguenti righe nel file /etc/apt/sources.list (commentanto le altre mettendo come primo carattere il simbolo #):

deb file:///media/disk/mirror/ubuntu hardy main restricted universe multiverse
deb file:///media/disk/mirror/ubuntu hardy-updates main restricted universe  multiverse
deb file:///media/disk/mirror/ubuntu hardy-security main restricted universe multiverse
deb file:///media/disk/mirror/medibuntu hardy free non-free

La repository locale di Debian invece si configura in questo modo:

deb file:///media/disk/mirror/debian lenny main contrib non-free
deb file:///media/disk/mirror/debian-updates lenny/updates main contrib non-free

La principale differenza che si nota tra le configurazione con la repository web e questa è l'utilizzo di un nuovo formato di URI, che fa uso dello specificatore file al posto di http. Questo indica a APT che i file sono locali a file system, pertanto in questo caso dopo il separatore :// non avremo l'indirizzo del server ma direttamente il percorso a partire dalla della cartella contenente il repository, da questo l'insolita sequenza di tre barre.

Problemi con l'URI locale

In alcuni casi si possono avere delle difficoltà a comporre l'URI per la riga di configurazione della sorgente software per APT. Questo succede soprattutto se nel percorso della cartella, una directory ha uno spazio nel nome. In questo caso sostituire lo spazio con la sequenza %20 (20 è il valore esadecimale del codice ASCII corrispondente al carattere spazio). Ad esempio il percorso di directory "/media/mio disco/mirror" diviene file:///media/mio%20disco/mirror.

Nel caso la presenza dello spazio sia dovuto al nome che il gestore dei volumi assegna automaticamente al punto di mount del disco portatile, si consiglia di modificarne la label. Infatti, ogni qual volta si collega un disco fisso o una chiavetta USB, il sistema legge la label associata alla partizione e crea un punto di mount con quel nome. Se disgraziatamente abbiamo una label con un carattere spazio, incorreremo in questo problema. Per aggirarlo conviene cambiare la label della partizione.

Per conoscere la label di una partizione prima di tutto bisogna sapere il file di dispositivo associato a quella partizione. Per saperlo eseguire il comando mount e verificare a quale dispositivo corrisponde la partizione montata. Ecco un esempio di output:

$ mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
/dev/sdb1 on /media/mio disco type vfat (rw,nosuid,nodev,uhelper=hal,shortname=mixed,uid=1000,utf8,umask=077,flush)

Notare che la partizione montata su "/media/mio disco" è la /dev/sdb1. A questo punto possiamo eseguire il comando per visualizzare la label associata alla partizione:

$ sudo vol_id -l /dev/sdb1 
mio disco

In quanto generalmente i dischi fissi portatili e le chiavette hanno un file system FAT32 (altresì detto VFAT) vedremo come cambiare la label di questi dischi, altri file system usano strumenti simili, per maggiori informazioni vedere la pagina https://help.ubuntu.com/community/RenameUSBDrive.

Il comando da usare si chiama mlabel ed è fornito dal pacchetto mtools. Installare dunque questo pacchetto:

$ sudo apt-get install mtools

Modificare il file di configurazione /etc/mtools.conf associando una lettera drive al disco di cui cambiare la label. Prima abbiamo visto come individuare il file di dispositivo della partizione, nell'editare il file bisogna usare l'accortezza di scegliere una lettera drive libera, nel nostro caso e:. Per modificare il file eseguire:

$ sudo gedit /etc/mtools.conf

La riga da aggiungere è la seguente:

drive e: file="/dev/sdb1"

A questo punto eseguire il seguente comando per inserire la nuova label al prompt:

$ sudo mlabel e:
Volume label is mio disco
Enter the new volume label : mio_disco

Verificare il cambio della label con il comando vol_id su riportato.

Lo strumento apt-mirror

Diversamente da debmirror, apt-mirror è progettato per essere utilizzato con una specifica utenza dedicata, inoltre tutti i parametri di esecuzione sono conservati in un file di configurazione, tra questi anche la directory in cui creare la copia della repository.

Installando apt-mirror in Debian o Ubuntu comporta la creazione dell'utenza dedicata apt-mirror e di una directory /var/spool/apt-mirror contenente a sua volta altre tre directory: mirror, skel e var. In particolare la directory mirror andrà a contenere la copia locale delle repository. Naturalmente queste directory hanno dei permessi tali da permettere all'utenza apt-mirror di potervi accedere in lettura e scrittura

Per definire quali repository copiare, oppure per cambiare la directory di base, è necessario editare il file di configurazione /etc/apt/mirror.list.

Questo file di configurazione accetta accanto a dei parametri specifici come base_path, il cui valore predefinito è per l'appunto /var/spool/apt-mirror, delle righe per tutto uguali a quelle in cui si definiscono i repository nel file di configurazione di APT /et/apt/sources.list. Questo permette, copiando queste righe da /etc/apt/sources.list a /etc/apt/mirror.list, di ottenere una copia in locale delle stesse repository lanciando il programma apt-mirror. Condizione essenziale per questo è naturalmente che nella partizione che contiene la directory /var/spool/apt-mirror vi sia spazio sufficiente.

Per fare questo dunque apriamo i file /etc/apt/sources.list e copiamo le righe con la definizione dei repository. Poi apriamo il file /etc/apt/mirror.list e sostituiamo le righe di esempio che iniziano per deb con le righe copiate.

Per aprire il file /etc/apt/sources.list:

$ gedit /etc/apt/sources.list

Per modificare il file /etc/apt/mirror.list:

$ sudo gedit /etc/apt/mirror.list

Esempio delle righe da copiare (sono le stesse riportate sopra come esempio):

deb http://it.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb http://it.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb http://packages.medibuntu.org/ hardy free non-free

Inoltre si consiglia di aggiungere una riga clean per ogni URI contenuto nelle righe copiate. Questo permette di effettuare alla fine dell'operazione di scaricamento e aggiornamento del mirror locale, un controllo di tutti i file inutili che possono essere cancellati. Alla fine dello scaricamento sarà stampato a video un comando da eseguire per carcellare i file inutili. Nel nostro caso avremo le seguenti righe:

clean http://it.archive.ubuntu.com/ubuntu 
clean http://security.ubuntu.com/ubuntu
clean http://packages.medibuntu.org/

A questo punto avviare il programma di copia del mirror locale apt-mirror con l'utenza apt-mirror, una volta collegati alla rete Internet:

$ sudo su - apt-mirror -c 'apt-mirror'

Il significato del comando è: da utente di root (sudo), assumi i permessi dell'utente apt-mirror (su - apt-mirror) ed esegui il comando apt-mirror (-c 'apt-mirror'). E' necessario preporre il comando sudo in quanto l'operazione di cambio utente su è possibile farla solo come root se non si conosce la password dell'utente. In questo caso l'utente apt-mirror non ha una password impostata per cui necessariamente prima bisogna diventare root.

Il processo richiederà parecchi minuti per il suo completamento. Il programma apre in maniera predefinita 20 thread per scaricare i file dalla repository in Internet, per cui vengono scaricati 20 file contemporaneamente cercando di bilanciarli tra le diverse repository remote. Alla conclusione sarà stampato a video un messaggio che richiede l'esecuzione di un comando simile a quello seguente per effettuare la cancellazione dei file non più necessari:

$ sudo su - apt-mirror -c '/var/spool/apt-mirror/var/clean.sh'

Il programma apt-mirror, una volta completata la sua esecuzione, avrà creato le seguenti directory:

  • /var/spool/apt-mirror/mirror/it.archive.ubuntu.com/ubuntu
  • /var/spool/apt-mirror/mirror/security.ubuntu.com/ubuntu
  • /var/spool/apt-mirror/mirror/packages.medibuntu.com

All'interno della prima si troverà sia la distribuzione hardy che hardy-updates. Dovremo quindi usare le seguenti righe nel file /etc/apt/sources.list per utilizzare questo mirror locale:

deb file:///var/spool/apt-mirror/mirror/it.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb file:///var/spool/apt-mirror/mirror/it.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb file:///var/spool/apt-mirror/mirror/security.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb file:///var/spool/apt-mirror/mirror/packages.medibuntu.com hardy free non-free

Copia della repository direttamente su un disco fisso portatile con apt-mirror

Con apt-mirror è più difficile creare e mantenere aggiornato un mirror contenuto in un disco portatile per via della necessità di definire una ben precisa directory nel file i configurazione /etc/apt/mirror.list e per via dei permessi in quanto il programma deve essere eseguito con un'utenza specifica non legata a nessun utente desktop.

E' dunque necessario effettuare alcune operazioni come amministratore e introdurre alcuni passaggi ulteriori all'esecuzione vista precedentemente.

In genere quando si collega un disco fisso portatile questo è montato dall'ambiente desktop (Gnome o KDE) che si sta usando. In tal modo il contenuto del disco è raggiungibile come una cartello nel file system, è però permessa la scrittura solo all'utente che l'ha montato, ovvero quello con cui è in esecuzione l'ambiente desktop. Per prevenire questo è necessario inserire la partizione in questione tra quelle gestite con il file /etc/fstab.

Collegare dunque il disco fisso portatile. una volta che si è in grado di accedere al disco, identificare su quale directory è stato montato, nel nostro esempio considereremo che sia /media/mio_disco. Digitare il seguente comando, sostituendo /medi/mio_disco con la directory dove è montato il disco portatile (attenzione a non aggiungere una barra alla fine):

$ mount | grep '/media/mio_disco'

A video apparirà un messaggio simile al seguente:

/dev/sdb1 on /media/mio_disco type vfat (rw,nosuid,nodev,uhelper=hal,shortname=mixed,uid=1000,utf8,umask=077,flush)

Quello che ci interessa è la prima stringa della riga, cioè in questo caso /dev/sdb1, cioè il file di dispositivo. Utilizzando i file di dispositivo è possibile già modificare con successo il file /etc/fstab ma è preferibile utilizzare l'UUID, in tal modo questo disco può essere distinto da altri dischi che potrebbero venire riconosciuti con lo stesso file di dispositivo. Eseguire dunque:

$ sudo vol_id -u /dev/sdb1

La stringa che apparirò a video è l'UUID del disco fisso portatile. Si tratta di una stringa simile a: 56AC-A12F.

A questo punto smontare il disco portatile:

$ umount /media/mio_disco

Scollegare il disco portatile dal PC.

Creare una directory dove montare il disco portatile:

$ sudo mount /mnt/disk

Modificate il file /etc/fstab utilizzando il seguente comando:

$ sudo gedit /etc/fstab

Aggiungere le seguenti righe:

UUID=56AC-A12F /mnt/disk auto rw,user,noauto,exec 0 0

Il file /etc/fstab è suddiviso a colonne e ciascuna colonna ha un ben determinato significato:

  • prima colonna: indico il file di dispositivo o l'UUID che identifica la partizione;
  • seconda colonna: il percorso della directory su cui effettuare il mount della partizione (punto di mount);
  • terza colonna: tipo di file system, in questo caso auto permette l'auto-riconoscimento;
  • quarta colonna: modificatori del comportare del comando mount.
    • rw: significa che la partizione deve essere montata in lettura e scrittura;
    • user: significa che la partizione può essere montata da un qualsiasi utente, non solo da root;
    • noauto: la partizione non deve essere automaticamente montata all'avvio del sistema;
    • exec: è permesso eseguire programmi contenuti nella partizione.
  • quinta e sesta colonna: lasciare i valori indicati, non sono somunque di particolare interesse.

Modificare il file di configurazione /etc/apt/mirror.list inserendo la seguente riga con il percorso del punto di mount seguito da una directory specifica:

set base-path /mnt/disk/apt-mirror

A questo punto collegare il disco fisso portatile. Il disco non sarà più montato automaticamente. Modificare la shell associata all'utente apt-mirror da /bin/sh (una shell minimale difficile da usare) a /bin/bash:

$ sudo usermod -s /bin/bash apt-mirror

Divenire l'utente apt-mirror:

$ sudo su - apt-mirror

Montare il disco fisso portatile:

$ mount /mnt/disk

Creare la directory dove creare la repository:

$ mkdir /mnt/disk/apt-mirror

Eseguire il comando apt-mirror:

$ apt-mirror

Una volta conclusa la creazione o l'aggiornamento del mirror locale, eseguire come sopra il comando di pulizia, quindi smontare il disco e abbandonare la sessione con l'utenza apt-mirror:

$ umount /mnt/disk
$ exit

In questo caso le directory create saranno:

  • /mnt/disk/apt-mirror/mirror/it.archive.ubuntu.com/ubuntu
  • /mnt/disk/apt-mirror/mirror/security.ubuntu.com/ubuntu
  • /mnt/disk/apt-mirror/mirror/packages.medibuntu.com

Il file /etc/apt/sources.list dovrebbe contenere le seguenti righe per accedere a questo mirror:

deb file:///mnt/disk/apt-mirror/mirror/it.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb file:///mnt/disk/apt-mirror/mirror/it.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb file:///mnt/disk/apt-mirror/mirror/security.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb file:///mnt/disk/apt-mirror/mirror/packages.medibuntu.com hardy free non-free

Per poter montare normalmente il disco fisso portatile commentare la riga appena aggiunta al file /etc/fstab.

Per procedere ad un aggiornamento del mirror locale, sarà sufficiente decommentare la riga del file /etc/fstab, collegare il disco fisso portatile ed eseguire i seguenti comandi:

$ sudo su - apt-mirror
$ mount /mnt/disk
$ apt-mirror

Repository locale in rete

Il passaggio successivo è quello di utilizzare la copia fatta della repository per metterla a disposizione per un'intera rete di PC con lo scopo di aggiornarli o installarli, riducendo quindi le attese per lo scaricamento di svariate copie degli stessi pacchetti da computer diversi.

A tal fine si possono usare diversi protocolli di rete supportati da APT, quali l'HTTP, l'FTP, l'SMB (una condivisione di rete ) etc..., nel nostro caso si esemplifica l'utilizzo dell'HTTP, il protocollo usato per i siti Web in quanto è lo stesso comunemente utilizzato per scaricare i pacchetti dalle repository comunemente.

L'utilizzo di un protocollo di rete per il trasferimento dei file richiede, altre alla creazione delle rete do comunicazione anche l'installazione di un server, in questo caso da installarsi dove risiede la copia della repository. Il server che si consiglia di utilizzare è il lighttpd, un valido sostituto del più diffuso apache con il vantaggio della leggerezza e della semplicità della configurazione.

Installare dunque il server Web:

sudo apt-get install lighttpd

Per verificare che il server web funziona è sufficiente puntare il browser all'indirizzo http://127.0.0.1/ e sarà visualizzata la finestra di benvenuto.

Determinare dunque dove si trova la repository, nel nostro esempio è in /var/lib/apt-mirror/mirror o oppure /mnt/disk/apt-mirror/mirror. Creare un link simbolico dalla directory del sito Web(/var/www) al percorso della repository:

sudo ln -s /var/lib/apt-mirror/mirror /var/www/mirror

Puntare il browser all'indirizzo http://127.0.0.1/mirror/, dovrà essere visualizzato il contenuto della directory (nel nostro caso le directory it.archive.ubuntu.com etc,), nel caso contrario sarà necessario verificare i permessi della directory, ricordarsi in tal caso che l'utente e il gruppo con cui è in esecuzione lighttpd è www-data.

A questo punto, conoscendo l'indirizzo IP del server Web locale, sarà sufficiente modificare le configurazione di APT delle altre macchine in rete per farle accedere a questa nuova repository. Nel nostro caso dunque dovremo cambiare il file /etc/apt/sources.list in:

deb http://<ip server>/mirror/it.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb http://<ip server>/mirror/it.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb http://<ip server>/apt-mirror/mirror/security.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb http://<ip server>/mirror/packages.medibuntu.com hardy free non-free