Another Home Page Blog - blogmas17https://blog.anotherhomepage.org/2017-12-24T12:34:00+01:00Merci et bonnes fêtes de fin d'année !2017-12-24T12:34:00+01:002017-12-24T12:34:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-24:/post/2017/12/24/merci-et-bonnes-fetes-de-fin-annee/<p><img alt="""" src="https://blog.anotherhomepage.org/public/partytimeagain.jpg">Aujourd'hui, rien de particulièrement technique : je voulais juste profiter de ce dernier billet “<a href="/tag/blogmas">blogmas</a>” 2017 pour te souhaiter, chère lectrice ou cher lecteur, une excellente fin d'année. Peu importe que tu la fêtes ou non, et peu importe ce que tu fêtes, je te souhaite d'agréables moments.</p>
<p>C'est aussi la …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/partytimeagain.jpg">Aujourd'hui, rien de particulièrement technique : je voulais juste profiter de ce dernier billet “<a href="/tag/blogmas">blogmas</a>” 2017 pour te souhaiter, chère lectrice ou cher lecteur, une excellente fin d'année. Peu importe que tu la fêtes ou non, et peu importe ce que tu fêtes, je te souhaite d'agréables moments.</p>
<p>C'est aussi la fin de l'année pour ce blog, et probablement l'un des derniers billets sinon le dernier de 2017. J'espère avoir pu rendre service, fait découvrir une chose ou deux à au moins une personne grâce à mes billets. J'en profite pour remercier toutes celles et ceux qui ont lu un ou plusieurs articles, voir même commenté au bas d'entre eux ou sur les réseau sociaux ! J'ai énormément apprécié vos contributions !</p>
<p>Rendez-vous en 2018 !</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/comedynose/7517117010/in/photolist-csgbZG-bEhVGw-bEhSab-bTcCbK-owVuwk-9oxm1P-Z5MKqU-6MxWvn-QQXXCc-ZGPAnJ-hDBUdH-ot828W-hDNspe-mjUDxs-6z2WsP-7DdAia-i41cFp-7Dix2d-6z72EE-oeSii2-ci4RLY-odc8W8-odgiS2-4TtgXG-ou7ZK7-oeZuUV-ztuR53-oeV28k-otznNs-UdvsEi-FY5o6r-odmLW3-rrw8CN-dBCDKu-ouhCqf-hDFfP7-6dsDvE-kp4N1K-owSFsV-oeSTs5-7DhnX1-7Dix6o-owb9x9-oukmpr-owhopq-ou3L8n-ocFdq9-owtP42-odN7Db-ousimG" title=""Project">Pete - Project 366 #188: 060712 Party Time...Again!</a>.</em></p>On the road again !2017-12-23T09:30:00+01:002017-12-23T09:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-23:/post/2017/12/23/on-the-road-again/<p><img alt=""Mountain" src="https://blog.anotherhomepage.org/public/2017/mountainroad.jpg" title=""Mountain">Aujourd'hui, je suis sur la route des vacances de fin d'année, et n'ai pas eu le temps d'écrire un billet technique. Il me manque d'ailleurs encore deux billets pour ce blogmas, je n'aurai malheureusement pas le temps d'ici demain de les écrire.</p>
<p>Sans préciser particulièrement d'où je pars et où …</p><p><img alt=""Mountain" src="https://blog.anotherhomepage.org/public/2017/mountainroad.jpg" title=""Mountain">Aujourd'hui, je suis sur la route des vacances de fin d'année, et n'ai pas eu le temps d'écrire un billet technique. Il me manque d'ailleurs encore deux billets pour ce blogmas, je n'aurai malheureusement pas le temps d'ici demain de les écrire.</p>
<p>Sans préciser particulièrement d'où je pars et où je vais, il y a environ 6h30 de route, sans compter les pauses. Je ne fais pas souvent des journées de route comme ça mais étrangement je les apprécie.</p>
<p>Bonne journée !</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/wallboat/25096261938/in/photolist-EeEUkm-Z7z3pC-YaEMJv-D6msbp-8SGDgb-Z93Nh3-jsyMqt-mjg9Nr-CS7qyB-22vrjuk-SUFEbE-WVP6B3-UyEDNM-D36t4V-21asDL6-WPobm7-cVoSNU-3zLE8P-YbUk6y-Xv7ywJ-JYawr-YMXBeu-mmYcsm-BB7bKQ-HQyKuw-aBwhwL-CZfH2D-Ya1LfB-pmGnYG-JUoW4-JY8Mi-XYLNv7-Vkw69q-XQC9NH-21jGXKk-JY13o-YN3YWx-JY16W-YN4UtT-Xw3oMd-kgzbd-z87Art-CFr182-JYagz-21emjPd-89LEcQ-mWAN33-chur5o-DoNRDL-dZNLBG" title=""Mountain">Wall Boat - Mountain road</a>.</em></p>NetBSD : haute disponibilité avec CARP2017-12-22T10:25:00+01:002017-12-22T10:25:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-22:/post/2017/12/22/netbsd-haute-disponibilite-avec-carp/<p><img alt=""Turner" src="https://blog.anotherhomepage.org/public/2017/turnertwins.jpg" title=""Turner">NetBSD dispose depuis la version 4.0 d'une implémentation du protocole <a href="https://fr.wikipedia.org/wiki/Common_Address_Redundancy_Protocol" title=""CARP">CARP</a>. Il s'agit d'un protocole, à l'origine prévu pour les routeurs, permettant à un groupe de machines de disposer d'une adresse IP flottante. Si la machine principale venait à être indisponible, une machine secondaire peut alors prendre le relai …</p><p><img alt=""Turner" src="https://blog.anotherhomepage.org/public/2017/turnertwins.jpg" title=""Turner">NetBSD dispose depuis la version 4.0 d'une implémentation du protocole <a href="https://fr.wikipedia.org/wiki/Common_Address_Redundancy_Protocol" title=""CARP">CARP</a>. Il s'agit d'un protocole, à l'origine prévu pour les routeurs, permettant à un groupe de machines de disposer d'une adresse IP flottante. Si la machine principale venait à être indisponible, une machine secondaire peut alors prendre le relai. CARP permet donc de mettre en place de la haute disponibilité.</p>
<p>Je me suis amusé à mettre en place une configuration CARP sur les deux serveurs DNS de mon LAN. Pourquoi ? J'ai remarqué que bien souvent, selon les OS, quand on spécifie deux serveurs DNS dans les paramètres réseau, même si la redondance est là, on peut sentir un ralentissement :</p>
<ul>
<li>le client va faire du round-robin et donc régulièrement des requêtes vont échouer ;</li>
<li>le client va d'abord s'adresser au premier serveur DNS de sa liste, et si celui-ci est indisponible, il attendra un timeout avant de passer au suivant.</li>
</ul>
<p>Il y a probablement d'autres moyens d'adresser ces problèmes, mais cela m'a fourni une excuse de jouer avec CARP, c'est le plus important :)</p>
<p>CARP se présente en fait sous forme d'une carte réseau fictive dont le pilote est disponible dans le noyau. Quand je dis disponible, c'est qu'en théorie l'option est compilée dans le noyau GENERIC, mais cela n'est pas forcément le cas sur toutes les plateformes. Ainsi, j'ai dû <a href="/post/netbsd-recompilation-noyau-npf-domu">recompiler un noyau</a> contenant “pseudo-device carp”.</p>
<p>Une fois que CARP est bien disponible, il suffit tout simplement de créer une nouvelle interface réseau sur chaque machine. La machine principale aura un poids plus fort que la machine secondaire, et portera l'adresse IP flottante en temps normal.</p>
<p>Sur la machine principale :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># ifconfig carp0 create</span>
<span class="c1"># ifconfig carp0 vhid 101 pass motdepassehalakon 10.13.37.42 netmask 255.255.255.0</span>
</code></pre></div>
<p>Sur la machine secondaire :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># ifconfig carp0 create</span>
<span class="c1"># ifconfig carp0 vhid 100 pass motdepassehalakon 10.13.37.42 netmask 255.255.255.0</span>
</code></pre></div>
<p>On peut alors vérifier que l'adresse IP flottante est joignable. A noter la présence d'un mot de passe permettant de limiter les cas de "vol d'IP flottante", ici positionné à "motdepassehalakon"</p>
<p>Pour que cela tienne au redémarrage, il faut bien entendu que la configuration soit enregistrée quelque part. En fait, en terme de configuration, il s'agit tout simplement de la configuration de la carte réseau <em>carp0</em>, ici sur la machine principale :</p>
<div class="highlight"><pre><span></span><code>$ cat /etc/ifconfig.carp0
create
up
vhid <span class="m">101</span> pass motdepassehalakon <span class="m">10</span>.13.37.42 <span class="m">255</span>.255.255.0
</code></pre></div>
<p>Ensuite sur la machine secondaire :</p>
<div class="highlight"><pre><span></span><code>$ cat /etc/ifconfig.carp0
create
up
vhid <span class="m">100</span> pass motdepassehalakon <span class="m">10</span>.13.37.42 <span class="m">255</span>.255.255.0
</code></pre></div>
<p>Maintenant, il ne reste plus qu'à tester... en débranchant la prise !</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/statelibraryofnsw/3073045010/" title=""Turner">State Library of New South Wales - Turner Twins, acrobats, 1937 / by Sam Hood</a>.</em></p>rsnapshot, le robot de sauvegarde2017-12-21T16:50:00+01:002017-12-21T16:50:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-21:/post/2017/12/21/rsnapshot-robot-sauvegarde/<p><img alt=""vélo en pièces détachées"" src="https://blog.anotherhomepage.org/public/spareparts.jpg">Suite au <a href="/post/en-retard#c265">commentaire de Xate</a> dans <a href="/post/en-retard">un récent billet</a>, aujourd'hui un billet sur <a href="http://rsnapshot.org/" title="rsnapshot">rsnapshot</a>, un logiciel de sauvegarde incrémentale basé sur rsync. Si j'en fais un billet, c'est tout simplement car c'est ce que j'ai mis en place pour sauvegarder mon infrastructure.</p>
<p>J'avoue ne pas trop savoir quoi raconter sur …</p><p><img alt=""vélo en pièces détachées"" src="https://blog.anotherhomepage.org/public/spareparts.jpg">Suite au <a href="/post/en-retard#c265">commentaire de Xate</a> dans <a href="/post/en-retard">un récent billet</a>, aujourd'hui un billet sur <a href="http://rsnapshot.org/" title="rsnapshot">rsnapshot</a>, un logiciel de sauvegarde incrémentale basé sur rsync. Si j'en fais un billet, c'est tout simplement car c'est ce que j'ai mis en place pour sauvegarder mon infrastructure.</p>
<p>J'avoue ne pas trop savoir quoi raconter sur ce logiciel, car de nombreuses documentations existent déjà, quasiment pour chaque distribution :</p>
<ul>
<li><a href="https://doc.ubuntu-fr.org/rsnapshot" title=""documentation">chez Ubuntu-fr</a> ;</li>
<li><a href="https://wiki.archlinux.org/index.php/Rsnapshot" title=""documentation">chez ArchLinux</a> ;</li>
<li><a href="https://wiki.gentoo.org/wiki/Rsnapshot" title=""documentation">chez Gentoo</a> ;</li>
<li><a href="https://wiki.alpinelinux.org/wiki/Rsnapshot" title=""documentation">chez Alpine Linux</a> ;</li>
<li>encore pour Ubuntu, <a href="https://www.digitalocean.com/community/tutorials/how-to-install-rsnapshot-on-ubuntu-12-04" title=""tutoriel">un tutoriel chez Digital Ocean</a> ;</li>
<li>cette fois-ci pour Debian, un autre <a href="https://www.howtoforge.com/set-up-rsnapshot-archiving-of-snapshots-and-backup-of-mysql-databases-on-debian" title=""tutoriel">tutoriel rsnapshot pour MySQL</a>, de chez Howtoforge.</li>
</ul>
<p>Je vais donc parler de quelques points de ma configuration en particulier. La première particularité de celle-ci est que j'ai choisi d'installer rsnapshot sur une machine (en fait une jail FreeBSD sur mon NAS FreeNAS) et de l'utiliser en mode "robot de sauvegarde", c'est-à-dire qu'il va se connecter sur toutes les machines à sauvegarder via SSH pour effectuer les sauvegardes. J'y vois l'avantage que je n'ai qu'une seule configuration à modifier, et un utilisateur à configurer sur mes serveurs (accompagné, bien entendu, de sa configuration sudo et de la clé SSH).</p>
<p>Par exemple, pour la sauvegarde du Raspberry Pi qui fait des bulk builds :</p>
<div class="highlight"><pre><span></span><code>backup rsnapshot@netpi2:/etc/ netpi2/ +rsync_long_args<span class="o">=</span>--rsync-path<span class="o">=</span><span class="s1">'/usr/pkg/bin/sudo /usr/pkg/bin/rsync'</span>
backup rsnapshot@netpi2:/usr/pkg/etc/ netpi2/ +rsync_long_args<span class="o">=</span>--rsync-path<span class="o">=</span><span class="s1">'/usr/pkg/bin/sudo /usr/pkg/bin/rsync'</span>
backup rsnapshot@netpi2:/var/log/ netpi2/ +rsync_long_args<span class="o">=</span>--rsync-path<span class="o">=</span><span class="s1">'/usr/pkg/bin/sudo /usr/pkg/bin/rsync'</span>
backup rsnapshot@netpi2:/srv/sandbox/pkgsrc-current/usr/pbulk/etc/ netpi2/ +rsync_long_args<span class="o">=</span>--rsync-path<span class="o">=</span><span class="s1">'/usr/pkg/bin/sudo /usr/pkg/bin/rsync'</span>
</code></pre></div>
<p>On peut aussi noter que j'ai choisi d'ajouter des options à rsync selon mes machines, car celles-ci peuvent être de différents OS, ce qui fait que rsync et sudo ne se trouvent pas toujours au même endroit.</p>
<p>Du côté de la rétention et des intervalles de sauvegarde, j'ai fait très simple :</p>
<ul>
<li>une sauvegarde par jour (daily);</li>
<li>370 jours de rétention.</li>
</ul>
<p>370 jours peut sembler un peu abusé, mais la force de rsnapshot est dans son utilisation des liens (hardlinks) combinée à celle de rsync, qui rend les sauvegardes rapides, mais aussi moins consommatrices en espace disque car dédupliquées. Par exemple pour le serveur web de ce blog :</p>
<div class="highlight"><pre><span></span><code><span class="c1"># du -csh daily.0/vhost2/ daily.1/vhost2/</span>
17G daily.0/vhost2/
<span class="m">2</span>.3G daily.1/vhost2/
19G total
</code></pre></div>
<p>La restauration se fait très simplement aussi, puisqu'il s'agit de fichiers tout ce qu'il y a de plus classiques, ou de liens.</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/ritpir88/35264463313/in/photolist-VJcAma-5K3eF2-owvd5T-U46ZAF-oc8krN-owhDzo-otGXrC-b6RQDv-WPNxGG-otqL4r-ov2Dg3-otEoq9-ouD1K4-W8PR2f-o2uUFL-ocy4bx-ormpmj-6MBUNa-oyfnQv-odqyci-SU7dXw-ocSV29-oeZ2iy-SwkNTe-RCRYTq-w7KHtd-oye1Pp-oeZD6q-72SJuQ-ouQij4-c12JYW-od4qo2-wPnb4x-7rNLdi-ous2vd-oy6YDr-od7TTZ-ouHwxn-otF8wG-ov2ccu-ocUjQZ-orDtxb-ouj5n3-od63dh-ot696C-ocNRAC-oupxQD-VtcZkA-4jym8u-Wm1wvu" title=""Spare">Ritva Pirinen - Spare Parts</a>.</em></p>5 fichiers texte à placer à sur son site web !2017-12-20T11:05:00+01:002017-12-20T11:05:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-20:/post/2017/12/20/5-fichiers-texte-sur-son-site-web/<p><img alt="""" src="https://blog.anotherhomepage.org/public/Ninotchka1939.jpg">En regardant dans mes statistiques de visites pour un autre billet, j'ai remarqué que j'avais des tentatives d'accès sur un fichier <em>/.well-known/dnt-policy.txt</em>. Je me suis donc renseigné sur ce fichier, et de fil en aiguille, j'ai lu sur d'autres fichiers textes plus ou moins standard placés à la …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/Ninotchka1939.jpg">En regardant dans mes statistiques de visites pour un autre billet, j'ai remarqué que j'avais des tentatives d'accès sur un fichier <em>/.well-known/dnt-policy.txt</em>. Je me suis donc renseigné sur ce fichier, et de fil en aiguille, j'ai lu sur d'autres fichiers textes plus ou moins standard placés à la racine d'un site.</p>
<h3>dnt-policy.txt</h3>
<p>Commençons donc par ce fichier “dnt-policy.txt”. Le premier résultat en cherchant sur un moteur de recherche m'amène à <a href="https://www.eff.org/dnt-policy" title=""Electronic">une page du site de l'EFF</a>. A quoi sert ce fichier ? Il sert à annoncer la politique du site Internet visité concernant l'en-tête <a href="https://fr.wikipedia.org/wiki/Do_Not_Track" title=""Do">Do Not Track</a>.</p>
<p>A la lecture de tout cela, je vois que c'est quand même assez compliqué, je ne pense pas mettre en place de fichier sur mon blog dans l'immédiat.</p>
<h3>robots.txt</h3>
<p>Le grand classique, “robots.txt” permet de signaler aux moteurs de recherche quel contenu de son site indexer, et quel contenu ne pas indexer. Malgré tout, certains robots ou moteurs de recherche ne respectent pas les directives de ce fichier, puisqu'il n'y a aucune obligation.</p>
<p>Pour aller plus loin :</p>
<ul>
<li><a href="http://robots-txt.com/" title="Robots-txt.com">un site en français introductif sur ce fichier</a> et sur d'autres ressources ;</li>
<li><a href="http://www.robotstxt.org/" title="Robotstxt.org">un site en anglais sur le même sujet</a> ;</li>
<li><a href="https://fr.wikipedia.org/wiki/Protocole_d%27exclusion_des_robots" title=""Wikipédia">Wikipédia : Protocole d'exclusion des robots</a>.</li>
</ul>
<p>Bien entendu, mon blog dispose d'un tel fichier.</p>
<h3>humans.txt</h3>
<p>Dans la logique du précédent fichier, certains se sont dit : et pourquoi pas proposer un fichier à destination des "humains" et qui contient des informations sur les différentes personnes qui ont contribué à la construction du site ? Ainsi est né le fichier “humans.txt” ! On peut se renseigner sur cette initiative <a href="http://humanstxt.org/FR" title=""Humans.txt">sur humanstxt.org</a></p>
<p>Je viens de mettre en place un tel fichier, mais je n'ai pas ajouté de lien vers celui-ci dans mes balise meta. J'espère que pour le moment, cela convient.</p>
<h3>security.txt</h3>
<p>Toujours dans l'esprit d'informations faciles à obtenir, “security.txt” a pour principe d'indiquer qui contacter en cas de problème de sécurité avec le site visité. Ce fichier est en particulier utile aux chercheurs en sécurité des systèmes d'information qui souhaitent informer de manière responsable l'équipe du site de la présence d'une vulnérabilité.</p>
<p>Le fichier est assez simple dans son implémentation, on y indique généralement une adresse e-mail ainsi qu'une URL vers une éventuelle clé GPG pour s'assurer de la confidentialité des échanges. Plus d'informations sont disponibles sur <a href="https://securitytxt.org/" title=""Security.txt">le site dédié</a>.</p>
<p>J'ai profité de l'écriture de ce billet pour en mettre un ! J'espère que celui-ci est correct.</p>
<h3>hackers.txt</h3>
<p>Ce dernier fichier est un peu plus particulier. <a href="https://mrkiffie.com/2011/hackers-txt/" title=""billet">Kiffie Liversage</a> a remarqué que sur le site “humanstxt.org” qu'une image d'illustration contenait, en plus des habituels <em>robots.txt</em> et <em>humans.txt</em>, un fichier nommé <em>hackers.txt</em>. A priori il n'y a aucune norme, aucun standard ou convention pour un tel fichier, alors il a décidé d'en créer une.</p>
<p>Je n'ai pas de fichier de ce type au moment de l'écriture de ce billet. Mais l'initiative m'amuse, alors j'ai bien envie de le faire aussi à l'occasion !</p>
<h3>et d'autres ?</h3>
<p>Il existe probablement d'autres conventions, plus ou moins connues. Les seules qui me viennent à l'esprit sont le répertoire <em>/.well-known/</em> (utilisé pour <em>dnt-policy.txt</em> mais aussi pour le fichier de challenge Let's Encrypt, et décrit dans la <a href="https://tools.ietf.org/html/rfc5785" title=""RFC">RFC 5785</a>), et le fichier <em><a href="https://fr.wikipedia.org/wiki/Sitemaps" title=""Wikipédia">sitemaps.xml</a></em>, mais qui n'est pas juste du texte, comme son nom l'indique.</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/jumborois/3500758501/" title=""Ninotchka">Susanlenox - Ninotchka (1939)</a>.</em></p>
<h2>Commentaires</h2>
<h3>Le 01/03/2018 17:19 par B</h3>
<p>canary.txt :s</p>
<h3>Le 04/05/2020 16:25 par <a href="https://www.visionduweb.com">Zer00CooL</a></h3>
<p>Bonjour et merci pour ce billet très intéressant.
J'en ai profité pour diffuser ma clé pubkey.txt mais je crois que je me suis trompé, j'aurais plutôt du le nommer security.txt voir à le dupliquer en security.txt plutôt que de simplement ajouter pubkey.txt.</p>
<p>Les accents ne passent pas si je consulte mon fichier pubkey.txt : https://wiki.visionduweb.fr/pubkey.txt
J'aurais mal encodé mon fichier ?</p>
<p>Sur le principe du fichier hackers.txt, je propose une nouvelle norme, le fichier green.txt qui pourrait servir à spécifier la valeur ajoutée d'un site internet, en ce qui concerne l'écologie.
Bon, je ne l'ai moi même pas encore renseigné sur mon site, mais, ça pourrait être intéressant à proposer, qu'en penses tu ?</p>
<p>Si tu valides l'idée, je te propose de l'ajouter à ta liste ;)
Merci ;)</p>CentOS 7 : installation vraiment minimale2017-12-18T11:25:00+01:002017-12-18T11:25:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-18:/post/2017/12/18/centos-7-installation-vraiment-minimale/<p><img alt="""" src="https://blog.anotherhomepage.org/public/feather.jpg">Il y a deux ans, j'ai écrit un article sur une <a href="/post/2015/08/29/installation-minimaliste-de-CentOS-7">installation minimaliste de CentOS 7</a>. Celle-ci avait le mérite d'avoir été réalisée rapidement, et d'être assez satisfaisante. Bref, un bon exemple de <a href="https://fr.wikipedia.org/wiki/Principe_de_Pareto" title=""Loi">la loi de Pareto</a>. Toutefois, je n'en étais pas pleinement satisfait, par exemple à cause de paquets …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/feather.jpg">Il y a deux ans, j'ai écrit un article sur une <a href="/post/2015/08/29/installation-minimaliste-de-CentOS-7">installation minimaliste de CentOS 7</a>. Celle-ci avait le mérite d'avoir été réalisée rapidement, et d'être assez satisfaisante. Bref, un bon exemple de <a href="https://fr.wikipedia.org/wiki/Principe_de_Pareto" title=""Loi">la loi de Pareto</a>. Toutefois, je n'en étais pas pleinement satisfait, par exemple à cause de paquets de type firmware, qui peuvent être ajoutés avec le temps lors de nouvelles versions de CentOS, mais aussi parce que j'enlevais pas mal de paquets par rapport au groupe nommé “Base”. J'ai donc décidé de toucher au groupe “Core”.</p>
<p><strong>Avertissement</strong> : ce genre d'exercice ou d'expérience n'est pas à utiliser "en production" tel quel. Le système réellement basique qui en résulte ne contient pas vraiment grand-chose, et il manque ainsi de nombreux outils de diagnostic ou d'administration qui peuvent s'avérer utile en environnement professionnel. Dans le cas d'une reproduction de ces manipulations avec un système RHEL, il faudra très probablement ajouter de nombreux paquets pour gérer l'enregistrement auprès du RHN (ou d'un Satellite), ainsi que des paquets requis par le support de Red Hat.</p>
<p>Je vois donc cet exercice comme une base, me permettant ensuite d'installer les logiciels que j'estime nécessaires pour le besoin de chaque serveur.</p>
<h3>Pourquoi ?</h3>
<p>Quel est l'intérêt de faire une installation vraiment minimale ? En fait j'en vois plusieurs :</p>
<ul>
<li>tout d'abord, moins de paquets c'est moins de place occupée, même si la place sur nos disques durs augmente avec le temps, il apparaît pertinent dans le cas de machines virtuelles d'occuper le moins de place possible ;</li>
<li>ensuite, car cela peut rendre l'installation plus rapide : moins de paquets à installer, moins de temps à les installer ;</li>
<li>enfin, car c'est <a href="https://www.ssi.gouv.fr/administration/guide/recommandations-de-securite-relatives-a-un-systeme-gnulinux/" title=""Recommandations">une recommandation ANSSI</a>, de n'installer que le strict nécessaire, afin de limiter la surface d'attaque ; j'en viens d'ailleurs à passer pour un extrémiste auprès de certains lorsque j'annonce que les pages de manuel n'ont rien à faire sur un système de production...</li>
</ul>
<p>Un autre point à aborder avant de mettre les mains dans le cambouis : jusqu'où aller ? A quel point peut-on dire que cela est réellement une installation minimale, et à quel point le système qui en résulte est utilisable ? Voici mes critères pour cette installation :</p>
<ul>
<li>le système doit pouvoir démarrer, au moins en machine virtuelle, idéalement en machine physique ;</li>
<li>le système doit avoir un accès au réseau filaire fonctionnel avec une adresse IPv4 fixe (le DHCP n'est pas nécessaire) ;</li>
<li>le système doit pouvoir installer et mettre à jour des paquets ;</li>
<li>le partitionnement est réduit au minimum (/boot, / et swap) et utilise le système de fichiers utilisé par défaut (XFS) ;</li>
<li>les fonctions suivantes sont disponibles : serveur SSH, client NTP, pare-feu (firewalld) ;</li>
<li>le système peut rester en anglais.</li>
</ul>
<p>Tout le reste peut être retiré. Tout ? Presque, pour éviter de me casser la tête avec un clavier QWERTY, j'ai décidé d'installer le paquet <em>kbd</em>. Mais cela reste une préférence toute personnelle.</p>
<h3>Comment ?</h3>
<p>Partir d'une installation "manuelle" et retirer des éléments est contre-productif. Pour arriver à l'objectif, il va falloir automatiser l'installation, grâce à <a href="https://en.wikipedia.org/wiki/Kickstart_(Linux)" title=""Kickstart">kickstart</a>.</p>
<p>Voici donc le fichier que j'utilise pour cela :</p>
<div class="highlight"><pre><span></span><code><span class="cp"># Kickstart file automatically generated by anaconda.</span>
<span class="cp">#version=DEVEL</span>
<span class="n">install</span><span class="w"></span>
<span class="n">text</span><span class="w"></span>
<span class="n">reboot</span><span class="w"></span>
<span class="n">firstboot</span><span class="w"> </span><span class="o">--</span><span class="n">disabled</span><span class="w"></span>
<span class="n">lang</span><span class="w"> </span><span class="n">en_US</span><span class="p">.</span><span class="n">UTF</span><span class="mi">-8</span><span class="w"></span>
<span class="n">keyboard</span><span class="w"> </span><span class="n">fr</span><span class="o">-</span><span class="n">latin9</span><span class="w"></span>
<span class="n">firewall</span><span class="w"> </span><span class="o">--</span><span class="n">enabled</span><span class="w"></span>
<span class="n">authconfig</span><span class="w"> </span><span class="o">--</span><span class="n">enableshadow</span><span class="w"> </span><span class="o">--</span><span class="n">passalgo</span><span class="o">=</span><span class="n">sha512</span><span class="w"></span>
<span class="n">selinux</span><span class="w"> </span><span class="o">--</span><span class="n">enforcing</span><span class="w"></span>
<span class="n">services</span><span class="w"> </span><span class="o">--</span><span class="n">enabled</span><span class="w"> </span><span class="n">sshd</span><span class="p">,</span><span class="n">chronyd</span><span class="w"></span>
<span class="n">timezone</span><span class="w"> </span><span class="o">--</span><span class="n">utc</span><span class="w"> </span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span><span class="w"></span>
<span class="n">network</span><span class="w"> </span><span class="o">--</span><span class="n">onboot</span><span class="w"> </span><span class="n">yes</span><span class="w"> </span><span class="o">--</span><span class="n">device</span><span class="w"> </span><span class="n">eth0</span><span class="w"> </span><span class="o">--</span><span class="n">mtu</span><span class="o">=</span><span class="mi">1500</span><span class="w"> </span><span class="o">--</span><span class="n">bootproto</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="o">--</span><span class="n">ip</span><span class="w"> </span><span class="n">A</span><span class="p">.</span><span class="n">B</span><span class="p">.</span><span class="n">C</span><span class="p">.</span><span class="n">D</span><span class="w"> </span><span class="o">--</span><span class="n">netmask</span><span class="w"> </span><span class="mf">255.255.255.0</span><span class="w"> </span><span class="o">--</span><span class="n">gateway</span><span class="w"> </span><span class="n">A</span><span class="p">.</span><span class="n">B</span><span class="p">.</span><span class="n">C</span><span class="p">.</span><span class="n">E</span><span class="w"> </span><span class="o">--</span><span class="n">nameserver</span><span class="w"> </span><span class="n">A</span><span class="p">.</span><span class="n">B</span><span class="p">.</span><span class="n">C</span><span class="p">.</span><span class="n">F</span><span class="w"> </span><span class="o">--</span><span class="n">activate</span><span class="w"> </span><span class="o">--</span><span class="n">hostname</span><span class="w"> </span><span class="n">pxemachine</span><span class="p">.</span><span class="n">anotherhomepage</span><span class="p">.</span><span class="n">loc</span><span class="w"></span>
<span class="n">rootpw</span><span class="w"> </span><span class="n">centos</span><span class="w"></span>
<span class="n">user</span><span class="w"> </span><span class="o">--</span><span class="n">name</span><span class="o">=</span><span class="n">nils</span><span class="w"> </span><span class="o">--</span><span class="n">homedir</span><span class="o">=/</span><span class="n">home</span><span class="o">/</span><span class="n">nils</span><span class="w"> </span><span class="o">--</span><span class="n">uid</span><span class="o">=</span><span class="mi">1001</span><span class="w"> </span><span class="o">--</span><span class="n">gid</span><span class="o">=</span><span class="mi">1001</span><span class="w"> </span><span class="o">--</span><span class="n">password</span><span class="o">=</span><span class="n">centos</span><span class="w"> </span><span class="o">--</span><span class="n">groups</span><span class="o">=</span><span class="n">wheel</span><span class="w"></span>
<span class="n">url</span><span class="w"> </span><span class="o">--</span><span class="n">url</span><span class="w"> </span><span class="n">ftp</span><span class="o">:</span><span class="c1">//X.Y.Z.T/pub/centos/7/os/x86_64/</span>
<span class="n">repo</span><span class="w"> </span><span class="o">--</span><span class="n">name</span><span class="o">=</span><span class="n">updates</span><span class="w"> </span><span class="o">--</span><span class="n">baseurl</span><span class="o">=</span><span class="n">ftp</span><span class="o">:</span><span class="c1">//X.Y.Z.T/pub/centos/7/updates/x86_64/</span>
<span class="n">bootloader</span><span class="w"> </span><span class="o">--</span><span class="n">location</span><span class="o">=</span><span class="n">mbr</span><span class="w"> </span><span class="o">--</span><span class="n">driveorder</span><span class="o">=</span><span class="n">sda</span><span class="w"> </span><span class="o">--</span><span class="n">append</span><span class="o">=</span><span class="s">"crashkernel=auto rhgb quiet"</span><span class="w"></span>
<span class="n">clearpart</span><span class="w"> </span><span class="o">--</span><span class="n">all</span><span class="w"> </span><span class="o">--</span><span class="n">initlabel</span><span class="w"></span>
<span class="n">part</span><span class="w"> </span><span class="o">/</span><span class="n">boot</span><span class="w"> </span><span class="o">--</span><span class="n">asprimary</span><span class="w"> </span><span class="o">--</span><span class="n">size</span><span class="o">=</span><span class="mi">500</span><span class="w"></span>
<span class="n">part</span><span class="w"> </span><span class="n">swap</span><span class="w"> </span><span class="o">--</span><span class="n">asprimary</span><span class="w"> </span><span class="o">--</span><span class="n">size</span><span class="o">=</span><span class="mi">1024</span><span class="w"></span>
<span class="n">part</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="o">--</span><span class="n">asprimary</span><span class="w"> </span><span class="o">--</span><span class="n">size</span><span class="o">=</span><span class="mi">1024</span><span class="w"> </span><span class="o">--</span><span class="n">grow</span><span class="w"></span>
<span class="nf">%packages</span><span class="w"> </span><span class="o">--</span><span class="n">excludedocs</span><span class="w"> </span><span class="o">--</span><span class="n">instLangs</span><span class="o">=</span><span class="n">en</span><span class="w"> </span><span class="o">--</span><span class="n">nocore</span><span class="w"></span>
<span class="n">bash</span><span class="w"></span>
<span class="n">yum</span><span class="w"></span>
<span class="n">centos</span><span class="o">-</span><span class="n">release</span><span class="w"></span>
<span class="n">passwd</span><span class="w"></span>
<span class="n">iputils</span><span class="w"></span>
<span class="n">iproute</span><span class="w"></span>
<span class="n">systemd</span><span class="w"></span>
<span class="n">rootfiles</span><span class="w"></span>
<span class="n">kbd</span><span class="w"></span>
<span class="n">openssh</span><span class="o">-</span><span class="n">server</span><span class="w"></span>
<span class="o">-</span><span class="n">bind</span><span class="o">-</span><span class="n">license</span><span class="w"></span>
<span class="o">-</span><span class="n">dhclient</span><span class="w"></span>
<span class="o">-</span><span class="n">kexec</span><span class="o">-</span><span class="n">tools</span><span class="w"></span>
<span class="o">-</span><span class="n">e2fsprogs</span><span class="o">-</span><span class="n">libs</span><span class="w"></span>
<span class="o">-</span><span class="n">e2fsprogs</span><span class="w"></span>
<span class="nf">%end</span><span class="w"></span>
</code></pre></div>
<p>Comme évoqué plus haut, j'ai utilisé quelques arguments de la directive “%packages” qui me permet de n'installer que le minimum : ainsi, pas de documentation, on reste en anglais, et le groupe “Core” saute ! Il m'a donc fallu spécifier volontairement les paquets indispensables, comme le noyau, bash ou encore yum. Pour aller encore plus vite, j'ai choisi d'effectuer l'installation en mode texte (je pourrais être plus brutal et remplacer “text” par “cmdline”), mais effectuer celle-ci en mode graphique n'a pas d'incidence sur le nombre de paquets installés.</p>
<p>Malgré tout, il m'a fallu retirer volontairement quelques paquets qui me semblent peu utiles pour le moment : pas besoin de gérer des partitions ext2, 3 ou 4, pas besoin de kexec, ni de dhcp.</p>
<p>Le pare-feu reste activé, ainsi que SELinux : ils s'agit de paramètres par défaut assez sains, je ne vais donc pas recommander de les retirer. A noter malgré tout que le système est utilisable sans ces deux éléments.</p>
<h3>Résultat</h3>
<p>J'ai pu abaisser l'installation à 193 paquets installés. En poussant plus loin (pas de pare-feu, pas de ssh, pas de NTP, pas de kbd), je peux descendre à environ 170.Ma partition principale est alors utilisée à 466Mo, dont 393Mo dans <em>/usr</em>, et 11Mo dans <em>/etc</em>. Jamais je n'ai installé ou démarré un système CentOS aussi vite. Jamais je n'ai eu un système CentOS aussi austère : pas de vim, pas de less, pas de htop, et c'est limite si je dois me considérer heureux de disposer de grep !</p>
<p>D'un autre côté, pas de fioritures : pas de firmware de matériel non utilisé, pas de system-config-*, ni de NetworkManager. Bon, par contre faut pas rêver, systemd est obligatoire ;)</p>
<h3>Et la suite ?</h3>
<p>A partir de maintenant il est possible de personnaliser plus en avant son installation, et de n'utiliser des outils non pas parce qu'ils sont présents, mais parce qu'on en a besoin. Je ne sais pas encore quelle suite je pourrais donner à ce billet, qui vaille la peine d'être racontée : il n'est probablement pas intéressant de faire des billets en mode "yum install" pour vim, audit, ou quelque autre logiciel. Une possibilité pourrait être de coller aux recommandations ANSSI, mais il existe déjà plein de guides de sécurité pour Linux, non ?</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/144396386@N05/27871981232/in/photolist-JsXbYy-otzCWr-otqh3v-7APFzX-5qtrDT-ocU67C-4jy9ns-otkJrQ-9GY3SR-7AAxYq-otEsUm-9hY2We-Y5AJM7-qNW86X-owqbFv-5zoJJr-cvNE2S-owdzRS-RQfbvV-otAb1v-ovkUxR-BrQ4TZ-X8s1r8-Eh7Btj-QSWPCN-VbGZQL-9GE3S6-obMEYV-otgFiJ-odFJbW-otz6QA-UY2RUD-owdB3j-oeU728-otGXrC-orRxeq-ov75pe-odwgJf-pd3FzP-otqncq-owZN72-5jVMGh-otBFZ6-oc1qnc-obYwWD-oc1gaK-sbg6wn-oweqq2-4VAJM7-otCm5a" title="Feather">badr yousef - Feather</a>.</em></p>Quelques statistiques du blog2017-12-17T20:50:00+01:002017-12-17T20:50:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-17:/post/2017/12/17/quelques-statistiques-du-blog/<p><img alt="""" src="https://blog.anotherhomepage.org/public/passingtime2010.jpg">Suite au <a href="/post/en-retard#c265">commentaire de Xate</a> dans <a href="/post/en-retard">un récent billet</a>, quelques statistiques sur les billets (blogmas ou pas) sur la première quinzaine de décembre. Pour cela, je me suis servi de mes one-liners en awk décrits <a href="/post/2010/03/01/Nombre-d-occurences-d-un-champ-dans-un-fichier">ici</a> et <a href="/post/2012/10/01/Nombre-d-occurrences-dans-un-fichier-remix">là</a>.</p>
<h3>Les billets les plus vus</h3>
<p>Commençons par les billets les plus visités …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/passingtime2010.jpg">Suite au <a href="/post/en-retard#c265">commentaire de Xate</a> dans <a href="/post/en-retard">un récent billet</a>, quelques statistiques sur les billets (blogmas ou pas) sur la première quinzaine de décembre. Pour cela, je me suis servi de mes one-liners en awk décrits <a href="/post/2010/03/01/Nombre-d-occurences-d-un-champ-dans-un-fichier">ici</a> et <a href="/post/2012/10/01/Nombre-d-occurrences-dans-un-fichier-remix">là</a>.</p>
<h3>Les billets les plus vus</h3>
<p>Commençons par les billets les plus visités :</p>
<div class="highlight"><pre><span></span><code><span class="n">root</span><span class="nv">@vhost2</span><span class="err">:</span><span class="o">~/</span><span class="n">tmp</span><span class="err">#</span><span class="w"> </span><span class="n">grep</span><span class="w"> </span><span class="ss">"GET /post/"</span><span class="w"> </span><span class="p">.</span><span class="o">/</span><span class="n">access</span><span class="p">.</span><span class="nf">log</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">awk</span><span class="w"> </span><span class="s1">'{frequencies[$7]++;} END {for (field in frequencies) printf "%s\\t%d" , field , frequencies[field];}'</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="o">-</span><span class="n">nr</span><span class="w"> </span><span class="o">-</span><span class="n">k</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">head</span><span class="w"> </span><span class="o">-</span><span class="mi">20</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">python</span><span class="o">-</span><span class="mi">3</span><span class="o">-</span><span class="n">outils</span><span class="o">-</span><span class="n">anaylser</span><span class="o">-</span><span class="n">code</span><span class="w"> </span><span class="mi">1527</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">make</span><span class="o">-</span><span class="n">automatiser</span><span class="o">-</span><span class="n">quelques</span><span class="o">-</span><span class="n">taches</span><span class="o">-</span><span class="n">avec</span><span class="o">-</span><span class="n">un</span><span class="o">-</span><span class="n">makefile</span><span class="w"> </span><span class="mi">260</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">livre</span><span class="o">-</span><span class="n">apprendre</span><span class="o">-</span><span class="n">a</span><span class="o">-</span><span class="n">programmer</span><span class="o">-</span><span class="n">avec</span><span class="o">-</span><span class="n">python</span><span class="w"> </span><span class="mi">243</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">xz</span><span class="o">-</span><span class="n">pour</span><span class="o">-</span><span class="n">une</span><span class="o">-</span><span class="n">meilleure</span><span class="o">-</span><span class="n">compression</span><span class="o">-</span><span class="n">de</span><span class="o">-</span><span class="n">ses</span><span class="o">-</span><span class="n">fichiers</span><span class="w"> </span><span class="mi">224</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">centos</span><span class="o">-</span><span class="mi">7</span><span class="o">-</span><span class="n">desactiver</span><span class="o">-</span><span class="n">firewalld</span><span class="o">-</span><span class="n">reactiver</span><span class="o">-</span><span class="n">iptables</span><span class="w"> </span><span class="mi">209</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="mi">2016</span><span class="o">/</span><span class="mi">12</span><span class="o">/</span><span class="mi">29</span><span class="o">/</span><span class="n">Vous</span><span class="o">-</span><span class="n">naviguez</span><span class="o">-</span><span class="n">toujours</span><span class="o">-</span><span class="n">sur</span><span class="o">-</span><span class="n">un</span><span class="o">-</span><span class="n">site</span><span class="o">-</span><span class="n">HTTPS</span><span class="w"> </span><span class="mi">192</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">livre</span><span class="o">-</span><span class="n">introduction</span><span class="o">-</span><span class="n">au</span><span class="o">-</span><span class="n">langage</span><span class="o">-</span><span class="n">c</span><span class="w"> </span><span class="mi">168</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">logrotate</span><span class="o">-</span><span class="n">exemple</span><span class="o">-</span><span class="n">vite</span><span class="o">-</span><span class="n">fait</span><span class="w"> </span><span class="mi">165</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">paris</span><span class="o">-</span><span class="k">open</span><span class="o">-</span><span class="n">source</span><span class="o">-</span><span class="n">summit</span><span class="o">-</span><span class="mi">2017</span><span class="o">-</span><span class="n">jour</span><span class="o">-</span><span class="mi">2</span><span class="w"> </span><span class="mi">161</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">en</span><span class="o">-</span><span class="n">retard</span><span class="w"> </span><span class="mi">152</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">paris</span><span class="o">-</span><span class="k">open</span><span class="o">-</span><span class="n">source</span><span class="o">-</span><span class="n">summit</span><span class="o">-</span><span class="mi">2017</span><span class="w"> </span><span class="mi">143</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">centos</span><span class="o">-</span><span class="mi">7</span><span class="o">-</span><span class="n">desactiver</span><span class="o">-</span><span class="n">firewalld</span><span class="o">-</span><span class="n">reactiver</span><span class="o">-</span><span class="n">iptables</span><span class="o">/</span><span class="w"> </span><span class="mi">124</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">Trouver</span><span class="o">-</span><span class="n">des</span><span class="o">-</span><span class="n">fichiers</span><span class="o">-</span><span class="n">doublons</span><span class="o">-</span><span class="n">avec</span><span class="o">-</span><span class="n">fdupes</span><span class="w"> </span><span class="mi">123</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">raspberry</span><span class="o">-</span><span class="nf">pi</span><span class="o">-</span><span class="n">attention</span><span class="o">-</span><span class="n">alimentation</span><span class="w"> </span><span class="mi">112</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="mi">2009</span><span class="o">/</span><span class="mi">11</span><span class="o">/</span><span class="mi">09</span><span class="o">/</span><span class="n">Utilisation</span><span class="o">-</span><span class="n">transparente</span><span class="o">-</span><span class="n">d</span><span class="o">-</span><span class="n">une</span><span class="o">-</span><span class="n">passerelle</span><span class="o">-</span><span class="n">SSH</span><span class="w"> </span><span class="mi">83</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="mi">2011</span><span class="o">/</span><span class="mi">10</span><span class="o">/</span><span class="mi">03</span><span class="o">/</span><span class="n">Installation</span><span class="o">-</span><span class="n">de</span><span class="o">-</span><span class="n">phpMyAdmin</span><span class="o">-</span><span class="n">sur</span><span class="o">-</span><span class="n">CentOS</span><span class="o">-</span><span class="mi">6</span><span class="w"> </span><span class="mi">76</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">pbulk</span><span class="o">-</span><span class="n">aller</span><span class="o">-</span><span class="n">plus</span><span class="o">-</span><span class="n">loin</span><span class="o">-</span><span class="n">sur</span><span class="o">-</span><span class="n">les</span><span class="o">-</span><span class="n">parametres</span><span class="w"> </span><span class="mi">72</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">systemd</span><span class="o">-</span><span class="n">reconfigurer</span><span class="o">-</span><span class="n">unite</span><span class="o">-</span><span class="n">service</span><span class="w"> </span><span class="mi">71</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="mi">2017</span><span class="o">/</span><span class="mi">02</span><span class="o">/</span><span class="mi">13</span><span class="o">/</span><span class="n">clamav</span><span class="o">-</span><span class="n">installation</span><span class="o">-</span><span class="n">et</span><span class="o">-</span><span class="n">scan</span><span class="o">-</span><span class="n">antivirus</span><span class="o">-</span><span class="n">sur</span><span class="o">-</span><span class="n">macos</span><span class="w"> </span><span class="mi">69</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="mi">2016</span><span class="o">/</span><span class="mi">12</span><span class="o">/</span><span class="mi">29</span><span class="o">/</span><span class="n">Vous</span><span class="o">-</span><span class="n">naviguez</span><span class="o">-</span><span class="n">toujours</span><span class="o">-</span><span class="n">sur</span><span class="o">-</span><span class="n">un</span><span class="o">-</span><span class="n">site</span><span class="o">-</span><span class="n">HTTPS</span><span class="o">&</span><span class="n">fromurl</span><span class="o">=</span><span class="n">redirect</span><span class="p">.</span><span class="n">asp</span><span class="w"> </span><span class="mi">67</span><span class="w"></span>
</code></pre></div>
<p>Le billet le plus populaire est donc celui sur <a href="/post/python-3-outils-anaylser-code">les outils d'analyse de code Python</a>, et de loin ! Je note que j'ai mal écrit "analyser" dans l'URL, il faudra vraiment que je fasse attention à cela à l'avenir ! Il m'arriver d'ailleurs régulièrement de dépublier puis republier un billet en m'apercevant que l'URL ne me convient pas. J'en profite pour remercier <a href="https://oldbytes.space/@dashie" title=""Dashie">Dashie</a> pour notre conversation sur Mastodon, sans ça je n'aurais pas eu l'idée d'écrire ce billet.</p>
<h3>Les tag les plus vus</h3>
<p>Quels tags sont les plus populaires ?</p>
<div class="highlight"><pre><span></span><code><span class="n">root</span><span class="nv">@vhost2</span><span class="err">:</span><span class="o">~/</span><span class="n">tmp</span><span class="err">#</span><span class="w"> </span><span class="n">grep</span><span class="w"> </span><span class="ss">"GET /tag/"</span><span class="w"> </span><span class="p">.</span><span class="o">/</span><span class="n">access</span><span class="p">.</span><span class="nf">log</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">awk</span><span class="w"> </span><span class="s1">'{frequencies[$7]++;} END {for (field in frequencies) printf "%s\\t%d" , field , frequencies[field];}'</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="o">-</span><span class="n">nr</span><span class="w"> </span><span class="o">-</span><span class="n">k</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">head</span><span class="w"> </span><span class="o">-</span><span class="mi">20</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">NetBSD</span><span class="w"> </span><span class="mi">73</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Apache</span><span class="w"> </span><span class="mi">55</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">CentOS</span><span class="w"> </span><span class="mi">50</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">PHP</span><span class="w"> </span><span class="mi">47</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Linux</span><span class="o">/</span><span class="n">page</span><span class="o">/</span><span class="mi">3</span><span class="w"> </span><span class="mi">46</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Linux</span><span class="w"> </span><span class="mi">41</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Perl</span><span class="w"> </span><span class="mi">40</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">ssl</span><span class="w"> </span><span class="mi">38</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">blogmas</span><span class="w"> </span><span class="mi">34</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Awstats</span><span class="w"> </span><span class="mi">32</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Mac</span><span class="o">%</span><span class="mi">20</span><span class="n">OS</span><span class="o">%</span><span class="mi">20</span><span class="n">X</span><span class="w"> </span><span class="mi">31</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">RHEL</span><span class="w"> </span><span class="mi">31</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">mp3</span><span class="w"> </span><span class="mi">29</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">pkgsrc</span><span class="w"> </span><span class="mi">29</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">RPM</span><span class="w"> </span><span class="mi">29</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">macOS</span><span class="w"> </span><span class="mi">28</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Xen</span><span class="w"> </span><span class="mi">27</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">ssh</span><span class="w"> </span><span class="mi">27</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">tls</span><span class="w"> </span><span class="mi">27</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">https</span><span class="w"> </span><span class="mi">25</span><span class="w"></span>
</code></pre></div>
<p>Visiblement, je commence à devenir populaire pour <a href="/tag/NetBSD">NetBSD</a>, <a href="/tag/Apache">Apache</a>, <a href="/tag/CentOS">CentOS</a> et <a href="/tag/PHP">PHP</a> ! Dommage que <a href="/tag/pkgsrc">pkgsrc</a> soit un peu bas à mon goût. Le tag <a href="/tag/blogmas">blogmas</a> n'est pas non plus super populaire.</p>
<h3>Les referers</h3>
<p>D'où viennent les visites ?</p>
<div class="highlight"><pre><span></span><code><span class="n">root</span><span class="nv">@vhost2</span><span class="err">:</span><span class="o">~/</span><span class="n">tmp</span><span class="err">#</span><span class="w"> </span><span class="n">grep</span><span class="w"> </span><span class="ss">"GET /post/"</span><span class="w"> </span><span class="p">.</span><span class="o">/</span><span class="n">access</span><span class="p">.</span><span class="nf">log</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">awk</span><span class="w"> </span><span class="s1">'{frequencies[$11]++;} END {for (field in frequencies) printf "%s\\t%d" , field , frequencies[field];}'</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="o">-</span><span class="n">nr</span><span class="w"> </span><span class="o">-</span><span class="n">k</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">head</span><span class="w"> </span><span class="o">-</span><span class="mi">20</span><span class="w"></span>
<span class="ss">"-"</span><span class="w"> </span><span class="mi">5077</span><span class="w"></span>
<span class="ss">"http://www.google.co.uk/url?sa=t&source=web&cd=1"</span><span class="w"> </span><span class="mi">468</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/"</span><span class="w"> </span><span class="mi">203</span><span class="w"></span>
<span class="ss">"https://www.google.fr/"</span><span class="w"> </span><span class="mi">196</span><span class="w"></span>
<span class="ss">"https://www.journalduhacker.net/"</span><span class="w"> </span><span class="mi">193</span><span class="w"></span>
<span class="ss">"http://blog.anotherhomepage.org/"</span><span class="w"> </span><span class="mi">124</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/post/centos-7-desactiver-firewalld-reactiver-iptables/"</span><span class="w"> </span><span class="mi">66</span><span class="w"></span>
<span class="ss">"http://blog.anotherhomepage.org/post/centos-7-desactiver-firewalld-reactiver-iptables/"</span><span class="w"> </span><span class="mi">58</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/post/centos-7-desactiver-firewalld-reactiver-iptables"</span><span class="w"> </span><span class="mi">52</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/post/python-3-outils-anaylser-code"</span><span class="w"> </span><span class="mi">45</span><span class="w"></span>
<span class="ss">"https://www.google.com/"</span><span class="w"> </span><span class="mi">31</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/category/Humour"</span><span class="w"> </span><span class="mi">29</span><span class="w"></span>
<span class="ss">""</span><span class="w"> </span><span class="mi">28</span><span class="w"></span>
<span class="ss">"https://socialmediascanner.eset.com"</span><span class="w"> </span><span class="mi">24</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/page/2"</span><span class="w"> </span><span class="mi">22</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/post/2009/11/09/Utilisation-transparente-d-une-passerelle-SSH"</span><span class="w"> </span><span class="mi">19</span><span class="w"></span>
<span class="ss">"https://www.google.fr"</span><span class="w"> </span><span class="mi">19</span><span class="w"></span>
<span class="ss">"https://www.journalduhacker.net/s/asxn1a/python_3_outils_pour_analyser_son_code"</span><span class="w"> </span><span class="mi">16</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org"</span><span class="w"> </span><span class="mi">15</span><span class="w"></span>
<span class="ss">"https://blog.anotherhomepage.org/feed/tag/Linux/atom"</span><span class="w"> </span><span class="mi">15</span><span class="w"></span>
</code></pre></div>
<p>Pas grand-chose à dire de ce côté, si ce n'est que beaucoup n'ont pas de referer, et en creusant un peu, le lien vers Google UK est utilisé par la même IP, et toutes les visites vont sur le billet sur les outils d'analyse de code Python. J'ai par contre été cité par le Journal du Hacker, ce qui fait bien plaisir !</p>
<h3>Des erreurs ?</h3>
<p>Quelques trucs étranges :</p>
<div class="highlight"><pre><span></span><code><span class="n">root</span><span class="nv">@vhost2</span><span class="err">:</span><span class="o">~/</span><span class="n">tmp</span><span class="err">#</span><span class="w"> </span><span class="n">awk</span><span class="w"> </span><span class="s1">'{frequencies[$9]++;} END {for (field in frequencies) printf "%s\\t%d" , field , frequencies[field];}'</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="p">.</span><span class="o">/</span><span class="n">access</span><span class="p">.</span><span class="nf">log</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="o">-</span><span class="n">nr</span><span class="w"> </span><span class="o">-</span><span class="n">k</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">head</span><span class="w"> </span><span class="o">-</span><span class="mi">10</span><span class="w"></span>
<span class="mi">200</span><span class="w"> </span><span class="mi">48038</span><span class="w"></span>
<span class="mi">301</span><span class="w"> </span><span class="mi">17578</span><span class="w"></span>
<span class="mi">304</span><span class="w"> </span><span class="mi">10958</span><span class="w"></span>
<span class="mi">404</span><span class="w"> </span><span class="mi">834</span><span class="w"></span>
<span class="ss">"-"</span><span class="w"> </span><span class="mi">716</span><span class="w"></span>
<span class="mi">503</span><span class="w"> </span><span class="mi">464</span><span class="w"></span>
<span class="mi">302</span><span class="w"> </span><span class="mi">229</span><span class="w"></span>
<span class="mi">400</span><span class="w"> </span><span class="mi">143</span><span class="w"></span>
<span class="mi">206</span><span class="w"> </span><span class="mi">22</span><span class="w"></span>
<span class="mi">403</span><span class="w"> </span><span class="mi">17</span><span class="w"></span>
</code></pre></div>
<p>Voyons voir les erreurs 404 :</p>
<div class="highlight"><pre><span></span><code><span class="n">root</span><span class="nv">@vhost2</span><span class="err">:</span><span class="o">~/</span><span class="n">tmp</span><span class="err">#</span><span class="w"> </span><span class="n">grep</span><span class="w"> </span><span class="o">-</span><span class="n">w</span><span class="w"> </span><span class="ss">"404"</span><span class="w"> </span><span class="n">access</span><span class="p">.</span><span class="nf">log</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">awk</span><span class="w"> </span><span class="s1">'{frequencies[$7]++;} END {for (field in frequencies) printf "%s\\t%d" , field , frequencies[field];}'</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">sort</span><span class="w"> </span><span class="o">-</span><span class="n">nr</span><span class="w"> </span><span class="o">-</span><span class="n">k</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">head</span><span class="w"> </span><span class="o">-</span><span class="mi">10</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="n">centos</span><span class="o">-</span><span class="mi">7</span><span class="o">-</span><span class="n">desactiver</span><span class="o">-</span><span class="n">firewalld</span><span class="o">-</span><span class="n">reactiver</span><span class="o">-</span><span class="n">iptables</span><span class="o">/</span><span class="w"> </span><span class="mi">66</span><span class="w"></span>
<span class="o">/</span><span class="n">pages</span><span class="o">/</span><span class="n">Welcomerobots</span><span class="p">.</span><span class="n">txt</span><span class="w"> </span><span class="mi">64</span><span class="w"></span>
<span class="o">/</span><span class="n">wp</span><span class="o">-</span><span class="n">login</span><span class="p">.</span><span class="n">php</span><span class="w"> </span><span class="mi">45</span><span class="w"></span>
<span class="o">/</span><span class="n">ads</span><span class="p">.</span><span class="n">txt</span><span class="w"> </span><span class="mi">20</span><span class="w"></span>
<span class="o">/</span><span class="n">tag</span><span class="o">/</span><span class="n">Apachepage</span><span class="o">/</span><span class="mi">2</span><span class="w"> </span><span class="mi">12</span><span class="w"></span>
<span class="o">/</span><span class="n">pages</span><span class="o">/</span><span class="n">Welcomelicense</span><span class="p">.</span><span class="n">txt</span><span class="w"> </span><span class="mi">12</span><span class="w"></span>
<span class="o">/</span><span class="n">a2billing</span><span class="o">/</span><span class="n">common</span><span class="o">/</span><span class="n">javascript</span><span class="o">/</span><span class="n">misc</span><span class="p">.</span><span class="n">js</span><span class="w"> </span><span class="mi">11</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="mi">2017</span><span class="o">/</span><span class="mi">01</span><span class="o">/</span><span class="mi">21</span><span class="o">/</span><span class="n">macOS</span><span class="o">-</span><span class="n">installer</span><span class="o">-</span><span class="n">pkgsrc</span><span class="o">-</span><span class="n">pour</span><span class="o">-</span><span class="n">beneficier</span><span class="o">-</span><span class="n">de</span><span class="o">-</span><span class="n">plus</span><span class="o">-</span><span class="n">de</span><span class="o">-</span><span class="n">logiciels</span><span class="w"> </span><span class="mi">11</span><span class="w"></span>
<span class="o">/</span><span class="n">apple</span><span class="o">-</span><span class="n">app</span><span class="o">-</span><span class="n">site</span><span class="o">-</span><span class="n">association</span><span class="w"> </span><span class="mi">11</span><span class="w"></span>
<span class="o">/</span><span class="n">post</span><span class="o">/</span><span class="w"> </span><span class="mi">11</span><span class="w"></span>
</code></pre></div>
<p>Résultat : sans doute des tentatives de bruteforce du blog, pensant qu'il s'agit d'un Wordpress ou d'autre chose. Par contre, il faudra que je regarde plus attentivement les billets à propos de firewalld et de pkgsrc sur macOS.</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/volvob12b/9380929579/in/photolist-fhXHxa-UVeCo5-WgqHu4-tm7Nah-VLsFPA-owYnhV-q1vtfs-gpFUcT-UHPJ3p-dHhcUy-ocPksS-jsvZRM-owau16-opkoj8-oukdBN-UVeBKw-WgqH5X-Ziqkwz-VwURJB-oygAD4-oeQroe-dbQDin-q43qen-ocVL9k-odAcYk-ownxco-bUqwgL-odXdq1-dUU5mx-jg6MVj-ow6fdp-kvTaiB-kvT9tR-cDUUQb-oRTN7x-ouYs4Q-a85o3G-otVA5v-oyeYst-bUL56f-91TdG3-oeXdLf-RcQL7U-btYqx2-69BbEc-UZXzHu-oeWE93-ouH3to-orozAy-odfAsQ" title=""Passing">Bernard Spragg. NZ - Passing Time 2010 )</a>.</em></p>
<h2>Commentaires</h2>
<h3>Le 19/12/2017 19:27 par <a href="https://utux.fr">utux</a></h3>
<p>Essaie goaccess pour tes stats :)
(il parse les logs exactement comme tu as fait)</p>
<h3>Le 19/12/2017 21:30 par Nils</h3>
<p>Il est dans ma TODO. A la base, et comme certains billets en attestent, j'utilisais surtout Awstats, mais j'ai eu la flemme de le configurer lors de la dernière réinstallation du serveur web qui héberge ce blog.</p>CentOS 7 : démarrer Anaconda en PXE2017-12-16T11:42:00+01:002017-12-16T11:42:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-16:/post/2017/12/16/centos-7-anaconda-pxe/<p><img alt=""Pare-brise brisé"" src="https://blog.anotherhomepage.org/public/carglass03.jpg">Je voulais, à la base, écrire un billet sur une installation particulière de CentOS 7. J'ai donc voulu utiliser mon "infrastructure de boot PXE" à la maison et commencer à gribouiller un kickstart, mais quand j'ai démarré ma machine virtuelle sur le réseau, le drame :</p>
<div class="highlight"><pre><span></span><code>dracut-initqueue<span class="o">[</span><span class="m">584</span><span class="o">]</span>: Warning: Could not …</code></pre></div><p><img alt=""Pare-brise brisé"" src="https://blog.anotherhomepage.org/public/carglass03.jpg">Je voulais, à la base, écrire un billet sur une installation particulière de CentOS 7. J'ai donc voulu utiliser mon "infrastructure de boot PXE" à la maison et commencer à gribouiller un kickstart, mais quand j'ai démarré ma machine virtuelle sur le réseau, le drame :</p>
<div class="highlight"><pre><span></span><code>dracut-initqueue<span class="o">[</span><span class="m">584</span><span class="o">]</span>: Warning: Could not boot.
dracut-initqueue<span class="o">[</span><span class="m">584</span><span class="o">]</span>: Warning: /dev/root does not exist
</code></pre></div>
<p>Ma configuration pxelinux à ce moment est la suivante :</p>
<div class="highlight"><pre><span></span><code><span class="n">LABEL</span> <span class="n">centos7amd64</span>
<span class="n">MENU</span> <span class="n">LABEL</span> <span class="n">Install</span> <span class="n">CentOS</span> <span class="mi">7</span> <span class="n">x86_64</span> <span class="p">(</span><span class="n">interactive</span><span class="p">)</span>
<span class="n">KERNEL</span> <span class="n">pub</span><span class="o">/</span><span class="n">centos</span><span class="o">/</span><span class="mi">7</span><span class="o">/</span><span class="n">os</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span><span class="n">isolinux</span><span class="o">/</span><span class="n">vmlinuz</span>
<span class="n">APPEND</span> <span class="n">initrd</span><span class="o">=</span><span class="n">pub</span><span class="o">/</span><span class="n">centos</span><span class="o">/</span><span class="mi">7</span><span class="o">/</span><span class="n">os</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span><span class="n">isolinux</span><span class="o">/</span><span class="n">initrd</span><span class="p">.</span><span class="n">img</span> <span class="n">ip</span><span class="o">=</span><span class="n">dhcp</span> <span class="n">inst</span><span class="p">.</span><span class="n">repo</span><span class="o">=</span><span class="n">ftp</span><span class="p">:</span><span class="o">//</span><span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span><span class="p">.</span><span class="n">T</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">centos</span><span class="o">/</span><span class="mi">7</span><span class="o">/</span><span class="n">os</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span> <span class="n">inst</span><span class="p">.</span><span class="n">ks</span><span class="o">=</span><span class="n">ftp</span><span class="p">:</span><span class="o">//</span><span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span><span class="p">.</span><span class="n">T</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">ks</span><span class="o">/</span><span class="n">c7_x86_64</span><span class="p">.</span><span class="n">cfg</span>
</code></pre></div>
<p>Et bien entendu, le même type de configuration fonctionne en CentOS 6.</p>
<p>Ce message d'erreur arrive à des moments et des types d'installation parfois différents, de ce que j'ai lu. Et la résolution n'est pas toujours la même. Dans mon cas, il a fallu que j'ajoute le chemin vers un fichier squashfs, qui doit contenir l'OS minimal pour démarrer Anaconda je crois. Cela donne donc la configuration suivante :</p>
<div class="highlight"><pre><span></span><code><span class="n">LABEL</span> <span class="n">centos7amd64</span>
<span class="n">MENU</span> <span class="n">LABEL</span> <span class="n">Install</span> <span class="n">CentOS</span> <span class="mi">7</span> <span class="n">x86_64</span> <span class="p">(</span><span class="n">interactive</span><span class="p">)</span>
<span class="n">KERNEL</span> <span class="n">pub</span><span class="o">/</span><span class="n">centos</span><span class="o">/</span><span class="mi">7</span><span class="o">/</span><span class="n">os</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span><span class="n">isolinux</span><span class="o">/</span><span class="n">vmlinuz</span>
<span class="n">APPEND</span> <span class="n">initrd</span><span class="o">=</span><span class="n">pub</span><span class="o">/</span><span class="n">centos</span><span class="o">/</span><span class="mi">7</span><span class="o">/</span><span class="n">os</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span><span class="n">isolinux</span><span class="o">/</span><span class="n">initrd</span><span class="p">.</span><span class="n">img</span> <span class="n">root</span><span class="o">=</span><span class="n">live</span><span class="p">:</span><span class="n">ftp</span><span class="p">:</span><span class="o">//</span><span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span><span class="p">.</span><span class="n">T</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">centos</span><span class="o">/</span><span class="mi">7</span><span class="o">/</span><span class="n">os</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span><span class="n">LiveOS</span><span class="o">/</span><span class="n">squashfs</span><span class="p">.</span><span class="n">img</span> <span class="n">ip</span><span class="o">=</span><span class="n">dhcp</span> <span class="n">inst</span><span class="p">.</span><span class="n">repo</span><span class="o">=</span><span class="n">ftp</span><span class="p">:</span><span class="o">//</span><span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span><span class="p">.</span><span class="n">T</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">centos</span><span class="o">/</span><span class="mi">7</span><span class="o">/</span><span class="n">os</span><span class="o">/</span><span class="n">x86_64</span><span class="o">/</span> <span class="n">inst</span><span class="p">.</span><span class="n">ks</span><span class="o">=</span><span class="n">ftp</span><span class="p">:</span><span class="o">//</span><span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span><span class="p">.</span><span class="n">T</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">ks</span><span class="o">/</span><span class="n">c7_x86_64</span><span class="p">.</span><span class="n">cfg</span>
</code></pre></div>
<p>J'espère que cela rendra service à d'autres !</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Si en plus vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/mnsc/4391351493/in/photolist-7G3PNM-DBw5uK-kn9btB-rPm4Rs-5nwgSk-3k2H6u-VG2vMT-sHiEDr-Stg5Rm-7G3PE8-WeAcBc-7Wd8wT-TwtQjC-RHSjHY-T4biAk-schHmv-DvKkvL-fA1Kou-SPjrVS-7Wd8gz-T4axKV-rACUHa-UgGJde-sp4J5e-SRLv3Z-rmU7fN-5bgGnY-rTHJTM-5knknw-pgu9hJ-ouZyZp-oePFWz-oujSWW-hf1735-oszBPJ-S4SUnj-CuEiHV-H6seSx-jyNXi2-SRNxcK-T1ngND-21j23Fw-Stggks-4judBT-22pgdti-SWLSjb-qYGYz8-SRNhPB-4jyEdt-s1XYCR" title=""Car">Mattias - Car Glass 03</a>.</em></p>NetBSD : recompilation d'un noyau pour intégrer NPF dans un domU2017-12-15T11:55:00+01:002017-12-15T11:55:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-15:/post/2017/12/15/netbsd-recompilation-noyau-npf-domu/<p><img alt=""Porsche 911 GT3 RS"" src="https://blog.anotherhomepage.org/public/gt3rs.jpg">Dans <a href="/post/xen-installation-domu-netbsd">un billet précédent</a>, j'abordais l'installation d'une machine virtuelle Xen NetBSD en mode paravirtuel.NetBSD, comme Linux, dispose en plus d'un noyau, de modules permettant d'étendre ses fonctionnalités. Ainsi, l'une des briques de pare-feu de NetBSD, NPF, est disponible sous forme de module. Le problème avec ce module, c'est qu'il …</p><p><img alt=""Porsche 911 GT3 RS"" src="https://blog.anotherhomepage.org/public/gt3rs.jpg">Dans <a href="/post/xen-installation-domu-netbsd">un billet précédent</a>, j'abordais l'installation d'une machine virtuelle Xen NetBSD en mode paravirtuel.NetBSD, comme Linux, dispose en plus d'un noyau, de modules permettant d'étendre ses fonctionnalités. Ainsi, l'une des briques de pare-feu de NetBSD, NPF, est disponible sous forme de module. Le problème avec ce module, c'est qu'il n'est pas compatible avec un noyau domU. Il est donc nécessaire de recompiler un noyau NetBSD pour en profiter, en incluant le pilote NPF directement dedans plutôt qu'en module.</p>
<h3>Récupération des sources</h3>
<p>Recompiler un noyau NetBSD est assez facile. D'abord, je récupère les sources, ici celles de NetBSD 7.1 :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:/srv$ <span class="nb">export</span> <span class="nv">CVSROOT</span><span class="o">=</span><span class="s2">"anoncvs@anoncvs.NetBSD.org:/cvsroot"</span>
nils@shell2:/srv$ <span class="nb">export</span> <span class="nv">CVS_RSH</span><span class="o">=</span><span class="s2">"ssh"</span>
nils@shell2:/srv$ cvs checkout -r netbsd-7-1-RELEASE -P src
</code></pre></div>
<p>La <a href="https://www.netbsd.org/docs/guide/en/chap-build.html#chap-boot-cross-build-kernel" title=""NetBSD">documentation officielle</a> le fait dans <em>/usr/src</em>, mais je le fais dans <em>/srv/src</em>, cela ne pose pas de problème.</p>
<p>Si vous souhaitez recompiler un système complet (et pas juste le noyau), il faudra aussi récupérer xsrc, ce que je ne ferai pas ici.</p>
<h3>Création d'une configuration noyau personnalisée</h3>
<p>Maintenant que les sources sont disponibles, je crée un fichier de configuration pour notre nouveau noyau. Pour cela pas besoin de repartir de zéro, je vais tout simplement copier un fichier existant, et ajouter l'option qui m'intéresse. A noter que les configurations de noyau pour NetBSD sont placées dans les sous-arborescences des différentes architectures. Dans mon cas, mes machines virtuelles sont en x86_64, ce qui correspond à amd64 côté NetBSD :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:/srv$ <span class="nb">cd</span> src
nils@shell2:/srv/src$ sys/arch/amd64/conf
</code></pre></div>
<p>Le fichier de configuration du noyau utilisé par défaut est <em>GENERIC</em>, et il en existe aussi un spécialisé pour un invté Xen : <em>XEN3_DOMU</em>. Je vais copier ce dernier au lieu de le modifier pour facilement différencier ma configuration de l'officielle :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:/srv/src/sys/arch/amd64/conf$ cp -vp XEN3_DOMU XEN3_DOMU_NPF
</code></pre></div>
<p>Je peux ensuite éditer mon nouveau fichier, et aller chercher cette ligne :</p>
<div class="highlight"><pre><span></span><code>#pseudo-device npf # NPF packet filter
</code></pre></div>
<p>Il suffit alors de commenter cette ligne, et de sauvegarder le fichier. Passons maintenant à la compilation en elle-même.</p>
<h3>Compilation du noyau NetBSD personnalisé</h3>
<p>La compilation d'un noyau NetBSD peut se faire de deux manières : manuellement ou via l'aide d'un script nommé build.sh. Ce script est capable, depuis n'importe quel OS compatible, de créer très simplement non seulement un noyau, mais aussi une release complète de NetBSD. Ce script est fourni dans les sources, et se trouve d'ailleurs à la racine.</p>
<p>D'abord, compilons les outils nécessaires :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:/srv/src/sys/arch/amd64/conf$
nils@shell2:/srv/src$ ./build.sh -U -u -m amd64 tools
</code></pre></div>
<p>Autre détail intéressant, et c'est aussi la raison de la présence de l'option <em>-U</em> dans la commande précédente, je n'ai pas besoin d'être root pour ces opérations :)Passons donc à la compilation du noyau à proprement parler :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:/srv/src$ ./build.sh -U -u -m amd64 <span class="nv">kernel</span><span class="o">=</span>XEN3_DOMU_NPF
</code></pre></div>
<p>Selon la puissance de la machine, quelques minutes plus tard un résultat similaire au suivant devrait apparaître :</p>
<div class="highlight"><pre><span></span><code><span class="o">===</span>> Kernels built from XEN3_DOMU_NPF:
/srv/src/sys/arch/amd64/compile/obj/XEN3_DOMU_NPF/netbsd
<span class="o">===</span>> build.sh ended: Sun Jun <span class="m">18</span> <span class="m">20</span>:29:39 CEST <span class="nv">2017</span>
<span class="o">===</span>> Summary of results:
build.sh command: ./build.sh -U -u -m amd64 <span class="nv">kernel</span><span class="o">=</span>XEN3_DOMU_NPF
build.sh started: Sun Jun <span class="m">18</span> <span class="m">20</span>:29:26 CEST <span class="m">2017</span>
NetBSD version: <span class="m">7</span>.1
MACHINE: amd64
MACHINE_ARCH: x86_64
Build platform: NetBSD <span class="m">7</span>.1 amd64
HOST_SH: /bin/sh
MAKECONF file: /etc/mk.conf
TOOLDIR path: /srv/src/obj/tooldir.NetBSD-7.1-amd64
DESTDIR path: /srv/src/obj/destdir.amd64
RELEASEDIR path: /srv/src/obj/releasedir
Updated makewrapper: /srv/src/obj/tooldir.NetBSD-7.1-amd64/bin/nbmake-amd64
Building kernel without building new tools
Building kernel: XEN3_DOMU_NPF
Build directory: /srv/src/sys/arch/amd64/compile/obj/XEN3_DOMU_NPF
Kernels built from XEN3_DOMU_NPF:
/srv/src/sys/arch/amd64/compile/obj/XEN3_DOMU_NPF/netbsd
build.sh ended: Sun Jun <span class="m">18</span> <span class="m">20</span>:29:39 CEST <span class="nv">2017</span>
<span class="o">===</span>> .
</code></pre></div>
<p>Il me suffit donc de copier le fichier <em>/srv/src/sys/arch/amd64/compile/obj/XEN3_DOMU_NPF/netbsd</em> sur mon dom0 et de l'utiliser dans un fichier de configuration Xen pour un domU !</p>
<h3>Et NPF alors ?</h3>
<p>Une fois notre domU démarré à l'aide de ce noyau, il suffit de suivre la <a href="https://www.netbsd.org/~rmind/npf/" title=""NPF">documentation de NPF</a>.</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Si en plus vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/fokuzx2/14286976703/" title=""GT3">D - 15 photography - GT3 RS</a>.</em></p>
<h2>Commentaires</h2>
<h3>Le 15/12/2017 22:21 par <a href="https://utux.fr">utux</a></h3>
<p>Oh, un autre utilisateur de NetBSD ^^
Avec iMil ça en fait deux répertoriés xD</p>
<h3>Le 18/12/2017 19:21 par <a href="https://mathieulubrano.com">Mathieu</a></h3>
<p>Bonjour</p>
<p>Merci pour cet article ! Npf c'est utile par les temps qui courent, et ça change un peu d'iptables.</p>
<p>Et en réponse à utux : les utilisateurs et admins NetBSD sont discrets, mais sympa et efficaces ;-)</p>
<p>Cordialement
Mathieu</p>
<h3>Le 19/12/2017 21:35 par Nils</h3>
<p>@ utux : nous sommes encore plus nombreux sur IRC, #netbsdfr sur Freenode.</p>
<p>@ Mathieu : merci du compliment :)</p>pbulk : aller plus loin sur les paramètres2017-12-14T18:42:00+01:002017-12-14T18:42:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-14:/post/2017/12/14/pbulk-aller-plus-loin-sur-les-parametres/<p><img alt=""pignons mécaniques"" src="https://blog.anotherhomepage.org/public/gears.jpg">Aujourd'hui, je me suis dit que j'allais encore parler de mon Raspberry Pi 2. Oui, celui-là même qui en ce moment passe sont temps à compiler des paquets pkgsrc. J'avais commencé par parler <a href="/post/pbulk-compilation-massive-de-paquets-pkgsrc">de la mise en place de pbulk</a>, puis il y a peu j'ai abordé <a href="/post/raspberry-pi-attention-alimentation">les problèmes d'alimentation …</a></p><p><img alt=""pignons mécaniques"" src="https://blog.anotherhomepage.org/public/gears.jpg">Aujourd'hui, je me suis dit que j'allais encore parler de mon Raspberry Pi 2. Oui, celui-là même qui en ce moment passe sont temps à compiler des paquets pkgsrc. J'avais commencé par parler <a href="/post/pbulk-compilation-massive-de-paquets-pkgsrc">de la mise en place de pbulk</a>, puis il y a peu j'ai abordé <a href="/post/raspberry-pi-attention-alimentation">les problèmes d'alimentation</a> rencontrés suite à cette mise en place.</p>
<p>Cette fois-ci, ce n'est pas une question d'alimentation, mais de limites systèmes. J'indiquais dans mon billet les options suivantes en tête du fichier <em>pbulk.conf</em> :</p>
<div class="highlight"><pre><span></span><code><span class="nb">ulimit</span> -t <span class="m">3600</span> <span class="c1"># set the limit on CPU time (in seconds)</span>
<span class="nb">ulimit</span> -v <span class="m">2097152</span> <span class="c1"># limits process address space</span>
</code></pre></div>
<p>Le premier problème que j'ai eu s'est matérialisé sous la forme d'un pur et simple “kill” lors de la compilation d'un paquet. Difficile ensuite de comprendre que celui-ci arrivait au bout d'une heure ! J'ai donc compilé le dit paquet manuellement et me suis rendu compte que cela mettait bien plus d'une heure. Cela peut sembler surprenant au premier abord, mais j'avais oublié que même en ayant 4 coeurs, un Raspberry Pi 2 est bien moins puissant qu'un PC classique x86_64. Il met donc, logiquement, bien plus de temps pour créer un même paquet. J'ai donc fini par commenter ces deux directives, pour voir si d'autres paquets, auparavant en échec pour des raisons obscures, peuvent compiler sans soucis.</p>
<p>A l'heure où j'écris ceci, le bulk build n'est pas terminé, mais j'ai déjà pu voir que le paquet qui m'a mis sur la voie est créé avec succès, ainsi que d'autres qui ne pouvaient pas être créés du fait de l'absence de ce premier.</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Si en plus vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/mustangjoe/22711070429/in/photolist-AAUaZP-9XHGYT-eAWnqt-2mSyH-agSVfM-drap2V-dT1izt-fpHAcp-Jm3VSU-ow87cH-asQ6mi-TqSdM4-oukRiE-QHJVMu-JmhXCu-aDPmJg-fpXQUN-oupGCq-owtNSQ-8w64xS-dkmjGr-49QMPR-ocXcSx-3Kwwmd-8zmq1v-dwrSsC-boimEK-ZcaAe2-fq3mPC-imruke-orWcYS-8uRAs7-oubu1h-WkYqVq-fJZXmL-xdqXkd-FD1fia-dnFi6i-ovTE4H-egibSs-8NghJ-ous93c-XcEPBC-8Nftq-gsGt5t-RCxBQR-oV3t79-WEUjWW-9GH5eo-cyjsHU" title="Gears">Joe deSousa - Gears</a>.</em></p>Raspberry Pi : Attention à l'alimentation !2017-12-13T15:45:00+01:002017-12-13T15:45:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-13:/post/2017/12/13/raspberry-pi-attention-alimentation/<p><img alt="""" src="https://blog.anotherhomepage.org/public/electrialfixtures.jpg">Il y a quelques mois, j'avais publié <a href="/post/pbulk-compilation-massive-de-paquets-pkgsrc">un billet sur pbulk</a>. J'avais pris en exemple la configuration mise en place sur un Raspberry Pi 2B. Ce n'était pas une totale réussite, car parfois le Raspberry Pi gelait. Non, pas passer en dessous de 0°C, mais plutôt avoir un système …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/electrialfixtures.jpg">Il y a quelques mois, j'avais publié <a href="/post/pbulk-compilation-massive-de-paquets-pkgsrc">un billet sur pbulk</a>. J'avais pris en exemple la configuration mise en place sur un Raspberry Pi 2B. Ce n'était pas une totale réussite, car parfois le Raspberry Pi gelait. Non, pas passer en dessous de 0°C, mais plutôt avoir un système qui ne répond plus. Plus rien, ou presque, la petite carte ne répondant qu'au ping.</p>
<p>On débranche, on rebranche, et ça repart. Jusqu'au suivant. Difficile dans ces conditions de construire presque 1500 paquets logiciels pour mes autres Raspberry Pi. La configuration d'alimentation choisie à l'époque avait pour but de limiter le nombre de prises de courant occupées : un PiHub, accompagné de son alimentation 5V 3,5A. Je pensais que pour 2 Raspberry Pi B+ et 2 2B, cela allait suffire. Finalement non, et non seulement les bulks ne passaient plus et finissaient par corrompre la carte SD, mais en plus l'alimentation a fini par lâcher.</p>
<p>Avant que l'alimentation du PiHub ne lâche, j'avais déjà déplacé le Raspberry Pi 2B dédié aux bulks sur une alimentation dédiée, en utilisant un chargeur de téléphone mobile. Lui aussi ne suffisait pas finalement, puisque j'ai eu quelques gels. Alors que faire ?</p>
<p>Une fois l'alimentation du PiHub hors service, j'ai finalement craqué pour un autre bloc, délivrant cette fois-ci 4,8A au total, mais dont certains ports peuvent délivrer jusqu'à 2A d'intensité. Depuis lors, je construits mes environ 1500 paquets par semaine sans problème depuis plus de trois semaines !</p>
<p>Moralité : il faut bien choisir l'alimentation de ses Raspberry Pi ! Cela peut poser certains problèmes !</p>
<p><em>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Si en plus vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !</em></p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/usfwsnortheast/15871280388/" title=""Electrial">Teresa Walter/USFWS - Electrial fixtures to control that backup power generator</a>.</em></p>En retard !2017-12-11T21:16:00+01:002017-12-11T21:16:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-11:/post/2017/12/11/en-retard/<p><img alt="""" src="https://blog.anotherhomepage.org/public/almost3am.jpg">Je n'ai pas tenu le coup. Au moment de la publication de ce billet, 2 billets manquent à l'appel : celui du 9 et celui du 11 décembre. J'aurais pu éviter celui du 11 en publiant ce billet directement, mais je ne vois pas l'intérêt de publier à une heure tardive …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/almost3am.jpg">Je n'ai pas tenu le coup. Au moment de la publication de ce billet, 2 billets manquent à l'appel : celui du 9 et celui du 11 décembre. J'aurais pu éviter celui du 11 en publiant ce billet directement, mais je ne vois pas l'intérêt de publier à une heure tardive, autant assumer.</p>
<p>Et donc, qu'est-il arrivé ? Tout simplement, deux choses :</p>
<ul>
<li>je suis arrivé à court de billets écrits à l'avance ;</li>
<li>mes journées se sont avérées plus longues et plus remplies que je ne le pensais, oubliant de publier le dernier billet que j'avais en stock.</li>
</ul>
<p>J'ai donc deux billets à rattraper. Pour quand ? Je ne sais pas. Mais j'ai bien l'intention de les publier d'ici le 24 décembre !</p>
<p>Un autre problème s'est posé à moi durant la publication des billets récemment. Quelque chose que j'arrivais à gérer lors d'une publication hebdomadaire, mais beaucoup plus difficile à maintenir lors d'une publication quotidienne : partager mes billets sur les réseaux sociaux. En effet, j'effectue tout cela à la main, lors de la publication du billet. Pourquoi ? Quelques éléments :</p>
<ul>
<li>les systèmes de partage de billets que j'ai pu tester pour Dotclear ne fonctionnent plus ;</li>
<li>hors de question de filer un accès à mes comptes de réseaux sociaux à un acteur tiers comme IFTTT ;</li>
<li>je n'ai pas encore cherché ou trouvé un système que je peux héberger moi-même pour publier mes billets sur Facebook, Twitter, Mastodon et Linkedin (et Diaspora en option) ;</li>
<li>un billet partagé a plus de visite qu'un billet non partagé sur les réseaux sociaux (oui, j'aime un minimum être lu) ;</li>
<li>j'ai, selon les billets, plus de réactions sur les réseaux sociaux que sur les commentaires.</li>
</ul>
<p>Tant que j'y suis dans les difficultés actuelles, j'ai de plus en plus de mal à trouver des images d'illustration, de préférence dans une licence très permissive : Flickr dispose d'une option "Aucune restriction de droits d’auteur connue" bien pratique.</p>
<p>Malgré tout, je souhaite continuer cette série de billets quotidiens. Qui pour m'encourager ?</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/skochkar/35691154582/in/photolist-WnUuNb-213aQNx-ZQm1sq-ZeEGYW-YpTeS1-BQPVcN-ZvK7Cq-XJ23xL-Z7ybX1-ZDFbUv-FRuii4-YQNSLW-E1MXwq-Z3esJC-Zwxczg-ZUT3up-21JUGqS-Ye2VGW-21LPGc7-Zcb1qy-XTwMqh-XCdjbJ-21fJ9H5-XtM361-22nsNqr-XWfAyk-owp9VA-TxkLRA-YMbTp1-Yhqnm8-G41r36-223smiG-ZgxKzn-Yy9QXy-ZnQh4B-YzD9c4-ZLYB1v-FYSwrH-YZfUW5-DPxJyA-ZiEHek-YhXq3t-Z7Ysjj-Z3z1EY-YuW5fQ-YGvWWS-D6HTgh-CHET8j-YxhqP3-YtEXK5" title=""Almost">Sergey Kochkarev - Almost 3am</a>.</em></p>
<h2>Commentaires</h2>
<h3>Le 12/12/2017 20:51 par</h3>
<p><a href="https://www.blog-libre.org/author/cascador/">Cascador</a></p>
<p>Salute,</p>
<p>db2twitter et feed2toot pour info : https://gitlab.com/users/chaica/projects</p>
<p>Tcho !</p>
<h3>Le 13/12/2017 18:13 par Nils</h3>
<p>Super, merci :)</p>
<h3>Le 14/12/2017 19:36 par Xate</h3>
<p><em>Malgré tout, je souhaite continuer cette série de billets quotidiens. Qui pour m'encourager ?</em></p>
<p>Allez Nils ! ;-)</p>
<p>Et quelques idées de billets :
- à quelle fréquence mets-tu à jour ton dotclear ? Ce qui déclenche cette mise à jour ? Et même question pour la machine qui l'héberge si tu as la main dessus ?
- comment as-tu construit ton système de mails (serveurs mails et autres services associés) ?
- Quel(s) outil(s) pour tes backups ?
- Quelques stats sur les visites, mots clefs surprenant ayant amené des visiteurs ?
- etc.</p>
<p>:-)</p>
<h3>Le 15/12/2017 11:56 par Nils</h3>
<p>Merci Xate pour tes questions ! Pour ce qui est de la mise à jour de Dotclear, la réponse est très rapide et ne vaut pas la peine de faire un billet : j'applique les mises à jour dès que possible, généralement dans les 48h qui suivent la disponibilité. Dans le pire des cas, il peut m'arriver d'attendre 4-5 jours, mais c'est parce que j'ai eu des grosses journées au boulot.</p>
<p>Pour le reste, je ferai des billets :)</p>Trouver des fichiers doublons avec fdupes2017-12-10T11:30:00+01:002017-12-10T11:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-10:/post/2017/12/10/Trouver-des-fichiers-doublons-avec-fdupes/<p><img alt=""Figurines en LEGO de soldats clones de l'univers Star Wars"" src="https://blog.anotherhomepage.org/public/day341.jpg">Il m'arrive d'avoir des fichiers en double : copie à l'arrache au moment de changer d'ordinateur, copie avant de modifier un fichier que je ne modifie finalement pas, sauvegardes diverses... bref, avec le temps, on peut se retrouver avec pas mal de fichiers doublons. Pour moi, c'est principalement de la musique …</p><p><img alt=""Figurines en LEGO de soldats clones de l'univers Star Wars"" src="https://blog.anotherhomepage.org/public/day341.jpg">Il m'arrive d'avoir des fichiers en double : copie à l'arrache au moment de changer d'ordinateur, copie avant de modifier un fichier que je ne modifie finalement pas, sauvegardes diverses... bref, avec le temps, on peut se retrouver avec pas mal de fichiers doublons. Pour moi, c'est principalement de la musique.</p>
<p>Un moyen de repérer ces doublons est d'utiliser <a href="https://github.com/adrianlopezroche/fdupes" title=""Fdupes">fdupes</a>. Ce logiciel vérifie plusieurs attributs pour comparer les fichiers, comme la taille, une somme de contrôle MD5, voire même une comparaison bit à bit. Il suffit de lui donner un répertoire à vérifier, et il fait le travail. Ce répertoire peut très bien être un point de montage distant, comme un export NFS ou CIFS.</p>
<p>Dans mon cas, j'ai décidé de lancer la commande suivante :</p>
<div class="highlight"><pre><span></span><code>fdupes -R -s -S /Volumes/nils/ <span class="p">|</span> tee -a ./fdupes.log
</code></pre></div>
<p>J'ai choisi de renvoyer la sortie de fdupes dans tee et de conserver un fichier de log. Pour les options :</p>
<ul>
<li>-R permet une recherche récursive ;</li>
<li>-s permet de prendre en compte les liens symboliques ;</li>
<li>-S montre la taille.</li>
</ul>
<p>Voici un exemple de la sortie, pour un fichier :</p>
<div class="highlight"><pre><span></span><code><span class="mf">3178172</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="n">each</span><span class="p">:</span><span class="w"></span>
<span class="o">/</span><span class="n">Volumes</span><span class="o">/</span><span class="n">nils</span><span class="o">/</span><span class="n">Musique</span><span class="o">/</span><span class="n">laptop</span><span class="o">/</span><span class="n">Serge</span><span class="w"> </span><span class="n">Gainsbourg</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">Histoire</span><span class="w"> </span><span class="n">de</span><span class="w"> </span><span class="n">Melody</span><span class="w"> </span><span class="n">Nelson</span><span class="o">/</span><span class="mf">02</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">Ballade</span><span class="w"> </span><span class="n">de</span><span class="w"> </span><span class="n">Melody</span><span class="w"> </span><span class="n">Nelson</span><span class="mf">.</span><span class="n">mp3</span><span class="w"></span>
<span class="o">/</span><span class="n">Volumes</span><span class="o">/</span><span class="n">nils</span><span class="o">/</span><span class="n">Musique</span><span class="o">/</span><span class="n">laptop_old</span><span class="o">/</span><span class="n">Serge</span><span class="w"> </span><span class="n">Gainsbourg</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">Histoire</span><span class="w"> </span><span class="n">de</span><span class="w"> </span><span class="n">Melody</span><span class="w"> </span><span class="n">Nelson</span><span class="o">/</span><span class="mf">02</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">Ballade</span><span class="w"> </span><span class="n">de</span><span class="w"> </span><span class="n">Melody</span><span class="w"> </span><span class="n">Nelson</span><span class="mf">.</span><span class="n">mp3</span><span class="w"></span>
</code></pre></div>
<p>Une dernière fonctionnalité intéressante est celle de laisser fdupes gérer l'effacement des fichiers doublons, mais je préfère d'abord vérifier qu'il n'y a pas d'erreur.</p>
<p>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/pasukaru76/4797101119/" title=""Day">Pascal - Day 341</a>.</em></p>Python : 3 outils pour analyser son code2017-12-08T09:30:00+01:002017-12-08T09:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-08:/post/2017/12/08/python-3-outils-anaylser-code/<p>python, Python
Status: published</p>
<p><img alt="""" src="https://blog.anotherhomepage.org/public/study_in_pink.jpg">Suite à mon billet <a href="/tag/blogmas">blogmas</a> <a href="/post/make-automatiser-quelques-taches-avec-un-makefile">make : automatiser quelques tâches avec un Makefile</a>, une discussion intéressante a suivi sur Mastodon, où <a href="https://oldbytes.space/@dashie" title=""Dashie">Dashie</a> me signalait sa préférence pour <a href="https://www.pylint.org/" title="Pylint">pylint</a> pour analyser la validité de son code Python. Je saisis donc l'occasion, non pas d'argumenter pour mon choix, ou …</p><p>python, Python
Status: published</p>
<p><img alt="""" src="https://blog.anotherhomepage.org/public/study_in_pink.jpg">Suite à mon billet <a href="/tag/blogmas">blogmas</a> <a href="/post/make-automatiser-quelques-taches-avec-un-makefile">make : automatiser quelques tâches avec un Makefile</a>, une discussion intéressante a suivi sur Mastodon, où <a href="https://oldbytes.space/@dashie" title=""Dashie">Dashie</a> me signalait sa préférence pour <a href="https://www.pylint.org/" title="Pylint">pylint</a> pour analyser la validité de son code Python. Je saisis donc l'occasion, non pas d'argumenter pour mon choix, ou celui de Dashie, mais plutôt d'énumérer quelques possibilités pour qui souhaite avoir un code lisible, et se conformer à des conventions de style de code.</p>
<h3>Exit pep8, bonjour pycodestyle !</h3>
<p>Et là, les choses deviennent très drôles, car je voulais commencer par parler de pep8. Je lance donc la commande <em>pep8</em> dans mon code Python :</p>
<div class="highlight"><pre><span></span><code>nils@dalaran-wifi:~/fabfile$ pep8 *.py
/opt/pkg/lib/python2.7/site-packages/pep8.py:2124: UserWarning:
pep8 has been renamed to pycodestyle <span class="o">(</span>GitHub issue <span class="c1">#466)</span>
Use of the pep8 tool will be removed <span class="k">in</span> a future release.
Please install and use <span class="sb">`</span>pycodestyle<span class="sb">`</span> instead.
$ pip install pycodestyle
$ pycodestyle ...
<span class="s1">'\n\n'</span>
</code></pre></div>
<p>Donc, pep8 est obsolète, il faut utiliser pycodestyle. Heureusement, celui-ci est disponible dans pkgsrc :</p>
<div class="highlight"><pre><span></span><code>nils@dalaran-wifi:~$ sudo pkgin av<span class="p">|</span>grep codestyle
py27-codestyle-2.3.1 Python style guide checker
py27-pep8-1.7.1 Python style guide checker <span class="o">(</span>obsolete, use py-codestyle<span class="o">)</span>
py34-codestyle-2.3.1 Python style guide checker
py34-pep8-1.7.1 Python style guide checker <span class="o">(</span>obsolete, use py-codestyle<span class="o">)</span>
py35-codestyle-2.3.1 Python style guide checker
py35-pep8-1.7.1 Python style guide checker <span class="o">(</span>obsolete, use py-codestyle<span class="o">)</span>
py36-codestyle-2.3.1 Python style guide checker
py36-pep8-1.7.1 Python style guide checker <span class="o">(</span>obsolete, use py-codestyle<span class="o">)</span>
</code></pre></div>
<p>Bon, là aussi le message est clair : pep8 c'est fini, faut changer de crèmerie.</p>
<h3>flake8 l'aggrégateur</h3>
<p>Un autre outil dont j'avais entendu parler, c'est <a href="https://gitlab.com/pycqa/flake8" title="flake8">flake8</a>. Celui-ci est assez intéressant, car c'est justement une combinaison de plusieurs outils : pep8, pyflakes, mccabe, et potentiellement d'autres via des plugins.</p>
<h3>pylint, qui fait tout, sauf le café</h3>
<p>Pylint ne fait pas que vérifier la conformité par rapport à des standards ou styles de code, il permet aussi de faire de la détection d'erreur, de proposer du refactoring de code et de faire des diagrammes UML via <a href="https://www.logilab.org/blogentry/6883" title="Pyreverse">Pyreverse</a>. Entre ça, et l'intégration à un environnement de développement ou à un système d'intégration continue, le moins qu'on puisse dire, c'est que pylint est très complet !</p>
<h3>En conclusion : faut tester !</h3>
<p>Je n'ai pas encore eu le temps de me faire un avis. Je compte bien sûr tester tout cela, dès que je remet le nez dans du code Python !</p>
<p>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux !</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/pasukaru76/5330972736/" title=""Study">Pascal - Study in Pink</a>.</em></p>Paris Open Source Summit 2017 - jour 22017-12-07T21:50:00+01:002017-12-07T21:50:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-07:/post/2017/12/07/paris-open-source-summit-2017-jour-2/<p><img alt="""" src="https://blog.anotherhomepage.org/public/linuxfr.png">Ce billet arrive un peu tard, mais ces deux jours du Paris Open Source Summit 2017 furent assez remplis : entre des visiteurs sur le stand LinuxFr.org, les personnes sur les autres stands, et les tirages au sort pour faire gagner des livres, je n'ai pas eu le temps de …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/linuxfr.png">Ce billet arrive un peu tard, mais ces deux jours du Paris Open Source Summit 2017 furent assez remplis : entre des visiteurs sur le stand LinuxFr.org, les personnes sur les autres stands, et les tirages au sort pour faire gagner des livres, je n'ai pas eu le temps de m'ennuyer !</p>
<p>Quelques photos de ces deux jours de salons :</p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171206_093436.jpg" title=""Affiche"><img alt=""Affiche" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171206_093436_m.jpg" title=""Affiche"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171206_135145.jpg" title=""L'urne"><img alt=""L'urne" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171206_135145_m.jpg" title=""L'urne"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171206_170526.jpg" title=""Les"><img alt=""Les" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171206_170526_m.jpg" title=""Les"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171206_172033.jpg" title=""Le"><img alt=""Le" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171206_172033_m.jpg" title=""Le"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171206_191601.jpg" title=""LinuxFr.org"><img alt=""LinuxFr.org" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171206_191601_m.jpg" title=""LinuxFr.org"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171207_093752.jpg" title=""Une"><img alt=""Une" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171207_093752_m.jpg" title=""Une"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171207_154114.jpg" title=""La"><img alt=""La" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171207_154114_m.jpg" title=""La"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171207_172020.jpg" title=""Le"><img alt=""Le" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171207_172020_m.jpg" title=""Le"></a></p>
<p><a href="https://blog.anotherhomepage.org/public/poss2017/IMG_20171207_172407.jpg" title=""Quelques"><img alt=""Quelques" src="https://blog.anotherhomepage.org/public/poss2017/.IMG_20171207_172407_m.jpg" title=""Quelques"></a></p>
<p>A l'année prochaine pour une nouvelle édition du Paris Open Source Summit !</p>Paris Open Source Summit 20172017-12-06T15:30:00+01:002017-12-06T15:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-06:/post/2017/12/06/paris-open-source-summit-2017/<p><img alt="""" src="https://blog.anotherhomepage.org/public/linuxfr.png">Depuis maintenant plusieurs années, je suis fidèle au rendez-vous du salon qui maintenant s'appelle le <a href="http://www.opensourcesummit.paris/" title=""Paris">Paris Open Source Summit</a>. Et comme toujours, vous pourrez me retrouver sur le stand de <a href="https://linuxfr.org" title="LinuxFr.org">LinuxFr.org</a>. Toujours selon la tradition, il y aura :</p>
<ul>
<li>des autocollants ;</li>
<li>des livres à gagner (tirage au sort en fin …</li></ul><p><img alt="""" src="https://blog.anotherhomepage.org/public/linuxfr.png">Depuis maintenant plusieurs années, je suis fidèle au rendez-vous du salon qui maintenant s'appelle le <a href="http://www.opensourcesummit.paris/" title=""Paris">Paris Open Source Summit</a>. Et comme toujours, vous pourrez me retrouver sur le stand de <a href="https://linuxfr.org" title="LinuxFr.org">LinuxFr.org</a>. Toujours selon la tradition, il y aura :</p>
<ul>
<li>des autocollants ;</li>
<li>des livres à gagner (tirage au sort en fin de journée, il faut être présent pour gagner) ;</li>
<li>du chocolat (et cette année, j'ai mis le paquet !) ;</li>
<li>et une partie de l'équipe du site !</li>
</ul>
<p>Je vous attends donc au stand B29 pour ces deux jours de salon ! Si vous ne pouvez pas venir, faites-moi signe sur les réseaux sociaux, et dites-moi si vous souhaitez que je visite un stand en particulier !</p>make : automatiser quelques tâches avec un Makefile2017-12-05T09:30:00+01:002017-12-05T09:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-05:/post/2017/12/05/make-automatiser-quelques-taches-avec-un-makefile/<p><img alt=""Vue de rails de la ligne 14 du metro parisien, en station"" src="https://blog.anotherhomepage.org/public/meteoro.jpg">Quand on parle d'automatisation, on pense tout de suite à des outils qui permettent du déploiement automatisé, comme <a href="https://www.ansible.com/" title="Ansible">Ansible</a>, <a href="https://www.chef.io/chef/" title="Chef">Chef</a>, <a href="https://puppet.com/fr" title="Puppet">Puppet</a> ou <a href="https://saltstack.com/" title="Salt">Salt</a>. Mais bien avant d'en arriver là, il y a eu (GNU) <a href="https://fr.wikipedia.org/wiki/Make" title=""make">make</a>.</p>
<p>Après m'être pas mal amusé avec <a href="http://www.fabfile.org/" title="Fabric">Fabric</a>, en ce moment je me met à Ansible …</p><p><img alt=""Vue de rails de la ligne 14 du metro parisien, en station"" src="https://blog.anotherhomepage.org/public/meteoro.jpg">Quand on parle d'automatisation, on pense tout de suite à des outils qui permettent du déploiement automatisé, comme <a href="https://www.ansible.com/" title="Ansible">Ansible</a>, <a href="https://www.chef.io/chef/" title="Chef">Chef</a>, <a href="https://puppet.com/fr" title="Puppet">Puppet</a> ou <a href="https://saltstack.com/" title="Salt">Salt</a>. Mais bien avant d'en arriver là, il y a eu (GNU) <a href="https://fr.wikipedia.org/wiki/Make" title=""make">make</a>.</p>
<p>Après m'être pas mal amusé avec <a href="http://www.fabfile.org/" title="Fabric">Fabric</a>, en ce moment je me met à Ansible (mieux vaut tard que jamais). J'apprécie de pouvoir, assez rapidement, effacer des fichiers temporaires ou effectuer certaines vérifications. Avoir un Makefile est une solution qui, pour le moment, m'apparaît comme simple et élegante.</p>
<p>Ainsi, dans le répertoire où je stocke mes recettes Fabric, j'ai créé un fichier nommé, sans surprise, <em>Makefile</em>. Son contenu est à peu près le suivant :</p>
<div class="highlight"><pre><span></span><code><span class="nf">clean</span><span class="o">:</span>
rm -f *.pyc *.pyo *~ */*.pyc */*.pyo */*~ .*~ .DS_Store */.DS_Store
<span class="nf">pep8</span><span class="o">:</span>
pep8 *.py
</code></pre></div>
<p>J'ai donc deux cibles :</p>
<ul>
<li>la première, <em>clean</em>, fait comme on s'en doute, du nettoyage, c'est-à-dire de la suppression de fichiers temporaires ou de fichiers qui n'ont pas vocation à servir (comme les paramètres d'affichage de répertoire sous macOS) ;</li>
<li>la deuxième me permet de vérifier que mon code Python est bien conforme aux standards de style Python, regroupés dans le <a href="https://www.python.org/dev/peps/pep-0008/" title="PEP8">PEP8</a> (voir chez <a href="http://sametmax.com/le-pep8-en-resume/" title=""Le">Sam et Max</a> pour une explication en français, mais attention, c'est un peu NSFW).</li>
</ul>
<p>Une fois que je suis dans mon répertoire, et que j'ai fini d'éditer mes fichiers, je peux vérifier que tout cela respecte le PEP8 avec la commande “make pep8”. Pour faire le ménage dans mes fichiers, ça sera “make clean”. Ah, si je pouvais réellement faire le ménage chez moi comme ça ;)</p>
<p>En fait, make est bien plus complet et complexe que cela, et ne se limite pas à faire le ménage. On peut, et c'est pour cela qu'il existe, compiler et installer des programmes. Je m'en sers aussi pour <a href="https://github.com/ahpnils/cfgfiles/blob/a7d73d593b552a582c10bce6b983547ee22f2d5a/Makefile" title=""Github">installer mon petit confort</a> sur une nouvelle machine.</p>
<p>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Et puis n'hésitez pas à proposer vos propres cibles make en commentaires !</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/daquellamanera/194660985/in/photolist-icFVT-9Vxso8-ot3LJg-63W1Mt-6XcpRF-rNEMNp-sKtLik-91kMwU-GR47aF-duE1NE-5eNWGc-rNteyY-oePgYf-ssTGpj-icFSj-sKuhe6-rNEsw8-sKhfNw-nT2ST-D9a9y9-st2gZc-WLKdRU-otLFwy-YrrtxQ-bZ7pow-9Hn9px-8JMDBA-oy51MD-ow7dKq-7fzFJt-6Xcy7a-6Xcy1k-6XgnHY-6Xcy3e-7GYUQN-ouhqem-6XgxEC-ow79zb-ETxKfN-oeQdAZ-sKtndc-nT2TB-sKu1d8-8P16VL-Y7d4su-oy8Bwc-8Nzcf5-osXx4C-sH9VGA-oupu2A" title="Meteoro">Daniel Lobo - Meteoro</a>.</em></p>logrotate : exemple vite fait2017-12-04T09:30:00+01:002017-12-04T09:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-04:/post/2017/12/04/logrotate-exemple-vite-fait/<p><img alt=""Logs made of wood"" src="https://blog.anotherhomepage.org/public/logs.jpg">Aujourd'hui, un peu de configuration pour la rotation de ses logs, en utilisant <a href="https://github.com/logrotate/logrotate" title=""Logrotate">Logrotate</a>.</p>
<p>Sur un système Unix, bon nombre de programmes génèrent des fichiers de log. La rotation de ceux permet de séparer régulièrement les fichiers afin de les empêcher de devenir trop gros (et difficile à exploiter), et …</p><p><img alt=""Logs made of wood"" src="https://blog.anotherhomepage.org/public/logs.jpg">Aujourd'hui, un peu de configuration pour la rotation de ses logs, en utilisant <a href="https://github.com/logrotate/logrotate" title=""Logrotate">Logrotate</a>.</p>
<p>Sur un système Unix, bon nombre de programmes génèrent des fichiers de log. La rotation de ceux permet de séparer régulièrement les fichiers afin de les empêcher de devenir trop gros (et difficile à exploiter), et à effacer ceux qui sont trop vieux pour empêcher qu'ils ne saturent l'espace disque. La rotation des logs peut aussi être intéressante d'un point de vue légal, si on doit conserver un minimum ou maximum de temps les logs d'accès d'un serveur web, par exemple.</p>
<p>Continuons d'ailleurs sur l'exemple du serveur web. Je vais me baser sur une configuration proche de celle que j'utilise pour le serveur web qui rend ce blog accessible :</p>
<div class="highlight"><pre><span></span><code>/srv/www/*/*/log/*.log {
compress
compresscmd /usr/bin/xz
compressext .xz
uncompresscmd /usr/bin/unxz
delaycompress
daily
rotate 9999
create 644 root wheel
sharedscripts
missingok
prerotate
/usr/pkg/bin/perl /usr/pkg/awstats/bin/awstats_updateall.pl now -awstatsprog=/usr/pkg/awstats/cgi-bin/awstats.pl -configdir=/usr/pkg/etc/awstats/ > /dev/null
endscript
postrotate
/usr/pkg/sbin/apachectl restart > /dev/null 2>/dev/null || true
endscript
}
</code></pre></div>
<p>Dans cet exemple, on peut remarquer que les logs sont compressés (directive <em>compress</em>), mais pas immédiatement lors de la rotation (directive <em>delaycompress</em>). Il s'agit d'un compromis entre la facilité de recherche dans les logs, et l'espace occupé. Autre information intéressante, l'utilisation de xz, déjà abordé dans un <a href="/post/xz-pour-une-meilleure-compression-de-ses-fichiers">billet précédent</a>, au lieu de Gzip (paramétrage par défaut). La plupart des options sont faciles à comprendre.</p>
<p>Attardons-nous cependant sur les dernières lignes de configuration, en particulier sur les directives <em>prerotate</em> et <em>postrotate</em>. Comme leur nom l'indique, elles permettent d'agir juste avant la rotation et juste après. Ainsi, j'ai choisi dans cette configuration de lancer Awstats pour gérer les statistiques de visites de tous les sites hébergés. Concernant l'action après rotation, la relance du serveur web est obligatoire, car sinon ce dernier continue à écrire dans l'ancien fichier (car l'inode ne bouge pas, lui).</p>
<p>Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Si en plus vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/107640324@N05/26883118626/in/photolist-GXz1zh-GXz3Fm-H1vKwt-G69hJP-GXz4x1-H1vNFz-GXyUrf-G699sD-Gnxw8N-RQJjMv-GewNiy-GydJQu-FZgSSN-GmQcJv-GnxKap-GfYdkb-Ga6V5A-NoPvcs-F2FP1m-FKdHag-FvJFku-EAf6xR-F6mJGJ-EXhUth-F2RwRV-DSczhs-EMBnrj-DHmwz9-EwRJDM-ECLpsQ-EjnCfH-DLD1De-DYxtqj-HEQkrq-P33LAp-DBoPkn-DBoPuF-DBoPLx-CZ1f7B-Np5aiP-DpJTyK-CYvrCF-zh6Fbt-A73Wej-AoEeU8-A79QtZ-A79ZgD-AoEhRa-zrLzVB-zrLyrp" title="logs">Intermountain Region USFS - logs ET5A3073</a>.</em></p>Livre : « Introduction au langage C », de Bernard Cassagne2017-12-03T10:30:00+01:002017-12-03T10:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-03:/post/2017/12/03/livre-introduction-au-langage-c/<p><img alt="""" src="https://blog.anotherhomepage.org/public/forge.jpg">Suite au billet sur le langage Python, je voulais partager un autre ouvrage qui date de mes années de DUT, sur le langage C. Comme pour le précédent ouvrage, mon professeur d'informatique l'a utilisé comme base pour ses cours. Il s'agit de « <a href="https://c.developpez.com/cours/bernard-cassagne/" title=""Introduction">Introduction au langage C</a> », de <a href="http://www-clips.imag.fr/commun/bernard.cassagne/">Bernard Cassagne</a>. Cet …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/forge.jpg">Suite au billet sur le langage Python, je voulais partager un autre ouvrage qui date de mes années de DUT, sur le langage C. Comme pour le précédent ouvrage, mon professeur d'informatique l'a utilisé comme base pour ses cours. Il s'agit de « <a href="https://c.developpez.com/cours/bernard-cassagne/" title=""Introduction">Introduction au langage C</a> », de <a href="http://www-clips.imag.fr/commun/bernard.cassagne/">Bernard Cassagne</a>. Cet ouvrage partage quelques caractéristiques avec le précédent :</p>
<ul>
<li>il est gratuit ;</li>
<li>il est disponible en PDF (mais aussi sous forme d'archive zip) ;</li>
<li>il est en français.</li>
</ul>
<p>Un détail qui m'amuse beaucoup dans cet ouvrage, est la présence de rubriques « récréation ». Ces rubriques effectuent un commentaire d'un code source provenant du concours international du code C le plus obscur, en abrégé l'IOCCC (pour <a href="http://ioccc.org" title=""The">International Obfuscated C Code Contest</a> ). J'avoue ne jamais avoir réussi à compiler l'un de ces joyaux, mais je me rappelle toujours avec amusement de la lecture des pages 33 et 34 à propos de Charlie et de Charlotte !</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/one_rod/305253111/in/photolist-sYv7F-APWzc-9UogNL-7PV1ap-9VJzT9-cK2C4w-9Q3qx-ftSkR-byfj2L-fKw7SE-fDvfk4-4SYtZJ-6Hyj3g-UHDsML-d6oatm-4rNHVJ-TfG4JN-dQenPT-dih2aN-qmHXTL-bf1Evc-bTKqv8-7BCqsr-fKewtg-eezy14-Wo48SQ-4CNjwY-53JzY-PBY5E-dK6n9s-8BhqPZ-2VMt7b-ULsT9V-6yL64Q-hyrqh2-4rJEDg-Us2cSe-8cDDhV-fppoj9-iYSsMu-dCuRgC-4X95ns-nxhWoV-TpVEug-ScvhJt-fQKd9v-R9Dqbz-Tn4Qd7-SoGMxM-8Eu9fb" title="forge">Mick - forge</a>.</em></p>xz pour une meilleure compression de ses fichiers2017-12-02T10:00:00+01:002017-12-02T10:00:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-02:/post/2017/12/02/xz-pour-une-meilleure-compression-de-ses-fichiers/<p><img alt=""Bell system technical journal"" src="https://blog.anotherhomepage.org/public/bell_system_technical_journal.jpg">Aujourd'hui, causons un peu compression. Habituellement, dans le monde Unix, on a tendance à utiliser <a href="https://fr.wikipedia.org/wiki/Gzip" title=""Gzip">Gzip</a>. Ce format de compression a le mérite, aujourd'hui, d'être assez rapide, mais il est loin d'être le plus efficace. Une alternative a vu le jour, il s'agit de <a href="https://fr.wikipedia.org/wiki/Bzip2" title=""bzip2">bzip2</a>. Si ce dernier est bien …</p><p><img alt=""Bell system technical journal"" src="https://blog.anotherhomepage.org/public/bell_system_technical_journal.jpg">Aujourd'hui, causons un peu compression. Habituellement, dans le monde Unix, on a tendance à utiliser <a href="https://fr.wikipedia.org/wiki/Gzip" title=""Gzip">Gzip</a>. Ce format de compression a le mérite, aujourd'hui, d'être assez rapide, mais il est loin d'être le plus efficace. Une alternative a vu le jour, il s'agit de <a href="https://fr.wikipedia.org/wiki/Bzip2" title=""bzip2">bzip2</a>. Si ce dernier est bien plus efficace, il est hélas beaucoup plus lent. Comme on cherche toujours à avoir le beurre et l'argent du beurre, d'autres formats de compression ont vu le jour plus récemment, comme <a href="https://fr.wikipedia.org/wiki/XZ_(format_de_fichier)" title=""XZ">XZ</a>, utilisant actuellement l'algorithme <a href="https://fr.wikipedia.org/wiki/LZMA" title=""LZMA">LZMA</a> 2.</p>
<p>Pour utiliser le format de compression xz, il suffit d'utiliser les outils xz et unxz. Ils sont généralement disponibles sur toutes les distributions Linux, voire même par défaut depuis longtemps. Les systèmes BSD ne sont pas en reste, puisque NetBSD 7 dispose de xz dans le système de base (une version plus récente est disponible dans pkgsrc). Enfin, seul macOS ne semble pas en disposer nativement, mais cela peut être corrigé grâce à pkgsrc, macports ou Homebrew. Selon les systèmes, en plus des outils de compression et décompression, xz vient avec des outils fichiers "classique" qui décompressent à la volée, comme xzcat, xzgrep, xzless ou xzdiff.</p>
<p>Quelques exemples d'utilisation, à commencer par la compression d'un fichier, ici en mode verbeux et avec un taux de compression maximum :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:~/irclogs/freenode$ xz -v -9 <span class="se">\\</span><span class="c1">#gcu.2017-11-30.log</span>
<span class="c1">#gcu.2017-11-30.log (1/1)</span>
<span class="m">100</span> % <span class="m">8</span>?020 B / <span class="m">23</span>,2 <span class="nv">KiB</span> <span class="o">=</span> <span class="m">0</span>,338
</code></pre></div>
<p>Soyons fous, recherchons une chaîne de caractères :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:~/irclogs/freenode$ xzgrep -i -m <span class="m">1</span> pinpin <span class="se">\\</span><span class="c1">#gcu.2017-11-30.log.xz </span>
<span class="m">01</span>:26 < pinpin> olivier__ runne irssi v1.0.5 - running on FreeBSD amd64
</code></pre></div>
<p>Et bien entendu, la décompression :</p>
<div class="highlight"><pre><span></span><code>nils@shell2:~/irclogs/freenode$ unxz -v <span class="se">\\</span><span class="c1">#gcu.2017-11-30.log.xz </span>
<span class="c1">#gcu.2017-11-30.log.xz (1/1)</span>
<span class="m">100</span> % <span class="m">8</span>?020 B / <span class="m">23</span>,2 <span class="nv">KiB</span> <span class="o">=</span> <span class="m">0</span>,338
</code></pre></div>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/internetarchivebookimages/14733726886/in/photolist-orYcFU-odZb28-ouALWf-oubHW5-owcadT-ox4T7K-ouCPjA-owyEXc-oeTAqs-odEZPn-odbtUr-oufaDH-ouqpfs-ocVsFg-owcn5w-owkuw8-ocUUBX-ocT2R9-odCbPL-odzUfe-od9WZH-odjbkp-owVry6-owVvWp-osxGbd-owpVSv-odj5YS-odjpx5-ocUaAM-ow8ZvA-ocFgzz-osCeLu-ow7naS-ouoJY9-octZyk-oxcW7M-ocHuhY-ouK3Z9-ocUDjv-ocS7LS-owLJXx-osCfpy-ocSti5-owbhG5-owoJ3n-vNf6mA-wkkWhE-osmV5G-ouNKz4-ocUAsZ" title=""The">Internet Archive Book Images - Image from page 1351 of "The Bell System technical journal" (1922)</a>.</em></p>Livre : « Apprendre à programmer avec Python », de Gérard Swinnen2017-12-01T09:30:00+01:002017-12-01T09:30:00+01:00Nils Ratuszniktag:blog.anotherhomepage.org,2017-12-01:/post/2017/12/01/livre-apprendre-a-programmer-avec-python/<p><img alt="""" src="https://blog.anotherhomepage.org/public/encyclopaedia_of_sport.jpg">L'autre jour, à ${DAYJOB}, un collègue m'a demandé si j'avais des ressources pour apprendre Python. Je me suis donc dit que j'allais en faire un billet.</p>
<p>Ma ressource principale, celle avec laquelle j'ai appris Python en DUT, c'est tout simplement « <a href="http://inforef.be/swi/python.htm" title=""Apprendre">Apprendre à programmer avec Python</a> », de Gérard Swinnen. Cet ouvrage …</p><p><img alt="""" src="https://blog.anotherhomepage.org/public/encyclopaedia_of_sport.jpg">L'autre jour, à ${DAYJOB}, un collègue m'a demandé si j'avais des ressources pour apprendre Python. Je me suis donc dit que j'allais en faire un billet.</p>
<p>Ma ressource principale, celle avec laquelle j'ai appris Python en DUT, c'est tout simplement « <a href="http://inforef.be/swi/python.htm" title=""Apprendre">Apprendre à programmer avec Python</a> », de Gérard Swinnen. Cet ouvrage a, je trouve, plusieurs avantages :</p>
<ul>
<li>il est gratuit ;</li>
<li>il est sous une licence Creative Commons (bon d'accord, loin d'être la plus permissive, mais au moins c'est utilisé) ;</li>
<li>il est en français ;</li>
<li>les corrigés des exercices sont disponibles ;</li>
<li>il est disponible en PDF et ODT, pratique pour une consultation hors-ligne ;</li>
<li>il peut être acheté pour disposer d'une version papier, ou pour soutenir l'auteur.</li>
</ul>
<p>Bref, je le recommande.</p>
<p><em>Crédit photo : <a href="https://www.flickr.com/photos/internetarchivebookimages/14761106556/in/photolist-ouowHb-odEKJM-eS5zDv-owD9UM-A58G92-oeZpHx-odm9Uc-owsqwE-oeWYav-otzAJk-odYS7F-nGXzMM-7xrQWC-ov6PoE-ouY5XG-ovn1Et-yC5mhs-ot4Ku6-od8GeW-orRR6C-au46GF-otjCWM-odeTRP-orRRy1-ouUAra-odAZhZ-osWWJd-ow5pLz-owRw1F-ouTeqV-obGijx-owkt5Q-ott2i1-qM4R8t-rgiYaj-osSx5K-odxoGx-rgiXZE-oeWeYr-orSjVf-7xo3j2-otqyj8-odZqGH-odrdCr-owsE3R-zXWmN7-A1eNpR-t8FCum-ouA8dX-tJfVxr/" title=""The">Internet Archive Book Images - Image from page 421 of "The encyclopaedia of sport" (1897)</a>.</em></p>