Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
sysadmin:debian_repository [2010/04/20 10:07]
james ajout script creation depot
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 6: Ligne 7:
 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).
  
 ===== Créer l'​arborescence d'un dépot ===== ===== Créer l'​arborescence d'un dépot =====
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>​+</​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 #!/bin/bash
 +# /​usr/​local/​sbin/​create_debian_repository.sh
 +# cree un nouveau depot deb local
 ARCHS="​i386 amd64" ARCHS="​i386 amd64"
 REPO_ROOT="/​var/​www/​depots_deb"​ REPO_ROOT="/​var/​www/​depots_deb"​
Ligne 107: Ligne 110:
 echo " ​       SrcDirectory \"​pool-$DIST/​\$(SECTION)/​source\";"​ >> $FTP_ARCHIVE_CONF_FILE echo " ​       SrcDirectory \"​pool-$DIST/​\$(SECTION)/​source\";"​ >> $FTP_ARCHIVE_CONF_FILE
 echo "​}"​ >> $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.1271750851.txt.gz · Dernière modification: 2010/04/20 10:07 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0