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




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 gère un ensemble de patches, chaque patch étant des opérations sur un ou plusieurs fichiers. Le patch est identifié par une chaîne de caractères choisis par son auteur. On peut donc, par exemple, ne copier sur un autre dépôt qu'une partie des patches, en donnant leurs noms. [...]
darcs gère la synchronisation entre deux dépôts (opérations push et pull) en s'appuyant sur sa théorie des patches qui décrit les opérations possibles entre patches, notamment la commutation.

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]