GitPackagingSbuildCommon » Historique » Version 6
« Précédent -
Version 6/21
(diff) -
Suivant » -
Version actuelle
Daniel Dehennin, 10/01/2012 10:46
Utilisation d’un include pour la création du système de base
- Mise en place d’un environnement de compilation personnel
- Installation des paquets nécessaires
- Création d’un utilisateur pour le build
- Ajoute de l’utilisateur au groupe sbuild
- Création d’une paire de clef GPG
- Mutualisation du cache apt
- Récupération des clefs publiques des dépôts
- Création d’un volume logique dédié aux builds
- Création des environnements de build
- Séparation code/packaging
- Packaging en 3 manches
- Webographie
Mise en place d’un environnement de compilation personnel¶
Sur une machine dédiée au build, nous avons besoin :
- D’un utilisateur dédié au build ;
- D’un groupe de volume logique d’une taille suffisante pour les
chroot ;
- De suffisamment d’espace libre sur le groupe de volume pour les
snapshots.
Installation des paquets nécessaires¶
Les deux paquets nécessaire à la création et la gestion des
environnements sont les suivants :
- sbuild: l’utilitaire de gestion des chroot
- debootstrap: l’utilitaire d’installation
system@build:~$ sudo apt-get install sbuild debootstrap
Création d’un utilisateur pour le build¶
Ce dernier recevra les logs dans son répertoire personnel.
Il est cependant possible d’utiliser votre compte utilisateur, mais
sera indispensable lors de la mise en place d’un système de build
automatique.
system@build:~$ sudo adduser buildd system@build:~$ sudo adduser buildd sudo
Ajoute de l’utilisateur au groupe sbuild¶
L’accès aux outils de gestion de schroot est restreint aux membres du
groupe sbuild.
Exécuter la commande suivante et copier le fichier comme indiqué :
system@build:~$ sudo sbuild-adduser buildd
Création d’une paire de clef GPG¶
L’outil sbuild créé des pseudos paquets pour la gestion des
Build-Depends lors de la construction des paquets.
Cette paire de clef est locale à la machine
(/var/lib/sbuild/apt-keys
) et spécifique à la procédure de build, il
n’y a nullement lieu de la publier.
buildd@build:~$ sbuild-update --keygen
Afin de générer de l’entropie, j’exécute dans un autre terminal la
commande suivante :
buildd@build:~$ find / -type f -exec sha512sum {} \; > /dev/null 2>&1
Si vous êtes en SSH sur une machine (virtuelle ou physique), la frappe
de touche au clavier doit consommer autant d’entropie qu’elle n’en
fournie.
Mutualisation du cache apt¶
buildd@build:~$ sudo /bin/sh -c "echo /var/cache/apt/archives /var/cache/apt/archives none rw,bind 0 0 >>/etc/schroot/sbuild/fstab"
Récupération des clefs publiques des dépôts¶
La machine de build étant une debian, il faut utiliser un keyring
comprenant les clefs ubuntu et les clefs EOLE.
buildd@build:~$ sudo /bin/sh -c "echo deb http://eoleng.ac-dijon.fr/eoleng/ eole-2.3/all/ >> /etc/apt/sources.list.d/eole.list" buildd@build:~$ sudo apt-get update buildd@build:~$ sudo apt-get --force-yes -y install ubuntu-keyring buildd@build:~$ sudo apt-key add /usr/share/keyrings/ubuntu-archive-keyring.gpg buildd@build:~$ sudo apt-get update
Création d’un volume logique dédié aux builds¶
Ce volume sera monté dans chaque snapshot lors d’un build afin de ne
pas surcharger les snapshots de construction.
buildd@build:~$ sudo lvcreate -L20g -n var+lib+sbuild+build ${YOUR_VG} buildd@build:~$ sudo mkfs.ext4 -L /var/lib/sbuild/build -m0 /dev/${YOUR_VG}/var+lib+sbuild+build buildd@build:~$ sudo /bin/sh -c "echo /dev/${YOUR_VG}/var+lib+sbuild+build /var/lib/sbuild/build ext4 rw,noatime 0 2 >> /etc/fstab" buildd@build:~$ sudo mount /var/lib/sbuild/build
Création des environnements de build¶
La gestion des environnements de build est faite par schroot et peut
utiliser plusieurs systèmes afin de partager une image de base et ainsi
gagner du temps lors des compilation :
- Les volumes logiques ;
- Le système de fichier
btrfs
.
Nous partirons du principe que :
- la variable d’environnement
${YOUR_VG}
contient le nom de votre
groupe de volume ;
- La variable d’environnement
${dist}
contient le nom de la
distribution ;
- La variable d’environnement
${arch}
contient le nom de
l’architecture ;
buildd@buildd:~$ export YOUR_VG@build dist@lucid arch=amd64
Installation du système de base¶
La création du chroot en lui même est très simple mais nécessitera des
ajustements préalables décris ci-après en fonction du choix fait entreLVM
et btrfs
.
En assumant que le chroot doit être créer dans le répertoire/srv/chroot/${dist}-${arch}-sbuild/
, la commande pour installer le
chroot est la suivante :
system@build:~$ sudo sbuild-createchroot --keyring /etc/apt/trusted.gpg.d/sbuild.gpg \ --arch=${arch} \ --components=main,restricted,universe,multiverse \ ${dist} \ /srv/chroot/${dist}-${arch}-sbuild \ http://eoleng.ac-dijon.fr/ubuntu
L’utilisation de l’option --components
est importante pour la
résolution des dépendances.
Utilisation de LVM¶
Avant l’installation du chroot: création d’un volume logique¶
Dans le modèle LVM
chaque chroot est installé sur un volume logique
dédié.
La taille de ce volume doit pouvoir contenir :
- Un système minimal ;
- L’intégralité des dépendances pour la compilation d’un paquet.
buildd@build:~$ sudo lvcreate -L2g -n ${dist}-${arch}-sbuild ${YOUR_VG} buildd@build:~$ sudo mkfs.ext4 -m0 -L ${dist}-${arch}-sbuild /dev/${YOUR_VG}/${dist}-${arch}-sbuild buildd@build:~$ sudo mkdir /srv/chroot/${dist}-${arch}-sbuild buildd@build:~$ sudo mount /dev/${YOUR_VG}/${dist}-${arch}-sbuild /srv/chroot/${dist}-${arch}-sbuild
Adaptation post-installation¶
Nous devons adapter la configuration de schroot
à l’utilisation des
snapshot LVM
une fois le système installé :
buildd@build:~$ sudo sed -i -e "s,type=directory,type=lvm-snapshot," \ -e "/directory=/d" \ -e "/type=/ialiases=eole2.3,eole2.3-dev,eole-2.3-proposed,eole-2.3-security" \ /etc/schroot/chroot.d/$dist-$arch-sbuild* buildd@build:~$ sudo /bin/sh -c "cat >> `expr /etc/schroot/chroot.d/$dist-$arch-sbuild*` <<EOT lvm-snapshot-options=--size 2G mount-options=-o noatime device=/dev/${YOUR_VG}/$dist-$arch-sbuild source-groups=root,sbuild source-root-groups=root,sbuild EOT "
Utilisation du système de fichier btrfs¶
Un volume logique pour tous les chroots¶
Ce volume contiendra les chroots des différents systèmes pour lesquels
vous ferez des compilation.
Un snapshot sera créé avant chaque build et détruit après, cela permet
de gagner le temps du debootstrap.
buildd@build:~$ sudo apt-get install btrfs-tools buildd@build:~$ sudo lvcreate -L20g -n schroot ${YOUR_VG} buildd@build:~$ sudo mkfs.btrfs -L schroot -m0 /dev/${YOUR_VG}/schroot buildd@build:~$ sudo mkdir -p /srv/chroot buildd@build:~$ sudo /bin/sh -c "echo /dev/${YOUR_VG}/schroot /srv/chroot btrfs rw,noatime 0 3 >> /etc/fstab" buildd@build:~$ sudo mount /srv/chroot
Création d’un sous volume par chroot¶
Il est nécessaire de mettre en place un sous volume par distribution/architecture
buildd@buildd:~$ sudo btrfs subvolume create /srv/chroot/${dist}-${arch}-sbuild
Adaptation de schroot pour btrfs
¶
Nous devons ensuite adapter la configuration de schroot
à
l’utilisation des snapshot btrfs
:
buildd@build:~$ sudo mkdir -p /srv/chroot/snapshots buildd@build:~$ sudo sed -i -e "s,type=directory,type=btrfs-snapshot,; /directory=/ d" \ -e "/type=/ialiases=eole2.3,eole2.3-dev,eole-2.3-proposed,eole-2.3-security" \ /etc/schroot/chroot.d/$dist-$arch-sbuild* buildd@build:~$ sudo /bin/sh -c "cat >> `expr /etc/schroot/chroot.d/$dist-$arch-sbuild*` <<EOT btrfs-source-subvolume=/srv/chroot/$dist-$arch-sbuild btrfs-snapshot-directory=/srv/chroot/snapshots EOT "
Utilisation d’un environnement de compilation personnel¶
Le plus simple c’est la pratique :
buildd@build:~$ sudo apt-get install git-core git-buildpackage fakeroot build-essential debhelper cdbs buildd@build:~$ git clone http://dev-eole.ac-dijon.fr/git/eole-debsums buildd@build:~$ cd eole-debsums buildd@build:~$ git checkout -b dist/ubuntu/lucid/build origin/dist/ubuntu/lucid/master buildd@build:~$ git buildpackage --git-builder="sbuild -A -d eole2.3-dev" --git-cleaner=/bin/true