Ceci est une ancienne révision du document !
Créer son propre dépot Debian
Il peut être tres pratique de créer son propre dépôt Debian.
Il existe pas mal de facons de faire et je vais vous présenter ici la manière que j'utilise au quotidien : Cette méthode utilise :
- l'utilitaire apt-ftparchive
- un pool de fichiers .deb par dépot
- pour chaque dépot, le dépot suffixé de -test existe : il sert comme son nom l'indique a effectuer ajouter des paquets pas complètement testés.
- le dépot est signé par une clef GPG
Ce dépot permet une installation aisée d'un ensemble de machine car il héberge des meta-packages installant un ensemble de logiciels (peut etre un jour un article la dessus).
Créer l'arborescence d'un dépot
Voici l'arborescence type de l'ensemble des depots :
./cache ./mirror/pool-lenny ./mirror/pool-lenny/custom ./mirror/pool-lenny/custom/binary-i386 ./mirror/pool-lenny/custom/binary-amd64 ./mirror/pool-lenny/custom/binary-all ./mirror/pool-lenny-test ./mirror/pool-lenny-test/custom ./mirror/pool-lenny-test/custom/binary-i386 ./mirror/pool-lenny-test/custom/binary-amd64 ./mirror/pool-lenny-test/custom/binary-all ./mirror/pool-hardy ./mirror/pool-hardy/custom ./mirror/pool-hardy/custom/binary-i386 ./mirror/pool-hardy/custom/binary-amd64 ./mirror/pool-hardy/custom/binary-all ./mirror/pool-hardy-test ./mirror/pool-hardy-test/custom ./mirror/pool-hardy-test/custom/binary-i386 ./mirror/pool-hardy-test/custom/binary-amd64 ./mirror/pool-hardy-test/custom/binary-all ./filelists ./filelists/dists ./filelists/dists/lenny ./filelists/dists/lenny-test ./filelists/dists/hardy ./filelists/dists/hardy-test
Comme on ne va pas créer cette arborescence a la main, voici un petit script permettant de créer/ajouter facilement un dépot :
#!/bin/bash # /usr/local/sbin/create_debian_repository.sh # cree un nouveau depot deb local ARCHS="i386 amd64" REPO_ROOT="/var/www/depots_deb" MIRROR_ROOT="$REPO_ROOT/mirror/dists" FILELISTS_DIR="$REPO_ROOT/filelists" if [ $# -lt 1 ] ; then echo "" >&2 echo "Usage: $0 depot section" >&2 echo "" >&2 echo "Cree l'arborescence nécessaire pour créer un depot avec la section souhaitée" >&2 echo "Genere le fichier de configuration associé pour apt-ftparchive" >&2 echo "" >&2 exit 1 fi # le premier argument specifie le depot if [ -n "$1" ]; then DIST=$1 shift fi # le deuxieme argument specifie la section if [ -n "$1" ]; then SECTION=$1 shift fi FTP_ARCHIVE_CONF_FILE="/etc/apt/apt-perso-${DIST}.conf" #creation de l'arborescence DIR="" for archi in $ARCHS; do DIR="$DIR ${FILELISTS_DIR}/dists/${DIST} $REPO_ROOT/mirror/pool-${DIST}/$SECTION/binary-${archi} $MIRROR_ROOT/$DIST/$SECTION/binary-${archi}" done DIR="$DIR $REPO_ROOT/mirror/pool-${DIST}/$SECTION/binary-all $MIRROR_ROOT/$DIST/$SECTION/binary-all" mkdir -p $DIR chown root:admin $DIR chmod u=rwx,g=rwxs,o=rx,g+s $DIR chmod g+ws $DIR # generation du fichier de configuration du depot if [ -f $FTP_ARCHIVE_CONF_FILE ]; then echo "Le fichier de conf $FTP_ARCHIVE_CONF_FILE existe deja : Abandon" >&2 echo "Veuillez le compléter a la main (si vous voulez créer une nouvelle section dans un depot existant)" >&2 echo "ou le supprimer avant de relancer ce script" >&2 exit 1 fi echo "APT::FTPArchive::Release::Origin \"Internal Repository\";" > $FTP_ARCHIVE_CONF_FILE echo "APT::FTPArchive::Release::Label \"Internal tools\";" >> $FTP_ARCHIVE_CONF_FILE echo "APT::FTPArchive::Release::Suite \"$DIST\";" >> $FTP_ARCHIVE_CONF_FILE echo "APT::FTPArchive::Release::Codename \"$DIST\";" >> $FTP_ARCHIVE_CONF_FILE echo "APT::FTPArchive::Release::Architecture \"$ARCHS\";" >> $FTP_ARCHIVE_CONF_FILE echo "APT::FTPArchive::Release::components \"$SECTION\";" >> $FTP_ARCHIVE_CONF_FILE echo "APT::FTPArchive::Release::Description \"Internal Repository\";" >> $FTP_ARCHIVE_CONF_FILE echo "" >> $FTP_ARCHIVE_CONF_FILE echo "Tree \"dists/$DIST\" {" >> $FTP_ARCHIVE_CONF_FILE echo " Sections \"$SECTION\";" >> $FTP_ARCHIVE_CONF_FILE echo " Architectures \"$ARCHS\";" >> $FTP_ARCHIVE_CONF_FILE echo " Directory \"pool-$DIST/\$(SECTION)/binary-\$(ARCH)\";" >> $FTP_ARCHIVE_CONF_FILE echo " SrcDirectory \"pool-$DIST/\$(SECTION)/source\";" >> $FTP_ARCHIVE_CONF_FILE echo "}" >> $FTP_ARCHIVE_CONF_FILE