Projet

Général

Profil

GitPackagingSbuildCommon » Historique » Version 8

Version 7 (Daniel Dehennin, 10/01/2012 10:54) → Version 8/21 (Daniel Dehennin, 11/01/2012 18:50)

{{toc}}

h1. 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.

h2. 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

<pre>
system@build:~$ sudo apt-get install sbuild debootstrap
</pre>

h2. 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.

<pre>
system@build:~$ sudo adduser buildd
system@build:~$ sudo adduser buildd sudo
</pre>

h2. 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é :

<pre>
system@build:~$ sudo sbuild-adduser buildd
</pre>

h2. 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.

<pre>
buildd@build:~$ sbuild-update --keygen
</pre>

Afin de générer de l’entropie, j’exécute dans un autre terminal la
commande suivante :

<pre>
buildd@build:~$ find / -type f -exec sha512sum {} \; > /dev/null 2>&1
</pre>

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.

h2. Mutualisation du cache apt

<pre>
buildd@build:~$ sudo /bin/sh -c "echo /var/cache/apt/archives /var/cache/apt/archives none rw,bind 0 0 >>/etc/schroot/sbuild/fstab"
</pre>

h2. 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.

<pre>
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
</pre>

h2. 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.

<pre>
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
</pre>

h2. 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 ;

<pre>
buildd@buildd:~$ export YOUR_VG=build dist=lucid YOUR_VG@build dist@lucid arch=amd64
</pre>