GitPackagingSbuildCommon » Historique » Version 3
Daniel Dehennin, 09/01/2012 13:50
Webographie à la fin
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 | 2 | 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 | 2 | Daniel Dehennin | system@build:~$ sudo adduser buildd |
38 | 2 | 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 | 2 | 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 | 2 | 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 | 2 | 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 | 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" |
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 | 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" |
89 | 2 | Daniel Dehennin | buildd@build:~$ sudo apt-get update |
90 | 2 | Daniel Dehennin | buildd@build:~$ sudo apt-get --force-yes -y install ubuntu-keyring |
91 | 2 | Daniel Dehennin | buildd@build:~$ sudo apt-key add /usr/share/keyrings/ubuntu-archive-keyring.gpg |
92 | 2 | 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 | 2 | Daniel Dehennin | buildd@build:~$ sudo lvcreate -L20g -n var+lib+sbuild+build ${YOUR_VG} |
102 | 2 | Daniel Dehennin | buildd@build:~$ sudo mkfs.ext4 -L /var/lib/sbuild/build -m0 /dev/${YOUR_VG}/var+lib+sbuild+build |
103 | 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" |
104 | 2 | 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 | 2 | 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 | 2 | Daniel Dehennin | buildd@build:~$ sudo sbuild-createchroot --keyring=/etc/apt/trusted.gpg \ |
143 | 2 | Daniel Dehennin | --arch=${arch} \ |
144 | 2 | Daniel Dehennin | --components=main,restricted,universe,multiverse \ |
145 | 2 | Daniel Dehennin | --include=sudo \ |
146 | 2 | Daniel Dehennin | ${dist} \ |
147 | 2 | Daniel Dehennin | /srv/chroot/${dist}-${arch}-sbuild \ |
148 | 2 | 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 | 2 | Daniel Dehennin | buildd@build:~$ sudo lvcreate -L2g -n ${dist}-${arch}-sbuild ${YOUR_VG} |
170 | 2 | Daniel Dehennin | buildd@build:~$ sudo mkfs.ext4 -m0 -L ${dist}-${arch}-sbuild /dev/${YOUR_VG}/${dist}-${arch}-sbuild |
171 | 2 | Daniel Dehennin | buildd@build:~$ sudo mkdir /srv/chroot/${dist}-${arch}-sbuild |
172 | 2 | 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 | 2 | Daniel Dehennin | buildd@build:~$ sudo sed -i -e "s,type=directory,type=lvm-snapshot," \ |
182 | 2 | Daniel Dehennin | -e "/directory=/d" \ |
183 | 2 | Daniel Dehennin | -e "/type=/ialiases=eole2.3,eole2.3-dev,eole-2.3-proposed,eole-2.3-security" \ |
184 | 2 | Daniel Dehennin | /etc/schroot/chroot.d/$dist-$arch-sbuild* |
185 | 2 | 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 | 2 | Daniel Dehennin | buildd@build:~$ sudo apt-get install btrfs-tools |
208 | 2 | Daniel Dehennin | buildd@build:~$ sudo lvcreate -L20g -n schroot ${YOUR_VG} |
209 | 2 | Daniel Dehennin | buildd@build:~$ sudo mkfs.btrfs -L schroot -m0 /dev/${YOUR_VG}/schroot |
210 | 2 | Daniel Dehennin | buildd@build:~$ sudo mkdir -p /srv/chroot |
211 | 2 | Daniel Dehennin | buildd@build:~$ sudo /bin/sh -c "echo /dev/${YOUR_VG}/schroot /srv/chroot btrfs rw,noatime 0 3 >> /etc/fstab" |
212 | 2 | 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 | 2 | 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 | 2 | Daniel Dehennin | buildd@build:~$ sudo mkdir -p /srv/chroot/snapshots |
230 | 2 | Daniel Dehennin | buildd@build:~$ sudo sed -i -e "s,type=directory,type=btrfs-snapshot,; /directory=/ d" \ |
231 | 2 | Daniel Dehennin | -e "/type=/ialiases=eole2.3,eole2.3-dev,eole-2.3-proposed,eole-2.3-security" \ |
232 | 2 | Daniel Dehennin | /etc/schroot/chroot.d/$dist-$arch-sbuild* |
233 | 2 | 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 | 2 | Daniel Dehennin | buildd@build:~$ sudo apt-get install git-core git-buildpackage fakeroot build-essential debhelper cdbs |
246 | 2 | Daniel Dehennin | buildd@build:~$ git clone http://dev-eole.ac-dijon.fr/git/eole-debsums |
247 | 2 | Daniel Dehennin | buildd@build:~$ cd eole-debsums |
248 | 2 | Daniel Dehennin | buildd@build:~$ git checkout -b dist/ubuntu/lucid/build origin/dist/ubuntu/lucid/master |
249 | 2 | 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 |