Projet

Général

Profil

GitPackagingSbuildCommon » Historique » Version 4

Daniel Dehennin, 09/01/2012 14:01
Fix indentation

1 1 Daniel Dehennin
{{toc}}
2 1 Daniel Dehennin
3 1 Daniel Dehennin
4 2 Daniel Dehennin
h1. Mise en place d’un environnement de compilation personnel
5 1 Daniel Dehennin
6 2 Daniel Dehennin
Sur une machine dédiée au build, nous avons besoin :
7 1 Daniel Dehennin
8 2 Daniel Dehennin
* D’un utilisateur dédié au build ;
9 1 Daniel Dehennin
10 2 Daniel Dehennin
* D’un groupe de volume logique d’une taille suffisante pour les
11 2 Daniel Dehennin
  chroot ;
12 1 Daniel Dehennin
13 2 Daniel Dehennin
* De suffisamment d’espace libre sur le groupe de volume pour les
14 2 Daniel Dehennin
  snapshots.
15 2 Daniel Dehennin
16 2 Daniel Dehennin
h2. Installation des paquets nécessaires
17 2 Daniel Dehennin
18 2 Daniel Dehennin
Les deux paquets nécessaire à la création et la gestion des
19 2 Daniel Dehennin
environnements sont les suivants :
20 2 Daniel Dehennin
21 2 Daniel Dehennin
* sbuild: l’utilitaire de gestion des chroot
22 2 Daniel Dehennin
* debootstrap: l’utilitaire d’installation
23 2 Daniel Dehennin
24 2 Daniel Dehennin
<pre>
25 4 Daniel Dehennin
system@build:~$ sudo apt-get install sbuild debootstrap
26 2 Daniel Dehennin
</pre>
27 2 Daniel Dehennin
28 2 Daniel Dehennin
h2. Création d’un utilisateur pour le build
29 2 Daniel Dehennin
30 2 Daniel Dehennin
Ce dernier recevra les logs dans son répertoire personnel.
31 2 Daniel Dehennin
32 2 Daniel Dehennin
Il est cependant possible d’utiliser votre compte utilisateur, mais
33 2 Daniel Dehennin
sera indispensable lors de la mise en place d’un système de build
34 2 Daniel Dehennin
automatique.
35 2 Daniel Dehennin
36 2 Daniel Dehennin
<pre>
37 4 Daniel Dehennin
system@build:~$ sudo adduser buildd
38 4 Daniel Dehennin
system@build:~$ sudo adduser buildd sudo
39 2 Daniel Dehennin
</pre>
40 2 Daniel Dehennin
41 2 Daniel Dehennin
h2. Ajoute de l’utilisateur au groupe sbuild
42 2 Daniel Dehennin
43 2 Daniel Dehennin
L’accès aux outils de gestion de schroot est restreint aux membre du
44 2 Daniel Dehennin
groupe sbuild.
45 2 Daniel Dehennin
46 2 Daniel Dehennin
Exécuter la commande suivante et copier le fichier comme indiqué :
47 2 Daniel Dehennin
48 2 Daniel Dehennin
<pre>
49 4 Daniel Dehennin
system@build:~$ sudo sbuild-adduser buildd
50 2 Daniel Dehennin
</pre>
51 2 Daniel Dehennin
52 2 Daniel Dehennin
h2. Création d’une paire de clef GPG
53 2 Daniel Dehennin
54 2 Daniel Dehennin
L’outil sbuild créé des pseudos paquets pour la gestion des
55 2 Daniel Dehennin
Build-Depends lors de la construction des paquets.
56 2 Daniel Dehennin
57 2 Daniel Dehennin
Cette paire de clef est locale à la machine
58 2 Daniel Dehennin
(@/var/lib/sbuild/apt-keys@) et spécifique à la procédure de build, il
59 2 Daniel Dehennin
n’y a nullement lieu de la publier.
60 2 Daniel Dehennin
61 2 Daniel Dehennin
<pre>
62 4 Daniel Dehennin
buildd@build:~$ sbuild-update --keygen
63 2 Daniel Dehennin
</pre>
64 2 Daniel Dehennin
65 2 Daniel Dehennin
Afin de générer de l’entropie, j’exécute dans un autre terminal la
66 2 Daniel Dehennin
commande suivante :
67 2 Daniel Dehennin
68 2 Daniel Dehennin
<pre>
69 4 Daniel Dehennin
buildd@build:~$ find / -type f -exec sha512sum {} \; > /dev/null 2>&1
70 2 Daniel Dehennin
</pre>
71 2 Daniel Dehennin
72 2 Daniel Dehennin
Si vous êtes en SSH sur une machine (virtuelle ou physique), la frappe
73 2 Daniel Dehennin
de touche au clavier doit consommer autant d’entropie qu’elle n’en
74 2 Daniel Dehennin
fournie.
75 2 Daniel Dehennin
76 2 Daniel Dehennin
h2. Mutualisation du cache apt
77 2 Daniel Dehennin
78 2 Daniel Dehennin
<pre>
79 4 Daniel Dehennin
buildd@build:~$ sudo /bin/sh -c "echo /var/cache/apt/archives /var/cache/apt/archives none rw,bind 0 0 >>/etc/schroot/sbuild/fstab"
80 2 Daniel Dehennin
</pre>
81 2 Daniel Dehennin
82 2 Daniel Dehennin
h2. Récupération des clefs publiques des dépôts
83 2 Daniel Dehennin
84 2 Daniel Dehennin
La machine de build étant une debian, il faut utiliser un keyring
85 2 Daniel Dehennin
comprenant les clefs ubuntu et les clefs EOLE.
86 2 Daniel Dehennin
87 2 Daniel Dehennin
<pre>
88 4 Daniel Dehennin
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"
89 4 Daniel Dehennin
buildd@build:~$ sudo apt-get update
90 4 Daniel Dehennin
buildd@build:~$ sudo apt-get --force-yes -y install ubuntu-keyring
91 4 Daniel Dehennin
buildd@build:~$ sudo apt-key add /usr/share/keyrings/ubuntu-archive-keyring.gpg
92 4 Daniel Dehennin
buildd@build:~$ sudo apt-get update
93 2 Daniel Dehennin
</pre>
94 2 Daniel Dehennin
95 2 Daniel Dehennin
h2. Création d’un volume logique dédié aux builds
96 2 Daniel Dehennin
97 2 Daniel Dehennin
Ce volume sera monté dans chaque snapshot lors d’un build afin de ne
98 2 Daniel Dehennin
pas surcharger les snapshots de construction.
99 2 Daniel Dehennin
100 2 Daniel Dehennin
<pre>
101 4 Daniel Dehennin
buildd@build:~$ sudo lvcreate -L20g -n var+lib+sbuild+build ${YOUR_VG}
102 4 Daniel Dehennin
buildd@build:~$ sudo mkfs.ext4 -L /var/lib/sbuild/build -m0 /dev/${YOUR_VG}/var+lib+sbuild+build
103 4 Daniel Dehennin
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"
104 4 Daniel Dehennin
buildd@build:~$ sudo mount /var/lib/sbuild/build
105 2 Daniel Dehennin
</pre>
106 2 Daniel Dehennin
107 2 Daniel Dehennin
h2. Création des environnements de build
108 2 Daniel Dehennin
109 2 Daniel Dehennin
La gestion des environnements de build est faite par schroot et peut
110 2 Daniel Dehennin
utiliser plusieurs systèmes afin de partager une image de base et ainsi
111 2 Daniel Dehennin
gagner du temps lors des compilation :
112 2 Daniel Dehennin
113 2 Daniel Dehennin
* Les volumes logiques ;
114 2 Daniel Dehennin
* Le système de fichier @btrfs@.
115 2 Daniel Dehennin
116 2 Daniel Dehennin
Nous partirons du principe que :
117 2 Daniel Dehennin
118 2 Daniel Dehennin
* la variable d’environnement @${YOUR_VG}@ contient le nom de votre
119 2 Daniel Dehennin
  groupe de volume ;
120 2 Daniel Dehennin
121 2 Daniel Dehennin
* La variable d’environnement @${dist}@ contient le nom de la
122 2 Daniel Dehennin
  distribution ;
123 2 Daniel Dehennin
124 2 Daniel Dehennin
* La variable d’environnement @${arch}@ contient le nom de
125 2 Daniel Dehennin
  l’architecture ;
126 2 Daniel Dehennin
127 2 Daniel Dehennin
<pre>
128 4 Daniel Dehennin
buildd@buildd:~$ export YOUR_VG@build dist@lucid arch=amd64
129 2 Daniel Dehennin
</pre>
130 2 Daniel Dehennin
131 2 Daniel Dehennin
h3. Installation du système de base
132 2 Daniel Dehennin
133 2 Daniel Dehennin
La création du chroot en lui même est très simple mais nécessitera des
134 2 Daniel Dehennin
ajustements préalables décris ci-après en fonction du choix fait entre
135 2 Daniel Dehennin
@LVM@ et @btrfs@.
136 2 Daniel Dehennin
137 2 Daniel Dehennin
En assumant que le chroot doit être créer dans le répertoire
138 2 Daniel Dehennin
@/srv/chroot/${dist}-${arch}-sbuild/@, la commande pour installer le
139 2 Daniel Dehennin
chroot est la suivante :
140 2 Daniel Dehennin
141 2 Daniel Dehennin
<pre>
142 4 Daniel Dehennin
buildd@build:~$ sudo sbuild-createchroot --keyring=/etc/apt/trusted.gpg \
143 4 Daniel Dehennin
    --arch=${arch} \
144 4 Daniel Dehennin
    --components=main,restricted,universe,multiverse \
145 4 Daniel Dehennin
    --include=sudo \
146 4 Daniel Dehennin
    ${dist} \
147 4 Daniel Dehennin
    /srv/chroot/${dist}-${arch}-sbuild \
148 4 Daniel Dehennin
    http://eoleng.ac-dijon.fr/ubuntu
149 2 Daniel Dehennin
</pre>
150 2 Daniel Dehennin
151 2 Daniel Dehennin
L’utilisation de l’option @--components@ est importante pour la
152 2 Daniel Dehennin
résolution des dépendances.
153 2 Daniel Dehennin
154 2 Daniel Dehennin
155 2 Daniel Dehennin
h3. Utilisation de LVM
156 2 Daniel Dehennin
157 2 Daniel Dehennin
h4. Avant l’installation du chroot: création d’un volume logique
158 2 Daniel Dehennin
159 2 Daniel Dehennin
Dans le modèle @LVM@ chaque chroot est installé sur un volume logique
160 2 Daniel Dehennin
dédié.
161 2 Daniel Dehennin
162 2 Daniel Dehennin
La taille de ce volume doit pouvoir contenir :
163 2 Daniel Dehennin
164 2 Daniel Dehennin
* Un système minimal ;
165 2 Daniel Dehennin
166 2 Daniel Dehennin
* L’intégralité des dépendances pour la compilation d’un paquet.
167 2 Daniel Dehennin
168 2 Daniel Dehennin
<pre>
169 4 Daniel Dehennin
buildd@build:~$ sudo lvcreate -L2g -n ${dist}-${arch}-sbuild ${YOUR_VG}
170 4 Daniel Dehennin
buildd@build:~$ sudo mkfs.ext4 -m0 -L ${dist}-${arch}-sbuild /dev/${YOUR_VG}/${dist}-${arch}-sbuild
171 4 Daniel Dehennin
buildd@build:~$ sudo mkdir /srv/chroot/${dist}-${arch}-sbuild
172 4 Daniel Dehennin
buildd@build:~$ sudo mount /dev/${YOUR_VG}/${dist}-${arch}-sbuild /srv/chroot/${dist}-${arch}-sbuild
173 2 Daniel Dehennin
</pre>
174 2 Daniel Dehennin
175 2 Daniel Dehennin
h4. Adaptation post-installation
176 2 Daniel Dehennin
177 2 Daniel Dehennin
Nous devons adapter la configuration de @schroot@ à l’utilisation des
178 2 Daniel Dehennin
snapshot @LVM@ une fois le système installé :
179 2 Daniel Dehennin
180 2 Daniel Dehennin
<pre>
181 4 Daniel Dehennin
buildd@build:~$ sudo sed -i -e "s,type=directory,type=lvm-snapshot," \
182 4 Daniel Dehennin
    -e "/directory=/d" \
183 4 Daniel Dehennin
    -e "/type=/ialiases=eole2.3,eole2.3-dev,eole-2.3-proposed,eole-2.3-security" \
184 4 Daniel Dehennin
    /etc/schroot/chroot.d/$dist-$arch-sbuild*
185 4 Daniel Dehennin
buildd@build:~$ sudo /bin/sh -c "cat >> `expr /etc/schroot/chroot.d/$dist-$arch-sbuild*` <<EOT
186 2 Daniel Dehennin
lvm-snapshot-options=--size 2G
187 2 Daniel Dehennin
mount-options=-o noatime
188 2 Daniel Dehennin
device=/dev/${YOUR_VG}/$dist-$arch-sbuild
189 2 Daniel Dehennin
source-groups=root,sbuild
190 2 Daniel Dehennin
source-root-groups=root,sbuild
191 2 Daniel Dehennin
EOT
192 2 Daniel Dehennin
"
193 2 Daniel Dehennin
</pre>
194 2 Daniel Dehennin
195 2 Daniel Dehennin
196 2 Daniel Dehennin
h3. Utilisation du système de fichier btrfs
197 2 Daniel Dehennin
198 2 Daniel Dehennin
h4. Un volume logique pour tous les chroots
199 2 Daniel Dehennin
200 2 Daniel Dehennin
Ce volume contiendra les chroots des différents systèmes pour lesquels
201 2 Daniel Dehennin
vous ferez des compilation.
202 2 Daniel Dehennin
203 2 Daniel Dehennin
Un snapshot sera créé avant chaque build et détruit après, cela permet
204 2 Daniel Dehennin
de gagner le temps du debootstrap.
205 2 Daniel Dehennin
206 2 Daniel Dehennin
<pre>
207 4 Daniel Dehennin
buildd@build:~$ sudo apt-get install btrfs-tools
208 4 Daniel Dehennin
buildd@build:~$ sudo lvcreate -L20g -n schroot ${YOUR_VG}
209 4 Daniel Dehennin
buildd@build:~$ sudo mkfs.btrfs -L schroot -m0 /dev/${YOUR_VG}/schroot
210 4 Daniel Dehennin
buildd@build:~$ sudo mkdir -p /srv/chroot
211 4 Daniel Dehennin
buildd@build:~$ sudo /bin/sh -c "echo /dev/${YOUR_VG}/schroot /srv/chroot btrfs rw,noatime 0 3 >> /etc/fstab"
212 4 Daniel Dehennin
buildd@build:~$ sudo mount /srv/chroot
213 2 Daniel Dehennin
</pre>
214 2 Daniel Dehennin
215 2 Daniel Dehennin
h4. Création d’un sous volume par chroot
216 2 Daniel Dehennin
217 2 Daniel Dehennin
Il est nécessaire de mettre en place un sous volume par distribution/architecture
218 2 Daniel Dehennin
219 2 Daniel Dehennin
<pre>
220 4 Daniel Dehennin
buildd@buildd:~$ sudo btrfs subvolume create /srv/chroot/${dist}-${arch}-sbuild
221 2 Daniel Dehennin
</pre>
222 2 Daniel Dehennin
223 2 Daniel Dehennin
h4. Adaptation de schroot pour @btrfs@
224 2 Daniel Dehennin
225 2 Daniel Dehennin
Nous devons ensuite adapter la configuration de @schroot@ à
226 2 Daniel Dehennin
l’utilisation des snapshot @btrfs@ :
227 2 Daniel Dehennin
228 2 Daniel Dehennin
<pre>
229 4 Daniel Dehennin
buildd@build:~$ sudo mkdir -p /srv/chroot/snapshots
230 4 Daniel Dehennin
buildd@build:~$ sudo sed -i -e "s,type=directory,type=btrfs-snapshot,; /directory=/ d" \
231 4 Daniel Dehennin
    -e "/type=/ialiases=eole2.3,eole2.3-dev,eole-2.3-proposed,eole-2.3-security" \
232 4 Daniel Dehennin
    /etc/schroot/chroot.d/$dist-$arch-sbuild*
233 4 Daniel Dehennin
buildd@build:~$ sudo /bin/sh -c "cat >> `expr /etc/schroot/chroot.d/$dist-$arch-sbuild*` <<EOT
234 2 Daniel Dehennin
btrfs-source-subvolume=/srv/chroot/$dist-$arch-sbuild
235 2 Daniel Dehennin
btrfs-snapshot-directory=/srv/chroot/snapshots
236 2 Daniel Dehennin
EOT
237 2 Daniel Dehennin
"
238 2 Daniel Dehennin
</pre>
239 2 Daniel Dehennin
240 2 Daniel Dehennin
h3. Utilisation d’un environnement de compilation personnel
241 2 Daniel Dehennin
242 2 Daniel Dehennin
Le plus simple c’est la pratique :
243 2 Daniel Dehennin
244 2 Daniel Dehennin
<pre>
245 4 Daniel Dehennin
buildd@build:~$ sudo apt-get install git-core git-buildpackage fakeroot build-essential debhelper cdbs
246 4 Daniel Dehennin
buildd@build:~$ git clone http://dev-eole.ac-dijon.fr/git/eole-debsums
247 4 Daniel Dehennin
buildd@build:~$ cd eole-debsums
248 4 Daniel Dehennin
buildd@build:~$ git checkout -b dist/ubuntu/lucid/build origin/dist/ubuntu/lucid/master
249 4 Daniel Dehennin
buildd@build:~$ git buildpackage --git-builder="sbuild -A -d eole2.3-dev" --git-cleaner=/bin/true
250 2 Daniel Dehennin
</pre>
251 2 Daniel Dehennin
252 2 Daniel Dehennin
h1. Séparation code/packaging
253 2 Daniel Dehennin
254 2 Daniel Dehennin
h1. Packaging en 3 manches
255 2 Daniel Dehennin
256 2 Daniel Dehennin
h2. Gestion du packaging
257 2 Daniel Dehennin
258 2 Daniel Dehennin
h2. Gestion de @debian/changelog@
259 2 Daniel Dehennin
260 2 Daniel Dehennin
h2. Compilation du paquet
261 1 Daniel Dehennin
262 1 Daniel Dehennin
h1. Webographie
263 1 Daniel Dehennin
264 3 Daniel Dehennin
265 3 Daniel Dehennin
* "sbuild sur le wiki debian":http://wiki.debian.org/sbuild, 
266 3 Daniel Dehennin
* "Debian build setup":https://buildd.debian.org/docs/buildd-setup.txt
267 3 Daniel Dehennin
* "Space-efficient reproducible builds using schroot, sbuild and LVM":http://www.pseudorandom.co.uk/2007/sbuild/
268 1 Daniel Dehennin
* "Debian wiki on Packaging with git":http://wiki.debian.org/PackagingWithGit
269 1 Daniel Dehennin
* "Russ Allbery use case":http://www.eyrie.org/~eagle/notes/debian/git.html
270 1 Daniel Dehennin
* "My use case":http://lists.alioth.debian.org/pipermail/vcs-pkg-discuss/2011-November/000817.html