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 |