<p class="spip">Lors de cette réunion, il y avait 9 personnes :
<br /></p>
<li> 6 membres : Alexis, Jibux, Laurent, Christophe, Jean, Tony et Mircea
<br /><li> 2 visiteurs : Julien et David
<h2>2 visiteurs</h2>
<br /><li> Julien sous Kubuntu depuis 4 mois
<br /><li> David sous Kubuntu mais connaît Linux depuis 5 ans
<p class="spip">Ils sont tous les deux à l’école d’ingénieur d’électronique et d’informatique de Dijon. Ils sont venus pour découvrir l’association et pour suivre l’atelier.</p>

<h2>Atelier de création de paquets Debian présenté par Alexis</h2>
<p class="spip">Le but de cet atelier était de découvrir la structure d’un paquet Debian et de créer un paquet simple.</p>

<h3>Nom d’un paquet Debian</h3>
<p class="spip">Pour découvrir la structure d’un paquet Debian, nous sommes partis du paquet officiel réalisé par Alexis :
<br /></p>
<li> <a href="http://packages.debian.org/stable/text/ffe" class="spip_out">http://packages.debian.org/stable/text/ffe</a>
<p class="spip">Pour commencer voici comment se décompose le nom du paquet « ffe_0.2.1-1_i386.deb » :
<br /></p>
<li> ffe : Nom du programme
<br /><li> 0.2.1 : Version du programme
<br /><li> -1 : Version du paquet Debian 
<br /><li> i386 : Système pour lequel ce paquet fonctionne
<h3>Structure d’un paquet Debian</h3>
<p class="spip">La commande suivante permet de déterminer le type du fichier téléchargé :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ file ffe_0.1.6-1_i386.deb<br />
ffe_0.1.6-1_i386.deb: Debian binary package (format 2.0)</code></div>
<p class="spip">L’option « -k » permet d’obtenir plus d’infirmations sur le type du fichier. Dans ce cas, nous voyons qu’il s’agit d’un fichier archive de type « ar » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ file -k ffe_0.1.6-1_i386.deb<br />
ffe_0.1.6-1_i386.deb: Debian binary package (format 2.0)\012- current ar archive\012-<br />
 archive file\012- Assembler source</code></div>
<p class="spip">Un paquet Debian est donc une archive de type « ar ». Cette commande permet d’afficher le contenu de l’archive et donc du paquet Debian :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ ar -t ffe_0.1.6-1_i386.deb<br />
debian-binary<br />
control.tar.gz<br />
data.tar.gz</code></div>
<p class="spip">Et cette commande permet d’extraire le contenu de l’archive :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ ar -x ffe_0.1.6-1_i386.deb</code></p>

<p class="spip">Nous commençons par analyser le contenu du fichier « control.tar.gz » qui est également un fichier archive au format .tar.gz que nous décompressons :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ tar -xvzf control.tar.gz<br />
./<br />
./md5sums<br />
./control</code></div>
<p class="spip">Nous affichons le contenu du fichier « control » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ cat control<br />
Package: ffe<br />
Version: 0.1.6-1<br />
Section: text<br />
Priority: optional<br />
Architecture: i386<br />
Depends: libc6 (>= 2.3.6-6)<br />
Installed-Size: 100<br />
Maintainer: Alexis Bezverkhyy <[bezverky@gmail.com->mailto:bezverky@gmail.com]><br />
Description: Tool for parsing flat and CSV files and converting them to different<br />
formats<br />
 Ffe has many areas of use with fixed lenth and CSV files. It can extract<br />
 particular fields or records from a flat file, convert data from one format<br />
 to an other (CSV to fixed lenth, ...), display flat file content in human<br />
 readable form, etc. In addition, one input file can contain several types of<br />
 records (lines) and the input file structure and output definitions are<br />
 independent, meaning one output format can be used with several input files.<br />
 This input file structure and output format are 'freely' configurable,<br />
 so the output can be formatted e.g. as: fixed length, separated, tokenized,<br />
 XML, SQL,...<br />
 .<br />
 Homepage: http://ff-extractor.sourceforge.net/</code></div>
<p class="spip">Ce fichier contient donc des informations importantes comme :
<br /></p>
<li> La version du programme
<br /><li> Ses dépendances
<br /><li> Le nom du mainteneur
<br /><li> La description du programme
<p class="spip">Nous regardons ensuite le contenu du ficher « <strong class="spip"> md5sums </strong> » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ cat md5sums<br />
8f3466a2d1e9b58a3f73fe4557a36b0e  usr/bin/ffe<br />
a52294736234ced6b07d9740a39716fb  usr/share/doc/ffe/ffe.html<br />
45a9c44690a99e2083851b6ce8931e18  usr/share/doc/ffe/changelog.gz<br />
836c88730ed63916289e7bbad26ee422  usr/share/doc/ffe/NEWS.gz<br />
2f151768c3a0974cfc681337e78f3211  usr/share/doc/ffe/README<br />
6f433ade0f9971c778ae3080923bad6b  usr/share/doc/ffe/AUTHORS<br />
01948ff1b19dead9772d5aeea131c669  usr/share/doc/ffe/copyright<br />
bc03a498b55149d36b1c4008e687e571  usr/share/doc/ffe/changelog.Debian.gz<br />
c63ce234c530fc5c26d1b7bf3fed3d92  usr/share/info/ffe.info.gz<br />
3038e20aba1ca199d948d19289747264  usr/share/man/man1/ffe.1.gz</code></div>
<p class="spip">Ce fichier contient donc la somme md5 de chaque fichier contenu dans l’archive. Ces sommes md5 permettent de contrôler que le paquet n’est pas corrompu ou piraté.</p>

<p class="spip">Ensuite, nous décompressons l’archive « <strong class="spip">data.tar.gz </strong> » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ tar -xvzf data.tar.gz<br />
./<br />
./usr/<br />
./usr/bin/<br />
./usr/bin/ffe<br />
./usr/share/<br />
./usr/share/doc/<br />
./usr/share/doc/ffe/<br />
./usr/share/doc/ffe/ffe.html<br />
./usr/share/doc/ffe/changelog.gz<br />
./usr/share/doc/ffe/NEWS.gz<br />
./usr/share/doc/ffe/README<br />
./usr/share/doc/ffe/AUTHORS<br />
./usr/share/doc/ffe/copyright<br />
./usr/share/doc/ffe/changelog.Debian.gz<br />
./usr/share/info/<br />
./usr/share/info/ffe.info.gz<br />
./usr/share/man/<br />
./usr/share/man/man1/<br />
./usr/share/man/man1/ffe.1.gz</code></div>
<p class="spip">Cette archive contient donc tous les fichiers qui seront installés par le paquet sur le système. Nous retrouvons l’arborescence complète des fichiers tels qu’ils seront placés sur le système.</p>

<h3>Création d’un paquet simple</h3>
<p class="spip">Pour créer une paquet simple nous allons créer un dossier qui contiendra tous les fichiers nécessaires :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ mkdir coagul</code></p>

<p class="spip">Ensuite, il faut créer le fichier « control ». Ce fichier doit reprendre la même structure que le paquet étudié précédemment :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ vim control</code></p>

<p class="spip">Ensuite, il faut créer la structure des dossiers et y placer les fichiers qui seront installés par le paquet :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ mkdir -p usr/share/doc/coagul<br />
$ vim usr/share/doc/coagul/coucou.txt</code></div>
<p class="spip">Ensuite, il faut créer le fichier md5sums :</p>

<p class="spip"><code class='spip_code' dir='ltr'>md5sum `find usr -type f` > md5sums</code></p>

<p class="spip"><strong class="spip">Attention</strong> : Le fichier « md5sums » ne doit pas contenir les  md5sums  des fichiers placés dans « control.tar.gz »</p>

<p class="spip">Ensuite il faut créer les deux archives :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ tar -zcf control.tar.gz control md5sums<br />
$ tar -zcf data.tar.gz usr</code></div>
<p class="spip">Il faut encore créer (ou copier) le fichier « debian-binary » qui ne contient que la chaîne « 2.0 » pour indiquer la version du système de gestion des paquets.</p>

<p class="spip">Pour finir, il faut créer l’archive correspondant au paquet Debian :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ ar -q coagul_0.1-1_i386.deb debian-binary control.tar.gz data.tar.gz                                                          </code></p>

<p class="spip"><strong class="spip">Attention</strong> : Il faut toujours placer en premier dans l’archive le fichier « debian-binary »</p>

<h3>Ajout de script d’installation</h3>
<p class="spip">Dans un paquet Debian, il est possible d’ajouter des scripts de post et pré-installation. Ces scripts seront exécutés en tant que root et peuvent faire tout ce que vous voulez sur le système :
<br /></p>
<li> preinst
<br /><li> postinst
<br /><li> prerm
<br /><li> postrm
<p class="spip">Après avoir créé les scripts, il faut reconstruire le fichier control.tar.gz :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ tar -zcf control.tar.gz control md5sums preinst postinst prerm postrm                                                       </code></p>

<p class="spip">Une fois le paquet installé, les scripts sont disponibles dans le dossier suivant :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># ls -C1 /var/lib/dpkg/info/coagul.*<br />
/var/lib/dpkg/info/coagul.list<br />
/var/lib/dpkg/info/coagul.md5sums<br />
/var/lib/dpkg/info/coagul.postinst<br />
/var/lib/dpkg/info/coagul.postrm<br />
/var/lib/dpkg/info/coagul.preinst<br />
/var/lib/dpkg/info/coagul.prerm</code></div>
<h3>Protection des fichiers de configuration</h3>
<p class="spip">Si votre paquet contient des fichiers de configuration, il est possible de prévenir l’utilisateur que ces fichiers ont changé lors de l’installation d’une nouvelle version du paquet.</p>

<p class="spip">Pour cela, il faut créer le fichier « conffiles » :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ mkdir etc<br />
$ vim etc/coagul.conf<br />
$ vim conffiles</code></div>
<p class="spip">Et recréer le paquet avec ces nouveaux fichiers :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>$ tar -zcf control.tar.gz control md5sums preinst postinst prerm postrm conffiles<br />
$ tar -zcf data.tar.gz etc usr</code></div>
<h3>Création de paquets à partir de fichiers sources et par compilation</h3>
<p class="spip">Pour finir, Alexis nous a présenté rapidement comment créer un paquet Debian à partir de fichiers sources et par compilation. Dans ce cas, c’est plus compliqué et cela dépassait le cadre de cet atelier très intéressant.</p>

<p class="spip">Merci beaucoup Alexis pour cet atelier</p>