Projet

Général

Profil

GitPackagingSbuildCommon » Historique » Version 2

Daniel Dehennin, 09/01/2012 13:48
Environnement personnel de packaging

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