Ceci est une ancienne révision du document !
P-Builder, ou comment bien construire des paquets
Ce document décrit les étapes nécessaires pour mettre en place un environnement de construction sain pour construire des paquets Ubuntu. Cet outil est recommandé pour les mainteneurs Ubuntu comme pour toute personne utilisant Ubuntu et intéressée par la construction des paquets.
Il est possible de construire les paquets sans utiliser P-Builder, mais cela nécessite d'avoir installé au préalable sur votre système toutes les dépendances pour le compiler.
Installation
Installez le paquet pbuilder puis générez l'environnement pbuilder avec la commande :
sudo pbuilder --create
(Re)Construction d'un paquet
Construire le paquet « mon-paquet » se fait avec la commande suivante :
sudo pbuilder --build mon-paquet_1.0.dsc
Le ou les paquets seront disponibles dans le dossier /var/cache/pbuilder/result/
Mise à jour du chroot
Il est recommandé de mettre à jour votre chroot avant chaque construction. Pour ce faire, utilisez la commande :
sudo pbuilder update
Support des dépôts Universe et Multiverse
éditez le fichier /etc/pbuilderrc et décommentez la ligne
COMPONENTS="main restricted universe multiverse"
À chaque modification de votre pbuilder, il faut le mettre à jour en prenant en compte la nouvelle configuration :
sudo pbuilder update --override-config
Mise à niveau vers la dernière version en développement
Si vous êtes désireux de participer au cycle actuel de développement, vous allez vouloir un chroot gutsy. Quelquefois, il se peut que la version en développement ne soit pas installable directement. Dans ce cas, il vous faut d'abord installer la dernière version stable, puis mettre à niveau vers la version en développement.
C'est le cas (actuellement pour Gutsy Gibbon). Voici donc la procédure :
- Créez un pbuilder Feisty : sudo pbuilder create
- Changez toutes les occurrences de feisty en gutsy dans /etc/pbuilderrc
- Mettez à jour le chroot : sudo pbuilder update –override-config
- Utilisez l'option –override-config à chaque mise à jour (tant que la version n'est pas prise en compte par pbuilder)
Pbuilders multiples
Quand on travaille sur des paquets, il est souvent nécessaire de disposer de plusieurs pbuilders sur sa machine. Par exemple pour rétro-porter vers Dapper et Edgy alors que l'on développe sous Feisty, ou encore pour tester les paquets sur Debian Sid à la recherche de bogues.
Pour ce faire, le fichier /usr/share/doc/pbuilder/examples/pbuilder-distribution.sh va vous aider. Il contient par défaut :
#!/bin/sh # script from Jamin W. Collins BTS: #255165 # name this script 'pbuilder-woody', 'pbuilder-sid', 'pbuilder-sarge', 'pbuilder-experimental' etc. OPERATION=$1 DISTRIBUTION=`basename $0 | cut -f2 -d '-'` PROCEED=false BASE_DIR="$HOME/pbuilder" case $OPERATION in create|update|build|clean|login|execute ) PROCEED=true ;; esac if ( $PROCEED == true ) then shift sudo pbuilder $OPERATION \ --basetgz $BASE_DIR/$DISTRIBUTION-base.tgz \ --distribution $DISTRIBUTION \ --buildresult $BASE_DIR/result $@ else echo "Invalid command..." echo "Valid commands are:" echo " create" echo " update" echo " build" echo " clean" echo " login" echo " execute" exit 1 fi
version améliorer avec config priver en personnalisant la config fonctionne sur Ubuntu Debian et Fedora l'exemple est donner pour la version LTS Ubuntu Jammy 22.04
mkdir -p $HOME/pbuilder nano $HOME/pbuilder/pbuilder-jammy
# pbuilder defaults; edit /etc/pbuilderrc to override these and see # pbuilderrc.5 for documentation #si sa marche pas changer $HOME en /home/votreutilisateur BASE_DIR="$HOME/pbuilder" #si la variable BASE_DIR ne marche pas remplacer la directement par /home/votreutilisateur DISTRIBUTION=jammy BASETGZ=$BASE_DIR/base-jammy.tgz ARCHITECTURE=amd64 EXTRAPACKAGES="wget nano curl" #export DEBIAN_BUILDARCH=athlon BUILDPLACE=$BASE_DIR/build-jammy BUILDDIR=$BASE_DIR/build-jammy BUILD_HOME=$BASE_DIR/nonexistent-jammy # For Ubuntu MIRRORSITE=http://archive.ubuntu.com/ubuntu # For Debian #MIRRORSITE=http://deb.debian.org/debian/ # For Ubuntu COMPONENTS="main restricted universe multiverse" # For Debian #COMPONENTS="main contrib non-free" # For Ubuntu OTHERMIRROR="deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse|deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse|deb-src http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse|deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse|deb-src http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse|deb http://archive.canonical.com/ubuntu jammy partner|deb-src http://archive.canonical.com/ubuntu jammy partner" # For Debian #OTHERMIRROR="deb-src http://deb.debian.org/debian/ bullseye main contrib non-free|deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free|deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free|deb http://deb.debian.org/debian-security/ bullseye/updates main contrib non-free|deb-src http://deb.debian.org/debian-security/ bullseye/updates main contrib non-free|deb http://deb.debian.org/debian bullseye-backports main contrib non-free|deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free" BUILDRESULT=$BASE_DIR/result-jammy/ APTCACHE="$BASE_DIR/aptcache-jammy/" HOOKDIR="$BASE_DIR/hooks-jammy" #export http_proxy=http://your-proxy:8080/ USESHM=yes USEPROC=yes USEDEVFS=no USEDEVPTS=yes USESYSFS=yes USENETWORK=no USECGROUP=yes APTCACHEHARDLINK="yes" REMOVEPACKAGES="" EATMYDATA=no export DEBIAN_FRONTEND="noninteractive" BUILDSOURCEROOTCMD="fakeroot" PBUILDERROOTCMD="sudo -E" #PDEBUILD_PBUILDER="cowbuilder" PBUILDERSATISFYDEPENDSCMD="/usr/lib/pbuilder/pbuilder-satisfydepends-apt" ALLOWUNTRUSTED=no export APTGETOPT=() export APTITUDEOPT=() DEBDELTA=no #DEBBUILDOPTS="-IXXX -iXXX" DEBBUILDOPTS="${DEBBUILDOPTS}" APTCONFDIR="" BUILDUSERNAME=pbuilder BUILDUSERID=$(grep $BUILDUSERNAME /etc/passwd | cut -d: -f3) BINDMOUNTS="" DEBOOTSTRAPOPTS=( '--variant=buildd' '--force-check-gpg' ) # or unset it to make it not a buildd type. # unset DEBOOTSTRAPOPTS # Keyrings to use for package verification with apt, not used for debootstrap # (use DEBOOTSTRAPOPTS). By default the debian-archive-keyring package inside # the chroot is used. APTKEYRINGS=() # Set the PATH I am going to use inside pbuilder: default is "/usr/sbin:/usr/bin:/sbin:/bin" export PATH="/usr/sbin:/usr/bin:/sbin:/bin" # SHELL variable is used inside pbuilder by commands like 'su'; and they need sane values export SHELL=/bin/bash # The name of debootstrap command, you might want "cdebootstrap". DEBOOTSTRAP="debootstrap" PKGNAME_LOGFILE_EXTENSION="_$(dpkg --print-architecture).build" PKGNAME_LOGFILE="" AUTOCLEANAPTCACHE="" COMPRESSPROG="gzip" # pbuilder copies some configuration files (like /etc/hosts or /etc/hostname) # from the host system into the chroot. If the directory specified here # exists and contains one of the copied files (without the leading /etc) that # file will be copied from here instead of the system one CONFDIR="/etc/pbuilder/conf_files" # ccache (make sure ccache is installed before uncommenting) CCACHEDIR="" # Note: CCACHEDIR is private to pbuilder, ccache uses "CCACHE_DIR" #CCACHEDIR="/var/cache/pbuilder/ccache" #export CCACHE_DIR="${CCACHEDIR}" #export PATH="/usr/lib/ccache:${PATH}" #EXTRAPACKAGES=ccache #BINDMOUNTS="${BINDMOUNTS} ${CCACHE_DIR}" LOGLEVEL=I USECOLORS=auto
installer le binaire
sudo nano /usr/bin/pbuilder-jammy
#!/bin/sh # script from Jamin W. Collins BTS: #255165 # script updated by andykimpe # name this script 'pbuilder-woody', 'pbuilder-sid', 'pbuilder-sarge', 'pbuilder-experimental' etc. OPERATION=$1 DISTRIBUTION=`basename $0 | cut -f2 -d '-'` PROCEED=false BASE_DIR="$HOME/pbuilder" case $OPERATION in create|update|build|clean|login|execute ) PROCEED=true ;; esac if ( $PROCEED == true ) then shift sudo pbuilder $OPERATION \ --basetgz $BASE_DIR/$DISTRIBUTION-base.tgz \ --buildplace $BASE_DIR/$DISTRIBUTION \ --configfile $BASE_DIR/pbuilder-$DISTRIBUTION \ --distribution $DISTRIBUTION \ --buildresult $BASE_DIR/result $@ else echo "Invalid command..." echo "Valid commands are:" echo " create" echo " update" echo " build" echo " clean" echo " login" echo " execute" exit 1 fi
utilisation de la version améliorer
Copiez ce fichier dans /usr/local/bin en remplaçant distribution par le nom de la version d'Ubuntu voulue.
Par exemple pour créer un pbuilder Dapper, vous le nommerez pbuilder-dapper :
sudo cp /usr/share/doc/pbuilder/examples/pbuilder-distribution.sh /usr/local/bin/pbuilder-dapper
Répertoire de base des pbuilders
Le dossier utilisé par défaut pour les pbuilders est /var/cache/pbuilder/. Nous allons donc modifier le script et remplacer la ligne
BASE_DIR="$HOME/pbuilder"
par
BASE_DIR="/var/cache/pbuilder"
Enfin, n'oubliez pas de rendre votre script exécutable :
sudo chmod +x /usr/local/bin/pbuilder-dapper
Enfin créez le chroot du pbuilder :
sudo pbuilder-dapper create