Projet

Général

Profil

GitPackaging » Historique » Version 10

« Précédent - Version 10/45 (diff) - Suivant » - Version actuelle
Daniel Dehennin, 18/01/2012 17:10
Split développeur/packageur/builder/dépôt


Gestion des paquets EOLE

Environnement de compilation personel

Il existe plusieurs outils afin de mettre en place des environnements de compilation personels.

L’outil utilisé dans le projet Debian se nomme sbuild.

Ce système peut se reposer sur un système de snapshot : on installe un système de base, propre, et la compilation se fait dans un snapshot temporarire de ce système.

Cela permet de lancer des compilations en parallèles au besoin.

Deux méthodes sont utilisables pour la mise en place des snapshots :

Lorsque les schroots sont en place et sbuild configuré, la compilation d’un paquet peut se dérouler comme suit :

buildd@build:~$ sudo apt-get install git-core git-buildpackage fakeroot build-essential debhelper cdbs
buildd@build:~$ git clone http://dev-eole.ac-dijon.fr/git/eole-debsums
buildd@build:~$ cd eole-debsums
buildd@build:~$ git checkout -b dist/ubuntu/lucid/build origin/dist/ubuntu/lucid/master
buildd@build:~$ git buildpackage --git-builder="sbuild -A -d eole-2.3-dev" --git-cleaner=/bin/true

TODO Proposition de workflow

Partie développeur

  1. Création d’un tag signé contenant un nouveau numéro de version
  2. Envoi du tag sur le dépôt central dev-eole

Partie packageur

  1. Fusion de la branche développeur dans la branche de packaging
  2. Création d’un tag signé contenant le nouveau numéro de version basé sur celui du développeur
  3. Envoi du tag sur le dépôt central dev-eole

Cette partie peut être automatisée si un mapping existe entre les branches de développement et les branches de packaging.
Dans ce cas, on pourra vérifier la signature du développeur.

Partie builder : gestion du source Debian

Le but de cette partie est de créer l’ensemble des fichiers sources Debian :

  • <PAQUET>_<VERSION SOURCE>.orig.tar.gz : Les sources non packagées (dans le répertoire debian/)
  • <PAQUET>_<VERSION DEBIAN>.debian.tar.gz : Le packaging des sources (le répertoire debian/)
  • <PAQUET>_<VERSION DEBIAN>.dsc : Description du paquet source Debian (doit être signé)
  • <PAQUET>_<VERSION DEBIAN>_source.changes : Description des changements (mixe entre l’entrée de debian/changelog de cette version et le fichier .dsc)
  1. Vérification de la signature: si nok => suppression du tag + report + quit
  2. Checkout du tag == récup de la conf gbp.conf
  3. Switch sur la branche de build
  4. Merge du tag dans la branche de build
  5. Mise à jour de debian/changelog :
    git-dch -a -R/-S debian/
  6. Ajout de debian/changelog à l’index pour le prochain commit :
    git add debian/changelog
  7. Commit en utilisant le numéro de version du nouveau paquet :
    git commit -m "Nouveau paquet debian version: $(dpkg-parsechangelog | awk '/^Version/ {print $2}')"
  8. Construction du source debian et envoi sur un dépôt debian, sans faire de nettoyage, ni de vérification de dépendance:
    git buildpackage \
      --git-builder="dpkg-buildpackage -nc -d -S" \
      --git-postbuild='dput eole "${GBP_CHANGES_FILE}"'
      --git-cleaner=/bin/true

Cette partie peut être automatisée.

Partie dépôt : gestion du source Debian

Cette partie peut être prise en charge automatiquement par différente méthode (section "Processing an incoming queue") :

L’utilisation de dput ou dupload requiert de mettre en place une configuration et des autorisation pour chaque « uploader ».

La solution inotify est le meilleur compromis :

  • Ne requiert une configuration qu’à un endroit ;
  • Prise en compte rapide des uploads.

Partie builder : gestion des paquets binaires

La construction des paquets binaires est dépendante de l’architecture déclarée dans debian/control :

  • Une seule fois pour les paquets déclarés avec l’architecture all
  • Pour chaque architecture supportée pour les paquets déclarés avec l’architecture any ou une liste d’architecture
  1. Téléchargement des sources depuis le dépôt :
    apt-get source <PAQUET>
  2. Construction du paquet en utilisant l’environnement de build correspondant à la distribution du paquet :
    cd <PAQUET>-<VERSION>/ \
      && sbuild -A -d $(dpkg-parsechangelog | awk '/^Distribution/ {print $2}')"
  3. Si build OK :
    1. On tag la version du paquet :
      git buildpackage --git-tag-only
    2. On envoi le tag sur le dépôt central :
      git push
    3. On supprime la branche de build qui est inutile
    4. On envoi le paquet sur le dépôt des paquets debian

Webographie

git-package - Fusion du développement dans une branche de packaging (4,25 ko) Daniel Dehennin, 14/03/2012 15:35