creare un repository debian
Creare un Repository Debian**** Da Guide@Debianizzati.Org. ****
Vai a: navigazione, ricerca
[Debian-swirl.png]Versioni compatibili
Tutte le versioni di Debian
***** Indice *****
* 1_Introduzione
* 2_Repository_semplice
o 2.1_La_Struttura
o 2.2_I_file_di_indice
o 2.3_I_file_di_Release
o 2.4_Uso_del_repository
# 2.4.1_Uso_in_locale
# 2.4.2_Uso_in_rete_(http)
* 3_Procedura_automatizzata
***** Introduzione *****
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:
* Repository Automatico: ha una struttura complessa, gestisce un pool di
pacchetti e supporta architetture (i386, sparc, ecc.) multiple. A fronte
di un maggior lavoro lato server permette un uso altamente automatizzato
lato client;
* Repository Semplice: gestisce una sola architettura. È il più indicato
per i piccoli repository, specie quelli personali, perché richiede un
minor lavoro lato-server.
In questa guida vedremo come realizzare il secondo tipo di repository.
***** Repository semplice *****
**** La Struttura ****
Per prima cosa dovremo scegliere dove risiederà fisicamente il nostro
repository. Una buona scelta può essere una directory all'interno della nostra
home, come anche una directory all'interno di /usr/share. In questa guida
creeremo il repository nella nostra home, ma sentitevi liberi di posizionarlo
dove più vi aggrada.
$ mkdir ~/debian
Ora dobbiamo creare le due sottodirectory binary e source che conterranno
rispettivamente le versioni binarie e sorgenti dei nostri pacchetti:
$ mkdir ~/debian/binary
$ mkdir ~/debian/source
In questo modo avremo una struttura di questo tipo:
$ tree debian
debian
|-- binary
`-- sources
**** 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
**** 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:
* archivio: è l'archivio Debian a cui i pacchetti appartengono (ad es.:
stable, testing. ecc.);
* componente: indica il tipo di componente (ad es.: main, contrib, non-
free);
* origine: specifica il proprietario del repository;
* etichetta: identifica il repository: potete inserire descrizioni, ecc.;
* architettura: l' architettura dei pacchetti contenuti nel repository (ad
es.: i386, sparc, source, ecc.).
Vediamo i file Release per i repository di questa guida.
Per l' archivio binary abbiamo:
$ cat ~/debian/binary/Release
Archive: unstable
Component: main
Origin: keltik
Label: Repository di esempio
Architecture: i386
e per quello source:
$ cat ~/debian/source/Release
Archive: unstable
Component: main
Origin: keltik
Label: Repository di esempio
Architecture: source
**** 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.
*** 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
***** 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/index.php/
[Attribuzione_-_Non_commerciale_-_Share_Alike]