{"id":546,"date":"2010-11-24T13:56:56","date_gmt":"2010-11-24T12:56:56","guid":{"rendered":"https:\/\/hoper.dnsalias.net\/atdc\/?p=546"},"modified":"2017-05-06T13:57:57","modified_gmt":"2017-05-06T11:57:57","slug":"creation-de-paquet-deb","status":"publish","type":"post","link":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/2010\/11\/24\/creation-de-paquet-deb\/","title":{"rendered":"Cr\u00e9ation de paquet (.deb)"},"content":{"rendered":"<div class=\"post-content\">\n<p>Il est assez facile de trouver de la documentation sur le sujet. Le net regorge de m\u00e9thodes, parfois tr\u00e8s diff\u00e9rentes, pour r\u00e9aliser un fichier \u00ab\u00a0.deb\u00a0\u00bb. Je trouve personnellement la plupart de ces documentations assez complexes. Elles semblent s&rsquo;adresser \u00e0 des gens ayant d\u00e9j\u00e0 des connaissances et (ou) des besoins assez particuliers. (La documentation pr\u00e9sente sur le site ubuntu-fr en est un parfait exemple). J&rsquo;ai donc d\u00e9cid\u00e9 de reprendre les bases en partant du point de d\u00e9part. La cr\u00e9ation \u00ab\u00a0manuelle\u00a0\u00bb d&rsquo;un paquet tr\u00e8s basique. Il sera ensuite possible de complexifier les choses au fur et \u00e0 mesure&#8230; Pour commencer il s&rsquo;agira donc de cr\u00e9\u00e9 un paquet tr\u00e8s simple \u00e0 partir d&rsquo;un programme basique (et pas basic avec un c&#8230; quel humour !).<\/p>\n<h3>Etape 1\u00a0: Le programme \u00e0 empaqueter<\/h3>\n<p>Nous ne sommes pas la pour apprendre \u00e0 programmer des scripts shells&#8230; Alors on fait SIMPLE\u00a0: Essayer de taper la commande suivante\u00a0:<\/p>\n<pre>zenity --info --title \"test\" --text \"coucou\"<\/pre>\n<p>Si tout se passe bien vous verrez apparaitre \u00e0 l&rsquo;\u00e9cran une fen\u00eatre qui affiche \u00ab\u00a0coucou\u00a0\u00bb. Zenity est normalement install\u00e9 par d\u00e9faut sur ubuntu, si ce n&rsquo;est pas le cas chez vous et que vous avez un message d&rsquo;erreur, installez le\u00a0: sudo apt-get install zenity<\/p>\n<p>Afin de rendre les choses un tout petit peu plus int\u00e9ressantes, nous allons cr\u00e9er un fichier \u00ab\u00a0de configuration\u00a0\u00bb, qui contiendra le texte qui doit \u00eatre affich\u00e9 dans la fen\u00eatre. Au final nous allons donc cr\u00e9er deux fichiers. Le \u00ab\u00a0programme\u00a0\u00bb d&rsquo;une part, et son fichier de configuration de l&rsquo;autre<\/p>\n<h4>Le programme<\/h4>\n<p>Cr\u00e9ez un fichier texte dans votre r\u00e9pertoire utilisateur, appelez le \u00ab\u00a0affiche_ecran\u00a0\u00bb et copiez cette ligne \u00e0 l&rsquo;interieur\u00a0:<\/p>\n<pre>zenity --info --title \"test\" --text \"`cat ~\/affiche.cfg`\"<\/pre>\n<p>Enregistrez le, et rendez le ex\u00e9cutable\u00a0:<\/p>\n<pre>sudo chmod a+x affiche_ecran<\/pre>\n<h4>Le fichier de configuration<\/h4>\n<p>Cr\u00e9ez un autre fichier texte, toujours dans votre r\u00e9pertoire, et appelez le \u00ab\u00a0affiche.cfg\u00a0\u00bb. Mettez ce que vous voulez dedans, par exemple\u00a0: Bonjour \u00e0 tous<\/p>\n<h4>Tester le programme<\/h4>\n<p>Lancez le programme en tapant\u00a0:<\/p>\n<pre>.\/affiche_ecran<\/pre>\n<p>Le contenu du affiche.cfg devrait s&rsquo;afficher dans une fenetre. Nous avons termin\u00e9 le programme \u00e0 empaqueter<\/p>\n<h3>Etape 2\u00a0: Cr\u00e9ation du paquet<\/h3>\n<p>Avant toute chose il faut cr\u00e9er un r\u00e9pertoire qui contiendra le contenu du paquet. Appelons le \u00ab\u00a0exemple-un\u00a0\u00bb. A l&rsquo;int\u00e9rieur de ce r\u00e9pertoire, faites-en un autre et appelez le DEBIAN (en majuscules). Nous verrons l&rsquo;utilit\u00e9 de ce r\u00e9pertoire vide plus loin. Il faut maintenant mettre dans \u00ab\u00a0exemple-un\u00a0\u00bb tous les fichiers qui devront \u00eatre install\u00e9s. Mais pas n&rsquo;importe comment\u00a0! En fait, il faut reproduire exactement l&rsquo;arborescence telle qu&rsquo;elle devra \u00eatre respect\u00e9e lors de l&rsquo;installation. Par exemple, si on veut que le fichier \u00ab\u00a0affiche_ecran\u00a0\u00bb soit install\u00e9 dans \/tmp au moment de l&rsquo;installation du paquet, alors il faut cr\u00e9er un r\u00e9pertoire tmp dans exemple-un, puis mettre \u00ab\u00a0affiche_ecran\u00a0\u00bb \u00e0 l&rsquo;int\u00e9rieur.<\/p>\n<p>Dans notre cas de figure on veut que les deux fichiers que l&rsquo;on \u00e0 cr\u00e9e \u00e0 l&rsquo;\u00e9tape une soient mis dans notre r\u00e9pertoire utilisateur au moment de l&rsquo;installation du paquet. Il faut donc cr\u00e9er \u00ab\u00a0home\/votre_login\u00a0\u00bb \u00e0 l&rsquo;int\u00e9rieur de notre r\u00e9pertoire de travail, afin d&rsquo;avoir au final quelque chose qui ressemble \u00e0 ceci\u00a0:<\/p>\n<pre>\/home\/votre_login (votre r\u00e9pertoire utilisateur)\r\n\t|\r\n \t|-&gt; exemple-un \r\n\t\t|\r\n\t\t|-&gt; DEBIAN\r\n\t\t|-&gt; home\r\n\t\t      |\r\n                      |-&gt; votre_login\r\n\t\t\t\t|\r\n\t\t\t\t|-&gt; affiche_ecran\r\n\t\t\t\t|-&gt; affiche.cfg\r\n<\/pre>\n<h4>Informations suppl\u00e9mentaires (version, d\u00e9pendances&#8230;)<\/h4>\n<p>Concernant les fichiers \u00e0 installer, nous avons termin\u00e9. Mais il faut maintenant indiquer quelques petites choses \u00e0 dpkg, l&rsquo;outil de cr\u00e9ation et d&rsquo;installation de paquet. Par exemple comment va s&rsquo;appeler notre paquet, sur quelle machine on peut l&rsquo;installer, quelle est son num\u00e9ro de version, de quoi a-t-il besoin, entre t-il en conflit avec d&rsquo;autre, y a t-il des op\u00e9rations \u00e0 r\u00e9aliser avant ou apr\u00e8s l&rsquo;installation etc. Tout ceci se fait gr\u00e2ce \u00e0 des fichiers texte qu&rsquo;on place dans le r\u00e9pertoire DEBIAN. Pour le moment, nous nous contenterons d&rsquo;un seul fichier (le seul qui soit obligatoire) le fichier \u00ab\u00a0control\u00a0\u00bb. Cr\u00e9ez donc un nouveau fichier texte, appelez le \u00ab\u00a0control\u00a0\u00bb en minuscule, placez le dans le r\u00e9pertoire DEBIAN puis copiez ceci \u00e0 l&rsquo;int\u00e9rieur\u00a0:<\/p>\n<pre>Package: exemple-un\r\nVersion: 1.0\r\nArchitecture: i386\r\nDepends: zenity\r\nMaintainer: your_email@your.fai\r\nDescription: Mon premier paquet !\r\n  Ce paquet contient deux fichiers :\r\n  affiche_ecran (le script)\r\n  affiche.cfg (le texte qui doit s'afficher)\r\n\r\n<\/pre>\n<p>Globalement tout facile \u00e0 comprendre, mais examinons ce fichier ligne par ligne. La premi\u00e8re indique le nom du paquet. La seconde, sa version. Il s&rsquo;agit bien de la version du paquet, pas de la version du programme qui est dedans\u00a0! Si plusieurs versions du m\u00eame paquet sont disponibles, les outils comme apt-get choisirons toujours la version la plus r\u00e9cente par d\u00e9faut. Ensuite nous avons l&rsquo;architecture cible du paquet (ici i386, autrement dit n&rsquo;importe quel PC \u00ab\u00a0standard\u00a0\u00bb avec un processeur de type \u00ab\u00a0x86\u00a0\u00bb. Puis arrive la liste des d\u00e9pendances, aussi appel\u00e9es \u00ab\u00a0pr\u00e9-requis\u00a0\u00bb. La seule chose qui soit n\u00e9cessaire et qui pourrait ne pas \u00eatre install\u00e9e est zenity. Si cela arrivait, apt-get saurait donc qu&rsquo;il faut l&rsquo;installer pour pouvoir utiliser ce programme. Il est possible d&rsquo;indiquer plusieurs pr\u00e9s-requis en les s\u00e9parant par une virgule. il est aussi possible d&rsquo;indiquer un num\u00e9ro de version pr\u00e9cis, ou minimum etc. Le \u00ab\u00a0maintainer\u00a0\u00bb est le nom de la personne ayant r\u00e9alis\u00e9 le paquet&#8230; C&rsquo;est vous\u00a0! Enfin on trouve une description en deux parties. La premi\u00e8re partie (sur une seule ligne) est la description courte du paquet. Puis vient la description \u00ab\u00a0longue\u00a0\u00bb. Elle peut s&rsquo;\u00e9taler sur plusieurs lignes, mais il faut toujours commencer chaque ligne par deux espaces.<\/p>\n<p>Note\u00a0: J&rsquo;ai simplifi\u00e9 ce fichier au maximum&#8230; il est possible d&rsquo;y indiquer beaucoup d&rsquo;autres choses, alors n&rsquo;h\u00e9sitez pas \u00e0 consulter les docs\u00a0!<\/p>\n<h4>Enfin, le .deb<\/h4>\n<p>Tout est pr\u00eat, nous pouvons maintenant cr\u00e9er le paquet\u00a0:<\/p>\n<pre> cd ~\/      \r\n dpkg -b exemple-un<\/pre>\n<p>Le fichier exemple-un.deb a d\u00fb \u00eatre cr\u00e9\u00e9\u00a0! Bravo, vous venez de faire votre premier paquet.<\/p>\n<h3>Test du paquet<\/h3>\n<p>Commencez par supprimer les fichiers affiche_ecran et affiche.cfg qui sont dans votre r\u00e9pertoire. Lorsque vous \u00eates s\u00fbr qu&rsquo;ils n&rsquo;y sont plus, lancez l&rsquo;installation du paquet\u00a0:<\/p>\n<pre> sudo dpkg -i exemple-un.deb<\/pre>\n<p>Si tout se passe bien, les deux fichiers sont r\u00e9-apparus, et vous pouvez \u00e0 nouveau lancer affiche_\u00e9cran. Essayez aussi d&rsquo;afficher les informations de votre paquet avec la commande\u00a0: apt-cache show exemple-un<\/p>\n<p>Essayez maintenant de supprimer le paquet\u00a0:<\/p>\n<pre> sudo apt-get remove exemple-un<\/pre>\n<p>Notez que les deux fichiers sont supprim\u00e9s. Or, l&rsquo;un d&rsquo;eux est un fichier de param\u00e9trage&#8230; On pourrait vouloir ne pas l&rsquo;effacer par d\u00e9faut, pour pouvoir le conserver lors d&rsquo;une mise \u00e0 jour du programme par exemple. Il faudrait pour cela le d\u00e9clarer en tant que \u00ab\u00a0fichier de configuration\u00a0\u00bb. C&rsquo;est ce que nous verrons dans le prochain \u00e9pisode&#8230;<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Il est assez facile de trouver de la documentation sur le sujet. Le net regorge de m\u00e9thodes, parfois tr\u00e8s diff\u00e9rentes, pour r\u00e9aliser un fichier \u00ab\u00a0.deb\u00a0\u00bb. Je trouve personnellement la plupart de ces documentations assez complexes. Elles semblent s&rsquo;adresser \u00e0 des gens ayant d\u00e9j\u00e0 des connaissances et (ou) des besoins assez particuliers. (La documentation pr\u00e9sente sur [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-546","post","type-post","status-publish","format-standard","hentry","category-geekitude"],"_links":{"self":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/comments?post=546"}],"version-history":[{"count":1,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/546\/revisions"}],"predecessor-version":[{"id":547,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/posts\/546\/revisions\/547"}],"wp:attachment":[{"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/media?parent=546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/categories?post=546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hoper.dnsalias.net\/atdc\/index.php\/wp-json\/wp\/v2\/tags?post=546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}