Projet

Général

Profil

GitPackagingSbuildPostInstall » Historique » Version 11

Version 10 (Daniel Dehennin, 29/10/2013 14:40) → Version 11/16 (Fabrice Barconnière, 20/05/2014 14:46)

h4. Configuration des outils Debian

Des optimisations de configuration permettent aux outils Debian "debconf":http://wiki.debian.org/debconf et "Apt":http://wiki.debian.org/Apt de fonctionner de façon optimale dans les schroots de compilation.

h5. Mode non interactif lors de l’installation des paquets

<pre>
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- \
/bin/bash -c 'echo "debconf debconf/priority select critical" | debconf-set-selections
echo "debconf debconf/frontend string noninteractive" | debconf-set-selections'
</pre>

h5. Ne pas installer les paquets recommandés et suggérés

<pre>
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- \
/bin/bash -c 'cat > /etc/apt/apt.conf.d/99no-install-recommends /etc/apt/apt.conf.d/no-install-recommends <<EOF
APT::Install-Recommends "False";
APT::Install-Suggests "False";
EOF'
</pre>

h5. Ne pas utiliser les diff des indexes de paquets

Ces fichiers permettent de diminuer la quantité de données téléchargées lors des @apt-get update@ mais peuvent faire planter l’outil @apt-get@ de temps en temps :

<pre>
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- \
/bin/bash -c 'cat > /etc/apt/apt.conf.d/90no-pdiff /etc/apt/apt.conf.d/no-pdiff <<EOF
Acquire::PDiffs "False";
EOF'
</pre>

h5. Forcer la mise à jour des fichiers de configuration

<pre>
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- \
/bin/bash -c 'echo "force-confnew" > /etc/dpkg/dpkg.cfg.d/force-confnew'
</pre>

h5. Configurer debfoster

L’outil "debfoster":http://packages.qa.debian.org/d/debfoster.html permet de garder un système propre.

<pre>
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- \
/bin/bash -c 'cat > /var/lib/debfoster/keepers <<EOF
build-essential
debfoster
eatmydata
sudo
EOF'
</pre>

h4. Gestion des alias

Nous venons de créer des schroots Ubuntu Lucid Lynx dans lesquels les builds seront effectués.

Il nous reste à déclarer que ces schroots seront utilisés pour compiler des paquets pour notre distribution, nos distributions en prenant en compte les variantes @-security@, @-updates@, @-proposed@ et @-dev@.

Cette étape est importante afin que les paquets compilés pour une distribution soient répartis dans la bonne distribution sur le dépôt de paquets "deb":https://fr.wikipedia.org/wiki/Deb.

La commande suivante créé un fichier @.changes@ contenant la distribution @eole-2.3-dev@, ce fichier étant utilisé pour le triage :
<pre>
buildd@build:~$ sbuild -d eole-2.3-dev $package_$version.dsc
</pre>

Nous configurons les alias en ajoutant une ligne:

<pre>
system@build:~$ sudo sed -i \
-e "/type=/ialiases=eole-2.3,eole-2.3-dev,eole-2.3-proposed,eole-2.3-security" \
/etc/schroot/chroot.d/$dist-$arch-sbuild*
</pre>

Les alias ci-dessus font que l’appel à @sbuild -d eole-2.3-dev@ utilisera l’architecture @AMD64@ par défaut.

La création d’un schroot @i386@ devrait ajouter des alias contenant l’architecture afin de ne pas entrer en conflit :
<pre>
system@build:~$ sudo sed -i \
-e "/type=/ialiases=eole-2.3-i386,eole-2.3-dev-i386,eole-2.3-proposed-i386,eole-2.3-security-i386" \
/etc/schroot/chroot.d/$dist-$arch-sbuild*
</pre>

Ainsi, la commande @sbuild -d eole-2.3-dev --arch=i386@ utilisera le schroot @i386@ et non le @AMD64@.

h4. Autoriser l’utilisateur system à installer des paquets dans les schroots

Il faut en premier lieu configurer @sudo@ :

<pre>
system@build:~$ sudo /bin/sh -c "cat >> `expr /etc/sudoers.d/apt` <<EOT
Cmnd_Alias APT_INSTALL = /usr/bin/apt-get install *, /usr/bin/dpkg -i *.deb
Cmnd_Alias APT_REMOVE = /usr/bin/apt-get remove *, /usr/bin/apt-get purge *
Cmnd_Alias APT_CLEAN = /usr/bin/apt-get clean, /usr/bin/apt-get --purge autoremove, /usr/bin/orphaner --purge
Cmnd_Alias APT_UPGRADE = /usr/bin/apt-get update, /usr/bin/apt-get upgrade, /usr/bin/apt-get dist-upgrade

system ALL=NOPASSWD : APT_INSTALL, APT_REMOVE, APT_CLEAN, APT_UPGRADE
EOT
"
</pre>

Il faut ensuite ajouter ce fichier à la liste des fichiers à copier dans les @schroot@ :
<pre>
system@build:~$ sudo /bin/sh -c "cat >> `expr /etc/schroot/sbuild/copyfile` <<EOT
/etc/sudoers.d/apt
EOT
"
</pre>

h4. Accélération de la création de paquet

Le système de packaging @dpkg@ utilise intensément l’appel systeme "fsync":http://manpages.ubuntu.com/manpages/precise/man2/fsync.2.html afin d’assurer au maximum la cohérence des systèmes de fichiers.

Cette frénésie de @fsync@ ralenti considérablement les accès disques et n’est pas primordiale lors de la compilation d’un paquet.

On peut donc installer le paquet "eatmydata":https://launchpad.net/ubuntu/+source/libeatmydata à l’intérieur des @schroot@ et les configurer pour inhiber les appels à @fsync@:

Pour "Lucid Lynx":https://launchpad.net/ubuntu/lucid/+source/libeatmydata, le paquet est disponible et supporté dans les @backports@ qui ne sont pas activé par défaut, on peut télécharger et installer le paquet manuellement.

<pre>
system@build:~$ EAT_URL=$([ "$arch" = "amd64" ] && echo 'http://launchpadlibrarian.net/68861934/eatmydata_26-2~lucid1_amd64.deb' || echo 'http://launchpadlibrarian.net/68861936/eatmydata_26-2~lucid1_i386.deb')
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- \
/bin/bash -c \
"apt-get install wget \
&& wget ${EAT_URL} \
&& dpkg -i eatmydata_26-2~lucid1_$arch.deb"
</pre>

Pour "Precise Pangolin":https://launchpad.net/ubuntu/precise/+source/libeatmydata le paquet est disponible dans les composants @universe@ qui a été activé lors de la création du @schroot@.

<pre>
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- \
/bin/bash -c \
"apt-get install eatmydata"
</pre>

Il faut ensuite ajouter une configuration au @schroot@ :

<pre>
system@build:~$ sudo /bin/sh -c "cat >> `expr /etc/schroot/chroot.d/$dist-$arch-sbuild*` <<EOT
command-prefix=eatmydata
EOT
"
</pre>

h4. Mettre à jour et nettoyer le schroot

Nous pouvons maintenant mettre à jour le schroot et supprimer les paquets inutiles :

<pre>
system@build:~$ sbuild-update -udcar source:$dist-$arch-sbuild
system@build:~$ schroot -u root -c source:$dist-$arch-sbuild -d /tmp -- debfoster -f
</pre>