philpep's blog - tag script philpep's blog - tag script rss http://blog.philpep.org fr Mon, 28 Dec 2009 02:41:09 GMT Pblog Upgrader ses packages FreeBSD http://blog.philpep.org/post/Upgrader-ses-packages-FreeBSD http://blog.philpep.org/post/Upgrader-ses-packages-FreeBSD Mon, 28 Dec 2009 02:41:09 GMT <p>J'ai un problème depuis longtemps avec les ports FreeBSD. Dans un premier temps je compilais <em>tout</em>, puis à la longue c'est assez lassant parce que ça prend du temps, des ressources et sur une machine peu puissante c'est pas franchement conseillé. Donc dans la plupart des cas j'utilise maintenant des paquet binaires compilés et distribués par le projet FreeBSD.</p> <p>Je ne vais pas m'attarder à peser le pour et le contre puisqu'en réalité j'utilise aussi bien les ports que les paquets binaires suivant les dépendances du logiciel et le temps de compilation.</p> <p>Environnement : FreeBSD 8.0-RELEASE i386 (à vous de changer suivant votre version et votre CPU)</p> <p>Déjà une bonne chose à savoir :</p> <div class="codehilite"><pre>$ ftp ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/ .... 250-descriptions of each subdirectory. ... 250-packages-*-release directories are built from the ports collection 250-shipped with the release, and are not updated thereafter. 250- 250-packages-*-stable and packages-*-current are updated roughly once a 250-week. .... </pre></div> <p>Les paquets qui nous intéressent sont donc dans <code>packages-8-stable</code>.</p> <p>Pour installer un soft, il suffit d'un</p> <div class="codehilite"><pre># export PACKAGESITE=&quot;ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/&quot; # pkg_add -r firefox3 </pre></div> <p>Pour mettre à jours c'est nettement moins marrant, surtout si vous utilisez conjointement un arbre des ports à jours dans <code>/usr/ports</code>. Les outils comme <code>portmaster</code> et <code>portupgrade</code> sont assez dur à utiliser pour mettre à jours en se basant non pas sur l'INDEX de <code>/usr/ports</code> mais sur celui du ftp.</p> <p>D'ailleurs si quelqu'un à déjà réussi à faire proprement la manip je veux bien son <code>/usr/local/etc/pkgtools.conf</code> en commentaire de ce billet.</p> <p><a href="http://blog.etoilebsd.net">bapt</a> est en train de porter <a href="http://imil.net/pkgin/">pkgin</a> sur FreeBSD, mais il n'est pas encore tout à fait prêt (il le sera bientôt j'espère, je ferrai un billet pour l'occasion).</p> <p>Il y a une solution que j'ai trouvé sympatique en attendant pkgin, c'est les <code>bsdadminscripts</code> avec l'outil <code>pkg_upgrade</code>. C'est du shell, pas très rapide donc, mais au moins ça marche et c'est facile.</p> <div class="codehilite"><pre># make -C /usr/ports/sysutils/bsdadminscripts install clean </pre></div> <p>Ensuite c'est enfantin, pour tout mettre à jours et en mode verbeux :</p> <div class="codehilite"><pre># setenv PACKAGEROOT ftp://ftp.fr.freebsd.org # setenv BRANCH 8-stable # pkg_upgrade -av </pre></div> <p>Et ça marche ! Il se base sur le md5 du fichier INDEX du ftp pour savoir s'il faut mettre à jours sa base de donnée sur les ports puis compare les version installés avec les versions disponibles.</p> <p>La page de man de <code>pkg_upgrade</code> vous donnera beaucoup d'information sur la manière dont il fonctionne.</p> Scriptez portable ! http://blog.philpep.org/post/Scriptez-portable-! http://blog.philpep.org/post/Scriptez-portable-! Sat, 05 Sep 2009 19:31:42 GMT <p>Vous avez fait un script pratique que vous partagez avec la communauté mais que ce soit en python, en shell, en perl ou je ne sais quoi encore, sachez que les <a href="http://fr.wikipedia.org/wiki/Shebang">shebang</a> sous ces formes ne sont pas portables :</p> <div class="codehilite"><pre><span class="c">#!/bin/bash</span> <span class="c">#!/bin/zsh</span> <span class="c">#!/usr/bin/perl</span> <span class="c">#!/usr/bin/python</span> </pre></div> <p>En effet, même si ces binaires sont à cet emplacement chez vous, il est possible qu'ils ne le soient pas chez les autres, par exemple les logiciels installées par compilation depuis les ports FreeBSD placent souvent leurs binaires dans <em>/usr/local/bin</em>, il en est de même quand vous faites un <em>./configure &amp;&amp; make &amp;&amp; make install</em>. Ainsi si on lance un script mal codé :</p> <div class="codehilite"><pre><span class="o">.</span><span class="sr">/script.sh: bad interpreter: /</span><span class="n">bin</span><span class="o">/</span><span class="n">zsh:</span> <span class="nb">no</span> <span class="n">such</span> <span class="n">file</span> <span class="ow">or</span> <span class="n">directory</span> </pre></div> <p>Hum, bon vous me direz, ce n'est pas grave, il suffit de changer la première ligne du script. Mais imaginez un peu le travail à fournir si vous deviez changer cette première ligne sur tous vos script... La meilleure manière de procéder est d'utiliser un shebang portable , et on peut le faire avec la commande env. Exemples de shebang <em>portables</em> :</p> <div class="codehilite"><pre><span class="c">#!/usr/bin/env bash</span> <span class="c">#!/usr/bin/env python</span> </pre></div> <p><em>env</em> ira chercher le programme là ou il est et l'exécutera. Bon, vous me direz, le problème est le même puisqu'il faut que env soit au même endroit pour tout le monde, ben figurez vous que c'est le cas !! Donc le problème est réglé, et vous pouvez poster votre script sur #freebsd-fr@irc.freenode.org sans vous faire insulter (poil au nez).</p>