Vous naviguez sur un site web HTTPS

Depuis hier, ce blog est dorénavant accessible uniquement en HTTPS. Pour l'exercice, j'ai fait en sorte que celui-ci dispose d'une note A+ au test SSL Labs de chez Qualys, en me basant sur une configuration proposée par le générateur de configuration SSL proposé par Mozilla. J'ai choisi une configuration "moderne". Côté certificat, j'ai choisi d'utiliser Let's Encrypt.

On peut très vite noter quelques impacts :

  • d'abord, la liste des plus vieux clients compatibles : Firefox 27, Chrome 22, IE 11, Opera 14, Safari 7, Android 4.4, Java 8 ;
  • ensuite, une légère augmentation du temps de chargement du site, qui peut s'avérer plus que significative lors d'une redirection HTTP vers HTTPS.

Concernant les clients compatibles, je ne m'en fais pas trop, ce blog n'est pas très visité, et je doute que beaucoup de personnes visitent ce site avec Internet Explorer. Je suis un peu plus embêté pour Android, du fait d'une fragmentation assez importante. Du côté du temps de chargement, de nouvelles mesures réalisées un peu plus tard sont encourageantes, j'imagine donc que les divers caches possibles feront toujours leur travail et que la navigation sera confortable.

Java prend trop de place

Un billet d'humeur, ça faisant longtemps. De temps en temps, il me prend l'envie de faire un peu de ménage sur mon disque dur, je pars donc à la recherche de fichiers volumineux, en double, ou inutiles. En la matière, je tiens un gagnant : Java.

Java, sur OS X, réclame de temps à autres une mise à jour. C'est louable, de penser à la sécurité de l'utilisateur. Sauf que le téléchargement de la mise à jour se fait dans un répertoire inadapté (non, c'est trop simple de télécharger dans le répertoire "Téléchargements", on va aller mettre ça dans la bibliothèque de l'utilisateur, planqué au fond d'_Application Support_), mais en plus, le programme de mise à jour n'efface ni l'archive courante, ni les archives précédentes. Le résultat : environ 65Mo téléchargés, puis 65Mo décompressés à chaque mise à jour. Total sur ma machine : 972Mo. Je peux comprendre qu'on garde l'archive, qu'on garde l'installeur si l'installation se passe mal, mais franchement, ne pas purger les versions précédentes, je ne comprend pas.

nils@dalaran-wifi:~/Library/Application Support/Java$ du -sh
972M	.
nils@dalaran-wifi:~/Library/Application Support/Java$ du -sh *
116M	Java 1.8.45.14
116M	Java 1.8.51.16
121M	Java 1.8.60.27
121M	Java 1.8.60.27 1
121M	Java 1.8.60.27 2
121M	Java 1.8.60.27 3
129M	Java 1.8.60.27 4
129M	Java 1.8.65.17

Je suis conscient de l'augmentation des capacités de stockage, mais quand même, faudrait pas pousser, non ? Ou alors, Oracle a passé un accord avec les fabricants de stockage pour vendre des disques durs encore plus gros (bon, j'avoue, ma théorie du complot est elle aussi un peu abusée) ?

Bon, bref, tout ça pour dire que sur une machine OS X, si vous voulez gagner quelques centaines de méga-octet facilement, il suffit de faire ceci :

rm -rf ~/Library/Application Support/Java/*

installation minimaliste de CentOS 7

Mieux vaut tard que jamais, j'ai commencé à jouer un peu avec CentOS 7 ! Bien que celle-ci regorge de fonctionnalités et de mécanismes intéressants, elle amène beaucoup de paquets logiciels. J'ai donc commencé par regarder ce que je pouvais retirer comme paquets, et à préparer une section _packages_ minimaliste, bien plus que l'image iso "minimal install" fournie par les miroirs. Cette liste de paquets retirés peut se voir complétée par une liste de paquets à installer, mais il s'agit d'un choix personnel. Qu'ai-je donc retiré ? Et bien c'est simple, comme il s'agit généralement d'une installation sur une machine physique ou virtuelle reliée en réseau filaire et disposant d'une adresse IP fixe (sauf lors de l'installation), j'ai retiré tous les firmwares possibles de matériel que je n'utilise probablement pas, comme les cartes Wifi. J'ai aussi enlevé, usage serveur oblige, des paquets liés au son (alsa). Un choix discutable, j'ai retiré man et les pages de manuel de base : je considère, en particulier si la machine est "en production", que la documentation n'a rien à faire à cet endroit. Je n'ai, par contre, rien à redire à l'installation des pages de manuel sur une machine de test. De plus, comme j'utilise le système de fichiers proposé par défaut (xfs), j'estime ne pas avoir besoin des outils pour gérer les systèmes ext2-3-4 ou btrfs.

Voici donc, la liste :

%packages --nobase
@core
-NetworkManager
-NetworkManager-team
-NetworkManager-tui
-aic94xx-firmware
-alsa-firmware
-alsa-lib
-alsa-tools-firmware
-atmel-firmware
-avahi-autoipd
-avahi-libs
-b43-openfwwf
-bfa-firmware
-biosdevname
-btrfs-progs
-dhclient
-dmidecode
-dnsmasq
-dracut-network
-e2fsprogs
-e2fsprogs-libs
-gnutls
-kexec-tools
-ipw2100-firmware
-ipw2200-firmware
-ivtv-firmware
-iwl100-firmware
-iwl1000-firmware
-iwl105-firmware
-iwl135-firmware
-iwl2000-firmware
-iwl2030-firmware
-iwl3160-firmware
-iwl3945-firmware
-iwl4965-firmware
-iwl5000-firmware
-iwl5150-firmware
-iwl6000-firmware
-iwl6000g2a-firmware
-iwl6000g2b-firmware
-iwl6050-firmware
-iwl7260-firmware
-libertas-usb8388
-man
-man-db
-mariadb-libs
-postfix
-ql2100-firmware
-ql2200-firmware
-ql23xx-firmware
-ql2400-firmware
-ql2500-firmware
-rt61pci-firmware
-rt73usb-firmware
-snappy
-teamd
-tuned
-virt-what
-wpa_supplicant
-xorg-x11-drv-ati-firmware
-zd1211-firmware

Il y a de fortes chances que pour une machine vraiment en production, j'ai besoin d'un MTA, mais à moins de prévoir une configuration dès l'installation, postfix fait aussi partie des exclus. De cette manière, non seulement le système s'installe rapidement, mais il démarre aussi rapidement ! On arrive à un total inférieur à 220 paquets. Cela peut varier pour vous en particulier si vous installez un système avec du RAID logiciel, qui nécessitera l'installation de mdadm.

Et vous, est-ce que vous retireriez d'autres paquets ?

Hébergement de contenu : 4 services gratuits ou presque !

Quand on souhaite démarrer un site web, se pose parfois la question du coût et du type d'hébergement qu'on souhaite acquérir : quelles capacités, pour quoi faire, à quel tarif ? On peut aussi se poser la question de la qualité, et vouloir démarrer petit pour ensuite grandir au fur et à mesure. Et aussi minimiser le risque financier en cas d'échec ou d'abandon. J'ai donc sélectionné pour vous quelques hébergeurs web originaux, pour démarrer votre aventure !

Github Pages

Si le site que vous démarrez est relatif à un projet de logiciel, ou à tout autre contenu hébergé sur Github, alors choisir Github Pages vous permet de tout regrouper au même endroit. Vous pourrez, comme pour votre projet, gérer les versions de vos pages, via git, et même utiliser des générateurs de pages statiques, comme Jekyll ou Pelican. Il est toujours possible d'utiliser l'interface de Github pour éditer vos pages. De plus, Github Pages vous permet d'utiliser votre propre nom de domaine si vous le souhaitez ! Par contre, cela veut dire que les sources de votre site sont accessibles, à moins de payer pour un dépôt privé.

Surge

Surge vous propose aussi d'héberger des pages statiques gratuitement, mais ne propose pas de gestion de version. Le service, tel qu'il est présenté sur le site, se veut néanmoins orienté développeurs, et propose d'héberger votre site en une seule ligne de commande, en utilisant un client dédié à l'hébergeur. De plus, lorsque vous déployez votre site, celui-ci est répliqué sur le CDN de Surge. Autre point intéressant, celui de pouvoir utiliser son propre nom de domaine (il y a même des explications pour le faire). Enfin, Surge met aussi en avant l'utilisation d'un certificat SSL basique. Le client Surge est à mon sens une grande force mais aussi une grande faiblesse de ce service : bien que le code source soit disponible, je n'ai pas vu de licence, et pas vu non plus d'autre moyen de déployer le contenu.

Freeshell

J'ai déjà eu l'occasion de vous parler de Freeshell dans un billet précédent. On a donc plus qu'un simple hébergement de fichiers statiques, on dispose d'un accès par SSH avec des commandes limitées. Il est possible d'avoir un accès utilisateur bien plus complet en envoyant 1 dollar ou 5 euros, et des services supplémentaires sont accessibles à d'autres tarifs. Alors certes, ce n'est pas vraiment gratuit, mais on ne donne qu'une fois. Un service comparable a été lancé en Europe : SDFeu.

RHIEN

Le RHIEN n'est pas qu'un hébergeur. C'est une association regroupant des hébergeurs à but non lucratif, pratiquant souvent l'auto-hébergement, et attachés à certaines valeurs comme la neutralité du net ou le Logiciel Libre. Vous y trouverez certainement plus que de l'hébergement de fichiers statiques, puisque la plupart des hébergeurs proposent PHP et MySQL.

Ces quatre moyens d'hébergement ont chacun des particularités qui le rendent unique. Alors, plutôt développeur, déployeur, accès shell ou indépendant ?

Moi aussi j'ai des lutins qui courent très vite dans les fils !

Résumé des épisodes précédents : NetBSD et PXE sont de grands copains. Démarrer ce type d'OS en PXE est faisable, pas trop difficile, documenté dans la langue de Shakespeare ou dans celle de Molière que ce soit pour un système fini (merci iMil) ou juste pour l'installation (autopromotion sans honte).

Mieux vaut tard que jamais, j'ai décidé de tenter ma chance et de configurer un système NetBSD sans disque, suite à la présence à ${HOME} d'une machine graphiquement réduite mais disposant d'une puissance de calcul non négligeable, jugez plutôt :

marvin# egrep '(name|MHz)' /proc/cpuinfo 
model name      : AMD Phenom(tm) 8450 Triple-Core Processor
cpu MHz         : 2100.35
model name      : AMD Phenom(tm) 8450 Triple-Core Processor
cpu MHz         : 2106.73
model name      : AMD Phenom(tm) 8450 Triple-Core Processor
cpu MHz         : 2304.94
marvin# grep MemTotal /proc/meminfo
MemTotal:   3931368 kB

Merci à Madame de me laisser l'utiliser !

Je pourrais utiliser une clé USB, débrancher les disques durs et en ajouter un de mon stock. Mais ce ne serait pas drôle. J'ai utilisé les liens ci-dessus pour démarrer le brave Marvin via NFS, je ne vais donc pas paraphraser ces articles, mais ajouter ici quelques détails, remarques, trucs et peut-être astuces glanés ici et là et qui m'ont aidé.

D'abord, mieux vaut tester dans une machine virtuelle. Parce qu'aller chercher la bécane au fond sous le bureau, ça va une fois. Du coup, il faut s'assurer quand même qu'elle démarre sur le réseau, voire via Wake On LAN pour les plus fainéants. Sinon, une clé USB ou un CD Etherboot devrait faire l'affaire.

Ensuite, repérer la marque de la carte réseau et surtout potentiellement le pilote qui sera utilisé par NetBSD sera pratique : en effet, il faudra créer un fichier ifconfig.xy0, où xy0 sera remplacé par le nom du pilote de la carte réseau, dans mon cas c'est nfe0. Comment trouver le nom du pilote ? Soit on démarre un noyau NetBSD (l'installeur par exemple, qui permet d'obtenir un shell et d'exécuter dmesg | grep -i eth), soit on connaît le modèle de carte réseau et on cherche dans les sources. En ce qui me me concerne, je suis allé cherché la chaîne "NVIDIA" dans le fichier de configuration du noyau.

Toujours dans la catégorie réseau, si vous faites des tests en machine virtuelle, vous risquez probablement de le faire depuis un ordinateur portable connecté en Wi-Fi. Mieux vaut réfléchir un instant à la qualité de son réseau sans fil, et envisager de faire les tests en filaire. Mon expérience personnelle (VM simple cœur, 2Go de ram) : en Wi-Fi, le système démarre en plus de 5 bonnes minutes, en filaire (gigabit Ethernet) cela met moins d'une minute. 5 FICHUES MINUTES QUOI !!! En prime, dès que vous allez vouloir écrire ne serait-ce qu'un méga-octet sur le système, cela va se traîner. J'ai senti ma douleur quand je me suis rendu compte que j'avais oublié de décompresser un set.

J'ai eu une surprise sur le fichier /dev/null, il peut être nécessaire de le recréer :

marvin# cd /dev/
marvin# rm null
marvin# ./MAKEDEV -u all

L'installeur de NetBSD crée automatiquement certains fichiers ou paramètres. Sauf qu'on ne l'a pas utilisé... Parmi les trucs qu'il peut être utile de faire manuellement, il y a ces lignes dans /etc/fstab :

procfs                                          /proc            procfs  rw,auto,linux
kernfs                                          /kern            kernfs  rw
ptyfs                                            /dev/pts       ptyfs    rw

Il n'est pas obligatoire de monter /proc avec l'option linux, c'est juste un confort personnel. Ne pas oublier de créer les répertoires /proc/ et /kern/ avant.

Autre paramètre, celui de la date et de l'heure : par défaut, le système est en heure UTC, moi je veux l'heure de Paris. Pour cela, j'ai modifié le lien symbolique /etc/localtime :

marvin# readlink -f /etc/localtime
/usr/share/zoneinfo/Europe/Paris

Cela n'exclut pas le paramétrage NTP.

J'ai choisi de ne configurer qu'un seul partage NFS, car je n'envisage pas dans l'immédiat d'utiliser ce partage pour d'autres machines. Du coup, je n'ai initialement pas paramétré de swap, mais j'ai ajouté un fichier après coup, en utilisant la documentation officielle. Cela donne :

marvin# dd if=/dev/zero bs=1024k count=1024 of=/swapfile
marvin# chmod 600 /swapfile
marvin# swapctl -a -p 1 /swapfile
marvin# echo "/swapfile none    swap    sw,priority=1 0 0" >> /etc/fstab

Si comme moi vous avez déjà un serveur PXE en place, avec un fichier boot.cfg utilisé par pxeboot_ia32.bin, vous n'avez pas envie de mettre tous les noyaux, d'installation ou non, dans une longue liste. Il est possible de créer un deuxième fichier, qu'on donne à manger à pxeboot en lieu et place de boot.cfg. On le paramètre au niveau du serveur DHCP, par exemple pour ISC DHCP j'ai mis en place la configuration suivante :

host marvin {
        hardware ethernet 01:23:45:67:89:ab;
        fixed-address 192.168.1.13;
        option host-name "marvin";
        option root-path "/chemin/vers/diskless/nbmarvin";
        if filename = "boot.cfg" {
                filename "tftp:nbmarvin.boot.cfg";
        }   
}

On remarque donc que si pxeboot veut récupérer boot.cfg depuis la machine marvin, alors on lui servira nbmarvin.boot.cfg.

J'ai aussi remarqué que le clavier est en qwerty par défaut. Comme je n'ai pas relié de clavier ou d'écran à cette machine, et que j'ai configuré un accès SSH dès que possible, je n'ai pas changé ce paramètre. Toutefois, pour les pressés, vous pouvez utiliser la documentation officielle pour changer l'agencement du clavier.

Et sinon, pas de bol, la carte Wi-Fi PCI n'est pas reconnue :

vendor 0x1814 product 0x3060 (miscellaneous network) at pci1 dev 7 function 0 not configured

Bref, quelques notes en vrac qui, je l'espère, pourront s'avérer utile à l'occasion. Maintenant, il me reste à utiliser cette puissance de calcul à ma disposition (quelqu'un a dit bulk build pkgsrc ?).

vimrc global à son système

Quand on utilise Vim, on a tendance à personnaliser sa configuration en ajoutant ses options préférées dans son fichier ~/.vimrc. Sur un système GNU/Linux (mon expérience porte principalement sur RHEL/CentOS/Fedora), il est possible d'étendre cette personnalisation à tous les utilisateurs d'un système en modifiant /etc/vimrc. En revanche, côté NetBSD, le chemin n'est pas le même. On pourrait naïvement penser qu'il suffit d'utiliser le préfixe /usr/pkg, hein ? Bein non, loupé : le fichier par défaut pour tous les utilisateurs est /usr/pkg/share/vim/vimrc. Heureusement, rien d'insurmontable, et quelques liens symboliques bien placés permettront d'harmoniser les configurations sur tous les systèmes.

je m'en frotte encore les yeux

J'ai encore du mal à y croire : sur la page de la liste des développeurs NetBSD, on y trouve un "Nils". Et c'est moi.

Je. Suis. Développeur. NetBSD.

Je m'en frotte encore les yeux. Je me pince de temps en temps. Et il m'arrive d'aller vérifier sur la page, des fois que quelqu'un soit revenu sur la décision.

Bon allez, c'est pas tout, j'ai des paquets à commiter.

On vit dans un monde formidable

J'ai déjà fait quelques billets sur OpenSSH, c'est toujours un plaisir d'apprendre de nouveaux trucs avec ce logiciel ! Parmi les trucs super chouette, il y a les possibilités d'utilisation transparente. Si vous avez la flemme de lire le lien, en gros quand je voulais passer au travers d'un serveur OpenSSH de manière transparente, j'utilisais ce genre de configuration :

Host serveurdmz1
        Hostname lenomouladresseipduserveurdepuislapasserelle
        Port 22
        Protocol 2
        User nils
        ProxyCommand ssh nils@passerelle "nc %h %p"

Depuis OpenSSH 5.4 (ouais, ça date, hein), il n'y a plus besoin de faire appel à Netcat ("nc" dans la directive "ProxyCommand"). Il suffit d'utiliser la commande "ssh -W". Cela donne donc :

Host serveurdmz1
        Hostname lenomouladresseipduserveurdepuislapasserelle
        Port 22
        Protocol 2
        User nils
        ProxyCommand ssh -W %h:%p passerelle

Y a pas à dire, on vit dans un monde formidable, où des développeurs prennent en compte les utilisations de leur logiciel.

CentOS Dojo Paris talk

EN

Following my previous post about the CentOS Dojo in Paris last August, the recording of my talk is now online : Discovering and using etckeeper. Many thanks to InfoQ for hosting the video !

FR

Suite à mon billet précédent sur le CentOS Dojo à Paris en Août dernier, l'enregistrement de ma présentation est maintenant disponible : Discovering and using etckeeper. Merci beaucoup à InfoQ pour l'hébergement de la vidéo !

Relai de spam, cela n'arrive qu'aux autres ?

Ça y est. Le jour que je redoutais est arrivé : après plus de 7 années sans problème majeur, Another Home Page a été victime de l'exploitation d'une faille de sécurité. Ou, en tous cas, c'est la première dont je me rend compte ce qui n'est guère rassurant. Est-ce parce que j'ai tardé à appliquer des mises à jour sur mon serveur ? Non, il s'agit en réalité d'une faille applicative présente sur l'un des sites que j'héberge. Pour être exact, il s'agit de l'exploitation d'une faille de Drupal. Le site n'a pas été mis à jour assez tôt, et mon infra s'est retrouvée relai de spam, bien malgré moi !

Comment m'en suis-je rendu compte ? Deux éléments m'y ont aidé : d'une part la réception d'un mail de la part d'une organisation anti-spam, Junk Email Filter. D'autre part, certaines adresses mail de destination étant invalides, j'ai reçu des réponses de type "mailer-daemon" incluant le contenu du mail en pièce jointe. D'autres éléments auraient mérité plus d'attention de ma part, comme par exemple le nombre de requêtes sur une page donnée, le nombre de mails envoyés par mon serveur de mail et surtout le nombre de mails bloqués pour cause de spam.

Par la suite, j'ai averti la personne responsable du site victime, qui s'est empressée de mettre à jour son site. Hélas, comme le mentionne Next INpact, cela ne suffit pas. Sans rentrer dans le détail, décision a été prise d'effacer tous les sites web tournant sous Drupal. Et maintenant, je n'ai plus qu'à me refaire une réputation auprès des services de filtrage anti-spam...

Je n'ai d'ailleurs pris conscience que tard de la quantité impressionnante de mails que le spammeur a envoyé via mon infrastructure. Au moment de l'écriture de ce billet, je termine tout juste de purger la file d'attente de mon serveur de mails...

Que retenir de cet évènement ?

- Plus que jamais, les mises à jour de sécurité au niveau OS ne sont pas suffisantes. Il est crucial de mettre aussi à jour les applications web ;

- il est important de surveiller correctement ses services, en effet, le volume de mails dans la file d'attente aurait dû me mettre la puce à l'oreille ;

- Enfin, ma gestion des sauvegardes mériterait quelques améliorations...

CentOS Dojo Paris

Version en français plus bas.

For once, this blog post is available both in french and in english. Today I attended the first CentOS Dojo in Paris. I also had the chance to be one of the speakers, wich was a very interesting experience : even if I am almost used to talk to a crowd, it was a long time since I used a microphone (more than 10 years if I remember correctly). Moreover, it was my first talk in english, and the demo I planned failed. Since all the talks of the day were recorded, I'm not going to tell you who talked about what. You can go to my Twitter account or search tweets with the hashtag #centosdojo. However I can't help thinking again about my talk and the problem in my demo. My frustration is compensated by the fact that everyone was really nice to me. Like I tweeted earlier, I learned the lesson and won't try another live demo soon. While waiting for the recordings to be online, you can download the slides, in french or in english. Many thanks to Zenika, Normation and InfoQ for sponsoring the event !

Pour une fois, ce billet est en français et en anglais. Aujourd'hui j'ai assisté au premier CentOS Dojo à Paris. J'ai aussi eu la chance d'être l'un des intervenants, ce qui fut une expérience très intéressante : même si j'ai à peu près l'habitude de parler en public, je n'ai pas utilisé de micro depuis très longtemps (plus de 10 ans si je me souviens bien). De plus, cela a été ma première présentation en anglais, et la démo que j'avais prévue n'a pas fonctionné. Puisque toutes les présentations du jour ont été enregistrées, je ne vais pas vous raconter qui a parlé de quoi. Vous pouvez simplement aller voir sur mon compte Twitter ou rechercher les tweets ayant pour hashtag #centosdojo. Cependant, je ne peux m'empêcher de penser à ma présentation et au problème lors de ma démo. Ma frustration est compensée par le fait que tout le monde a été sympa avec moi. Comme je l'ai tweeté plus tôt, j'ai compris la leçon et je ne vais pas tenter des démonstrations en direct. En attendant que les enregistrements soient en ligne, vous pouvez télécharger les slides, en français ou en anglais. Merci beaucoup à Zenika, Normation et InfoQ d'avoir sponsorisé l'évènement !

obtenir facilement les propriétés d'un fichier avec stat

Généralement, quand on cherche à obtenir les propriétés d'un fichier, on utilise la commande ls, avec l'argument -l, ce qui donne un résultat proche de ceci :

nils@orgrimmar:~$ ls -l /dev/null 
crw-rw-rw- 1 root root 1, 3 août  4 11:21 /dev/null

C'est bien gentil, mais si on ne souhaite avoir comme information que le propriétaire d'un fichier, ça fait beaucoup de choses à filtrer. Filtrer la sortie de ls avec awk n'est pas le truc le plus méchant, mais je trouve que c'est comme utiliser un fusil à pompe pour se débarrasser d'une mouche. On est dans le monde UNIX, là où il y a des programmes qui ne font qu'une seule tâche, mais qui la font bien.

Et l'outil qui fait cela se nomme tout simplement stat, et est disponible sur de nombreux systèmes. Sous RHEL/CentOS, il est inclus dans le paquet coreutils, et il est installé avec le système de base dans NetBSD. Là où c'est par contre un peu moins drôle, c'est que l'implémentation Linux diffère de l'implémentation BSD.

Exemple, sous Linux :

nils@orgrimmar:~$ stat -c %U /dev/null 
root

Et ensuite sous NetBSD :

nils@dev:~$ stat -c %U /dev/null 
stat: unknown option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]

Allez, on recommence avec les bonnes options :

nils@dev:~$ stat -f %Su /dev/null 
root

Ici, j'ai cherché à afficher le nom de l'utilisateur propriétaire du fichier, mais d'autres propriétés sont disponibles, comme le nom du groupe, les UID et GID propriétaires, les droits, la taille, les dates de création et de modification, le nom du fichier... D'ailleurs, lancé sans autre argument que le nom du fichier, stat propose bon nombre d'informations.

freeshell : votre accès terminal UNIX sur internet

Je me suis dit que ça serait sympa de vous faire découvrir l'association SDF (pour Super Dimension Fortress) et son projet freeshell : un accès en mode terminal sur une machine UNIX (NetBSD pour être exact). Cet accès, dans certaines conditions, est gratuit. C'est assez chouette, ça existe depuis très longtemps et permet d'apprendre les rudiments d'UNIX sans forcément installer en physique ou en virtuel ce type d'environnement. L'association fait cela à but éducatif et culturel, et est reconnue "non-profit" (oui, c'est une association américaine).

Pour accéder à freeshell, et créer un compte, il suffit de se munir d'un client SSH et de se connecter de la façon suivante :

ssh new@sdf.org

il existe d'autres moyens, qui reposent généralement sur SSH ou telnet, sur la page d'inscription au service.

J'ai indiqué plus haut que sous certaines conditions, ce service est gratuit : il y a en fait différent niveaux de services, selon ce que vous êtes prêts à payer. Une fois le compte et l'accès créé, vous disposez de certains outils, comme :

  • mutt, pop3, imap, icq, twitter, bsflite (aim), irc (sur le réseau SDF) ;
  • games, mud, lynx, gopher, TOPS-20 ;
  • hébergement HTTP statique de type http://yourlogin.sdf.org (d'autres domaines sont possibles) ;
  • traceroute, ping, whois, dig et d'autres.

mais tout ça est dans un shell limité. Si vous consentez à payer une petite somme (historiquement 1 Dollar US), un accès shell "classique" (comprendre : bash, ksh, tcsh, rc ou zsh) vous est alors ouvert, avec bien plus de possibilités, comme le webmail, FTP, SFTP (en entrée, pas en sortie), ou un accès à plus d'outils. Pourquoi le shell limité et pourquoi la somme ? Pour éviter le spam d'une part, et d'autre part car le traitement peut se faire par courrier papier, il suffit d'envoyer un billet de 1 Dollar (ou de 5 Euros) à l'adresse indiquée dans la page d'explication.

Encore plus d'outils et de possibilités sont offertes à qui est prêt à mettre un peu plus la main au portefeuille, et certains services sont facturés au mois, comme par exemple un accès VPN. Le tout est hébergé aux USA, et il existe aussi une version européenne, hébergée en Allemagne : SDFEU. Rien que pour l'accès shell, traceroute, dig, whois et autres lynx, c'est assez pratique je trouve, d'avoir un point "de sortie" ailleurs que dans son pays d'origine. Cela permet par exemple de tester des filtrages (géolocalisation ?). C'est aussi, à mon sens, un moyen de disposer d'un hébergement web (statique) peu coûteux et à taille plus humaine, et à finalité moins commerciale.

dépôt de paquets pkgsrc en mode rapide

Avec pkgsrc, on peut facilement créer des paquets binaires avant de les installer. Généralement, un simple :

nils@machine:/usr/pkgsrc/category/software$ make package

suffit pour créer un paquet. On peut l'installer avec la cible "install" en plus, mais on peut aussi faire ceci :

rm -f /usr/pkgsrc/packages/All/pkg_summary*
for i in $(ls /usr/pkgsrc/packages/All/*.tgz | sort); do pkg_info -X $i >> /usr/pkgsrc/packages/All/pkg_summary; done
bzip2 /usr/pkgsrc/packages/All/pkg_summary

Ensuite, ajouter dans sa configuration pkgin le dépôt suivant : file:///usr/pkgsrc/packages/All. Un pkgin in nomdupackage plus tard, et tout est installé. C'est d'autant plus sympathique pour les mises à jour. Ainsi, j'ai ajouté les commandes précédentes dans un script shell que j'appelle après compilation du paquet. Je peux aussi copier les paquets avec le fichier pkg_summary.bz2 à un autre endroit pour que d'autres machines en profitent. Mais tout ceci est manuel et ne saurait remplacer une infrastructure de bulk build.

10 ans de dotclear

Je me prend au jeu de fêter les 10 ans du moteur de blog Dotclear, comme annoncé sur Twitter, dont je reprend le texte ici, pour archive :

Pour les 10 ans de #Dotclear le 13/08/13, publiez sur votre blog le 13 août votre texte : "Dotclear et moi, tout une histoire" #dotclear10

Alors voilà, Dotclear ça fait presque 8 ans que je m'en sers (voir mon premier billet, rien d'original, j'ai même changé le nom du blog depuis). Et franchement, même si j'y ai pensé, je n'ai pas prévu de changer de crèmerie. Pourquoi ? Parce que :

  • ça fonctionne ;
  • ça fournit tout ce dont j'ai besoin, ou presque ;
  • c'est du logiciel libre ;
  • c'est français (j'avoue, je suis assez chauvin sur ce coup) ;
  • ça n'a pas l'air d'une usine à gaz ;
  • et c'est encore développé.

J'ai réussi à transvaser ce blog d'un hébergement Free à 1and1, puis à mon serveur dédié, sous différents OS, différentes versions d'Apache, de PHP, de MySQL, au gré de l'évolution de mes compétences techniques. Dotclear a été le premier témoin de ces évolutions, quelque part le premier outil aussi.

Alors, joyeux anniversaire, Dotclear ! Puisse-tu te développer encore plus et encore mieux pour les 10 prochaines années !

sudoers.d

J'ai mis du temps à m'en rendre compte : la plupart des OS récents disposant de sudo ont en plus de leur fichier sudoers un répertoire nommé sudoers.d. A quoi sert ce répertoire ? Tout simplement à inclure des fichiers de configuration sudo, en utilisant la même syntaxe que le fichier sudoers. Comment cela est-il possible ? Grâce à la capacité de sudo à inclure des fichiers de configuration, comme en témoigne cet extrait (pris sous NetBSD), généralement à la fin du fichier sudoers :

## Read drop-in files from /usr/pkg/etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /usr/pkg/etc/sudoers.d

Maintenant, au lieu d'ajouter de la configuration dans sudoers, il suffit de créer un fichier, par exemple sudoers.d/toto contenant notre configuration personnelle.

Et pour la compatibilité ? La plus vieille version de sudo que j'ai testée avec succès est la 1.7.2p1, sur une CentOS 5. J'ai aussi fait un test sur une RHEL 4.5 (disposant de sudo 1.6.7p5), mais celui-ci n'était pas concluant.

en cours dans pkgsrc-wip et pkgsrc

C'est un peu bizarre, en commençant ce billet, je m'aperçois que la catégorie se nomme "Linux et Logiciels libres". Il m'apparaît que pour un billet traitant surtout de NetBSD et de pkgsrc, ce n'est pas très malin. Abracadabra ! La catégorie se nomme dorénavant "Logiciels libres". Bref, passons.

Je maintiens quelques paquets pour NetBSD, grâce à pkgsrc. Cela pourrait peut-être en intéresser certains, et leur donner un peu de visibilité. Commençons par celui qui a fait son entrée il y a un moment dans pkgsrc de manière stable, à savoir sysutils/logrotate : j'en suis assez content, c'est mon premier paquet, et j'arrive à peu près à le maintenir : à l'heure où j'écris ces lignes, la dernière version est la 3.8.6 (sortie dimanche 4 août !!!), la dernière disponible dans pkgsrc-current est la 3.8.5, et pkgsrc-2013Q2 dispose de la 3.8.4.

Je m'étais aussi pas mal investi sur Cacti, mais quelqu'un m'a doublé et l'a importé dans net/cacti avant que je puisse proposer quoi que ce soit. Pas grave, j'ai concentré mes efforts sur wip/cacti-spine, qui je l'espère, sera bientôt importé. J'ai pris la peine d'ajouter quelques plugins à Cacti dans pkgsrc-wip : cacti-plugin-aggregate, cacti-plugin-realtime, et cacti-plugin-rrdclean. J'ai aussi mis à jour quelques autres plugins qui étaient déjà présent, comme cacti-plugin-weathermap ou cacti-plugin-thold. C'est en fait assez facile : une fois qu'un plugin est correctement empaqueté, il suffit de le copier et de remplacer son nom, la version, et les descriptions (éventuellement la licence) pour en faire un autre.

Dans le registre "travail en cours", j'ai pu empaqueter wip/pelican et quelques dépendances (les autres étaient déjà présentes dans pkgsrc). Je n'ai pas encore pris le temps de jouer avec, mais le concept m'intéresse assez pour que j'en fasse un paquet.

Bref, cher lecteur, si tu as du temps à perdre, n'hésite pas à compiler, tester ces paquets et me faire un petit retour, ça me ferait très plaisir !

nihilo

Bon, mon billet précédent date de la fin de l'année dernière. Autant dire une éternité. Pendant ce temps, je n'ai rien blogué. Le néant. Et ça commence à me démanger sévère. Pourtant j'en ai fait des trucs. J'ai des projets en cours. Je vais donc tenter d'en parler. L'avantage, c'est que ce blog continuera à vivre un peu. L'inconvénient, c'est que les billets seront plus court. Enfin, est-ce bien un inconvénient ?

Antisèches Cisco, réseau et autres

Session de surf en mode "veille technologique" (sauf que je suis en congés), en passant par l'excellent Planet CentOS, je suis tombé sur un post de blog menant à des posters antisèches pour différents domaines ! C'est super intéressant, on y trouve plein de configurations Cisco pour les protocoles de routage connus, les VPN IPsec, voire même des configurations Wi-Fi ! D'autres posters permettent de vite retrouver les bases, comme la notation CIDR IPv4, les filtres pour Wireshark ou quelques syntaxes wiki bien utilisées.

Pour couronner le tour, le site propose non seulement le téléchargement de ces antisèches au format PDF, mais aussi l'impression et l'envoi d'une de ces antisèches, au format poster bien entendu !

Si vous êtes intéressés, le site en question est Packet Life, et l'antisèche disponible en poster imprimé est celle-ci.

Nombre d'occurrences dans un fichier - remix

Je détaillais dans un billet écrit il y a déjà un sacré bout de temps comment obtenir une sorte de top 10 des adresses IP effectuant le plus de requêtes dans un fichier de log Apache. J'ai décidé de revenir dessus, et de faire quelques déclinaisons de ce one-liner selon les recherches. Attention si vous voulez copier-coller ces exemples, ils ont été réalisés sous NetBSD, et la commande sort n'a pas les mêmes options. Grosso modo pour le moment, j'ai vu que là où on écrit sort -g sous GNU/Linux, il faut écrire sort -n sous NetBSD. J'ai aussi décidé de me limiter à un top 5 dans l'affichage, afin d'éviter un billet trop long.

Revenons donc d'abord sur le one-liner de base, les IP qui font le plus de requêtes, avec à gauche, l'adresse IP, et à droite le nombre de hits :

root@dev:/var/log/httpd# awk '{frequencies[$1]++;} END {for (field in frequencies) printf "%s\t%d\n" , field , frequencies[field];}' < ./access.log | sort -nr -k 2,2 | head -5
81.X.Y.Z    6414
208.F.B.I 1578
178.K.G.B  1301
67.D.S.T  1179
77.C.I.A     1157

Ensuite, effectuons pareil mais sur les URLs visitées, toujours avec le nombre de hits à droite :

root@dev:/var/log/httpd# awk '{frequencies[$7]++;} END {for (field in frequencies) printf "%s\t%d\n" , field , frequencies[field];}' < ./access.log | sort -nr -k 2,2 | head -5
/post/2008/05/17/installation-de-phpmyadmin-sur-CentOS-5        7787
/post/2008/05/24/Installation-de-mod_gnutls-sur-CentOS-5        4010
/post/2008/06/20/Utilisateurs-virtuels-sous-CentOS-5-avec-base-de-donnees-MySQL 1910
/post/2007/11/28/Installation-et-configuration-dun-serveur-dedie-OpenArena-071  1284
/post/2009/11/09/Utilisation-transparente-d-une-passerelle-SSH  1266

Comme il ne s'agit que de modifier le numéro du champ, on peut aussi voir les codes de retour HTTP les plus obtenus :

root@dev:/var/log/httpd# awk '{frequencies[$9]++;} END {for (field in frequencies) printf "%s\t%d\n" , field , frequencies[field];}' < ./access.log | sort -nr -k 2,2 | head -5
200     57019
304     6156
404     1797
500     114
403     20

On peut ensuite aller chercher avec grep les pages causant des erreurs 500 ou 404.

Toujours avec la même facilité (un simple numéro de champ à modifier), on peut afficher les referers qui amènent le plus de hits :

root@dev:/var/log/httpd# awk '{frequencies[$11]++;} END {for (field in frequencies) printf "%s\t%d\n" , field , frequencies[field];}' < ./access.log | sort -nr -k 2,2 | head -5
"-"     44306
"http://blog.anotherhomepage.org/post/2008/05/17/installation-de-phpmyadmin-sur-CentOS-5"       3443
"http://blog.anotherhomepage.org/post/2008/06/20/Utilisateurs-virtuels-sous-CentOS-5-avec-base-de-donnees-MySQL"        686
"http://blog.anotherhomepage.org/post/2009/11/09/Utilisation-transparente-d-une-passerelle-SSH" 552
"http://www.google.fr/search?q=phpmyadmin+centos&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fr:official&client=firefox-a"   401

On remarque que beaucoup n'ont pas de referer, mais il est probable que ce soient des hits sur le flux RSS. On remarque aussi que j'ai beaucoup de referers de mon propre site, il me suffit de les filtrer si je ne veux pas les afficher. Afin de rendre le traitement plus rapide, je décide de mettre la commande grep en premier dans mon traitement :

root@dev:/var/log/httpd# grep -v "blog.anotherhomepage.org" access.log | awk '{frequencies[$11]++;} END {for (field in frequencies) printf "%s\t%d\n" , field , frequencies[field];}' | sort -nr -k 2,2 | head -5
"-"     44306
"http://www.google.fr/search?q=phpmyadmin+centos&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fr:official&client=firefox-a"   401
"http://www.google.fr/search?q=centos+phpmyadmin&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fr:official&client=firefox-a"   166
"http://forum.hardware.fr/hfr/OSAlternatifs/Installation/resolu-centos-phpmyadmin-sujet_70143_1.htm"    121
"http://www.google.fr/" 77

Reprenons notre affichage des URLs les plus visitées, mais cette fois prenons en compte les méthodes (GET, HEAD, POST) et la version du protocole HTTP :

root@dev:/var/log/httpd# awk -F "\"" '{frequencies[$2]++;} END {for (field in frequencies) printf "%s\t%d\n" , field , frequencies[field];}' < ./access.log | sort -nr -k 4| head -5
GET /post/2008/05/17/installation-de-phpmyadmin-sur-CentOS-5 HTTP/1.1   4266
GET /post/2008/05/17/installation-de-phpmyadmin-sur-CentOS-5 HTTP/1.0   3521
GET /post/2008/05/24/Installation-de-mod_gnutls-sur-CentOS-5 HTTP/1.1   2181
GET /post/2008/05/24/Installation-de-mod_gnutls-sur-CentOS-5 HTTP/1.0   1829
GET /post/2008/06/20/Utilisateurs-virtuels-sous-CentOS-5-avec-base-de-donnees-MySQL HTTP/1.0    1193

On note ici l'utilisation de l'option "-F" de awk pour changer le motif du séparateur de champ, ce qui me permet d'avoir des champs avec espace.

Enfin, dernier exemple, trions maintenant les User-Agents :

root@dev:/var/log/httpd# awk -F "\"" '{frequencies[$6]++;} END {for (field in frequencies) printf "%d\t%s\n" , frequencies[field], field;}' < ./access.log | sort -nr | head -5
10539   Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)
6493    Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; SPV M700; OpVer 19.123.2.733) OrangeBot-Mobile 2008.0 (mobilesearch.support@orange-ftgroup.com)
4188    Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)
3269    msnbot/2.0b (+http://search.msn.com/msnbot.htm)
3017    Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

J'ai décidé cette fois-ci d'afficher le nombre d'occurrences à gauche, car le nombre de champs (séparés par un espace) n'est plus fixe dans le cas des User-Agents. Mais au moment d'écrire cette phrase, j'ai de nouveau parcouru la page de manuel de sort et j'ai pu voir qu'il est possible de spécifier le séparateur de champ (option -t). J'ai utilisé le caractère $ pour séparer le nombre d'occurrences du libellé du User-Agent, suivi de 'tr' pour le remplacer par une tabulation :

awk -F "\"" '{frequencies[$6]++;} END {for (field in frequencies) printf "%s$%d\n" , field , frequencies[field];}' < ./access.log | sort -nr -t$ -k 2,2| tr $ "\t" | head -5
Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)  10539
Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; SPV M700; OpVer 19.123.2.733) OrangeBot-Mobile 2008.0 (mobilesearch.support@orange-ftgroup.com)        6493
Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp) 4188
msnbot/2.0b (+http://search.msn.com/msnbot.htm) 3269
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)        3017

Le choix du caractère de séparateur de champ est discutable, mais il ne change pas qu'après réflexion, l'affichage de la commande précédente me semble plus lisible. Et je pense qu'afficher le nombre d'occurences en permier sera plus lisible dans d'autres cas, comme le referer ou l'URL.

Propulsé par Dotclear