Projet

Général

Profil

GitPackagingSbuildPostInstall » Historique » Version 2

« Précédent - Version 2/16 (diff) - Suivant » - Version actuelle
Daniel Dehennin, 22/11/2012 18:54
Gestion des alias + installer des paquets dans les schroots + accélérer les build


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.

La commande suivante créé un fichier .changes contenant la distribution eole-2.3-dev, ce fichier étant utilisé pour le triage :

buildd@build:~$ sbuild -d eole-2.3-dev $package_$version.dsc

Nous configurons les alias en ajoutant une ligne:

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*

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 :

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*

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

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

Il faut en premier lieu configurer sudo :

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

Il faut ensuite ajouter ce fichier à la liste des fichiers à copier dans les schroot :

system@build:~$ sudo /bin/sh -c "cat >> `expr /etc/schroot/sbuild/copyfile` <<EOT
/etc/sudoers.d/apt
EOT
" 

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

Le système de packaging dpkg utilise intensément l’appel systeme fsync 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 à l’intérieur des schroot et les configurer pour inhiber les appels à fsync:

  • Pour i386 :
    EAT_URL='http://launchpadlibrarian.net/68861936/eatmydata_26-2~lucid1_i386.deb'
  • Pour amd64 :
    EAT_URL='http://launchpadlibrarian.net/68861934/eatmydata_26-2~lucid1_amd64.deb'
buildd@build:~$ schroot -c source:$dist-$arch-sbuild -- \
    /bin/bash -c \
        "sudo apt-get install wget \
            && wget ${EAT_URL} \
            && sudo dpkg -i eatmydata_26-2~lucid1_$arch.deb" 

Il faut ensuite ajouter une configuration au schroot :

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