Modifier l'AlternC de MarsNet


MarsNet dispose de sa propre version d'AlternC. Le code-source de cette dernire est gr travers darcs, et les versions compiles sont disponibles sous forme de paquets Debian dans un dpt Debian.

Adresses




Darcs


Quelques gnralits


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 catgorie des systmes de gestion de versions dcentralises. Chaque copie de travail est un dpt complet, avec tout l'historique, dans lequel on peut enregistrer et grce auquel on peut distribuer ses modifications.
darcs gre un ensemble de patches, chaque patch tant des oprations sur un ou plusieurs fichiers. Le patch est identifi par une chane de caractres choisis par son auteur. On peut donc, par exemple, ne copier sur un autre dpt qu'une partie des patches, en donnant leurs noms. [...]
darcs gre la synchronisation entre deux dpts (oprations push et pull) en s'appuyant sur sa thorie des patches qui dcrit les oprations 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 dpt est complet. C'est la fois un module, une branche et un rpertoire de travail. On peut donc copier autant de fois que l'on veut un dpt si on veut bien sparer les aspects sur lesquels on travaille. Toute la force de darcs est de faciliter ensuite la synchronisation des diffrents dpts.

Rcupration 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 crer un rpertoire 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

Rcuprer les modifs chez les autres

Il peut tre bon de rcuprer les derniers patchs intressants 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 intressant 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 mme quelques subtilits :
  • quand on ajoute un fichier ou un rpertoire, il faut utiliser darcs add pour que darcs le prenne en compte ;
  • pour supprimer un fichier, par contre, rien de spcial faire ;
  • pour dplacer un fichier, il faut utiliser darcs mv. a permet darcs de garder la trace du dplacement et de faciliter la synchronisation avec d'autres dpts.

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 cration. C'est une tape trs importante ! Un patch doit idalement tre le plus atomique possible : c'est--dire indpendant d'autres modifications que son but prcis. Sinon, a rend difficile, voir impossible d'autres personnes de rcuprer les modifications pour les intgrer leur branche.

Par ailleurs, il faut prendre grand soin galement du message accompagnant le patch. Sa description courte doit tre brve mais rsumer du mieux possible le but du patch. Idalement, il faut l'avoir en tte avant mme de commencer la modification !

Pour la description longue, c'est intressant de raconter dans les grandes lignes pourquoi et comment la modification a t faite. Ne prenez pas la peine de lister les fichiers modifis, on peut le savoir en regardant le contenu du patch. Par contre, a peut tre intressant 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 rfrer la partie sur la cration 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 effectues, il faut donc crer 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 dpt MarsNet.

Mettre MarsNet comme Maintainer

Concrtement, il faut veiller ce que debian/control contiennent bien la ligne suivante :

Maintainer: MarsNet <root@mars.assodev.org>

Normalement, c'est dj fait pour tous les dpts dj dans /var/www/darcs.

Mettre jour le changelog du paquet Debian

Afin de pouvoir distinguer les paquets des versions officiels, le numro de version doit toujours se finir par -marsnetX. Concrtement, si on reprend alternc-changepass 0.9.4, la premire version de MarsNet sera la 0.9.4.1-marsnet1. La version suivante 0.9.4.1-marsnet2, etc.

Dans un paquet Debian, le numro 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 premire 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 ide de ce qu'on gagne installer le nouveau paquet.

Construire le paquet

C'est le plus facile :

debuild

Envoyer le paquet dans le dpt Debian de MarsNet

Pas trs 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 prvenir que le nouveau paquet est bien arriv.

Exemples de sessions typiques de boulot


Intgration d'une correction en provenance de chez Globenet


On commence par crer un nouveau dpt 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 rcupre les modifications en provenance du dpt de Globenet. On ne choisit que celle qui nous intresse (ici, la dernire) :
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 dpt :

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 dpt 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 cre 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 dpt 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 dpt 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]