<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.bonz.org/tech/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>ZenTech - système</title>
  <link>http://www.bonz.org/tech/</link>
  <description>Om Mani Padme Hum</description>
  <language>fr</language>
  <pubDate>Tue, 23 Sep 2008 11:58:05 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Aaaaaaaaaaaaaaaaï love americaaaaaaaaaaaaaaaa</title>
    <link>http://www.bonz.org/tech/post/2008/09/14/Aaaaaaaaaaaaaaaai-love-americaaaaaaaaaaaaaaaa</link>
    <guid isPermaLink="false">urn:md5:12a2b9585728d3bfac39b9f201b08e14</guid>
    <pubDate>Sun, 14 Sep 2008 07:41:00 +0200</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>accent</category><category>compose</category><category>gnome</category><category>qwerty</category><category>ubuntu</category>    
    <description>    &lt;p&gt;Je viens de m'acheter un &lt;a href=&quot;http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/catalog.workflow:category.details?current-catalog-id=12F0696583E04D86B9B79B0FEC01C087&amp;amp;current-category-id=2D07A76B547E4B28A678EA089EF892A3&quot; hreflang=&quot;en&quot;&gt;X61s&lt;/a&gt; aux US. Problème de taille, le clavier qwerty ne me permet pas de lancer mon 'poï' habituel. L'utilisation d'une touche compose devrait rêgler ce problème. Très simple sur une ubuntu, &lt;code&gt;Système &amp;gt; Préférences &amp;gt; Clavier&lt;/code&gt;, &lt;code&gt;Options d'agencement&lt;/code&gt; et la flèche &lt;code&gt;Position de la touche Compose&lt;/code&gt;.
Personnellement, j'ai choisi la touche windows de gauche qui ne me sert à rien.
Après ça, les caractères accentués et autres sont accessible par une combinaison de touches. En appuyant sur la touche Compose, appuyer sur la touche de l'accent puis la touche du caractère. Par exemple, &lt;code&gt;&amp;lt;touche compose&amp;gt; + ' + e&lt;/code&gt; donnera &quot;é&quot; ou &lt;code&gt;&amp;lt;touche compose&amp;gt; + , + c&lt;/code&gt; donnera &quot;ç&quot;. Une liste de différentes sequences est disponible sur &lt;a href=&quot;http://en.wikipedia.org/wiki/Compose_key&quot; hreflang=&quot;en&quot;&gt;wikipedia&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.bonz.org/tech/post/2008/09/14/Aaaaaaaaaaaaaaaai-love-americaaaaaaaaaaaaaaaa#comment-form</comments>
      <wfw:comment>http://www.bonz.org/tech/post/2008/09/14/Aaaaaaaaaaaaaaaai-love-americaaaaaaaaaaaaaaaa#comment-form</wfw:comment>
      <wfw:commentRss>http://www.bonz.org/tech/feed/rss2/comments/267</wfw:commentRss>
      </item>
    
  <item>
    <title>Mais mon surnom c'est plus simple à écrire</title>
    <link>http://www.bonz.org/tech/post/2008/08/07/Mais-mon-surnom-cest-plus-simple-a-ecrire</link>
    <guid isPermaLink="false">urn:md5:0fbf8dc7a5c35806ab168d37df6e6dc3</guid>
    <pubDate>Thu, 07 Aug 2008 23:38:00 +0200</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>debian</category><category>dedibox</category><category>nick</category>    
    <description>&lt;p&gt;Si vous faites comme moi partie des gens qui ont un nick/login vraiment court (moins de quatre lettres en fait), vous avez été victime, vous aussi, des contraintes de la dedibox. En effet, le compte utilisateur doit faire entre quatre et vingt caractères. Mon login en fait deux ... maiiiiiiiis la situation n'est pas irrémédiable.&lt;/p&gt;    &lt;p&gt;C'est finalement assez simple, mais globalement dangereux. Si une déconnexion survenait au cours de cette manipulation, le système pourrait devenir inaccessible pour ce compte utilisateur. J'ai l'habitude de ne pas donner d'accès ssh à mon utilisateur &lt;code&gt;root&lt;/code&gt;, donc je m'autodétruis dans un nuage de fumée bleue.&lt;/p&gt;


&lt;p&gt;On commence par passer &lt;code&gt;root&lt;/code&gt;, ensuite il faut modifier les fichiers &lt;code&gt;/etc/shadow&lt;/code&gt;, &lt;code&gt;/etc/passwd&lt;/code&gt; et &lt;code&gt;/etc/group&lt;/code&gt;. Dans les deux premiers fichiers, il suffit de modifier le login à changer en début de ligne. Il doit se trouver une fois dans chaque fichier. Par exemple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# cat /etc/shadow
[...]
hrhr:$1$foobar$blihblahbloh:13923:0:99999:7:::
[...]
# cat /etc/passwd
[...]
hrhr:x:1000:1000:hrhr,,,:/home/hrhr:/bin/bash
[...]
&lt;/pre&gt;

&lt;p&gt;Le fichier &lt;code&gt;/etc/group&lt;/code&gt; contient aussi un certain nombre de références à ce login.&lt;/p&gt;
&lt;pre&gt;
# grep hrhr /etc/group
dialout:x:20:hrhr
cdrom:x:24:hrhr
floppy:x:25:hrhr
audio:x:29:hrhr
video:x:44:hrhr
plugdev:x:46:hrhr
hrhr:x:1000:
&lt;/pre&gt;


&lt;p&gt;Ensuite on s'occupe de déplacer le répertoire &lt;code&gt;home&lt;/code&gt; de l'utilisateur. On commence par modifier le chemin du répertoire &lt;code&gt;home&lt;/code&gt; dans &lt;code&gt;/etc/passwd&lt;/code&gt;. Ensuite on déplace le répertoire pour refléter ces changements.&lt;/p&gt;
&lt;pre&gt;
# mv /home/oldnick /home/newnick
&lt;/pre&gt;

&lt;p&gt;Et voualaaaaaaaaaa. A la prochaine connexion, le nouvel utilisateur peut être utilisé.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.bonz.org/tech/post/2008/08/07/Mais-mon-surnom-cest-plus-simple-a-ecrire#comment-form</comments>
      <wfw:comment>http://www.bonz.org/tech/post/2008/08/07/Mais-mon-surnom-cest-plus-simple-a-ecrire#comment-form</wfw:comment>
      <wfw:commentRss>http://www.bonz.org/tech/feed/rss2/comments/245</wfw:commentRss>
      </item>
    
  <item>
    <title>Renforce la racine de tes cheveux</title>
    <link>http://www.bonz.org/tech/post/2008/07/24/Renforce-la-racine-de-tes-cheveux</link>
    <guid isPermaLink="false">urn:md5:64605e6acc58bc9f60dcfd7544ed4cde</guid>
    <pubDate>Thu, 24 Jul 2008 16:37:00 +0200</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>indiana</category><category>opensolaris</category><category>solaris</category><category>sun</category><category>x86</category><category>zfs</category>    
    <description>&lt;p&gt;Lors d'une installation &lt;a href=&quot;http://opensolaris.org/&quot; hreflang=&quot;en&quot;&gt;opensolaris&lt;/a&gt; (2008.05), le système de fichiers par défaut est maintenant &lt;a href=&quot;http://en.wikipedia.org/wiki/Zfs&quot; hreflang=&quot;en&quot;&gt;zfs&lt;/a&gt;. Ce qui me gêne aux entournures par contre c'est qu'on ne peut pas définir de partition racine en miroir (super top mode dans ta shopping list). Ce n'est pas grave, &lt;code&gt;zfs(1M)&lt;/code&gt; c'est la vie, juste après &lt;a href=&quot;http://www.gcu.info/&quot; hreflang=&quot;fr&quot;&gt;pinpin&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Une fois le système installé, au premier démarrage, l'état du système de fichier est le suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# df -h
Filesystem             size   used  avail capacity  Mounted on
rpool/ROOT/opensolaris
                        73G   2.2G    71G     4%    /
/devices                 0K     0K     0K     0%    /devices
/dev                     0K     0K     0K     0%    /dev
ctfs                     0K     0K     0K     0%    /system/contract
proc                     0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
swap                   7.7G   424K   7.7G     1%    /etc/svc/volatile
objfs                    0K     0K     0K     0%    /system/object
sharefs                  0K     0K     0K     0%    /etc/dfs/sharetab
/usr/lib/libc/libc_hwcap1.so.1
                        73G   2.2G    71G     4%    /lib/libc.so.1
fd                       0K     0K     0K     0%    /dev/fd
swap                   7.7G     8K   7.7G     1%    /tmp
swap                   7.7G    44K   7.7G     1%    /var/run
rpool/ROOT/opensolaris/opt
                        73G   3.6M    71G     1%    /opt
rpool/export            73G    19K    71G     1%    /export
rpool/export/home       73G   3.7M    71G     1%    /export/home
rpool                   73G    55K    71G     1%    /rpool
rpool/ROOT              73G    18K    71G     1%    /rpool/ROOT
# zpool status rpool
  pool: rpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          c5d0s0    ONLINE       0     0     0

errors: No known data errors
&lt;/pre&gt;

&lt;p&gt;On constate que tout le système a été construit sur un pool &lt;code&gt;zfs(1M)&lt;/code&gt; composé d'un seul disque. La manoeuvre pour ajouter la sécurité d'un volume en miroir est navrante de simplicité. Mon second disque est sur le même controleur (&lt;code&gt;c5d1s0&lt;/code&gt;) que le premier et de la même taille, je l'ajoute en entier dans le pool &lt;code&gt;zfs(1M)&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;
# zpool attach -f rpool c5d0s0 c5d1s0
# zpool status rpool
  pool: rpool
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h0m, 2.08% done, 0h6m to go
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            c5d0s0  ONLINE       0     0     0
            c5d1s0  ONLINE       0     0     0

errors: No known data errors
&lt;/pre&gt;

&lt;p&gt;La synchronisation se fait en peu de temps pour des disques d'à peu près 750Go.&lt;/p&gt;
&lt;pre&gt;
# zpool status rpool
  pool: rpool
 state: ONLINE
 scrub: resilver completed after 0h1m with 0 errors on Thu Jul 24 16:29:24 2008
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            c5d0s0  ONLINE       0     0     0
            c5d1s0  ONLINE       0     0     0

errors: No known data errors
&lt;/pre&gt;</description>
    
    
    
          <comments>http://www.bonz.org/tech/post/2008/07/24/Renforce-la-racine-de-tes-cheveux#comment-form</comments>
      <wfw:comment>http://www.bonz.org/tech/post/2008/07/24/Renforce-la-racine-de-tes-cheveux#comment-form</wfw:comment>
      <wfw:commentRss>http://www.bonz.org/tech/feed/rss2/comments/227</wfw:commentRss>
      </item>
    
  <item>
    <title>Unleash maximum power</title>
    <link>http://www.bonz.org/tech/post/2007/09/18/Unleash-maximum-power</link>
    <guid isPermaLink="false">urn:md5:c8846e19ae331b9b85996dfd7fc4e3d3</guid>
    <pubDate>Wed, 23 Jul 2008 14:18:00 +0200</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>8.04</category><category>areca</category><category>gpt</category><category>kernel</category><category>sata</category><category>ubuntu</category><category>v2.6</category>    
    <description>&lt;p&gt;J'ai à nouveau trouvé du temps pour jouer avec &lt;a href=&quot;http://www.bonz.org/tech/post/2007/09/16/Un-peu-dordre-dans-la-maison&quot; hreflang=&quot;fr&quot;&gt;ma grosse bête&lt;/a&gt;. Le montage iscsi fonctionne &lt;a href=&quot;http://groups.google.com/group/open-iscsi/browse_thread/thread/a11d48ed43288812&quot; hreflang=&quot;en&quot;&gt;maintenant&lt;/a&gt; tout simplement parce que je suis passé en &lt;a href=&quot;http://www.ubuntu.com/products/whatisubuntu/serveredition&quot; hreflang=&quot;en&quot;&gt;ubuntu server 8.04 LTS&lt;/a&gt;. Le problème que je rencontre maintenant, c'est que je me retrouve avec un volume d'à peu près 15To à partitionner et formater. Voyage dans le mode du stockage v1agr4.&lt;/p&gt;    &lt;h2&gt;Partitionnement&lt;/h2&gt;

&lt;p&gt;Il faut déjà s'occuper de créer une partition de cette taille. Au-dessus de 2TB il est nécessaire d'utiliser le format de partitionnement &lt;a href=&quot;http://en.wikipedia.org/wiki/GUID_Partition_Table&quot; hreflang=&quot;en&quot;&gt;GPT&lt;/a&gt;. Pour créer un partition à ce format j'utilise &lt;code&gt;parted(8)&lt;/code&gt;. Je compte avoir une partition unique qui fait la taille du volume.&lt;/p&gt;
&lt;pre&gt;
# parted /dev/sdb
GNU Parted 1.7.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart
Partition name?  []? arc1
File system type?  [ext2]? ext2
Start? 0
End? -1
(parted) p

Disk /dev/sdb: 14,2TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17,4kB  14,2TB  14,2TB               arc1

(parted)
&lt;/pre&gt;


&lt;h2&gt;Formatage&lt;/h2&gt;

&lt;p&gt;A cette taille, je ne peux pas utiliser &lt;code&gt;ext3&lt;/code&gt; comme habituellement sur un système linux.&lt;/p&gt;
&lt;pre&gt;
# mkfs.ext3 /dev/sdb1 
mke2fs 1.40.8 (13-Mar-2008)
mkfs.ext3: Filesystem too large.  No more than 2**31-1 blocks
         (8TB using a blocksize of 4k) are currently supported.
&lt;/pre&gt;

&lt;p&gt;Il faut donc regarder du côté de reiserfs (je ne ferai pas de blague sortie de terre ... *kh*) ou de xfs. Je mets de côté les &lt;a href=&quot;http://en.wikipedia.org/wiki/Troll&quot; hreflang=&quot;en&quot;&gt;trolls&lt;/a&gt; sur les systèmes de fichier et vous laisse faire un choix en votre âme et conscience.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>All your poll are belong to us</title>
    <link>http://www.bonz.org/tech/post/2008/03/04/All-your-poll-are-belong-to-us</link>
    <guid isPermaLink="false">urn:md5:478d1667209ca96937554b17ebdbc7f8</guid>
    <pubDate>Wed, 05 Mar 2008 18:36:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>debian</category><category>etch</category><category>net-snmp</category><category>snmp</category>    
    <description>&lt;p&gt;J'ai aujourd'hui besoin de tenir à l'oeil certaines valeurs sur un serveur, le plus simple semble d'utiliser &lt;a href=&quot;http://net-snmp.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;net-snmp&lt;/a&gt; et &lt;a href=&quot;http://oss.oetiker.ch/mrtg/&quot; hreflang=&quot;en&quot;&gt;mrtg&lt;/a&gt;. Ce serveur SNMP peut être très facilement étendu, mais est assez mal documenté à mon goût. Je vais donc faire un petit tour des méthodes simples d'utilisation de net-snmp pour récupérer des données non communes.&lt;/p&gt;    &lt;p&gt;Les versions de net-snmp et mrtg installées sur ma debian etch sont &lt;code&gt;snmpd (5.2.3-7etch2)&lt;/code&gt; et &lt;code&gt;mrtg (2.14.7-2)&lt;/code&gt;. Je suppose que vous êtes à l'aise avec le concept de SNMP et que net-snmp et mrtg sont configurés.&lt;br /&gt;
En faisant le tour du site web, du fichier de configuration par défaut et de goo^Winternet, j'ai pû lister les méthodes suivantes&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;exec&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extend&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pass&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je passe sur l'utilisation de &lt;a href=&quot;http://net-snmp.sourceforge.net/wiki/index.php/TUT:Writing_a_Subagent&quot; hreflang=&quot;en&quot;&gt;subagent&lt;/a&gt; qui est plus complexe.&lt;br /&gt;
Le script que je vais utiliser tient en 2 lignes et se trouve dans &lt;code&gt;/tmp/test_snmp&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;#!/bin/sh
echo 42
&lt;/pre&gt;

&lt;p&gt;Pour information, le fichier &lt;code&gt;/usr/share/snmp/mibs/UCD-SNMP-MIB.txt&lt;/code&gt; indique que l'OID 2021 correspond à &lt;code&gt;ucdavis&lt;/code&gt; et se trouve après le noeud &lt;code&gt;enterprise&lt;/code&gt; (ce qui donne &lt;code&gt;.1.3.6.1.4.1.2021&lt;/code&gt;). Cet OID sera utilisé pour ajouter de nouvelles données en test, en réalité il faudrait utiliser un OID correspondant à l'environnement d'utilisation (un OID d'entreprise délivré par &lt;a href=&quot;http://www.iana.org/assignments/enterprise-numbers&quot; hreflang=&quot;en&quot;&gt;IANA&lt;/a&gt; par exemple).&lt;/p&gt;


&lt;h2&gt;&lt;code&gt;exec&lt;/code&gt;&lt;/h2&gt;
&lt;pre&gt;
[...]
exec test1 /tmp/test_snmp
exec .1.3.6.1.4.1.2021.60 test2 /tmp/test_snmp
[...]
&lt;/pre&gt;

&lt;p&gt;Après redémarrage, on vérifie que les données sont bien accessibles en SNMP&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ snmpwalk -v 1 -c private localhost .1.3.6.1.4.1.2021
[...]
UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
UCD-SNMP-MIB::extNames.1 = STRING: test_snmp
UCD-SNMP-MIB::extCommand.1 = STRING: /tmp/test_snmp
UCD-SNMP-MIB::extResult.1 = INTEGER: 0
UCD-SNMP-MIB::extOutput.1 = STRING: 42
UCD-SNMP-MIB::extErrFix.1 = INTEGER: 0
UCD-SNMP-MIB::extErrFixCmd.1 = STRING:
[...]
UCD-SNMP-MIB::ucdavis.60.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.60.2.1 = STRING: &amp;quot;test_snmp&amp;quot;
UCD-SNMP-MIB::ucdavis.60.3.1 = STRING: &amp;quot;/tmp/test_snmp&amp;quot;
UCD-SNMP-MIB::ucdavis.60.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.60.101.1 = STRING: &amp;quot;42&amp;quot;
UCD-SNMP-MIB::ucdavis.60.102.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.60.103.1 = &amp;quot;&amp;quot;
[...]
&lt;/pre&gt;

&lt;p&gt;La première forme est plus explicite et la deuxième forme est mieux maitrisée puisqu'on choisit l'OID destination.&lt;/p&gt;


&lt;p&gt;Le problème est que le serveur snmp n'est pas très satisfait de l'utilisation de &lt;code&gt;exec&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
[...]
Mar  4 17:28:45 snmp.priv snmpd[8678]: /etc/snmp/snmpd.conf: line 363: Error: Warning: relocatable 'exec' format will change in a future release - See 'NET-SNMP-EXTEND-MIB' for an alternative
Mar  4 17:28:45 snmp.priv snmpd[8678]: net-snmp: 2 error(s) in config file(s)
&lt;/pre&gt;


&lt;h2&gt;&lt;code&gt;extend&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;L'uilisation de &lt;code&gt;extend&lt;/code&gt; se fait via une mib spéciale (&lt;code&gt;NET-SNMP-EXTEND-MIB.txt&lt;/code&gt;), sur une debian elle se trouve dans &lt;code&gt;/usr/share/snmp/mibs&lt;/code&gt;. L'utilisation de cette option permet de créer automatiquement des entrées sous l'OID &lt;code&gt;.1.3.6.1.4.1.8072&lt;/code&gt; par défaut.&lt;/p&gt;
&lt;pre&gt;
extend test_snmp /tmp/test_snmp
extend .1.3.6.1.4.1.2021.60 test_snmp /tmp/test_snmp
&lt;/pre&gt;

&lt;p&gt;Les résultats se trouvent aux 2 endroits suivants&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ snmpwalk -v 1 -c private localhost NET-SNMP-EXTEND-MIB::nsExtendObjects
[...]
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 3
NET-SNMP-EXTEND-MIB::nsExtendCommand.&amp;quot;test_snmp&amp;quot; = STRING: /tmp/test_snmp
NET-SNMP-EXTEND-MIB::nsExtendArgs.&amp;quot;test_snmp&amp;quot; = STRING: 
NET-SNMP-EXTEND-MIB::nsExtendInput.&amp;quot;test_snmp&amp;quot; = STRING: 
NET-SNMP-EXTEND-MIB::nsExtendCacheTime.&amp;quot;test_snmp&amp;quot; = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType.&amp;quot;test_snmp&amp;quot; = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType.&amp;quot;test_snmp&amp;quot; = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage.&amp;quot;test_snmp&amp;quot; = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus.&amp;quot;test_snmp&amp;quot; = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line.&amp;quot;test_snmp&amp;quot; = STRING: 42
NET-SNMP-EXTEND-MIB::nsExtendOutputFull.&amp;quot;test_snmp&amp;quot; = STRING: 42
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines.&amp;quot;test_snmp&amp;quot; = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendResult.&amp;quot;test_snmp&amp;quot; = INTEGER: 0
NET-SNMP-EXTEND-MIB::nsExtendOutLine.&amp;quot;test_snmp&amp;quot;.1 = STRING: 42
[...]
$ snmpwalk -v 1 -c private localhost .1.3.6.1.4.1.2021.60
UCD-SNMP-MIB::ucdavis.60.1.0 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.60.2.1.2.9.116.101.115.116.95.115.110.109.112 = STRING: &amp;quot;/tmp/test_snmp&amp;quot;
UCD-SNMP-MIB::ucdavis.60.2.1.3.9.116.101.115.116.95.115.110.109.112 = &amp;quot;&amp;quot;
UCD-SNMP-MIB::ucdavis.60.2.1.4.9.116.101.115.116.95.115.110.109.112 = &amp;quot;&amp;quot;
UCD-SNMP-MIB::ucdavis.60.2.1.5.9.116.101.115.116.95.115.110.109.112 = INTEGER: 5
UCD-SNMP-MIB::ucdavis.60.2.1.6.9.116.101.115.116.95.115.110.109.112 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.60.2.1.7.9.116.101.115.116.95.115.110.109.112 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.60.2.1.20.9.116.101.115.116.95.115.110.109.112 = INTEGER: 4
UCD-SNMP-MIB::ucdavis.60.2.1.21.9.116.101.115.116.95.115.110.109.112 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.60.3.1.1.9.116.101.115.116.95.115.110.109.112 = STRING: &amp;quot;42&amp;quot;
UCD-SNMP-MIB::ucdavis.60.3.1.2.9.116.101.115.116.95.115.110.109.112 = STRING: &amp;quot;42&amp;quot;
UCD-SNMP-MIB::ucdavis.60.3.1.3.9.116.101.115.116.95.115.110.109.112 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.60.3.1.4.9.116.101.115.116.95.115.110.109.112 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.60.4.1.2.9.116.101.115.116.95.115.110.109.112.1 = STRING: &amp;quot;42&amp;quot;
&lt;/pre&gt;

&lt;p&gt;La deuxième forme revient à peu de choses près au résultat de la commande &lt;code&gt;exec&lt;/code&gt; avec utilisation d'un chemin.&lt;br /&gt;
La première forme permet d'obtenir beaucoup d'informations intéressantes comme le nombre d'éléments qui étendent la mib (&lt;code&gt;NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0&lt;/code&gt; on remarque donc que j'ai nettoyé la réponse puisqu'il annonce 3 scripts d'extension). On peut récupérer la réponse complète &lt;code&gt;NET-SNMP-EXTEND-MIB::nsExtendOutputFull.&quot;test_snmp&quot;&lt;/code&gt; ou les lignes une à une &lt;code&gt;NET-SNMP-EXTEND-MIB::nsExtendOutLine.&quot;test_snmp&quot;.x&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Le point faible de cette méthode subsiste dans le type de donnée renvoyé, notre script envoit un chiffre et il est considéré comme une chaine de caractère. De la même façon, si on veut générer un compteur sur 32 ou 64 bits, c'est impossible avec cette méthode.&lt;/p&gt;


&lt;h2&gt;&lt;code&gt;pass&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;L'utilisation de cette option de configuration oblige à choisir un OID en dessous duquel le script est entièrement maitre. Il faut donc avoir recours à un script plus complexe qui permet de donner le type de valeur et la valeur pour un OID donné. Le script &lt;code&gt;passtest&lt;/code&gt; donne une bonne idée d'un script basique permettant cette intégration. Je ne rentrerai pas dans les détails.&lt;/p&gt;
&lt;pre&gt;
pass .1.3.6.1.4.1.2021.60 /tmp/test_snmp
&lt;/pre&gt;

&lt;p&gt;Dans l'idée, le script est appelé avec les arguments &lt;code&gt;&amp;lt;reqtype&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;miboid&amp;gt;&lt;/code&gt;. Avec &lt;code&gt;reqtype&lt;/code&gt; qui correspond à &lt;code&gt;-g&lt;/code&gt; pour une requête &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;-n&lt;/code&gt; pour un &lt;code&gt;GETNEXT&lt;/code&gt; et un &lt;code&gt;-s&lt;/code&gt; pour un &lt;code&gt;SET&lt;/code&gt;. le chemin OID est donné par &lt;code&gt;miboid&lt;/code&gt;.&lt;br /&gt;
Dans le cas des commandes &lt;code&gt;GET&lt;/code&gt; et &lt;code&gt;GETNEXT&lt;/code&gt;, la réponse est constituée de 3 lignes&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l'OID de réponse;&lt;/li&gt;
&lt;li&gt;le type de la valeur retournée, au choix dans integer, gauge, counter, timeticks, ipaddress, objectid, ou string;&lt;/li&gt;
&lt;li&gt;la valeur.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans le cas de la commande &lt;code&gt;SET&lt;/code&gt;, le script ne doit rien retourner.&lt;/p&gt;


&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Il faut bien en finir avec tout ce bazar, il est intéressant de jeter un coup d'oeil du côté de &lt;code&gt;snmpd.conf(5)&lt;/code&gt; pour les détails, d'autres options de configuration comme &lt;code&gt;pass_persist&lt;/code&gt; peuvent être utilisées. Personnellement, j'utilise la solution &lt;code&gt;extend&lt;/code&gt; qui me semble raisonnablement simple à mettre en place et à utiliser.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Le log qui se voulait plus gros que le boeuf</title>
    <link>http://www.bonz.org/tech/post/2008/02/18/Le-log-qui-se-voulait-plus-gros-que-le-boeuf</link>
    <guid isPermaLink="false">urn:md5:79ce7425673a4818129a484571ec379e</guid>
    <pubDate>Thu, 21 Feb 2008 17:52:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>freebsd</category><category>lightppd 1.4</category><category>lighttpd</category>    
    <description>&lt;p&gt;C'est généralement au moment où on se retrouve avec une partition pleine que l'oubli de la rotation des logs refait surface. C'est ultra-classique et pourtant... Mais nous allons prendre les devants pour que lighty ne soit pas un mangeur d'espace.&lt;/p&gt;    &lt;p&gt;Sur &lt;a href=&quot;http://www.freebsd.org/&quot;&gt;FreeBSD&lt;/a&gt;, le gestionnaire de rotation de log de base s'appelle &lt;code&gt;newsyslog(8)&lt;/code&gt;, il est configuré par le fichier &lt;code&gt;/etc/newsyslog.conf&lt;/code&gt; (&lt;code&gt;newsyslog.conf(5)&lt;/code&gt;). Je suis habitué à &lt;code&gt;logrotate(8)&lt;/code&gt; et j'aime bien conserver tous mes fichiers de logs d'activité web, je vais donc faire la même chose avec &lt;code&gt;newsyslog(5)&lt;/code&gt;. Je souhaite donc faire tourner mes logs tous les jours à minuit, compresser les logs passés et les conserver &lt;em&gt;ad vitam eternam&lt;/em&gt;. Ces contraintes donnent l'entrée suivante dans le fichier de configuration&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# lighttpd rotates
/var/log/lighttpd/lighttpd.access.log   www:www   640  366 *   @T00   JC
&lt;/pre&gt;

&lt;p&gt;il faut spécifier un champ de gestion d'appartenance (propriétaire et groupe), lighttpd écrit les logs avec les droits www:www et ils seront déplacés en changeant le propriétaire en root:www.Les fichiers seront créés avec les droits &lt;code&gt;640&lt;/code&gt;, le champ suivant spécifie que les fichiers sont sauvegardés 366 fois avant d'éliminer les fichiers les plus anciens (1 an). Les 2 champs suivant provoquent une rotation à minuit tous les jours. Le dernier champ précise qu'on compresse les archive de log en bzip2 et que le fichier est créé si il n'existe pas.&lt;br /&gt;
Le champ 'count' n'est pas exhaustivement décrit dans la page de man, et j'espérais pouvoir utiliser une valeur qui me permettrait d'avoir un nombre infini de fichiers de logs. La lecture du &lt;a href=&quot;http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/newsyslog/newsyslog.c?rev=1.108&quot;&gt;code source&lt;/a&gt; m'a confirmé que je ne pouvais pas utiliser le même type de fonctionnement que pour &lt;code&gt;logrotate(8)&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Une entrée doit être créée pour chaque fichier de log de chaque vhost.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Un blog bien sous tout rapport</title>
    <link>http://www.bonz.org/tech/post/2008/02/14/Un-blog-bien-sous-tout-rapport</link>
    <guid isPermaLink="false">urn:md5:0389153de5dab650769cc255f2f8d6cb</guid>
    <pubDate>Thu, 14 Feb 2008 16:39:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>dotclear 2</category><category>freebsd</category><category>lighttpd</category><category>lighttpd 1.4</category>    
    <description>&lt;p&gt;Ce blog est un &lt;a href=&quot;http://dev.dotclear.net/2.0/&quot;&gt;dotclear 2&lt;/a&gt; installé sur un système &lt;a href=&quot;http://www.freebsd.org/&quot;&gt;FreeBSD&lt;/a&gt; et servi par un &lt;a href=&quot;http://www.lighttpd.net/&quot;&gt;lighty&lt;/a&gt;. J'ai choisi dotclear pour la possibilité de gérer de multiples blogs à partir d'un seul code, &lt;a href=&quot;http://www.wordpress.com/&quot;&gt;wordpress&lt;/a&gt; ne donnait pas cette possibilité simplement au moment de mon choix. Mon premier déploiement n'a pas été fait dans les règles FreeBSD, il est temps de remédier à cet insupportable état de fait.&lt;/p&gt;    &lt;p&gt;Les applications web sont déployées dans &lt;code&gt;/usr/local/www&lt;/code&gt; sous FreeBSD, le contenu des sites se trouve dans &lt;code&gt;/usr/local/www/data&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;
# cd /usr/local/www
# tar zxvf ~/src/dotclear-2.0-beta7.tar.gz
# mv dotclear dotclear2
&lt;/pre&gt;

&lt;p&gt;Le renommage du répertoire permet d'éviter un conflit dans l'éventualité de l'installation d'un dotclear 1.&lt;/p&gt;


&lt;p&gt;Une fois le blog installé, il faut le &lt;a href=&quot;http://doc.dotclear.net/2.0/admin/install&quot;&gt;configurer&lt;/a&gt;. La configuration de lighty est très simple, il suffit d'ajouter l'alias suivant pour un blog qui est atteint par http://www.bon.org/blog par exemple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
alias.url += (
        &amp;quot;/blog&amp;quot; =&amp;gt; &amp;quot;/usr/local/www/dotclear2&amp;quot;
)
&lt;/pre&gt;

&lt;p&gt;La suite de la configuration a déjà été abordée dans un autre &lt;a href=&quot;http://www.bonz.org/tech/post/2007/11/07/Et-si-je-racontais-ma-vie-avec-lighttpd&quot;&gt;billet&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Finalement la modification est assez mineure et revient uniquement à modifier le chemin d'alias pour tous les blogs hormis celui par défaut et ajouter un alias pour celui-ci.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>ALETER Out of memory</title>
    <link>http://www.bonz.org/tech/post/2008/02/13/ALETER-Out-of-memory</link>
    <guid isPermaLink="false">urn:md5:9804e411ea169baee893505ddeed88e0</guid>
    <pubDate>Wed, 13 Feb 2008 18:29:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>dotclear 2</category><category>freebsd</category><category>mysql5</category>    
    <description>&lt;p&gt;Si comme &lt;a href=&quot;http://fr.wikipedia.org/wiki/Le_Monde_de_Nemo&quot;&gt;Doris&lt;/a&gt; vous avez de petits problèmes de mémoire avec &lt;a href=&quot;http://dev.dotclear.net/2.0/&quot;&gt;dotclear 2&lt;/a&gt; (dc2 beta7) lors du chargement de la page d'administration des utilisateurs, le problème vient probablement de MySQL.&lt;/p&gt;    &lt;p&gt;Je me retrouve actuellement devant l'erreur suivante lorsque j'essaie d'administrer mes utilisateurs via l'interface d'administration&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;Out of memory; restart server and try again (needed 65528 bytes) (1037)
&lt;/pre&gt;

&lt;p&gt;&lt;img src=&quot;http://www.bonz.org/tech/public/tech/out_of_memory_dc2.png&quot; alt=&quot;Out of memory&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;
Le problème me semble venir du serveur MySQL, une petite recherche &lt;a href=&quot;http://www.google.com/search?q=Out+of+memory%3B+restart+server+and+try+again&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;aq=t&amp;amp;rls=com.ubuntu:en-US:official&amp;amp;client=firefox-a&quot;&gt;google&lt;/a&gt; me conforte dans cette idée, je mets donc un peu de code de debug dans &lt;code&gt;admin/users.php&lt;/code&gt; et je me retrouve avec cette requête SQL dantesque  générée par la fonction &lt;code&gt;getUsers()&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;SELECT U.user_id,user_super,user_status,user_pwd,user_name,user_firstname,user_displayname,user_email,user_url,user_desc, user_lang,user_tz, user_post_status,user_options, count(P.post_id) AS nb_post FROM dc_user U LEFT JOIN dc_post P ON U.user_id = P.user_id WHERE NULL IS NULL GROUP BY U.user_id,user_super,user_status,user_pwd,user_name,user_firstname,user_displayname,user_email,user_url,user_desc, user_lang,user_tz,user_post_status,user_options ORDER BY U.user_id ASC  LIMIT 30 OFFSET 0;
&lt;/pre&gt;

&lt;p&gt;Je comprends bien pourquoi mon petit serveur râle, devant l'adversité je me plie et je reconfigure mon serveur dans &lt;code&gt;/var/db/mysql/my.cnf&lt;/code&gt; en modifiant une seule ligne&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;sort_buffer_size = 128K
&lt;/pre&gt;

&lt;p&gt;Après un redémarrage du serveur MySQL, tout rentre dans l'ordre et everybody is content.
&lt;img src=&quot;http://www.bonz.org/tech/public/tech/users_dc2.png&quot; alt=&quot;Utilisateurs&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Rooooooooxanne</title>
    <link>http://www.bonz.org/tech/post/2007/11/29/Rooooooooxanne</link>
    <guid isPermaLink="false">urn:md5:cfd1f01a515fd6d23ce16069008c5dba</guid>
    <pubDate>Thu, 29 Nov 2007 13:04:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>debian</category><category>font</category><category>truetype</category><category>ubuntu</category>    
    <description>&lt;p&gt;J'ai eu besoin d'installer une jolie police de caractère (font en anglois) sur une ubuntu/debian (ce sont les seules distributions que j'ai testé) récemment et je me suis rendu compte de deux choses&amp;nbsp;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;C'est très simple à faire&lt;/li&gt;
&lt;li&gt;C'est peu documenté&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Donc voici la marche à suivre pour installer une police de caractère sans les droits administrateur.&lt;/p&gt;    &lt;p&gt;Il faut, &lt;em&gt;a priori&lt;/em&gt;, trouver un &lt;a href=&quot;http://del.icio.us/sberder/font&quot;&gt;belle police à installer&lt;/a&gt; (à noter les &quot;Free Fonts Of The Month&quot; de SmashingMagazine). Après avoir téléchargé la police en question et décompressé éventuellement une archive, les fichiers &lt;code&gt;.ttf&lt;/code&gt; sont disponible.&lt;/p&gt;
&lt;pre&gt;
$ wget http://www.kottke.org/plus/type/silkscreen/download/silkscreen.tar.gz -P ~/tmp
[...]
$ tar zxvf ~/tmp/silkscreen.tar.gz -C ~/tmp/
slkscr.ttf
slkscrb.ttf
slkscre.ttf
slkscreb.ttf
readme.txt
&lt;/pre&gt;

&lt;p&gt;Un fois les fichiers de police à disposition, il suffit de créer un répertoire &lt;code&gt;.fonts&lt;/code&gt; dans son répertoire &lt;code&gt;home&lt;/code&gt;, d'y placer les polices et rafraichir le cache de polices.&lt;/p&gt;
&lt;pre&gt;
$ mkdir ~/.fonts
$ cp ~/tmp/*.ttf ~/.fonts
$ fc-cache -f -v ~/.fonts/
/home/hr/.fonts/: caching, 1 fonts, 0 dirs
/var/cache/fontconfig: not cleaning unwritable cache directory
/home/hr/.fontconfig: cleaning cache directory
fc-cache: succeeded
&lt;/pre&gt;

&lt;p&gt;Et c'est parti, pas plus compliqué que ça.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Rah encore un cil dans l'oeil</title>
    <link>http://www.bonz.org/tech/post/2007/11/14/Rah-encore-un-cil-dans-loeil</link>
    <guid isPermaLink="false">urn:md5:97e06a0fea8c60e6d92d9ffdd38f47e5</guid>
    <pubDate>Wed, 14 Nov 2007 18:00:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>7.10</category><category>gutsy</category><category>ubuntu</category><category>xterm</category>    
    <description>&lt;p&gt;A chaque fois que j'installe une ubuntu, je me retrouve confronté au même problème, la couleur bleu foncé de mes Xterm est bien trop foncée par rapport au noir de fond et ça me détruit la pupille.
&lt;img src=&quot;http://www.bonz.org/tech/public/tech/ubuntu_xterm_blue_before.png&quot; alt=&quot;Ubuntu XTerm blue before&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/p&gt;    &lt;p&gt;Pour modifier cette couleur, il faut ajouter les définitions personnalisées des couleurs &lt;code&gt;color4&lt;/code&gt; et &lt;code&gt;color12&lt;/code&gt; à &lt;code&gt;~/.Xdefaults&lt;/code&gt;. J'utilise personnellement les définitions de bleu trouvées dans &lt;code&gt;/etc/X11/app-defaults/XTerm-color&lt;/code&gt; et signalées comme venant de la configuration Debian.&lt;/p&gt;
&lt;pre&gt;
! Another choice was from the Debian settings:
*VT100*color4: DodgerBlue1
*VT100*color12: SteelBlue1
&lt;/pre&gt;

&lt;p&gt;Après un coup d'oeil à &lt;code&gt;/etc/X11/Xsession&lt;/code&gt;, l'utilisation de &lt;code&gt;~/.Xresources&lt;/code&gt; ou &lt;code&gt;~/.Xsession&lt;/code&gt; est également possible.&lt;/p&gt;


&lt;p&gt;&lt;del&gt;Malheureusement, il faut redémarrer la machine (je n'ai pas trouvé d'autre moyen) pour obliger la relecture des resources X11.&lt;/del&gt;&lt;br /&gt;
&lt;ins&gt;update&lt;/ins&gt;: Je m'en doutais bien évidemment, mais je suis une &lt;a href=&quot;http://fr.wikipedia.org/wiki/Tanche&quot;&gt;tanche&lt;/a&gt; en X11. donc merci à KiBi, oz, rgs et anhj de m'avoir signalé une meilleure méthode pour relire les ressources et de me rappeler qu'on en apprend tous les jours.&lt;br /&gt;
La bonne méthode en effet est d'utiliser &lt;code&gt;xrdb(1)&lt;/code&gt; pour inclure les ressources dans le controleur de ressources.&lt;/p&gt;
&lt;pre&gt;
hr@ubuntu:~/$ xrdb -merge .xsession
&lt;/pre&gt;

&lt;p&gt;Et là, sous vos yeux ébahis, tout nouveau Xterm lancé aura les couleurs choisies. *w00t* si je puis dire.
&lt;img src=&quot;http://www.bonz.org/tech/public/tech/ubuntu_xterm_blue_after.png&quot; alt=&quot;Ubuntu XTerm blue after&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;
Ah ben c'est beaucoup mieux, c'est la société française des ophtalmologistes qui vous remerciera.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Et si je racontais ma vie avec lighttpd</title>
    <link>http://www.bonz.org/tech/post/2007/11/07/Et-si-je-racontais-ma-vie-avec-lighttpd</link>
    <guid isPermaLink="false">urn:md5:a4826e05ee7e98ad922bb3de21dfeaf2</guid>
    <pubDate>Wed, 07 Nov 2007 00:37:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>dotclear 2</category><category>lighttpd</category><category>lighttpd 1.4</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://www.dotclear.net/images/logo.png&quot; alt=&quot;logo dotclear&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;La France serait un des pays &lt;a href=&quot;http://archquo.nouvelobs.com/cgi/articles?ad=multimedia/20061116.REU48835.html&amp;amp;host=http://permanent.nouvelobs.com/&quot;&gt;comptant le plus de blogueurs&lt;/a&gt;, il n'y avait donc aucune raison que je fasse exception. Le problème étant que je souhaite séparer mes publications techniques de mes publications &quot;3615 MyLife&quot;. Comment donc faire fonctionner 2 blogs avec une seule version du code de &lt;a href=&quot;http://dev.dotclear.net/2.0/&quot;&gt;dotclear 2.0&lt;/a&gt;  et &lt;a href=&quot;http://www.lighttpd.net/&quot;&gt;lighty&lt;/a&gt;&amp;nbsp;?&lt;/p&gt;    &lt;p&gt;J'ai déjà expliqué, dans un &lt;a href=&quot;http://www.bonz.org/tech/post/2007/03/30/Et-si-on-mangeait-light&quot;&gt;post précédent&lt;/a&gt;, comment installer un dotclear 2.0 correctement avec lighty. En repartant de cette configuration, on va faire en sorte de créer un second blog sous l'url &lt;code&gt;http://www.bonz.org/tech/&lt;/code&gt; en utilisant le code placé dans le répertoire &lt;code&gt;/blog/&lt;/code&gt;. Sur mon serveur, ce code se trouve dans le répertoire &lt;code&gt;/usr/local/www/data/www.bonz.org/blog/&lt;/code&gt;.&lt;br /&gt;
L'intérêt d'un tel montage se trouve dans le partage du code du blog, la mise à jour de ce code se fait donc à la fois pour tous les blogs en un seul emplacement. Le partage de la zone publique dans laquelle se trouve les fichiers multimedia et le partage des thèmes. Dans l'ensemble on évite la duplication d'information.&lt;/p&gt;


&lt;p&gt;On va commencer par créer un nouveau blog via l'interface d'administration de dc2. Le lien &quot;Blogs&quot; dans la colonne de gauche, permet d'obtenir la liste des blogs gérés par le site. La création d'un nouveau blog se fait par le lien &quot;Créer un nouveau blog&quot;, les informations importantes sont l'identifiant et l'adresse du blog, respectivement &lt;code&gt;tech&lt;/code&gt; et &lt;code&gt;http://www.bonz.org/tech/&lt;/code&gt;.
&lt;img src=&quot;http://www.bonz.org/tech/public/tech/dc2_newblog.png&quot; alt=&quot;dc2 new blog&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;
Après avoir sélectionné le nouveau blog dans la liste déroulante du haut, utiliser le lien &quot;about:config&quot; dans les extensions pour obtenir l'accès à certaines variables de configuration. La variable &lt;strong&gt;&lt;code&gt;public_url&lt;/code&gt;&lt;/strong&gt; doit avoir la valeur &lt;code&gt;/tech/public&lt;/code&gt; et la variable &lt;strong&gt;&lt;code&gt;themes_url&lt;/code&gt;&lt;/strong&gt; la valeur &lt;code&gt;/tech/themes&lt;/code&gt;. Maintenant que le blog est correctement configuré, on peut passer à la configuration de lighty.&lt;/p&gt;


&lt;p&gt;La méthode consiste à créer un alias de lien en premier lieu et de réécrire les adresses ensuite. Pour créer un alias de lien, rien de plus facile.&lt;/p&gt;
&lt;pre&gt;
alias.url += (
        &amp;quot;/tech&amp;quot; =&amp;gt; &amp;quot;/usr/local/www/data/www.bonz.org/blog&amp;quot;
)
&lt;/pre&gt;

&lt;p&gt;Je crée un alias entre l'url &lt;code&gt;http://www.bonz.org/tech&lt;/code&gt; et le chemin système correspondant au code de mon blog. Je dois maintenant indiquer à dotclear 2 que je veux utiliser le blog dont l'identifiant est &quot;tech&quot;.&lt;/p&gt;
&lt;pre&gt;
# Dotclear2 env variable to get the right blog id
$HTTP[&amp;quot;url&amp;quot;] =~ &amp;quot;^/tech/&amp;quot; {  
    setenv.add-environment = (
        &amp;quot;DC_BLOG_ID&amp;quot; =&amp;gt; &amp;quot;tech&amp;quot;
    )
}
&lt;/pre&gt;

&lt;p&gt;Le code de dotclear embarque un système permettant de passer cette information par une variable d'environnement. Les réécritures se font sur le même principe que celui exposé dans mon &lt;a href=&quot;http://www.bonz.org/tech/post/2007/03/30/Et-si-on-mangeait-light&quot;&gt;billet précédent sur le sujet&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;
url.rewrite-once += (
    &amp;quot;^/tech/(archive.*)&amp;quot; =&amp;gt; &amp;quot;/tech/index.php/$1&amp;quot;,
    &amp;quot;^/tech/(category.*)&amp;quot; =&amp;gt; &amp;quot;/tech/index.php/$1&amp;quot;,
    &amp;quot;^/tech/(feed.*)&amp;quot; =&amp;gt; &amp;quot;/tech/index.php/$1&amp;quot;,
    &amp;quot;^/tech/(page.*)&amp;quot; =&amp;gt; &amp;quot;/tech/index.php/$1&amp;quot;,
    &amp;quot;^/tech/(post.*)&amp;quot; =&amp;gt; &amp;quot;/tech/index.php/$1&amp;quot;,
    &amp;quot;^/tech/(tag.*)&amp;quot; =&amp;gt; &amp;quot;/tech/index.php/$1&amp;quot;,
    &amp;quot;^/tech/(trackback.*)&amp;quot; =&amp;gt; &amp;quot;/tech/index.php/$1&amp;quot;
)
&lt;/pre&gt;

&lt;p&gt;Il faut penser à mettre en place les quelques protections d'accès déjà abordées sur les répertoires sensibles.&lt;/p&gt;


&lt;p&gt;La configuration est terminée, après un redémarrage de lighty tout devrait se passer sans encombres!&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Un peu d'ordre dans la maison</title>
    <link>http://www.bonz.org/tech/post/2007/09/16/Un-peu-dordre-dans-la-maison</link>
    <guid isPermaLink="false">urn:md5:bd42dd60504167574cc12fc371bbec7c</guid>
    <pubDate>Tue, 18 Sep 2007 19:22:00 +0200</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>areca</category><category>debian</category><category>etch</category><category>initramfs</category><category>kernel</category><category>sata</category><category>v2.6</category>    
    <description>&lt;p&gt;Je viens d'installer un serveur avec plein de SATA dans le ventre, la bête a 30To de disques répartis sur 2 controleurs Areca ARC-1280ML. L'installation d'une &lt;a href=&quot;http://www.debian.org/&quot;&gt;Debian/etch&lt;/a&gt; se passe sans problème, noyau 2.6.18-5-686. Après avoir installé le système sur 2 disques connectés à la carte mère (contrôleur ICH5R sur pilote &lt;code&gt;ata_piix&lt;/code&gt;), des volumes RAID5 sont créés sur les cartes Areca (pilote &lt;code&gt;arcmsr&lt;/code&gt;). Le démarrage s'arrête sur une invite de commande &lt;code&gt;initramfs&lt;/code&gt;, la partition racine est introuvable.&lt;/p&gt;    &lt;pre&gt;
Begin: Waiting for root file system... ...
Done.
        Check root= bootarg cat /proc/cmdline
        or missing modules, devices: cat /proc/modules ls /dev
ALERT! /dev/sda1 does not exist. Dropping to a shell!


Busybox v1.1.3 (Debian 1:1.1.1-4) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

/bin/sh: can't access tty; job control turned off
(initramfs)
&lt;/pre&gt;


&lt;p&gt;Mais qu'est-ce qu'il nous arrive madame Michu&amp;nbsp;? Tout simplement, les nouveaux volumes sont détectés par le noyau avant le disque sur lequel est installé le système. Résultat, le système n'est plus sur &lt;code&gt;/dev/sda&lt;/code&gt; mais sur &lt;code&gt;/dev/sdc&lt;/code&gt;. Et le plus drôle c'est qu'il est parfois sur &lt;code&gt;/dev/sdb&lt;/code&gt; parce que les controleurs Areca mettent du temps à se déclarer.&lt;/p&gt;


&lt;p&gt;Comment laver l'affront que nous impose ce petit impudent&amp;nbsp;? En jouant avec la partition RAM d'initialisation, j'ai nommé &lt;code&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Initramfs&quot;&gt;initramfs&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;C'est extrêmement simple, on va demander à la partition de démarrage en RAM de charger les modules sata dans l'ordre qu'on souhaite. Dans notre cas, le pilote &lt;code&gt;ata_piix&lt;/code&gt; avant &lt;code&gt;arcmsr&lt;/code&gt;. Les outils Debian permettent de faire ça de façon très simple, il suffit d'ajouter les modules qu'on souhaite voir chargés lors du démarrage dans le fichier &lt;code&gt;/etc/initramfs-tools/modules&lt;/code&gt;. Les modules doivent être listés, un par ligne dans l'ordre de chargement souhaité. Dans notre cas, il suffit de préciser le module qui prend en charge le disque de démarrage.&lt;/p&gt;
&lt;pre&gt;
# cat /etc/initramfs-tools/modules
[...]
ata_piix
&lt;/pre&gt;

&lt;p&gt;Il faut maintenant mettre à jour l'image en RAM pour propager ces modifications.&lt;/p&gt;
&lt;pre&gt;
# update-initramfs -v -k 2.6.18-5-686 -t -u
Keeping /boot/initrd.img-2.6.18-5-686.dpkg-bak
update-initramfs: Generating /boot/initrd.img-2.6.18-5-686
Adding module /lib/modules/2.6.18-5-686/kernel/drivers/scsi/scsi_mod.ko
Adding module /lib/modules/2.6.18-5-686/kernel/drivers/scsi/scsi_transport_spi.ko
Adding module /lib/modules/2.6.18-5-686/kernel/drivers/scsi/aic7xxx/aic7xxx.ko
[...]
Adding binary /sbin/mdrun
Building cpio /boot/initrd.img-2.6.18-5-686 initramfs
Backup /boot/initrd.img-2.6.18-5-686.bak
&lt;/pre&gt;

&lt;p&gt;Un petit redémarrage et tout est revenu en ordre. Et le plus beau, c'est que lorsque vous devrez mettre à jour votre noyau, le nouveau noyau fera automatiquement la reconstruction de l'image RAM d'initialisation.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Et si on mangeait light</title>
    <link>http://www.bonz.org/tech/post/2007/03/30/Et-si-on-mangeait-light</link>
    <guid isPermaLink="false">urn:md5:eac365821039a6038128c48882b46244</guid>
    <pubDate>Fri, 30 Mar 2007 16:54:00 +0200</pubDate>
    <dc:creator>hr</dc:creator>
        <category>système</category>
        <category>dotclear 2</category><category>freebsd</category><category>lighttpd</category><category>lighttpd 1.4</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://www.bonz.org/tech/public/tech/300_cokezero.jpg&quot; alt=&quot;coke zero&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Il  y a toujours un moment dans la vie où on se dit qu'on mange trop lourd et qu'il faudrait faire attention et que j'ai pris du gras de là. il n'y a pas longtemps c'est ma passerelle qui m'a dit ça. Alors hop un p'tit coup de régime, un avis de la part d'un &lt;a href=&quot;http://imil.net/&quot; hreflang=&quot;fr&quot;&gt;ami diététicien&lt;/a&gt; et c'est parti.
&lt;a href=&quot;http://www.lighttpd.net/&quot;&gt;lighttpd&lt;/a&gt; s'installe sans probléme sur un freebsd6.2 (lighttpd-1.4.13_2) et dès le premier démarrage, sans php, HAHAHA la blague.&lt;/p&gt;    &lt;pre&gt;
[root@backdoor ~]# ps ax -o 'user pid %cpu %mem command' -w|grep www
www      36654  0.0  0.7 /usr/local/sbin/lighttpd -f /usr/local/etc/lighttpd/lighttpd.conf
&lt;/pre&gt;

&lt;p&gt;A titre de comparaison, le port apache-1.3.37_2 sous freebsd, lancé avec la conf par défaut me donne ça&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
[root@backdoor ~]# ps ax -o 'user pid %cpu %mem command' -w|grep www
www      49868  0.0  0.8  2716  2136  ??  S     2:25PM   0:00.01 /usr/local/sbin/httpd
www      49869  0.0  0.8  2716  2136  ??  S     2:25PM   0:00.01 /usr/local/sbin/httpd
www      49870  0.0  0.8  2716  2136  ??  S     2:25PM   0:00.01 /usr/local/sbin/httpd
www      49871  0.0  0.8  2716  2136  ??  S     2:25PM   0:00.01 /usr/local/sbin/httpd
www      49872  0.0  0.8  2716  2136  ??  S     2:25PM   0:00.01 /usr/local/sbin/httpd
&lt;/pre&gt;

&lt;p&gt;La bonne blague donc, il suffit ensuite d'installer php en version FastCgi et de donner le chemin vers le binaire fcgi à lighttpd&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
fastcgi.server = ( &amp;quot;.php&amp;quot; =&amp;gt; ((
        &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/local/bin/php-cgi&amp;quot;,
        &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/tmp/php.socket&amp;quot;)))
&lt;/pre&gt;

&lt;p&gt;Un petit restart et des processus &lt;code&gt;php-cgi&lt;/code&gt; apparaissent dans le sillage de notre serveur http sous aspartame.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Dans la foulée je m'installe un &lt;a href=&quot;http://dev.dotclear.net/2.0/&quot;&gt;dotclear2&lt;/a&gt; et à condition de mettre une petite série de règles de réécriture, je peux même me faire de jolies URL pour les billets.&lt;/p&gt;
&lt;pre&gt;
url.rewrite-once += (
    &amp;quot;^/blog/(archive.*)&amp;quot; =&amp;gt; &amp;quot;/blog/index.php/$1&amp;quot;,
    &amp;quot;^/blog/(category.*)&amp;quot; =&amp;gt; &amp;quot;/blog/index.php/$1&amp;quot;,
    &amp;quot;^/blog/(feed.*)&amp;quot; =&amp;gt; &amp;quot;/blog/index.php/$1&amp;quot;,
    &amp;quot;^/blog/(page.*)&amp;quot; =&amp;gt; &amp;quot;/blog/index.php/$1&amp;quot;,
    &amp;quot;^/blog/(post.*)&amp;quot; =&amp;gt; &amp;quot;/blog/index.php/$1&amp;quot;,
    &amp;quot;^/blog/(tag.*)&amp;quot; =&amp;gt; &amp;quot;/blog/index.php/$1&amp;quot;,
    &amp;quot;^/blog/(trackback.*)&amp;quot; =&amp;gt; &amp;quot;/blog/index.php/$1&amp;quot;
)
$HTTP[&amp;quot;url&amp;quot;] =~ &amp;quot;/blog/(CHANGELOG|db|inc|cache|plugins)&amp;quot; {
    url.access-deny = (&amp;quot;&amp;quot;)
}
&lt;/pre&gt;

&lt;p&gt;Alors pour résumer, un fichier de configuration simpilissime à prendre en main, un système de modules niquel, une empreinte mémoire aussi imposante qu'un &lt;a href=&quot;http://fr.wikipedia.org/wiki/Pez&quot;&gt;PEZ&lt;/a&gt; et un système de vhosts que ma mère peut comprendre. Une vraie tuerie, seul bémol, l'absence de système ala &lt;code&gt;.htaccess&lt;/code&gt; qui, il faut l'avouer, est carrément convi (mais consommateur à chaque accès).&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>