Modifier l'AlternC de MarsNet
MarsNet dispose de sa propre version d'AlternC. Le code-source de cette dernière est géré à travers darcs, et les versions compilées sont disponibles sous forme de paquets Debian dans un dépôt Debian.
Adresses
- Dépôts darcs :
- Officiel (synchronisé avec le CVS) : http://cvs.alternc.org/darcs/
- Globenet : http://dev.globenet.org/darcs/
- MarsNet : http://www.marsnet.org/darcs/
- sur le disque du serveur, c'est dans /var/www/darcs
- Dépôt Debian de MarsNet : deb http://www.marsnet.org/debian sarge main
Darcs
Quelques généralités
Pour citer la page de Wikipedia sur darcs :
darcs est un logiciel de gestion de versions, qui sert donc à garder trace des versions successives d'un ensemble de fichiers (par exemple des sources d'un programme).
darcs appartient à la catégorie des systèmes de gestion de versions décentralisées. Chaque copie de travail est un dépôt complet, avec tout l'historique, dans lequel on peut enregistrer et grâce auquel on peut distribuer ses modifications.
darcs est écrit en langage Haskell, par David Roundy.
Comment l'utiliser ?
Le plus simple, c'est d'avoir un compte sur le serveur de MarsNet, mais on peut aussi travailler d'ailleurs. Avec darcs, un dépôt est complet. C'est à la fois un module, une branche et un répertoire de travail. On peut donc copier autant de fois que l'on veut un dépôt si on veut bien séparer les aspects sur lesquels on travaille. Toute la force de darcs est de faciliter ensuite la synchronisation des différents dépôts.
Récupération initiale
À partir de là, si on veut bosser sur le paquet alternc-changepass, il suffit de faire, dans son home :
darcs get /var/www/darcs/alternc-changepass
Hop, il aura créer un répertoire alternc-changepass dans lequel on va pouvoir travailler.
Derniers changements
Pour avoir la liste des derniers changements (on peut aussi passer l'interface web) :
darcs changes | less
Récupérer les modifs chez les autres
Il peut être bon de récupérer les derniers patchs intéressants dans les autres branches :
darcs pull http://cvs.alternc.org/darcs/alternc-changepass
darcs pull http://dev.globenet.org/darcs/alternc-changepass
Attention ! Il faut prendre le temps de choisir (on parle de cherry picking) ce qui est intéressant et ce qui ne l'est pas.
Faire ses propres modifications
Il suffit de modifier les fichiers sur lesquels on a envie de travailler !
Il y a tout de même quelques subtilités :
- quand on ajoute un fichier ou un répertoire, il faut utiliser darcs add pour que darcs le prenne en compte ;
- pour supprimer un fichier, par contre, rien de spécial à faire ;
- pour déplacer un fichier, il faut utiliser darcs mv. Ça permet à darcs de garder la trace du déplacement et de faciliter la synchronisation avec d'autres dépôts.
Une fois qu'on a fini de faire ce qu'on avait envie de faire, on utilise darcs record pour enregistrer la modification. En terme darcs, c'est enregistrer un patch.
darcs record demande pour chaque morceau de fichier modifier si on veut l'inclure dans le patch en création. C'est une étape très importante ! Un patch doit idéalement être le plus atomique possible : c'est-à-dire indépendant d'autres modifications que son but précis. Sinon, ça rend difficile, voir impossible à d'autres personnes de récupérer les modifications pour les intégrer à leur branche.
Par ailleurs, il faut prendre grand soin également du message accompagnant le patch. Sa description courte doit être brève mais résumer du mieux possible le but du patch. Idéalement, il faut l'avoir en tête avant même de commencer la modification !
Pour la description longue, c'est intéressant de raconter dans les grandes lignes pourquoi et comment la modification a été faite. Ne prenez pas la peine de lister les fichiers modifiés, on peut le savoir en regardant le contenu du patch. Par contre, ça peut être intéressant de mentionner pourquoi on a dû modifier un fichier, si jamais vous avez dû chercher pour le trouver.
Tout le but, encore une fois, c'est de faciliter la reprise en main par d'autres !
Publier une nouvelle version MarsNet
Lorsqu'on a fini de travailler sur une version « MarsNet » du module (se référer à la partie sur la création de paquets Debian), on peut la publier vers le reste du monde :
darcs push /var/www/darcs/alternc-changepass
Et comme d'habitude, on peut choisir ce qu'on y envoie, et autant choisir bien.
Paquets Debian
AlternC est utilisable sous forme de paquets Debian. Une fois les modifications effectuées, il faut donc créer un nouveau paquet Debian.
Pour ce faire :
- s'assurer que MarsNet est bien marqué comme Maintainer (responsable) du paquet.
- mettre à jour le changelog du paquet Debian.
- construire le paquet.
- envoyer le paquet dans le dépôt MarsNet.
Mettre MarsNet comme Maintainer
Concrètement, il faut veiller à ce que debian/control contiennent bien la ligne suivante :
Maintainer: MarsNet <root@mars.assodev.org>
Normalement, c'est déjà fait pour tous les dépôts déjà dans /var/www/darcs.
Mettre à jour le changelog du paquet Debian
Afin de pouvoir distinguer les paquets des versions officiels, le numéro de version doit toujours se finir par -marsnetX. Concrètement, si on reprend alternc-changepass 0.9.4, la première version de MarsNet sera la 0.9.4.1-marsnet1. La version suivante 0.9.4.1-marsnet2, etc.
Dans un paquet Debian, le numéro de version du paquet est extrait du fichier debian/changelog. On évite de modifier le fichier directement car on a un gentil script qui nous aide à le faire.
Pour la première version, on fait :
dch -v 0.9.4.1-marsnet1 -D stable
Pour les suivantes, il suffit de faire :
dch -i
Chaque étoile correspond à un nouveau point de modification. Il faut essayer d'être bref, mais pas trop : ça doit donner une bonne idée de ce qu'on gagne à installer le nouveau paquet.
Construire le paquet
C'est le plus facile :
debuild
Envoyer le paquet dans le dépôt Debian de MarsNet
Pas très compliqué non plus :
dput local ../alternc-changepass_alternc-changepass_0.9.4.1-marsnet1_i386.changes
5 minutes plus tard maximum, le paquet sera dans l'archive et un mail sera envoyé pour prévenir que le nouveau paquet est bien arrivé.
Exemples de sessions typiques de boulot
Intégration d'une correction en provenance de chez Globenet
On commence par créer un nouveau dépôt à partir de celui de MarsNet :
lucas@mars:~/tmp$ darcs get /var/www/darcs/alternc Copying patch 764 of 764... done! Finished getting. lucas@mars:~/tmp$ cd alternc/
On récupère les modifications en provenance du dépôt de Globenet. On ne choisit que celle qui nous intéresse (ici, la dernière) :
lucas@mars:~/tmp/alternc$ darcs pull http://dev.globenet.org/darcs/alternc/ Fri Sep 2 01:22:19 CEST 2005 lunar@anargeek.net * Disable disk usage calculation for directories in browser This operation takes too much time when directory are on NFS. Shall I pull this patch? (1/36) [ynWvxqadjk], or ? for help: n Sun Sep 4 01:44:39 CEST 2005 lunar@anargeek.net * Removed another "du" usage in browser (NFS issues) Shall I pull this patch? (2/36) [ynWvxqadjk], or ? for help: n Tue Sep 6 21:45:59 CEST 2005 lunar@anargeek.net * Update debian/changelog Shall I pull this patch? (3/36) [ynWvxqadjk], or ? for help: n Tue Sep 6 21:50:09 CEST 2005 lunar@anargeek.net * Adapt "Depends" to Globenet's need Shall I pull this patch? (4/36) [ynWvxqadjk], or ? for help: n Thu Sep 15 18:36:14 CEST 2005 jonathan@globenet.org * ./bureau/class/m_mysql.php: allow mysql users to connect from the web server Shall I pull this patch? (12/36) [ynWvxqadjk], or ? for help: n Fri Oct 14 14:02:31 CEST 2005 lunar@anargeek.net * Correct Section and Maintainer field for the Debian package Shall I pull this patch? (23/36) [ynWvxqadjk], or ? for help: n Fri Oct 28 12:05:17 CEST 2005 lunar@anargeek.net * Remove unnecessary calls to db_create The databases are located on a different server, so there is no way to access the database files. Shall I pull this patch? (30/36) [ynWvxqadjk], or ? for help: n Fri Nov 25 15:38:34 CET 2005 lunar@anargeek.net * Fix typo in change_host_ip (update_domains.sh) Shall I pull this patch? (34/36) [ynWvxqadjk], or ? for help: y Finished pulling.
On met à jour le changelog de Debian :
lucas@mars:~/tmp/alternc$ dch -i alternc (0.9.3.9-marsnet4) stable; urgency=low * Fix typo in change_host_ip (update_domains.sh). -- Admin MarsNet <lucas@mars.assodev.org> Fri, 25 Nov 2005 21:12:33 0100 [...]
On enregistre la modification du changelog dans l'historique du dépôt :
lucas@mars:~/tmp/alternc$ darcs record Darcs needs to know what name (conventionally an email address) to use as the patch author, e.g. 'Fred Bloggs <fred@bloggs.invalid>'. If you provide one now it will be stored in the file '_darcs/prefs/author' and used as a default in the future. To change your preferred author address, simply delete or edit this file. What is your email address? lucas@thinko.net hunk ./debian/changelog 1 alternc (0.9.3.9-marsnet4) stable; urgency=low * Fix typo in change_host_ip (update_domains.sh). -- Admin MarsNet <lucas@mars.assodev.org> Fri, 25 Nov 2005 21:12:33 0100 Shall I record this patch? (1/1) [ynWsfqadjk], or ? for help: y What is the patch name? Update Debian changelog Do you want to add a long comment? [yn] n Finished recording patch 'Update Debian changelog'
On marque ensuite le dépôt avec la version Debian pour pouvoir la retrouver ensuite plus facilement :
lucas@mars:~/tmp/alternc$ darcs tag What is the version name? 0.9.3.9-marsnet4 Finished tagging patch 'TAG 0.9.3.9-marsnet4'
On crée le paquet Debian :
lucas@mars:~/tmp/alternc$ debuild -uc -us dpkg-buildpackage: source package is alternc dpkg-buildpackage: source version is 0.9.3.9-marsnet4 dpkg-buildpackage: source maintainer is Admin MarsNet <lucas@mars.assodev.org> dpkg-buildpackage: host architecture is i386 [...]
On envoie le paquet dans le dépôt Debian de MarsNet :
lucas@mars:~/tmp/alternc$ dput local ../alternc_0.9.3.9-marsnet4_i386.changes Successfully uploaded packages. Not running dinstall.
On attend ensuite le prochain passage du script (quand l'heure se termine par 0 ou 5), et on met à jour :
lucas@mars:~/tmp/alternc$ sudo apt-get update Get:1 http://www.marsnet.org sarge/main Packages [1607B] Hit http://www.marsnet.org sarge/main Release Hit http://ftp2.fr.debian.org sarge/main Packages Hit http://ftp2.fr.debian.org sarge/main Release Hit http://ftp2.fr.debian.org sarge/main Sources Hit http://ftp2.fr.debian.org sarge/main Release Hit http://security.debian.org sarge/updates/main Packages Hit http://security.debian.org sarge/updates/main Release Fetched 1607B in 0s (4057B/s) Reading Package Lists... Done lucas@mars:~/tmp/alternc$ sudo apt-get upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages will be upgraded: alternc 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 556kB of archives. After unpacking 0B of additional disk space will be used. Do you want to continue? [Y/n] Y Get:1 http://www.marsnet.org sarge/main alternc 0.9.3.9-marsnet4 [556kB] Fetched 556kB in 0s (10.3MB/s) Preconfiguring packages ... (Reading database ... 46138 files and directories currently installed.) Preparing to replace alternc 0.9.3.9-marsnet3 (using .../alternc_0.9.3.9-marsnet4_i386.deb) ... Unpacking replacement alternc ... Setting up alternc (0.9.3.9-marsnet4) ... Updating /etc/alternc/local.sh checking for upgrades config phpmyadmin running alternc.install Restarting apache. Restarting apache-ssl. Reloading apache configuration. Reloading apache-ssl configuration. Reloading Postfix configuration...done. Stopping domain name service: named. Starting domain name service: named. Stopping Courier authdaemon: done. Starting Courier authdaemon: done. Stopping Courier IMAP server: imapd. Starting Courier IMAP server: imapd. Restarting Courier IMAP-SSL server: done. Stopping Courier POP3 server: pop3d. Starting Courier POP3 server: pop3d. Restarting Courier POP3-SSL server: done. Stopping SASL Authentication Daemon: saslauthd. Starting SASL Authentication Daemon: saslauthd. Reloading configuration files for periodic command scheduler: cron. Restarting ProFTPD ftp daemon.proftpd. ..proftpd. done. adding open_base_dir protection for:.
On est content, on renvoie les modification dans le dépôt darcs de MarsNet :
lucas@mars:~/tmp/alternc$ darcs push /var/www/darcs/alternc Fri Nov 25 15:38:34 CET 2005 lunar@anargeek.net * Fix typo in change_host_ip (update_domains.sh) Shall I push this patch? (1/3) [ynWvxqadjk], or ? for help: y Fri Nov 25 21:12:55 CET 2005 lucas@thinko.net * Update Debian changelog Shall I push this patch? (2/3) [ynWvxqadjk], or ? for help: y Fri Nov 25 21:14:11 CET 2005 lucas@thinko.net tagged 0.9.3.9-marsnet4 Shall I push this patch? (3/3) [ynWvxqadjk], or ? for help: y Finished applying...
Et voilà !
Il n'y a pas de commentaire sur cette page.
[Afficher commentaires/formulaire]