Repository locale di pacchetti deb e database APT
Queste note riguardano sistemi GNU/Linux che fanno uso di sistemi di gestione dei pacchetti
deb, ovvero le distribuzioni Debian e derivate. Mi sono deciso a scriverle perche' ogni volta che dovevo aggiungere un pacchetto creato localmente al mio repository, non mi ricordavo i comandi da dare ed ero costretto ad andare a prendere i giro per la rete le informazioni necessarie.
Vediamo quindi come mantenere un repository locale di pacchetti
deb sulla nostra macchina, in modo che il sistema APT ne tenga conto nel suo database consultabile tramite strumenti come
aptitude.
Supponiamo di aver appena compilato un kernel "alla maniera debian"
seguendo le istruzioni della
debian reference (cap.7).
La situazione dopo la compilazione e' la seguente:
fm@mfdirg:/usr/src$ ls -l
total 52324
lrwxrwxrwx 1 fm src 19 2007-01-05 18:19 linux -> linux-source-2.6.18
-rw-r--r-- 1 fm src 11640154 2007-01-05 19:46 linux-image-2.6.18-7.tm290_rev.01_i386.deb
drwxr-sr-x 21 fm src 4096 2007-01-05 19:46 linux-source-2.6.18
-rw-r--r-- 1 root root 41873344 2006-12-04 16:02 linux-source-2.6.18.tar.bz2
ovvero abbiamo il pacchetto
.deb del kernel appena compilato, la
directory dei sorgenti, un link simbolico a tale directory, e il
tarpalla dei sorgenti stessi.
Creiamo una directory che ospitera' i nostri pacchetti:
fm@mfdirg:/usr/src$ mkdir local-debs
si noti che ho potuto creare una directory al di sotto di /usr/src perche'
ho preventivamente aggiunto l'utente 'fm' al gruppo 'src' eseguendo come utente
root il comando:
#adduser fm src
Ora sposto nella dir creata i pacchetti deb creati localmente, ad esempio il nostro
kernel:
fm@mfdirg:/usr/src$ mv linux-image-2.6.18-7.tm290_rev.01_i386.deb local-debs/
A questo punto occorre creare un indice dei pacchetti affinche' la nostra directory
possa essere riconosciuta come un repository locale dal sistema APT.
fm@mfdirg:/usr/src$ dpkg-scanpackages local-debs/ /dev/null |gzip - > local-debs/Packages.gz
** Packages in archive but missing from override file: **
linux-image-2.6.18-7.tm290
Wrote 1 entries to output Packages file.
fm@mfdirg:/usr/src$ dpkg-scanpackages local-debs/ /dev/null > local-debs/Packages
** Packages in archive but missing from override file: **
linux-image-2.6.18-7.tm290
Wrote 1 entries to output Packages file.
eseguiamo due volte il comando perche' ci servono due copie del file Packages,
di cui una gzippata.
Passo successivo e' quello di creare un indice dell'albero del repository locale:
fm@mfdirg:/usr/src$ apt-ftparchive release local-debs/ > local-debs/Release
occorre poi firmare con la nostra chiave gpg il file
Release ottenuto:
fm@mfdirg:/usr/src$ gpg -abs -o local-debs/Release.gpg local-debs/Release
You need a passphrase to unlock the secret key for
user: "Francesco Minafra (Free your Mind, use GNU/Linux!) <hitcho@xlugbarix.org>"
1024-bit DSA key, ID 4F082F93, created 2002-12-08
Inserisci la passphrase:
ottenendo il file della firma
Release.gpg
Notiamo che sia il file
Release, che il file
Release.gpg si trovano nella
directory del repository locale dei pacchetti, cioe' nella directory
/usr/src/local-debs.
Esportiamo dal keyring la nostra chiave gpg pubblica:
fm@mfdirg:~$ gpg -a -o hitcho.asc --export hitcho
e da utente root importiamola nel keyring delle chiavi dei repository APT
fidati:
mfdirg:/home/fm# apt-key add hitcho.asc
OK
Inseriamo la riga seguente nel file
/etc/apt/sources.list
deb file:/usr/src local-debs/
e possiamo ora eseguire la scansione dei repository:
mfdirg:~# aptitude update
...
e da questo momento in poi vedremo il nostro pacchetto del kernel nell'albero
di quelli
censiti da utility come
aptitude.
Notiamo che alla fine dell'output del comando
aptitude update
si ottiene un messaggio di avvertimento del tipo:
W: Conflicting distribution: file: local-debs/ Release (expected local-debs but got )
W: You may want to run apt-get update to correct these problems
Si tratta solo di un
warning dovuto al fatto che il file Release è stato creato senza specificare alcune informazioni come ad esempio il nome del repository. Per far sì che non compaia più il warning possiamo usare il seguente file di configurazione (
apt-ftparchive.conf) quando eseguiamo il comando
apt-ftparchive:
Dir {
ArchiveDir "/usr/src/local-debs/";
};
Default {
Packages::Compress ". gzip";
Sources::Compress ". gzip";
};
BinDirectory "local-debs" {
Directory "local-debs/";
Packages "local-debs/Packages";
Architecture "i386";
};
APT::FTPArchive {
Release {
Archive "local-debs";
Origin "FM";
Label "FM local";
Suite "testing";
Codename "local-debs";
Date "";
Architectures "i386";
Components "main";
Description "";
};
};
e lo utilizzeremo con il comando:
fm@mfdirg:/usr/src$ apt-ftparchive -c apt-ftparchive.conf release local-debs/ > local-debs/Release
Stessa procedura va ripetuta ogni qualvolta si aggiungono manualmente pacchetti sotto la directory
local-debs.
Bibliografia
Debian Reference
Secure Apt - Debian Wiki
--
FrancescoMinafra - 05 Jan 2007
Inizio pagina