Da Guide@Debianizzati.Org.
La creazione di un repository Debian personale può essere utile nel caso si vogliano rendere disponibili per l'installazione tramite l'APT System i pacchetti .deb creati da noi. Il repository così creato può essere utilizzato all'interno della nostra LAN, oppure reso accessibile a un gran numero di utenti tramite Internet. Esistono fondamentalmente due diversi approcci alla creazione di un repository:
> $ mkdir ~/debian/binary $ mkdir ~/debian/source In questo modo avremo una struttura di questo tipo: $ tree debian debian |-- binary `-- sources <<
3 I file di indice
Ultimata la creazione della struttura del repository e popolati binary e source (se abbiamo anche le versioni sorgenti) con i nostri pacchetti, dobbiamo creare i relativi file di indice. Questi file vengono scaricati da APT quando impartiamo il comando apt-get update e contengono la lista di tutti i pacchetti presenti in un repository. Quando effettuiamo la ricerca di un pacchetto o quando desideriamo installarlo, APT consulta questi file per stabilire in quale repository esso è contenuto. La creazione dei file di indice è ottenuta tramite due utility: dpkg- scanpackages e dpkg-scansources. Il funzionamento dei due programmi è identico, ma il primo esamina i file binari ed il secondo quelli sorgenti. Entrambi gli strumenti restituiscono i loro risultati sullo standard output (stdout): questo significa che di default vedremo l'output a schermo. Per questo motivo è necessario reindirizzare il risultato di dpkg-scanpackages e dpkg-scansources su file appositi. Per convenzione questi file sono compressi in formato gzip e chiamati Packages.gz all'interno di binary e Sources.gz all'interno di source. Nell'esempio di questa guida il nostro repository contiene due pacchetti di tipo binario (apt e apt-best) ed un pacchetto di tipo sorgente (apt). Vedremo ora come creare i relativi file Packages.gz e Sources.gz La struttura del repository di esempio è questa: > $ tree debian debian |-- binary | |-- apt-best-0.3.deb | |-- apt-doc_0.5.28.6_all.deb | |-- apt-utils_0.5.28.6_i386.deb | |-- apt_0.5.28.6_i386.deb | |-- libapt-pkg-dev_0.5.28.6_i386.deb |
-- libapt-pkg-doc_0.5.28.6_all.deb
-- source |-- apt_0.5.28.6.dsc `-- apt_0.5.28.6.tar.gz << Procediamo con la creazione del file Packages.gz: > $ cd ~/debian $ dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz apt apt-best apt-doc apt-utils libapt-pkg-dev libapt-pkg-doc Wrote 6 entries to output Packages file. $ ls ~/debian/binary/ |grep Packages Packages.gz << e del file Sources.gz > $ cd ~/debian $ dpkg-scansources source /dev/null | gzip -9c > source/Sources.gz $ ls ~/debian/source/ |grep Sources Sources.gz <<3 I file di Release
Se volete poter usare il pinning (cfr.: APT_uso_avanzato:_mixare_releases diverse) o permetterne l'uso agli utenti del vostro repository, una volta creati i file Packages.gz e Sources.gz, dovete necessariamente creare un file apposito in ciascuna directory del vostro repository. Questi file sono chiamati file Release, sono normali file di testo ed hanno una struttura del tipo: Archive: archivio Component: componente Origin: origine Label: etichetta Architecture: architettura dove:
e per quello source:
> $ cat ~/debian/source/Release Archive: unstable Component: main Origin: keltik Label: Repository di esempio Architecture: source <<
3 Uso del repository
Uso in locale Finalmente è venuto il momento di mettere alla prova il nostro repository. Già fin d'ora possiamo utilizzarlo così com'è in locale sulla nostra macchina: tutto quello che dobbiamo fare consiste nell'aggiungere al nostro file /etc/ apt/sources.list l'URI attraverso il quale reperire i pacchetti. In questo esempio abbiamo creato il repository nella directory ~/debian e cioè nella directory debian all'interno della nostra home. Dovremo quindi aggiungere al file /etc/apt/sources.list due linee così composte: deb file:///home/utente/debian binary/ deb-src file:///home/utente/debian source/ dove, alla parola utente dovete sostituire lo username dell'utente nella cui home risiede il repository. Una volta fatto questo lanciate:
# apt-get update
per rigenerare la lista degli indici di APT. Ora vediamo se il nostro repository funziona. Iniziamo con il cercare il pacchetto apt. Il comando da impartire è: $ apt-cache show apt Se tutto ha funzionato dovremmo ottenere come risultato due diversi pacchetti: entrambi si chiamano apt, entrambi hanno numero di versione 0.5.28.6, ecc. Per capire se e quale proviene dal nostro repository dobbiamo andare a controllare la voce Filename. Nel caso del pacchetto proveniente dal repository ufficiale di Debian avremo: [ ... omissis ...] Filename: pool/main/a/apt/apt_0.5.28.6_i386.deb [ ... omissis ...] mentre per il pacchetto proveniente dal nostro repository avremo: [ ... omissis ...] Filename: binary/apt_0.5.28.6_i386.deb [ ... omissis ...] Per fare in modo che il nostro repository sia usato come preferenziale rispetto agli altri possiamo inserire nel file /etc/apt/sources.list le linee ad esso relativo all'inizio del file, prima di tutti gli altri repository. In questo modo, quando impartiamo il comando:
# apt-get install nome_pacchetto
APT provvederà ad installare quello fornito dal repository elencato per primo in /etc/apt/sources.list. Ecco l'esempio sempre relativo ad apt:
# apt-get install apt -s Lettura della lista dei pacchetti in corso... Fatto Generazione dell'albero delle dipendenze in corso... Fatto Pacchetti suggeriti: aptitude apt-doc I seguenti pacchetti saranno aggiornati: apt
1 aggiornati, 0 installati, 0 da rimuovere e 1 non aggiornati. Inst apt [0.5.28.6] (0.5.28.6 Repository di esempio:unstable) Conf apt (0.5.28.6 Repository di esempio:unstable) Nelle ultime due linee possiamo notare come la provenienza del pacchetto sia Repository di esempio:unstable come indicato nel nostro file Release.
3 Uso in rete (http)
Rendere disponibile in rete il repository che abbiamo appena creato è un'operazione estremamente semplice. Non dovremo fare altro che copiare la root del repository in una directory accessibile al nostro server web ed indicare l'URI corretto nei file /etc/apt/sources.list delle macchine che dovranno accedere ad esso. Nel caso in cui stiamo usando Apache e la DocumentRoot sia /var/www sarà sufficiente impartire:
# cp -R /home/utente/debian/ /var/www/
Ora dobbiamo modificare i file /etc/apt/sources.list in modo che puntino a questo repository. Poniamo che il server che mette a disposizione il repositry abbia il FQDN debian.prova.net. La sintassi da utilizzare in /etc/apt/sources.list è la seguente: deb http://debian.prova.net/debian/ binary/ deb-src http://debian.prova.net/debian/ source/ Dobbiamo fare estrema attenzione agli slash ("/") perché hanno un uso preciso all'interno di /etc/apt/sources.list. Nel nostro caso è necessario che sia l'URL (http://debian.prova.net/debian) sia l' archivio (binary o source) termini con un "/", altrimenti otterremo un errore di questo tipo:
# apt-get update
E: La linea x in /etc/apt/sources.list (dist parse) non è corretta Se abbiamo invece scritto correttamente, quando lanceremo apt-get update, vedremo APT dialogare con il nostro web server e reperire l'elenco dei nostri pacchetti:
# apt-get update Get:1 http://debian.prova.net binary/ Packages [1377B] Get:2 http://debian.prova.net binary/ Release [97B] Get:3 http://debian.prova.net source/ Sources [412B] Get:4 http://debian.prova.net source/ Release [100B]
Per il test e l'ordine con cui i pacchetti vengono installati da APT, vi rimando alla lettura del paragrafo_precedente
2 Procedura automatizzata
Per automatizzare il processo di creazione di un mirror, si può ricorrere a Debmirror. === --Keltik 09:20, Giu 26, 2005 (EDT) Estratto da http://guide.debianizzati.org/ [Attribuzione - Non commerciale - Share Alike]