Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
sysadmin:debian_repository [2010/04/19 17:20]
james créée
sysadmin:debian_repository [2012/09/21 17:35] (Version actuelle)
james ajout tags
Ligne 1: Ligne 1:
 +{{tag>​depot debian local logiciel howto apt-ftparchive gpg pool}}
 ====== Créer son propre dépot Debian ====== ====== Créer son propre dépot Debian ======
  
Ligne 5: Ligne 6:
 Il existe pas mal de facons de faire et je vais vous présenter ici la manière que j'​utilise au quotidien : 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 : Cette méthode utilise :
- ​- ​l'​utilitaire apt-ftparchive +  * l'​utilitaire apt-ftparchive 
- un pool de fichiers .deb par dépot +  ​* ​un pool de fichiers .deb par dépot ​(perte d'​espace de stockage car les paquets sont dupliqués, mais gain en lisibilité sur les logiciels disponibles 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+  ​* ​pour chaque dépot, le même dépot suffixé de "-test" ​existe : il sert comme son nom l'​indique ​à déposer ​des paquets ​pour les tester avant leur mise en production dans l'​autre dépot
- le dépot est signé par une clef GPG+  ​* ​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).+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 être un jour un article la dessus).
  
-voici l'​arborescence de l'​ensemble des depots : +===== Créer ​l'​arborescence ​d'un dépot ===== 
-<​code>​+Voici l'​arborescence type de l'​ensemble des depots :<​code>​
 ./cache ./cache
 ./​mirror/​pool-lenny ./​mirror/​pool-lenny
Ligne 41: Ligne 42:
 ./​filelists/​dists/​hardy ./​filelists/​dists/​hardy
 ./​filelists/​dists/​hardy-test ./​filelists/​dists/​hardy-test
 +</​code>​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 :<code bash>
 +#!/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
 +</​code>​
 +Il ne vous reste plus qu'a poser les paquets .deb dans le repertoire pool-$DIST/​$(SECTION)/​binary-$(ARCH) qui convient.
 +
 +===== Mettre a jour le depot =====
 +
 +Pour générer l'​index du dépot afin qu'il soit utilisable sur vos postes clients, voici le script de mise à jour utilisé :<code bash>
 +#!/bin/bash
 +#/​usr/​local/​bin/​updateMirror.sh
 +# met a jour le depot debian cible passé en argument
 +
 +DISTS="​etch gutsy hardy intrepid lenny ubuntu unstable"​ # adapter ​ ala liste des depots que vous possédez
 +REPO_ROOT="/​var/​www/​depots_deb"​
 +MIRROR_ROOT="​$REPO_ROOT/​mirror/​dists"​
 +GPG_HOME="/​root/​.gnupg_depots_deb"​
 +FILELISTS_DIR="​$REPO_ROOT/​filelists"​
 +ARCH_LIST="​i386 amd64 all"
 +
 +if [ $# -lt 1 ] ; then
 +    echo ""​ >&2
 +    echo "​Usage:​ $0 [ all|etch|unstable|... ] [ test ]" >&2
 +    echo ""​ >&2
 +    echo "Mise à jour du ou des dépots (all)  spécifié en premier argument."​ >&2
 +    echo "Un seul dépot peut-être spécifié à la fois." >&2
 +    echo ""​ >&2
 +    echo "Si le deuxième argument est '​test',​ " >&2
 +    echo "la mise à jour se fait sur les dépots de test" >&2
 +    echo ""​ >&2
 +    exit 1
 +fi
 +
 +# le premier argument specifie le depot à mettre à jour
 +if [ -n "​$1"​ ]; then
 +    ONLY_DIST=""​
 +    tmp_sec=$1
 +    shift
 +
 +    for i in ${DISTS}
 +    do
 +        if [ "​X$i"​ = "​X$tmp_sec"​ ]; then
 +            ONLY_DIST=$i
 +            break
 +        fi
 +    done
 +
 +    if [ "​X$tmp_sec"​ = "​Xall"​ ]; then
 +        ONLY_DIST=${DISTS}
 +    fi
 +
 +    if [ -z "​${ONLY_DIST}"​ ]; then
 +        echo "​ERREUR:​ depot invalide $tmp_sec"​ >&2
 +        exit 1
 +    fi
 +
 +    DISTS=${ONLY_DIST}
 +fi
 +# depots de prod ou de test 
 +DIST_SUFFIX=""​
 +if [ "​X$1"​ == "​Xtest"​ ]; then
 +    DIST_SUFFIX="​-test"​
 +    shift
 +fi
 +
 +for DIST in $DISTS
 +do
 +    DIST="​${DIST}${DIST_SUFFIX}"​
 +    FTP_ARCHIVE_CONF_FILE="/​etc/​apt/​apt-perso-${DIST}.conf"​
 +
 +    rm -f $REPO_ROOT/​cache/​*db
 +
 +    # generation des filelist des depots
 +    cd $REPO_ROOT/​mirror
 +    for section in `ls pool-${DIST}`
 +    do
 +        for archi in $ARCH_LIST;
 +        do
 +                if [ "​x${archi}"​ = "​xall"​ ]; then
 +                    continue
 +                fi
 +                mkdir -p ${FILELISTS_DIR}/​dists/​${DIST}
 +                echo "​Section : ${section}"​
 +                echo "Arch : ${archi}"​
 +                FILELIST="​${FILELISTS_DIR}/​dists/​${DIST}/​${section}-${archi}.filelist"​
 +                echo "​filelist : $FILELIST"​
 +                find pool-${DIST}/​$section/​binary-${archi} pool-${DIST}/​$section/​binary-all -name "​*.deb"​ > \
 +                    ${FILELISTS_DIR}/​dists/​${DIST}/​${section}-${archi}.filelist
 +        done
 +
 +    done
 +    echo "​generation apt ftp archive :"
 +        apt-ftparchive generate ${FTP_ARCHIVE_CONF_FILE}
 +    echo "​creation du fichier Release :"
 +        # creation des fichiers Release
 +        RELEASE_FILE="​${MIRROR_ROOT}/​${DIST}/​Release"​
 +        apt-ftparchive -c $FTP_ARCHIVE_CONF_FILE release \
 +            ${MIRROR_ROOT}/​${DIST}/​ > $RELEASE_FILE
 +
 +        # signature gpg des fichiers Release
 +     rm -f $RELEASE_FILE.gpg
 +     ​${DEBUG} gpg --verbose --homedir ${GPG_HOME} -ba \
 +         ​--output $RELEASE_FILE.gpg $RELEASE_FILE
 +done
 +</​code>​
 +
 +===== Configuration du virtualhost apache =====
 +Pour utiliser ce dépot le plus simple est de le servir en http via un serveur Web (apache2 dans notre cas). Voici un exemple de fichier de VirtualHost apache2 (fichier : /​etc/​apache2/​sites-available/​debtools.domaine.interne ) :<​code>​
 +# /​etc/​apache2/​sites-available/​debtools.domaine.interne
 +<​VirtualHost *>
 +        ServerAdmin admin@mondomaine.com
 +        ServerName debtools.domaine.interne
 +        ServerAlias debtools
 +
 +        DocumentRoot ​  /​var/​www/​depots_deb/​mirror/​
 +
 +        ErrorLog /​var/​log/​apache2/​depots_deb_error.log
 +        TransferLog /​var/​log/​apache2/​depots_deb_access.log
 +
 +        <​Directory /​var/​www/​depots_deb/​mirror/>​
 +                AllowOverride AuthConfig
 +                Options Indexes FollowSymLinks MultiViews
 +
 +                order deny,allow
 +                allow from all
 +        </​Directory>​
 +</​VirtualHost>​
 +</​code>​
 +
 +===== Utilisation coté client =====
 +
 +Il suffit d'​ajouter la ligne correspondante a la distribution dans votre fichier /​etc/​apt/​sources.list (ou créer un nouveau fichier dans le repertoire /​etc/​apt/​sources.list.d/​ ), par exemple pour lenny :<code bash>
 +cat << EOF >> /​etc/​apt/​sources.list
 +deb http://​debtools.domaine.interne lenny custom
 +EOF
 </​code>​ </​code>​
sysadmin/debian_repository.1271690416.txt.gz · Dernière modification: 2010/04/19 17:20 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0