<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Note</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/taxonomy/term/1082"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/taxonomy/term/1082/atom/feed"/>
  <id>http://artisan.karma-lab.net/taxonomy/term/1082/atom/feed</id>
  <updated>2008-05-25T13:56:26+02:00</updated>
  <entry>
    <title>Bloc note &#039;RPM&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1648" />
    <id>http://artisan.karma-lab.net/node/1648</id>
    <published>2008-09-23T20:17:34+02:00</published>
    <updated>2008-09-29T00:13:37+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Systèmes de fichier" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>
Bloc notes RPM.
<p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
Bloc notes RPM.
<p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Explode</h2>
	
<p>
<div class='code-container-area'><div class='code-container'><div class="code">rpm2cpio $<span class="nu0">1</span> <span class="sy0">|</span> <span class="kw2">cpio</span> -div <span class="sy0">`*</span>.spec<span class="sy0">`</span></div></div></div>
</p>


	<a name='chapter_2'></a>
	<h2>Spec</h2>
	
<p>
<div class='code-container-area'><div class='code-container'><div class="code">rpm2cpio $<span class="nu0">1</span> <span class="sy0">|</span> <span class="kw2">cpio</span> -div <span class="st0">'*.spec'</span></div></div></div>
</p>


	<a name='chapter_3'></a>
	<h2>Whereis</h2>
	
<p>
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="co0">#! /bin/sh</span></div></li>
<li class="li1"><div class="de1"><span class="re2">WIS=</span><span class="sy0">`</span><span class="kw2">basename</span> $<span class="nu0">0</span><span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp;<span class="kw1">for</span> f <span class="kw1">in</span> <span class="re4">$*</span>; <span class="kw1">do</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">ff=</span>$<span class="br0">&#40;</span><span class="kw2">which</span> <span class="re1">$f</span> <span class="nu0">2</span><span class="sy0">&gt;/</span>dev<span class="sy0">/</span>null<span class="br0">&#41;</span> </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -n <span class="st0">&quot;$ff&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">printf</span> <span class="st0">&quot;%s: &quot;</span> <span class="re1">$ff</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rpm -qf <span class="re1">$ff</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">printf</span> <span class="st0">&quot;'%s' not found!<span class="es0">\n</span>&quot;</span> <span class="re1">$f</span> </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">done</span> </div></li></ol></div></div></div>
</p>


	<a name='chapter_4'></a>
	<h2>Panic...</h2>
	
<p>
<pre>
rpmdb: PANIC: fatal region error detected; run recovery
erreur: erreur db4(-30975) de dbenv->open: DB_RUNRECOVERY: Fatal error, run database recovery
erreur: ne peut ouvrir l'index Packages en utilisant db3 -  (-30975)
</pre>
</p>
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw2">rm</span> -f <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>rpm<span class="sy0">/</span>__db<span class="sy0">*</span></div></li>
<li class="li1"><div class="de1">db_verify <span class="sy0">/</span>var<span class="sy0">/</span>lib<span class="sy0">/</span>rpm<span class="sy0">/</span>Packages</div></li>
<li class="li1"><div class="de1">rpm --rebuilddb</div></li></ol></div></div></div>
    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;WebDAV&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1325" />
    <id>http://artisan.karma-lab.net/node/1325</id>
    <published>2008-02-09T08:22:37+01:00</published>
    <updated>2008-07-30T14:53:05+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Systèmes de fichier" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>
  Bloc-notes WebDav.
</p>    ]]></summary>
    <content type="html"><![CDATA[<p>
  Bloc-notes WebDav.
</p>

<!--external-->

	<a name='chapter_5'></a>
	<h2>Définition</h2>
	
<p>
Le WebDAV est une extension du protocole HTTP pour lui ajouter des fonctions de lecture et publication de fichiers permettant une utilisation quasi FTP, mais à travers le WEB. WebDAV est aussi capable de gérer la notion de delta (différences entre deux versions d'un même fichier), le rendant utilisable comme frontal d'un gestionnaire de version (ex. Subversion).
<p>

	<a name='chapter_6'></a>
	<h2>Mise en oeuvre sous Apache</h2>
	
<p>
  Si l'on veut partager le dossier <kbd>/donnees/partage</kbd> avec apache, et ce à l'url <kbd>/pargage</kbd>, il faut d'abord charger (et donc installer) les modules suivants :
<div class='code-container-area'><div class='code-container-caption'>httpd.conf</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">LoadModule dav_module &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; modules/mod_dav.so</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; LoadModule dav_module &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; modules/mod_dav.so</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; LoadModule dav_fs_module &nbsp; &nbsp; &nbsp; &nbsp;modules/mod_dav_fs.so</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; DavLockDB /var/lib/dav/lockdb</div></li></ol></div></div></div>
</p>
<p>
  Et ensuite rajouter une entrée par partage 
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">Alias /partage &quot;/donnees/partage&quot;</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;Directory</span> <span class="st0">&quot;/donnees/partage&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Dav On</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; Order allow,deny</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Allow from all</div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;/Directory<span class="re2">&gt;</span></span></span></div></li></ol></div></div></div>
</p>

<p>
  La liste complètes des options est disponible sur le site <a class='external' target='_blank' href='http://httpd.apache.org/docs/2.0/mod/mod_dav.html' >d'apache</a>.
</p>


	<a name='chapter_7'></a>
	<h2>Tester le protocole</h2>
	
<p>
  Un outil très intéressant permet de passer un jeu de test sur un partage WebDav pour tester le niveau de compatibilité avec la norme. Il s'agit de Litmus qui est téléchargeable sur le site <a class='external' target='_blank' href='http://www.webdav.org/neon/litmus/' >webdav.org</a>. 
</p>
    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;Wine&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1319" />
    <id>http://artisan.karma-lab.net/node/1319</id>
    <published>2008-02-01T12:55:24+01:00</published>
    <updated>2008-02-01T13:03:22+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Virtualisation" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Bloc-Note pour Wine</p>    ]]></summary>
    <content type="html"><![CDATA[<p>Bloc-Note pour Wine</p><!--break-->

	<a name='chapter_1'></a>
	<h2>Désinstaller une application</h2
<p>
Autant qu'une telle chose soit possible sur un OS qui n'a pas de gestion centralisée des installations, juste une référence sur l'outil \"gracieusement\" fournit à cet effet lors de l'install, la commande est la suivante :
<div class='code-container-area'><div class='code-container'><div class=\"code\">wine uninstaller</div></div></div>
</p>

<h2>Rebooter Wine</h2>
	
<p>
  Le Boot et Windows, c'est une longue histoire d'amour-haine et Wine n'échappe pas à cette régle. En effet, pour "simuler" le lancement de windows et le chargement automatique de certains outils, l'appel à wine provoque le chargement implicite du démon <kbd>wineserver</kbd>. Lorsque l'on désinstalle une application, il peut ainsi être utile de "rebooter" ce serveur :
<div class='code-container-area'><div class='code-container'><div class="code">winboot --restart</div></div></div>
</p>
<p>
Il est aussi possible d'arrêter le serveur par un <kbd>winboot --shutdown</kbd>. 
</p>


	<a name='chapter_2'></a>
	<h2>Paramétrage de Wine</h2>
	
<p>
  WIne devient de plus en plus efficace et utilisable. La preuve en est l'outil graphique de configuration <kbd>winecfg</kbd> permettant de régler l'accélération vidéo et audio, le look'n'feel de Windows (sic !), et aussi de définir la version de windows simulé par Wine (XP, 2003, Vista, 98, etc..) de manière globale ou spécifiquement à une application. 
</p>

    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;Drupal&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1317" />
    <id>http://artisan.karma-lab.net/node/1317</id>
    <published>2008-02-01T11:51:37+01:00</published>
    <updated>2008-08-10T23:19:34+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Drupal" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Bloc-Note Drupal</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Bloc-Note Drupal</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Le syndrome de l'écran blanc</h2>
	                                                                                                                                                                                                                                                                                                                                                                                  
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
  Il arrive qu'après une re-installion du système hôte, d'un changement de version d'apache ou d'une pluie de météorites, que la page d'accueil de drupal se résume à une belle feuille blanche. Sans message, sans rien d'autre qu'une trace dans les logs                                                                                                                                                            
<div class='code-container-area'><div class='code-container'><div class="code">PHP Fatal error: &nbsp;Call to undefined function file_directory_path() in /var/web/drupal/includes/common.inc on line 1685 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div></div></div>                                                                                                                                                                                                                                                                                                                                                                                                                
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
  Et bien il y a de fortes chances que la raison soit simplement que la base de donnée n'est pas reconnue. Généralement c'est le cas lorsque le module php n'est pas install (apache_php-pgsql ou apache_php-mysql). Dans certains cas c'est le fichier <kbd>settings</kbd> qui est illisible ou que la référence de base qui s'y trouve est fausse.                                                                   
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                       

	<a name='chapter_2'></a>
	<h2>Problème d'encodage UTF8</h2>
	                                                                                                                                                                                                                                                                                                                                                                                      
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
Il arrive aussi, par exemple après une installation fraîche, que l'on tombe sur le message d'erreur suivant en haut de la page web courante :                                                                                                                                                                                                                                                                          
<div class='code-container-area'><div class='code-container'><div class="code">warning: array_map() [function.array-map]: The first argument, 'utf8_encode', should be either NULL or a valid callback in /storage/web/applications/drupal/includes/unicode.inc on line 304. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div></div></div>                                                                                                                                                                                                                                                                                                                                                                                                                
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
 Alors la solution n'a, contre toute attente, aucun rapport avec l'UTF. En fait il y a de forte chance que le paquet <kbd>php-xml</kbd> soit simplement manquant. Il suffit donc de l'installer et redémarrer apache pour que le message disparaisse.                                                                                                                                                                  
</p>                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                       

	<a name='chapter_3'></a>
	<h2>Ordre des nodes inversé</h2>
	                                                                                                                                                                                                                                                                                                                                                                                       
<p>                                                                                                                                                                                                                                                                                                                                                                                                                    
  Alors ça c'est un truc étrange qui apparaît de temps à autre et pour lequel <string>je n'ai pas de solution</string>. Le symptôme c'est que les nodes s'affichent dans l'ordre chronologique, les plus anciens en tête, et ce lorsqu'un utilisateur est connecté (en anonymous, pas de soucis). 
</p>     
<p>
  Après avoir maté le code de <kbd>modules/node.module</kbd>, il semble que le problème vienne de la ré-écriture de la requête qui produit un code SQL partiellement problématique avec PostgreSQL. La solution a juste pour moi été de commenter la clause <kbd>distinct</kbd> :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="coMULTI">/**</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* Implementation of hook_db_rewrite_sql</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> node_db_rewrite_sql<span class="br0">&#40;</span><span class="re0">$query</span><span class="sy0">,</span> <span class="re0">$primary_table</span><span class="sy0">,</span> <span class="re0">$primary_field</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$primary_field</span> <span class="sy0">==</span> <span class="st0">'nid'</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span>node_access_view_all_nodes<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$return</span><span class="br0">&#91;</span><span class="st0">'join'</span><span class="br0">&#93;</span> <span class="sy0">=</span> _node_access_join_sql<span class="br0">&#40;</span><span class="re0">$primary_table</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$return</span><span class="br0">&#91;</span><span class="st0">'where'</span><span class="br0">&#93;</span> <span class="sy0">=</span> _node_access_where_sql<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1">// &nbsp;C'est pas terrible, mais ça marche...</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// &nbsp; &nbsp;$return['distinct'] = 1;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$return</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div></div>
</p>


	<a name='chapter_4'></a>
	<h2>Cache des commentaires</h2>
	
<p>
  Le truc est de pouvoir vider le cache lorsqu'un utilisateur anonyme rentre un commentaire. Sinon, ce dernier mettra le temps de vie du cache à voir son commentaire apparaître, ou celui des autres ce qui est génant lorsqu'il est notifié de l'arrivée d'un nouveau commentaire. 
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw2">function</span> klc_comment<span class="br0">&#40;</span><span class="re0">$comment</span><span class="sy0">,</span> <span class="re0">$op</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$op</span><span class="sy0">==</span><span class="st0">'validate'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$comment</span><span class="sy0">=</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span><span class="re0">$comment</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$cid</span><span class="sy0">=</span><span class="st0">&quot;http://&quot;</span><span class="sy0">.</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&quot;SERVER_NAME&quot;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;/node/&quot;</span><span class="sy0">.</span><span class="re0">$comment</span><span class="sy0">-&gt;</span><span class="me1">cid</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; cache_clear_all<span class="br0">&#40;</span><span class="re0">$cid</span><span class="sy0">,</span><span class="st0">'cache_page'</span><span class="sy0">,</span><span class="kw2">TRUE</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div></div>


	<a name='chapter_5'></a>
	<h2>Skinner un formulaire</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="coMULTI">/**</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* hook_form_alter() implementation</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;*</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* @param String $form_id form name</span></div></li>
<li class="li2"><div class="de2"><span class="coMULTI">&nbsp;* @param array() $form form data</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> klc_form_alter<span class="br0">&#40;</span><span class="re0">$form_id</span><span class="sy0">,</span> <span class="sy0">&amp;</span> <span class="re0">$form</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="coMULTI">/*$form_id=='story_node_form' &amp;&amp; */</span><a target="blank" &nbsp;href="http://www.php.net/isset"><span class="kw3">isset</span></a> <span class="br0">&#40;</span><span class="re0">$form</span><span class="br0">&#91;</span><span class="st0">'type'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$form</span><span class="br0">&#91;</span><span class="st0">'type'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">'#value'</span><span class="br0">&#93;</span> <span class="sy0">.</span> <span class="st0">'_node_form'</span> <span class="sy0">==</span> <span class="re0">$form_id</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$form</span><span class="br0">&#91;</span><span class="st0">'taxonomy'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">'#theme'</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="st0">'taxonomy_array'</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="coMULTI">/**</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* Theme feed composition list.</span></div></li>
<li class="li2"><div class="de2"><span class="coMULTI">&nbsp;*/</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> theme_taxonomy_array<span class="br0">&#40;</span><span class="sy0">&amp;</span> <span class="re0">$form</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$row</span><span class="sy0">=</span> <a target="blank" &nbsp;href="http://www.php.net/array"><span class="kw3">array</span></a> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$iCount</span><span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span>element_children<span class="br0">&#40;</span><span class="re0">$form</span><span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$key</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$iCount</span> <span class="sy0">%</span> <span class="nu0">3</span> <span class="sy0">==</span> <span class="nu0">0</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$iCount</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$rows</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="re0">$row</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$row</span><span class="sy0">=</span> <a target="blank" &nbsp;href="http://www.php.net/array"><span class="kw3">array</span></a> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$row</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">=</span> drupal_render<span class="br0">&#40;</span><span class="re0">$form</span><span class="br0">&#91;</span><span class="re0">$key</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iCount</span><span class="sy0">++;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$rows</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">=</span> <span class="re0">$row</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$output</span><span class="sy0">=</span> theme<span class="br0">&#40;</span><span class="st0">'table'</span><span class="sy0">,</span> <span class="kw2">null</span><span class="sy0">,</span> <span class="re0">$rows</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="co1">// &nbsp; &nbsp;$output .= drupal_render($form);</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$output</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div></div>


	<a name='chapter_6'></a>
	<h2>Archiver un site Drupal (ou autre)</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><span class="kw2">wget</span> -q --mirror -p --html-extension --<span class="re2">base=</span>.<span class="sy0">/</span> -k -P .<span class="sy0">/</span> http:<span class="sy0">//</span>example.com</div></div></div>    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;Mesures&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1304" />
    <id>http://artisan.karma-lab.net/node/1304</id>
    <published>2008-01-19T10:07:00+01:00</published>
    <updated>2008-02-12T11:23:10+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Green Computing" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>
  Dimensions et chiffres divers. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Dimensions et chiffres divers. 
</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Carte-mères</h2>
	
<p>
<table>
<tr><th>Form-factor</th><th>Dimensions</th><th>Extensions</th></tr>
<tr><td>ATX</td><td>305 mm x 244 mm</td><td>AGP, 6 PCI</td></tr>
<tr><td>microATX</td><td>244 mm x 244 mm</td><td>AGP / 3 PCI</td></tr>
<tr><td>FlexATX</td><td>229 mm x 191 mm</td><td>AGP / 2 PCI</td></tr>
<tr><td>Mini ATX</td><td>284 mm x 208 mm</td><td>AGP / 4 PCI</td></tr>
<tr><td>Mini ITX</td><td>170 mm x 170 mm</td><td>1 PCI</td></tr>
<tr><td>Nano ITX</td><td>120 mm x 120 mm</td><td>1 MiniPCI</td></tr>
</table>


	<a name='chapter_2'></a>
	<h2>Medias</h2>
	
<table>
<tr><th>Type</th><th>Dimensions</th></tr>
<tr><td>Disque Dur 3.5"</td><td>147 mm x 102 mm x 26 mm</td></tr>
<tr><td>CD-ROM</td><td>138 mm x 200 xm x 42 mm </td></tr>
<tr><td>CD-ROM Slim</td><td>128 mm x 143 mm x 12.7 mm</td></tr>
</table>


	<a name='chapter_3'></a>
	<h2>Temps d'accès</h2>
	
<p>
Le but de ce tableau n'est pas de fournir des valeurs réelles mais des ordres de grandeurs pour comparer les différents médias. 
<table>
<tr><th>Media</th><th>Temps de réponse</th><th>Débit</th></tr>
<tr><td>Cache processeur</td><td>1ns (10<sup>-9</sup>)</td><td>10 go/s</td></tr>
<tr><td>RAM</td><td>30ns (10<sup>-9</sup>)</sup></td><td>2 Go/s</td></tr>
<tr><td>Flash</td><td>50ns (10<sup>-9</sup>)</sup></td><td>20 mo/s</td></tr>
<tr><td>Disque dur</td><td>5ms (10<sup>-3</sup>)</td><td>50 mo/s</td></tr>
<tr><td>Disquette</td><td>80ms (10<sup>-3</sup>)</td><td>50 ko/s</td></tr>
</table>


	<a name='chapter_4'></a>
	<h2>Limite câbles</h2>
	
<p>
<table>
<tr><th>Type</th><th>Maximum</th></tr>
<tr><td>PATA</td>
<td>60cm</td></tr>
<tr><td>SATA</td>
<td>90cm</td></tr>
<tr><td>RS232c</td>
<td>2m</td></tr>
<tr><td>Téléphone</td>
<td>20m</td></tr>
<tr><td>Centronic</td>
<td>10m</td></tr>
<tr><td>SCSI</td>
<td>3m</td></tr>
<tr><td>PS/2</td>
<td>3m</td></tr>
<tr><td>VGA</td>
<td>15m</td></tr>
<tr><td>DVI/HDMI</td>
<td>10m</td></tr>
<tr><td>USB</td>
<td>5m</td></tr>
<tr><td>S-Vidéo</td>
<td>20m</td></tr>
<tr><td>Jack/RCA</td>
<td>10m</td></tr>
<tr><td>Fast Ethernet (100 MB/S)</td>
<td>90m</td></tr>
</table>
</p>


	<a name='chapter_5'></a>
	<h2>Consommations électriques</h2>
	
<a name="consommations"></a>
<p>
Certaines de ces valeurs ont été testé à la main avec un watt-mètre, d'autres vienne de divers calculateur de consommation. 
  <table>
    <tr><th>Affichage</th><th>Consommation (W)</th></tr>
    <tr><td>Ecran LCD 17"</td><td></td><td>22</td></tr>
    
    <tr><th>Processeurs + alimentation</th><th>Consommation (W)</th></tr>
    <tr><td>Pentium III 500Mhz</td><td></td><td>40</td></tr>
    <tr><td>Duron www</td><td>10</td><td>27</td></tr>
    <tr><td>Sempron 2400+</td><td></td><td>62</td></tr>
    
    <tr><th>Disques Durs</th><th>Consommation (W)</th></tr>
    <tr><td>Disque Dur 3.5"</td><td>5</td><td>20</td></tr>
    <tr><td>Disque Dur SATA 3.5"</td><td>20</td><td>25</td></tr>
    <tr><td>Disque Dur 2.5"</td><td>2.5</td><td>5</td></tr>
    <tr><td>Disque Flash</td><td></td><td>0.5</td></tr>
    
    <tr><th>Lecteurs</th><th>Consommation (W)</th></tr>
    <tr><td>Disquette</td><td></td><td>5</td></tr>
    <tr><td>CD-ROM</td><td>10</td><td>25</td></tr>
    <tr><td>DVD-ROM</td><td>10</td><td>25</td></tr>
    <tr><td>CD-RW ROM</td><td>10</td><td>25</td></tr>
    <tr><td>CD-RW-DVD ROM Slim</td><td>0.1</td><td>5</td></tr>
    
    <tr><th>Carte Graphiques</th><th>Consommation (W)</th></tr>
    <td><td>Simple</td><td>5</td><td>10</td></tr>
    <tr><td>performante</td><td>30</td><td>50</td></tr>
    
    <tr><th>Divers</th><th>Consommation (W)</th></tr>
    <tr><td>Barette mémoire</td><td>7</td><td>10</td></tr>
    <tr><td>Périphérique USB</td><td></td><td>5</td></tr>
    <tr><td>Carte réseau</td><td></td><td>4</td></tr>
    <tr><td>Ventilateur</td><td></td><td>5</td></tr>
    <tr><td>Carte mère</td><td>25</td><td>40</td></tr>
  </table>      
</p>    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;ZaurusFr&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1301" />
    <id>http://artisan.karma-lab.net/node/1301</id>
    <published>2007-12-15T16:50:11+01:00</published>
    <updated>2007-12-15T17:46:37+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Zaurus" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>
  Trucs en vrac sur la distribution Zaurus Francisée initiée par <a class='external' target='_blank' href='http://dab.free.fr/buildoz/' >Dab</a>. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Trucs en vrac sur la distribution Zaurus Francisée initiée par <a class='external' target='_blank' href='http://dab.free.fr/buildoz/' >Dab</a>. 
</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Création de l'environnement</h2>
	
<p>
  Le plus simple est de créer avec debootstrap un environnement <a class='external' target='_blank' href='http://artisan.karma-lab.net/node/1055' >chrooté spécifique</a>. De créer un utilisateur une fois dans le chroot (ex. gaston) et de faire le checkout suivant :
<div class='code-container-area'><div class='code-container'><div class='traces'><ul><li class='result'>##apt-get install subversion</li><li class='result'>##useradd gaston</li><li class='result'>##visudo</li><li class='result'>Editer ici le sudo pour ajouter gaston avec une ligne du genre</li><li class='result'>gaston   ALL=(ALL) NOPASSWD:ALL</li><li class='result'>et faire CTRL-X Y pour sortir</li><li class='result'>&nbsp;</li><li class='result'>##mkdir -p /home/gaston/tmp</li><li class='result'>##chown gaston:gaston /home/gaston -Rc</li><li class='result'>##su - gaston</li><li><span class='prompt'></span>svn <span class="kw2">co</span> http:<span class="sy0">//</span>artisan.karma-lab.net<span class="sy0">/</span>dev<span class="sy0">/</span>zaurusfr<span class="sy0">/</span>trunk<span class="sy0">/</span>zaurusfr<span class="sy0">/</span>construct</li><li><span class='prompt'></span><span class="kw3">cd</span> construct</li><li><span class='prompt'></span>.<span class="sy0">/</span>oe build</li><li class='result'>Faire quelque prière ici pour que tout fonctionne</li></ul></div></div></div>
</p>
<p>
  Lorsque le build est terminé, une archive contenant tout ce qu'il faut pour flasher le zaurus sur trouve dans le dossier <kbd>/home/rober/construct/stuff/zaurusfr/tmp/deploy/glibc/images/akita</kbd> sous le nom poétique de <kbd>Angstrom-zaurusfr-gpe-image-glibc-ipk-2007.9-test-YYYMMDD-akita-installkit.tgz</kbd>. Il suffit de décompresser cette archive à la racine d'une carte SD, et d'<a class='external' target='_blank' href='http://artisan.karma-lab.net/node/1098' >installer la nouvelle ROM</a>. 
</p>

	<a name='chapter_2'></a>
	<h2>Faire un patch kernel</h2>
	
<p>
Si si, c'est toujours utile <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/>
<div class='code-container-area'><div class='code-container'><div class='traces'><ul><li><span class='prompt'></span><span class="kw3">cd</span> stuff<span class="sy0">/</span>zaurusfr<span class="sy0">/</span>tmp<span class="sy0">/</span>work<span class="sy0">/</span>akita-angstrom-linux-gnueabi<span class="sy0">/</span>linux-rp<span class="nu0">-2.6</span><span class="nu0">.23</span>-r100</li><li><span class='prompt'></span><span class="co0"># on fait une copie des sources du kernel</span></li><li><span class='prompt'></span>rsync -a linux<span class="nu0">-2.6</span><span class="nu0">.23</span> linux<span class="nu0">-2.6</span><span class="nu0">.23</span>-new</li><li class='result'># on modifie le kernel sur la copie et on fait un patch que l'on stoque directement au bon endroit</li><li><span class='prompt'></span><span class="kw2">patch</span> &nbsp;-Naur linux<span class="nu0">-2.6</span><span class="nu0">.23</span> linux<span class="nu0">-2.6</span><span class="nu0">.23</span>-new <span class="sy0">&gt;</span> ..<span class="sy0">/</span>..<span class="sy0">/</span>..<span class="sy0">/</span>..<span class="sy0">/</span>myoe<span class="sy0">/</span>packages<span class="sy0">/</span>linux<span class="sy0">/</span>linux-rp<span class="nu0">-2.6</span><span class="nu0">.23</span><span class="sy0">/</span>mon-patch.<span class="kw2">patch</span></li></ul></div></div></div>
</p>
<p>
On modifie ensuite le fichier <kbd>../../../../myoe/packages/linux/linux-rp_2.6.23.bb</kbd> en rajoutant dans SRC_URI une ligne du style :
<div class='code-container-area'><div class='code-container'><div class="code">file://mon-patch.patch<SEMI>patch=1 \</div></div></div>
</p>
<p>
Ensuite, soit on utilise <kbd>oe</kbd> pour faire un <kbd>clean</kbd> de <kbd>linux-rp</kbd> puis un build. Soit on veut tester et on va alors passer bitbake en mode interactif :
<div class='code-container-area'><div class='code-container'><div class='traces'><ul><li><span class='prompt'></span><span class="kw3">cd</span> <span class="sy0">/</span>home<span class="sy0">/</span>gaston<span class="sy0">/</span>construct<span class="sy0">/</span>stuff<span class="sy0">/</span>zaurusfr</li><li><span class='prompt'></span>. oe.<span class="kw2">env</span></li><li><span class='prompt'></span>bitbake -i</li><li><span class='prompt'></span>clean linux-rp</li><li><span class='prompt'></span>fetch linux-rp</li><li><span class='prompt'></span>unpack linux-rp</li><li><span class='prompt'></span><span class="kw2">patch</span> linux-rp</li><li><span class='prompt'></span>build linux-rp</li></ul></div></div></div>
</p>


	<a name='chapter_3'></a>
	<h2>USB mode host/slave</h2>
	
<p>
Pour l'instant, l'Angstrom ne détecte pas correctement le changement de câble. Il faut donc charger le module correspondant au mode "host" à la main :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="co0">#!/bin/sh</span></div></li>
<li class="li1"><div class="de1"><span class="co0"># Stop possible USB networking to release g_ether lock</span></div></li>
<li class="li1"><div class="de1">ifconfig usb0 down <span class="nu0">2</span><span class="sy0">&gt;/</span>dev<span class="sy0">/</span>null</div></li>
<li class="li1"><div class="de1"><span class="co0"># Remove USB client modules</span></div></li>
<li class="li2"><div class="de2">rmmod g_file_storage g_ether pxa27x_udc <span class="nu0">2</span><span class="sy0">&gt;/</span>dev<span class="sy0">/</span>null</div></li>
<li class="li1"><div class="de1"><span class="co0"># Load USB master module</span></div></li>
<li class="li1"><div class="de1">modprobe ohci-hcd</div></li></ol></div></div></div>
</p>


	<a name='chapter_4'></a>
	<h2>Soucis d'installation sur la partition /home</h2>
	
<p>
Lors de l'utilisation de la syntaxe <kbd>ipkg install -d home abiword</kbd>, ipkg installe bien abiword sur la seconde partition mais l'utilitaire ipk-link n'est pas appelé pour créer les liens avec le système racine. Et pour cause, il n'est pas présent... Donc en attendant que ce soit inclus par défaut, voici le source de l'utilitaire à utiliser après ipkg, sous la forme <kbd>ipk-link add abiword</kbd> :
<div class='code-container-area'><div class='code-container-caption'>/usr/bin/ipkg-link</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="co0">#!/bin/sh</span></div></li>
<li class="li1"><div class="de1"><span class="re2">COMMAND=</span>$<span class="nu0">1</span></div></li>
<li class="li1"><div class="de1"><span class="re2">PACKAGE=</span>$<span class="nu0">2</span></div></li>
<li class="li1"><div class="de1">setdest <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="sy0">`</span><span class="kw2">grep</span> dest <span class="sy0">/</span>etc<span class="sy0">/</span>ipkg.conf <span class="sy0">|</span> <span class="kw2">cut</span> -d <span class="st0">' '</span> -f <span class="nu0">3</span><span class="sy0">`</span>; <span class="kw1">do</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> -f <span class="re1">$i</span><span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>ipkg<span class="sy0">/</span>info<span class="sy0">/</span><span class="re1">$PACKAGE</span>.list <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">DEST=</span><span class="re1">$i</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;x$DEST&quot;</span> = <span class="st0">&quot;x&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Can not locate $PACKAGE.&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Check /etc/ipkg.conf for correct dest listings&quot;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Check name of requested package: $PACKAGE&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">1</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">addlinks <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; setdest;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">cat</span> <span class="re1">$DEST</span><span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>ipkg<span class="sy0">/</span>info<span class="sy0">/</span><span class="re1">$PACKAGE</span>.list <span class="sy0">|</span> <span class="kw1">while</span> <span class="kw2">read</span> LINE; <span class="kw1">do</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">SRC=</span><span class="re1">$LINE</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">DST=</span><span class="sy0">`</span><span class="kw3">echo</span> <span class="re1">$SRC</span> <span class="sy0">|</span> <span class="kw2">sed</span> <span class="st0">&quot;s|$DEST||&quot;</span><span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">DSTNAME=</span><span class="sy0">`</span><span class="kw2">basename</span> <span class="re1">$DST</span><span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">DSTDIR=</span><span class="sy0">`</span><span class="kw3">echo</span> <span class="re1">$DST</span> <span class="sy0">|</span> <span class="kw2">sed</span> <span class="st0">&quot;s|$DSTNAME<span class="es0">\$</span>||&quot;</span><span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -f <span class="st0">&quot;$SRC&quot;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">0</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -e <span class="st0">&quot;$DST&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">mkdir</span> -p <span class="re1">$DSTDIR</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">ln</span> -sf <span class="re1">$SRC</span> <span class="re1">$DST</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Not linking $SRC to $DST&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;$DST Already exists&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -d <span class="st0">&quot;$SRC&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">0</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -e <span class="re1">$DST</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">mkdir</span> -p <span class="re1">$DST</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;directory already exists&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Source directory $SRC does not exist&quot;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">removelinks <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; setdest;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">cat</span> <span class="re1">$DEST</span><span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>ipkg<span class="sy0">/</span>info<span class="sy0">/</span><span class="re1">$PACKAGE</span>.list <span class="sy0">|</span> <span class="kw1">while</span> <span class="kw2">read</span> LINE; <span class="kw1">do</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">SRC=</span><span class="re1">$LINE</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">DST=</span><span class="sy0">`</span><span class="kw3">echo</span> <span class="re1">$LINE</span> <span class="sy0">|</span> <span class="kw2">sed</span> <span class="st0">&quot;s|$DEST||&quot;</span><span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">DSTNAME=</span><span class="sy0">`</span><span class="kw2">basename</span> <span class="re1">$DST</span><span class="sy0">`</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">DSTDIR=</span><span class="sy0">`</span><span class="kw3">echo</span> <span class="re1">$DST</span> <span class="sy0">|</span> <span class="kw2">sed</span> <span class="st0">&quot;s|$DSTNAME<span class="es0">\$</span>||&quot;</span><span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -f <span class="re1">$DST</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">0</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">rm</span> -f <span class="re1">$DST</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -d <span class="re1">$DSTDIR</span> <span class="sy0">&amp;&amp;</span> <span class="kw2">rmdir</span> <span class="re1">$DSTDIR</span> <span class="nu0">2</span><span class="sy0">&gt;/</span>dev<span class="sy0">/</span>null</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -d <span class="re1">$DST</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">0</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">rmdir</span> <span class="re1">$DST</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;$DST does not exist&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">mountdest <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -d <span class="re1">$PACKAGE</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Mount point does not exist&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">1</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="re1">$PACKAGE</span><span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>ipkg<span class="sy0">/</span>info<span class="sy0">/*</span>.list; <span class="kw1">do</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="nu0">0</span> add <span class="sy0">`</span><span class="kw2">basename</span> <span class="re1">$i</span> .list<span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">umountdest <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">test</span> -d <span class="re1">$PACKAGE</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$?</span> = <span class="nu0">1</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Mount point does not exist&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">1</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">fi</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="re1">$PACKAGE</span><span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>ipkg<span class="sy0">/</span>info<span class="sy0">/*</span>.list; <span class="kw1">do</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="nu0">0</span> remove <span class="sy0">`</span><span class="kw2">basename</span> <span class="re1">$i</span> .list<span class="sy0">`</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2"><span class="kw1">case</span> <span class="st0">&quot;$COMMAND&quot;</span> <span class="kw1">in</span></div></li>
<li class="li1"><div class="de1">&nbsp; add<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; addlinks</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sy0">;;</span></div></li>
<li class="li1"><div class="de1">&nbsp; remove<span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; removelinks</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sy0">;;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw2">mount</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mountdest</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sy0">;;</span></div></li>
<li class="li2"><div class="de2">&nbsp; <span class="kw2">umount</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; umountdest</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sy0">;;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sy0">*</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Usage: $0 &lt;cmd&gt; &lt;target&gt;&quot;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot; &nbsp; &nbsp; &nbsp; Commands: add, remove, mount, umount&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot; &nbsp; &nbsp; &nbsp; Targets: &lt;package&gt;, &lt;mount point&gt;&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Example: &nbsp;$0 add kismet-server&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Example: &nbsp;$0 remove kismet-server&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Example: &nbsp;$0 mount /mnt/usb&quot;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Example: &nbsp;$0 umount /mnt/usb&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">1</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">esac</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">exit</span> <span class="nu0">0</span></div></li></ol></div></div></div>
</p>
<p>
Et pour installer tous les paquets d'un coup :
<div class='code-container-area'><div class='code-container-caption'>/usr/bin/ipkg-link-all</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="co0">#! /bin/sh</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">cd</span> <span class="sy0">/</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">for</span> package <span class="kw1">in</span> $<span class="br0">&#40;</span><span class="kw2">cat</span> <span class="sy0">/</span>home<span class="sy0">/</span>packages<span class="sy0">/</span>usr<span class="sy0">/</span>lib<span class="sy0">/</span>ipkg<span class="sy0">/</span>status <span class="sy0">|</span> <span class="kw2">grep</span> Package <span class="sy0">|</span> <span class="kw2">cut</span> -d<span class="st0">&quot; &quot;</span> -f2<span class="br0">&#41;</span> ; <span class="kw1">do</span></div></li>
<li class="li1"><div class="de1">&nbsp; .<span class="sy0">/</span>ipk-link add <span class="re1">$package</span></div></li>
<li class="li2"><div class="de2"><span class="kw1">done</span></div></li></ol></div></div></div>
</p>    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;Expressions Régulières&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1288" />
    <id>http://artisan.karma-lab.net/node/1288</id>
    <published>2007-12-06T00:38:52+01:00</published>
    <updated>2008-02-12T11:16:42+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Perl" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>
  Vu que ça me fatigue de rechercher à chaque fois les mêmes regex's, ouverture d'un petit bloc-note dédié à l'art (non maîtrisé) du parsing. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Vu que ça me fatigue de rechercher à chaque fois les mêmes regex's, ouverture d'un petit bloc-note dédié à l'art (non maîtrisé) du parsing. 
</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>URL</h2>
	
<p>
  Pour parser une URL d'un coup, celle-là marche plutôt bien à un détail près, il englobe la query et le hash (ce qu'il y a après un éventuel #). Pour éviter cela, si cela pose problème, il faut enlever le dernier ? et systématiquement ajouter un # à la fin de l'url avant parsing, s'il n'y est pas déjà évidemment. : 
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw2">sub</span> Parse <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a> <span class="sy0">=~</span> <span class="co2">/^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$/g</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">my</span> <span class="br0">&#40;</span><span class="re0">$query</span><span class="sy0">,</span><span class="re0">$hash</span><span class="br0">&#41;</span> <span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/split.html"><span class="kw3">split</span></a><span class="br0">&#40;</span><span class="co2">/#/</span><span class="sy0">,</span><span class="co3">$7</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/defined.html"><span class="kw3">defined</span></a> <span class="re0">$hash</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hash</span><span class="sy0">=</span><span class="st0">'';</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;}</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;if (!defined $query) {</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$query='</span><span class="st0">';</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;} else {</span></div></li>
<li class="li2"><div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$query=substr($query,1);</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;}</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;my %result = (</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;protocol=&gt;$2,</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;host=&gt;$3,</span></div></li>
<li class="li2"><div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;path=&gt;$4,</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;file=&gt;$6,</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;query=&gt;$query,</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hash=&gt;$hash</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;);</span></div></li>
<li class="li2"><div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;return %result;</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp;}</span></div></li>
<li class="li1"><div class="de1"><span class="st0"> &nbsp; &nbsp;return {};</span></div></li>
<li class="li1"><div class="de1"><span class="st0">}</span></div></li>
<li class="li1"><div class="de1"><span class="st0"></span</div></li></ol></div></div></div>
</p>    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;Bluetooth&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1276" />
    <id>http://artisan.karma-lab.net/node/1276</id>
    <published>2007-11-29T10:14:13+01:00</published>
    <updated>2008-02-01T09:54:05+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Divers petites choses liées à la prise en charge de l'USB sous Linux</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Divers petites choses liées à la prise en charge de l'USB sous Linux</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Pas de demande de PIN</h2>
	
<p>
<div class='code-container-area'><div class='code-container'><div class="code">hcid -n -f <span class="sy0">/</span>etc<span class="sy0">/</span>bluetooth<span class="sy0">/</span>hcid.conf</div></div></div>
</p>
<p>
Ensuite je lance dans une autre console, en tant qu'utilisateur non-root, je relance ma commande OBEX FTP. Et cette fois, une erreur apparaît (d'où l'interêt de lancer hcid à la main <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> :
<div class='code-container-area'><div class='code-container'><div class="code">call_passkey_agent<span class="br0">&#40;</span><span class="br0">&#41;</span>: no agent registered</div></div></div>
</p>
<p>Ok do, au hasard, je recherche une commande qui commence par passkey et bing, je trouve <kbd>passkey-agent</kbd>. Là je fabrique un petit script à 3 sesterces dans /usr/bin/pin.sh, dans lequel je place :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="co0">#!/bin/sh</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">echo</span> -n <span class="st0">&quot;PIN:1234&quot;</span></div></li></ol></div></div></div>
</p>
<p>Et après avoir rendu cela exécutable (chmod +x /usr/bin/pin.sh), en tant qu'utilisateur standard, je lance la commande :
<div class='code-container-area'><div class='code-container'><div class="code">passkey-agent --default <span class="sy0">/</span>usr<span class="sy0">/</span>bin<span class="sy0">/</span>pin.<span class="kw2">sh</span></div></div></div>
</p>
<p>
Je relance pour la troisième fois (en réalité pour les 352ième fois <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> la commande OBEX  ftp, le téléphone me demande un code, je saisi 1234 et bing, ça marche !!
</p>    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;Perl&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1263" />
    <id>http://artisan.karma-lab.net/node/1263</id>
    <published>2007-11-17T17:55:05+01:00</published>
    <updated>2008-02-01T09:50:45+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Perl" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Bloc-Notes dédié à perl
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Bloc-Notes dédié à perl
</p>
<!--break-->

	<a name='chapter_2'></a>
	<h2>UTF-8</h2>
	
<p>
Forcer l'UTF-8 sur un scalaire :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span> utf8<span class="sy0">::</span><span class="me2">is_utf8</span><span class="br0">&#40;</span><span class="re0">$message</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; utf8<span class="sy0">::</span><span class="me2">decode</span><span class="br0">&#40;</span><span class="re0">$message</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div></div>
</p>
<p>
Créer un fichier en UTF8
<div class='code-container-area'><div class='code-container'><div class="code"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/open.html"><span class="kw3">open</span></a> FILE<span class="sy0">,</span> <span class="st0">&quot;&gt;:utf8&quot;</span><span class="sy0">,</span> <span class="re0">$filename</span><span class="sy0">;</span></div></div></div>
</p>
<p>
Ecrire dans la console en UTF8
<div class='code-container-area'><div class='code-container'><div class="code"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/binmode.html"><span class="kw3">binmode</span></a> <span class="kw2">STDOUT</span><span class="sy0">,</span> <span class="st0">&quot;:utf8&quot;</span><span class="sy0">;</span></div></div></div>
</p>


	<a name='chapter_3'></a>
	<h2>Référence d'un scalaire</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code">\<span class="re0">$scalar</span></div></div></div>


	<a name='chapter_4'></a>
	<h2>Type d'une variable</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/ref.html"><span class="kw3">ref</span></a><span class="br0">&#40;</span><span class="re0">$var</span><span class="br0">&#41;</span></div></div></div>


	<a name='chapter_5'></a>
	<h2>Trimming</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="co1">#!/usr/bin/perl</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># Declare the subroutines</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">sub</span> trim<span class="br0">&#40;</span><span class="co5">$)</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw2">sub</span> ltrim<span class="br0">&#40;</span><span class="co5">$)</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">sub</span> rtrim<span class="br0">&#40;</span><span class="co5">$)</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># Create a test string</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">my</span> <span class="re0">$string</span> <span class="sy0">=</span> <span class="st0">&quot; &nbsp;<span class="es0">\t</span> &nbsp;Hello world! &nbsp; &quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># Here is how to output the trimmed text &quot;Hello world!&quot;</span></div></li>
<li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> trim<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> ltrim<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> rtrim<span class="br0">&#40;</span><span class="re0">$string</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># Perl trim function to remove whitespace from the start and end of the string</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">sub</span> trim<span class="br0">&#40;</span><span class="co5">$)</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw1">my</span> <span class="re0">$string</span> <span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; <span class="re0">$string</span> <span class="sy0">=~</span> <span class="co2">s/^\s+//</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="re0">$string</span> <span class="sy0">=~</span> <span class="co2">s/\s+$//</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <span class="re0">$string</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="co1"># Left trim function to remove leading whitespace</span></div></li>
<li class="li2"><div class="de2"><span class="kw2">sub</span> ltrim<span class="br0">&#40;</span><span class="co5">$)</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw1">my</span> <span class="re0">$string</span> <span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="re0">$string</span> <span class="sy0">=~</span> <span class="co2">s/^\s+//</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <span class="re0">$string</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="co1"># Right trim function to remove trailing whitespace</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">sub</span> rtrim<span class="br0">&#40;</span><span class="co5">$)</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw1">my</span> <span class="re0">$string</span> <span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; <span class="re0">$string</span> <span class="sy0">=~</span> <span class="co2">s/\s+$//</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <span class="re0">$string</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div></div>


	<a name='chapter_6'></a>
	<h2>Méthode AUTOLOAD</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp;<a target="blank" &nbsp;href="http://perldoc.perl.org/functions/package.html"><span class="kw3">package</span></a> Test<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp;<span class="kw2">use</span> vars <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/qw.html"><span class="kw3">qw</span></a><span class="br0">&#40;</span><span class="re0">$AUTOLOAD</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw2">sub</span> <span class="kw2">new</span> &nbsp;<span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; ...</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw2">sub</span> AUTOLOAD <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$self</span> <span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$name</span> <span class="sy0">=</span> <span class="re0">$AUTOLOAD</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">$name</span> <span class="sy0">=~</span> <span class="co2">s/.*:://</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="co5">@_</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$self</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="re0">$name</span><span class="br0">&#125;</span> <span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <span class="re0">$self</span><span class="sy0">-&gt;</span><span class="br0">&#123;</span><span class="re0">$name</span><span class="br0">&#125;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">my</span> <span class="re0">$test</span><span class="sy0">=</span><span class="kw2">new</span> Test<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="re0">$test</span><span class="sy0">-&gt;</span><span class="me1">toto</span><span class="br0">&#40;</span><span class="nu0">12</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1"># Créé automatiquement par l'autload</span></div></li>
<li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="re0">$test</span><span class="sy0">-&gt;</span><span class="me1">toto</span><span class="sy0">;</span></div></li></ol></div></div></div>


	<a name='chapter_7'></a>
	<h2>Exportation de constantes</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/package.html"><span class="kw3">package</span></a> MesConstantes<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/require.html"><span class="kw3">require</span></a> <span class="nu0">5.6</span><span class="nu0">.0</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw2">use</span> strict<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw2">use</span> warnings<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw2">use</span> constant C1 <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">use</span> constant C2 <span class="sy0">=&gt;</span> <span class="st0">&quot;coucou&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="kw1">our</span><span class="br0">&#40;</span><span class="re0">@ISA</span><span class="sy0">,</span> <span class="re0">@EXPORT</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="re0">@ISA</span> &nbsp; &nbsp;<span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/qw.html"><span class="kw3">qw</span></a><span class="br0">&#40;</span>Exporter<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="re0">@EXPORT</span> <span class="sy0">=</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/qw.html"><span class="kw3">qw</span></a><span class="br0">&#40;</span>C1 C2<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="nu0">1</span><span class="sy0">;</span></div></li></ol></div></div></div>
</p>
<p>
Et à l'extérieur, utilisation des constantes :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw2">use</span> MesConstantes<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> C1.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> C2.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div></li></ol></div></div></div>
</p>
<div class='inline-box attention'>La ligne <kbd>@ISA = qw(Exporter)</kbd> définit un héritage (au sens objet) de la classe Exporter vers la classe constante. Donc si l'on joue à cela dans un objet qui hérite d'une autre classe on a un héritage multiple. Pour éviter les conflits avec SUPER, placer le "véritable" héritage en tête de liste <kbd>qw(MonHeritage Exporter)</kbd>. 
</div>


	<a name='chapter_8'></a>
	<h2>Chargement dynamique d'un module</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw1">my</span> <span class="re0">@modules</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="st0">&quot;Module1&quot;</span><span class="sy0">,</span><span class="st0">&quot;Module2&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">my</span> <span class="re0">@instances</span><span class="sy0">=</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">@modules</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/eval.html"><span class="kw3">eval</span></a> <span class="st0">&quot;require $_&quot;</span><span class="sy0">;</span> </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="re0">$instances</span><span class="br0">&#91;</span><a target="blank" &nbsp;href="http://perldoc.perl.org/functions/scalar.html"><span class="kw3">scalar</span></a><span class="br0">&#40;</span><span class="re0">@instances</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy0">=</span><span class="co5">$_</span><span class="sy0">-&gt;</span><span class="me1">new</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div></div></div>


	<a name='chapter_9'></a>
	<h2>Flush stdout</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">&nbsp;<span class="kw2">use</span> IO<span class="sy0">::</span><span class="me2">Handle</span> <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/qw.html"><span class="kw3">qw</span></a><span class="br0">&#40;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">....</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\r</span><span class="es0">\e</span>[K&quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STDOUT<span class="sy0">-&gt;</span><span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" &nbsp;href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;message&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STDOUT<span class="sy0">-&gt;</span><span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></div></div></div>    ]]></content>
  </entry>
  <entry>
    <title>Bloc-note &#039;udev&#039;</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1256" />
    <id>http://artisan.karma-lab.net/node/1256</id>
    <published>2007-11-08T09:19:07+01:00</published>
    <updated>2008-05-25T13:56:26+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Matériel" />
    <category term="Aucun" />
    <category term="Note" />
    <category term="OK" />
    <summary type="html"><![CDATA[<p>Bloc-Note UDEV</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Bloc-Note UDEV</p>
<p>Création d'une règle udev</p>
<p>  Pour cela nous allons utiliser udev. Cette couche logiciel joue le rôle d'interface entre le kernel et le reste de l'OS. C'est lui qui va créer les noms de device lorsque le kernel les a détecté. Dans notre cas, nous cherchons à détecter l'atterrissage d'un disque dur externe connecté via l'usb. Pour l'instant, disons que le disque est connecté et que son device "aléatoire" est /dev/sdb. La première chose à faire est de sortir des informations sur ce device via un utilitaire du paquet udev, udevinfo:</p>
<div class='code-container-area'>
<div class='code-container'>
<div class="code">
<ol>
<li class="li1">
<div class="de1">udevinfo -a -p $<span class="br0">&#40;</span>udevinfo -q path -n <span class="sy0">/</span>dev<span class="sy0">/</span>sda<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co0"># (...)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co0"># ATTRS{idProduct}==&quot;6830&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co0"># ATTRS{idVendor}==&quot;04b4&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co0"># (...)</span></div>
</li>
</ol>
</div>
</div>
</div>
<p>  Deuxième étape, créer ou modifier le fichier des règles locales d'udev /etc/udev/rules.d/10-local.rules, pour y poser le ligne suivante :</p>
<div class='code-container-area'>
<div class='code-container'>
<div class="code"><span class="re2">BUS=</span>=<span class="st0">&quot;usb&quot;</span>, <span class="re2">KERNEL=</span>=<span class="st0">&quot;sd?1&quot;</span>, SYSFS<span class="br0">&#123;</span>idVendor<span class="br0">&#125;</span>==<span class="st0">&quot;04b4&quot;</span>, SYSFS<span class="br0">&#123;</span>idProduct<span class="br0">&#125;</span>==<span class="st0">&quot;6830&quot;</span>, <span class="re2">NAME=</span><span class="st0">&quot;%k&quot;</span>, SYMLINK+=<span class="st0">&quot;usbbackup&quot;</span></div>
</div>
</div>
<p>  Cette ligne indique à udev que lorsqu'il reçoit un message d'arrivée pour un device que le kernel désire nommer "sdX1", que ce device a le product ID et vendor ID qui nous intéresse, garder le nom d'origine (NAME="%k") mais ajouter un lien symbolique ver usbbackup.  C'est tout simple et cela marche à chaud, débranchez votre disque, re-branchez le et le lien doit apparaître sans autre problème.... Et voilà <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/> </p>
<p>Alors à partir de là, on peut pousser tout cela un peu plus loin, par exemple en renommant "physiquement" un device. Dans la "rule" précédente, le choix était fait de conserver le nom d'origine (NAME="%k") et de faire un lien symbolique (SYMLINK+="usbbackup"). Il est donc possible de directement renommer la partition en usbbackup via la règle :</p>
<div class='code-container-area'>
<div class='code-container'>
<div class="code"><span class="re2">BUS=</span>=<span class="st0">&quot;usb&quot;</span>, <span class="re2">KERNEL=</span>=<span class="st0">&quot;sd?1&quot;</span>, SYSFS<span class="br0">&#123;</span>idVendor<span class="br0">&#125;</span>==<span class="st0">&quot;04b4&quot;</span>, SYSFS<span class="br0">&#123;</span>idProduct<span class="br0">&#125;</span>==<span class="st0">&quot;6830&quot;</span>, <span class="re2">NAME=</span><span class="st0">&quot;usb-backup&quot;</span></div>
</div>
</div>
<p>et même, si l'on a plusieurs partition renommer en conservant la numérotation (noter l'apparition du double ? et du %n pour le numéro de la partition) :</p>
<div class='code-container-area'>
<div class='code-container'>
<div class="code"><span class="re2">BUS=</span>=<span class="st0">&quot;usb&quot;</span>, <span class="re2">KERNEL=</span>=<span class="st0">&quot;sd??&quot;</span>, SYSFS<span class="br0">&#123;</span>idVendor<span class="br0">&#125;</span>==<span class="st0">&quot;04b4&quot;</span>, SYSFS<span class="br0">&#123;</span>idProduct<span class="br0">&#125;</span>==<span class="st0">&quot;6830&quot;</span>, <span class="re2">NAME=</span><span class="st0">&quot;usb-backup-%n&quot;</span></div>
</div>
</div>
    ]]></content>
  </entry>
</feed>
