1. Berkeley style
NetBSD sixième du nom a été rendu officiellement public au mois d'octobre 2012, et cette mouture propose à l'utilisateur de systèmes UNIX de nombreux nouveaux outils dont une bonne partie sont inclus dans ce qu'il est convenu d'appeler l'arbre des sources, dont la chaîne de compilation aboutira à un « système de base » comprenant non seulement un noyau, mais également tout le nécessaire à l'exploitation d'un système d'exploitation. Ces outils font désormais partie intégrante de l'arbre des sources, et seront donc maintenus par les développeurs du projet comme n'importe quel autre composant.
Nous allons lister, dans le reste de cet article, ces nouveaux venus avec lesquels il sera bon de faire connaissance, certains d'entre eux ayant la faculté de grandement faciliter votre vie d'administrateur système UNIX.
Cet article est (un peu plus qu') une traduction autorisée du billet de Jeremy Reed[0], développeur NetBSD et éminent membre du board au sein du Projet.
1.1 /sbin/devpubd
Ce démon, à la façon de l'udev de GNU/Linux (maintenant embarqué dans l'usine à g^W^W^Wsystemd, rappelons-le), a la charge de créer des fichiers de périphériques. Il peut être personnalisé à l'aide de scripts situés dans le répertoire /libexec/devpubd-hooks, par exemple :
$ cat /libexec/devpubd-hooks/01-makedev
#!/bin/sh
#
# $NetBSD: 01-makedev,v 1.1 2011/08/29 11:38:48 mrg Exp $
#
# Try to create a device node if it doesn't exist
#
event="$1"
device="$2"
case $event in
device-attach)
cd /dev && sh MAKEDEV -u "$device" 2>/dev/null
;;
esac
1.2 /sbin/resolvconf
Utilisé pour paramétrer le fichier /etc/resolv.conf, fichier dans lequel on spécifie les informations de résolution de noms, cet outil écrit par Roy Maples dans le cadre du projet openresolv[1] s'avère très pratique lorsqu'il est couplé à des clients VPN ou DHCP.
1.3 /sbin/dmctl et /sbin/lvm
Tous deux issus du travail de portage de LVM pour NetBSD par Adam Hamsik, ces outils, comme sous GNU/Linux, permettent de manipuler respectivement le device-mapper et les volumes LVM.
1.4 /sbin/newfs_v7fs, /sbin/fsck_v7fs, et /sbin/mount_v7fs
Pour se replonger dans le passé, ces trois commandes ouvrent la voie aux plus téméraires et autres nostalgiques pour utiliser le système de fichiers d'UNIX V7, datant de 1979 !
1.5 in-kernel iSCSI client
NetBSD 6.0 introduit un client iSCSI au sein même du noyau, permettant au driver sd(4) de communiquer avec un périphérique de stockage distant. Le démon /sbin/iscsid est l'interface userland du pilote iSCSI au niveau noyau. /sbin/iscsictl quant à lui, est le programme utilisé pour effectivement manipuler le duo au niveau utilisateur, et accéder à la cible sous forme de périphérique afin, entre autres, d'y appliquer un système de fichiers et mounter la cible :
client# iscsictl login -P 2
Created Session 2, Connection 1
client# iscsictl list_sessions
Session 2: Target iqn.1994-04.org.netbsd.iscsi-target:target0
client# newfs /dev/rsd0a
/dev/rsd0a: 100.0MB (204800 sectors) block size 8192, fragment size 1024
using 4 cylinder groups of 25.00MB, 3200 blks, 6144 inodes.
super-block backups (for fsck -b #) at:
32, 51232, 102432, 153632,
client# mount /dev/sd0a /mnt
client# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/wd0a 4066094 186994 3675795 4% /
kernfs 1 1 0 100% /kern
/dev/sd0a 99247 1 94283 0% /mnt
Finalement, /usr/sbin/iscsi-initiator montrera, à l'intérieur du point de montage, des informations relatives à la cible :
# iscsi-initiator -u foo -h iscsi-target0.lan /mnt
# ls -al /mnt/target0
total 576
drwxr-xr-x 2 foo bar 512 May 11 22:24 .
drwxr-xr-x 2 foo bar 512 May 11 22:24 ..
lrw-r--r-- 1 foo bar 39 May 11 22:24 hostname -> iscsi-target0.lan
lrw-r--r-- 1 foo bar 14 May 11 22:24 ip -> 172.16.135.130
lrw-r--r-- 1 foo bar 16 May 11 22:24 product -> NetBSD iSCSI
-rw-r--r-- 1 foo bar 104857600 May 11 22:24 storage
lrw-r--r-- 1 foo bar 43 May 11 22:24 targetname -> iqn.1994-04.org.netbsd.iscsi-target:target0
lrw-r--r-- 1 foo bar 8 May 11 22:24 vendor -> NetBSD
lrw-r--r-- 1 foo bar 4 May 11 22:24 version -> 0
1.6 /sbin/mount_puffs et /usr/sbin/perfused
puffs, Pass-to-Userspace Framework File System, est le pendant NetBSD du système de montage en espace utilisateur FUSE du monde GNU/Linux. Ce dernier existe sous NetBSD depuis sa version 4.0 en version expérimentale, et 5.0 pour sa version stable. /sbin/mount_puffs est typiquement la commande qui sera exécutée à l'issue de l'appel à mount -vv, elle affichera donc les informations relatives au montage PUFFS.
/usr/sbin/perfused est un démon qui implémente l'API kernel FUSE et qui effectue un relais des appels FUSE vers des appels à PUFFS, ce qui permet à NetBSD de devenir compatible avec l'ensemble des outils GNU/Linux utilisant ce mécanisme, tels que par exemple GlusterFS.
1.7 /sbin/mount_chfs et /usr/sbin/flashctl
CHFS, ou Chip File System, est un système de fichiers destiné aux périphériques de type flash(4) tels que les disques SSD ou encore les clés USB. /sbin/mount_chfs permet de monter un tel filesystem, et /usr/sbin/flashctl donne un accès bas niveau pour manipuler de tels périphériques, pour effacer par exemple tout ou partie du stockage ou encore marquer des secteurs défectueux.
1.8 /sbin/mount_nilfs
Le support de NILFS[3] fait son apparition à travers la commande /sbin/mount_nilfs. NILFS, pour « New implementation of Logging File System », est un système de fichiers créé par la société NTT permettant le snapshotting permanent, une grande consistance des données et la restauration de données qui auraient été effacées par erreur dans l'intervalle de quelques secondes.
1.9 /sbin/pfs
/sbin/pfs est un outil destiné à sauvegarder ou restaurer une table d'états pf (packet filter, l'un des filtres IP disponibles dans NetBSD). Cela pourra servir à l'administrateur pour sauvegarder l'état interne d'une passerelle, redémarrer cette dernière, et restaurer son état avant reboot.
1.10 /sbin/resize_ffs
Cette commande est désormais installée par défaut, en effet, si cette dernière était effectivement présente dans l'arbre des sources depuis plusieurs années, elle n'avait cependant pas trouvé sa voie jusqu'aux binaires publics. Comme son nom l'indique, /sbin/resize_ffs sert à étendre où réduire la taille d'un système de fichiers de type FFS.
1.11 /sbin/zfs, /sbin/zpool, /usr/sbin/zdb et /usr/bin/ztest
Bien que le support de ZFS dans NetBSD soit toujours expérimental, l'OS embarque désormais tous les outils nécessaires à la gestion de cet incroyable système de fichiers : /sbin/zfs pour gérer les datasets, créer des snapshots et monter le système de fichiers, /sbin/zpool pour manipuler les pools de stockage, interfaces d'abstraction des périphériques physiques, /usr/sbin/zdb, afin de déboguer d'éventuels dysfonctionnements et /usr/bin/ztest, un outil de stress test pour ZFS au niveau utilisateur.
1.12 /usr/bin/agrep
C'est n'est pas une blague, agrep signifie approximate grep. Cet utilitaire est similaire à son pendant grep, à l'exception près qu'il montrera les résultats qui s'approchent de la chaîne recherchée. Exemple :
$ agrep -1 EDITOR=vin .profile
EDITOR=vim
Cette implémentation a été réalisée grâce au moteur libre et portable de regex approximatives TRE[4].
1.13 /usr/bin/atf-sh
ATF, grand œuvre de Julio Merino Vidal, est un système de tests automatisés, /usr/bin/atf-sh est un wrapper shell utilisé pour interpréter les tests ATF sous forme de script.
1.14 /usr/bin/arpaname
Voici un binaire qui va grandement simplifier la vie des administrateurs, en particulier ceux qui manipulent fréquemment des réseaux IPv6. /usr/bin/arpaname revoie la forme « légale » du reverse d'une adresse IPv4 ou v6. Exemple :
$ arpaname 192.168.1.1
1.1.168.192.IN-ADDR.ARPA
$ arpaname 2001:4f8:3:d::40
0.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.D.0.0.0.3.0.0.0.8.F.4.0.1.0.0.2.IP6.ARPA
Cet outil est importé de BIND, le serveur DNS issu de l'ISC.
1.15 /usr/sbin/named-journalprint et /usr/sbin/nsec3hash
Également issu de l'ISC, /usr/sbin/named-journalprint permet de lire le contenu des fameux fichiers de type « journal », propres aux zones DNS dynamiques. /usr/sbin/nsec3hash est utilisé pour générer des empreintes NSEC3 afin de valider des entrées NSEC3 utilisées dans DNSSEC.
1.16 /usr/bin/audiocfg
Utilitaire très basique qui, en précisant le périphérique audio par défaut, se chargera de créer les liens logiques /dev/audio, /dev/sound, /dev/audioctl et /dev/mixer. Par exemple :
$ audiocfg list
0: [*] audio0 @ hdafg0: Realtek ALC268, 2 playback channels
1: [ ] audio1 @ pad0: Virtual Audio 6.0, 2 playback channels
1.17 /usr/sbin/mdnsd et /usr/bin/dns-sd
mDNSResponder[5], mdnsd, est un protocole issu de la firme Apple™, il s'agit d'un DNS Multicast (mDNS), d'un démon de découverte de services (DNS-SD) ainsi que d'un résolveur DNS Unicast. Il est utilisé pour la découverte automatique de services et périphériques sur un réseau. /usr/bin/dns-sd est un client de test mDNS et DNS-SD, il peut être exécuté pour détecter et parcourir les services, par exemple des imprimantes en réseau.
1.18 /usr/bin/elfedit
Issu des GNU binutils, elfedit permettra de modifier l'en-tête ELF[6] d'un objet, par exemple pour changer le type d'architecture.
1.19 /usr/bin/fincore
Très instructif, fincore affichera la quantité de pages du fichier qui sont contenues en mémoire résidente. Exemple :
$ fincore -s /usr/pkg/bin/bash
/usr/pkg/bin/bash: 219 / 219 in-core pages (100.00%)
$ fincore -s /usr/pkg/sbin/nginx
/usr/pkg/sbin/nginx: 181 / 181 in-core pages (100.00%)
$ fincore -s /usr/bin/tmux
/usr/bin/tmux: 70 / 95 in-core pages (73.68%)
1.20 /usr/bin/tic et /usr/bin/infocmp
L'historique termcap a été remplacé par terminfo. tic génère une base de données terminfo, donnant ainsi les capacités d'un terminal. infocmp quant à lui affiche les définitions terminfo qu'il extrait de sa base de données, et permet également de comparer plusieurs capacités de terminaux.
1.21 /usr/bin/cleantags
Il s'agit d'un script shell qui enlève les en-têtes RCS (comme $Id ou $Author). Très pratique lorsqu'on importe du code CVS d'un dépôt à l'autre.
1.22 /usr/bin/iasl
Cet outil est un traducteur d'ASL (ACPI Source Language) et de tables de données binaires ACPI[7]. Il compile ces dernières en AML (ACPI Machine Language) et désassemble également un AML en code source ASL. Ce nouveau composant est issu du projet ACPI Component Architecture (ACPICA).
1.23 /usr/bin/ldapurl
ldapurl est utilisé pour parcourir et générer des URIs LDAP, comme ldap://ldap.example.com:389/dc=example,dc=com??sub?(cn=Some%20one). Cet utilitaire est issu du projet OpenLDAP.
$ ldapuri -h ldap.example.com -b dc=example,dc=com -s sub -f "(cn=Some One)"
ldap://ldap.example.com:389/dc=example,dc=com??sub?(cn=Some%20One)
Et inversement :
$ ldapuri -H ldap://ldap.example.com:389/dc=example,dc=com??sub?(cn=Some%20One)
scheme: ldap
host: ldap.example.com
port: 389
dn: dc=example,dc=com
scope: sub
filter: (cn=Some One)
1.24 Lua
Le langage Lua[8] a été introduit dans le système de base de NetBSD 6.0. Ce langage, entièrement fonctionnel, a une empreinte mémoire très faible, est rapide à l’exécution et très intuitif à intégrer dans du code C. Lua est considéré comme un langage minimal de par sa taille, mais il est également très versatile. La commande /usr/bin/luac est l'interpréteur, il compile un script en bytecode portable qui pourra être exécuté ultérieurement.
1.25 /usr/bin/mkubootimage
Un utilitaire destiné à créer des images pour Das U-Boot, le Bootloader universel, très utilisé dans l'embarqué.
1.26 /usr/bin/netpgp, /usr/bin/netpgpkeys et /usr/bin/netpgpverify
Une implémentation alternative à GPG sous licence BSD pour signer, vérifier, chiffrer et déchiffrer des fichiers. Cette implémentation est articulée autour du SDK OpenPGP. netpgpkeys est utilisé pour gérer ces clés PGP et netpgpverify réalise de la vérification de signatures digitales.
1.27 /usr/bin/prenice
À la façon de pkill et pgrep, prenice permet de changer la priorité d'ordonnancement d'un processus qui correspond à une chaîne.
1.28 SQLite3
Le système de base de données légères dont j'appelais l'inclusion de tous mes vœux fait également partie du wagon, permettant entre autres à pkgin de ne pas dépendre d'autres paquets tiers que pkg_install. /usr/bin/sqlite3 est l'exécutable qui vous donnera accès à l'évaluation de commandes SQL de façon interactive, ou encore via l'entrée/sortie standard.
1.29 /usr/bin/mandoc
Unformateur de pages man alternatif, plus léger que groff et affublé d'une licence plus amicale.
1.30 /usr/sbin/makemandb
Puisque nous parlions de SQLite, makemandb va parcourir l'ensemble des pages man du système en utilisant libmandoc afin de créer une base de données SQLite et accélérer ainsi whatis et apropos. Il s'agit ici d'une recherche de pertinence en rapport à l'ensemble du texte des manpages et non plus une simple recherche de mots clés dans les descriptions d'une ligne.
1.31 /usr/bin/tabs
L'utilitaire tabs réinitialise le comportement des tabs dans le terminal courant.
1.32 /usr/bin/tmux
tmux, le concurrent à GNU/screen fait son entrée dans le système de base de NetBSD, comme c'est également le cas dans OpenBSD. Sous licence BSD, tmux est ce qu'on pourrait appeler un gestionnaire de fenêtres pour console, il permet, entre autres fonctionnalités, d'empiler plusieurs terminaux dans une seule fenêtre ainsi que de détacher une session pour la rattacher depuis un autre poste. Notez que tmux remplace la commande window, qui disparaîtra dans NetBSD 7.0.
1.33 /usr/sbin/tprof et /usr/bin/tpfmt
Le pilote tprof est un moniteur de performance inspiré de oprofile dans le monde GNU/Linux. /usr/sbin/tprof communique avec le pilote tprof et enregistre des échantillons pour effectuer le profiling. tpfmt est utilisé pour exporter les données issues de tprof, il montrera par exemple le nombre d'échantillons pour chaque fonction noyau.
1.34 XZ
Les utilitaires du domaine public XZ sont également inclus dans NetBSD 6.0. /usr/bin/xz permet de compresser et décompresser les archives au format XZ qui tendent à se populariser, mais également les historiques fichiers LZMA. En utilisant les options par défaut, on constate un gain de 20 % dans la taille des fichiers compressés, le tout dans un temps 40 % moindre qu'avec bzip2. L'outil est lié avec des noms alternatifs qui pointent tous sur lui : /usr/bin/lzcat, /usr/bin/lzma, /usr/bin/unlzma, /usr/bin/unxz, et /usr/bin/xzcat. L'utilitaire /usr/bin/lzmainfo est également inclus pour analyser les en-têtes de type LZMA.
1.35 /usr/bin/unzip
unzip, ancestral utilitaire de décompression des fichiers au format ZIP et présent depuis la nuit des temps dans pkgsrc, fais désormais partie du système de base.
1.36 /usr/bin/pigz
Toujours dans le domaine de la compression, pigz[9] est un gzip alternatif qui permet la parallélisation de la compression pour les machines multi-processeurs et/ou multi-coeurs.
1.37 /usr/bin/videoctl
Cet outil affiche les paramètres utilisés par le pilote du système de capture vidéo, par exemple :
$ videoctl -a
info.cap.card=Chicony Electronics Co., Ltd. C
info.cap.driver=uvideo
info.cap.bus_info=usb:0000000a
info.cap.version=6.0.0
info.cap.capabilities=0x5000001
info.format.0=YUYV
info.input.0=Camera
info.input.0.type=baseband
info.standard.0=webcam
1.38 /usr/bin/xmlwf
xmlwf utilise la libexpat présente dans le système de base pour valider le bon formatage d'un document XML :
$ xmlwf /usr/src/dist/bzip2/manual.xml
/usr/src/dist/bzip2/manual.xml:1165:16: not well-formed (invalid token)
1.39 /usr/sbin/crash
Cet outil sert à diagnostiquer un crash dump du noyau, selon la même syntaxe que le débogueur intégré au noyau, ddb.
1.40 /usr/sbin/i2cscan
i2cscan est utilisé pour réaliser un scan brut du bus Inter IC (i2c)[10] et liste, sans montrer le type de périphérique, les adresses fonctionnelles.
1.41 /usr/sbin/isibootd
Un serveur d'amorce réseau très simple pour les clients OMRON LUNA utilisant le protocole Transparent Remote File System (TRFS). Uniquement utile pour faire démarrer des systèmes de type NetBSD/luna68k.
1.42 /usr/sbin/ldpd
Implémentation compatible de la RFC 3036, ce démon de Label Distribution Protocol distribue des labels entre des routeurs d'un réseau MPLS.
1.43 NPF
Nous avons déjà parlé dans ces colonnes de NPF, le nouveau filtre de paquets de NetBSD, dont l'une des forces est de pouvoir monter à l'échelle sur des architectures multi-coeurs/multi-processeurs. L'outil pour manipuler NPF est /usr/sbin/npfctl et il est invoqué pour démarrer ou arrêter l'inspection de paquets, charger ou décharger la configuration, ou encore manipuler les tables d'adresses IP.
1.44 Quotas
La gestion des quotas du système de fichiers a été améliorée dans NetBSD 6.0, les utilitaires /usr/sbin/quotadump (qui est en réalité repquota -x) et /usr/sbin/quotarestore sont utilisés pour créer et réutiliser les sauvegardes des informations de quota.
1.45 /usr/sbin/wakeonlan
L'utilitaire waleonlan amène dans le système de base la possibilité de « réveiller » un équipement de votre réseau qui supporte les signaux Wake On LAN (Wol), et ainsi de l'allumer à distance.
1.46 Rump
En plus de toutes ces nouveautés, on notera l'apparition des outils articulés autour de Rump, également appelé l'Anykernel, le projet fou de Antti Kantee dont l'objectif, si l'on peut réellement le résumer, consiste à créer une interface noyau universelle, une sorte d'hyperviseur, grâce à laquelle on peut par exemple charger des pilotes NetBSD sur une machine FreeBSD ou GNU/Linux[12]. Rump vise bien évidemment en premier lieu NetBSD, et divers utilitaires sont d'ores et déjà disponibles et fonctionnels dans le basesystem, parmi eux: /bin/rump.dd, /sbin/rump.cgdconfig, /sbin/rump.ifconfig, /sbin/rump.modload, /sbin/rump.modstat, /sbin/rump.modunload, /sbin/rump.ping, /sbin/rump.raidctl, /sbin/rump.route, /sbin/rump.sysctl, /usr/bin/rump.dhcpclient, /usr/bin/rump.halt, /usr/bin/rump.netstat, /usr/bin/rump.sockstat, /usr/bin/rump_allserver, /usr/bin/rump_server, /usr/sbin/rump.envstat, /usr/sbin/rump.powerd, /usr/sbin/rump.traceroute, /usr/sbin/rump_smbfs, /usr/sbin/rump_v7fs, et /usr/bin/shmif_dumpbus, ce dernier permettant d'analyser le bus réseau de mémoire partagée de Rump.
2. J'vais me poser là.
UNIX est un assemblage, des milliers d'outils simples (mais aux arcanes parfois à la limite de la compréhension humaine) unis autour d'un noyau-chef-d'orchestre qui donnent à son utilisateur avancé, à travers des opérations atomiques, mais cascadables, un contrôle quasiment parfait sur l'environnement qu'il manipule. De nouvelles commandes viennent encore solidifier cet édifice, certaines d'entre elles se verront probablement portées vers d'autres systèmes libres, améliorées, puis backportées, ainsi se poursuit le cycle de l'évolution des UNIX Libres, et rendez-vous à la release suivante. C'est pas facile de conclure parfois.
Liens
[0]
http://www.bsdnewsletter.com/2013/01/Features184.html
[1]
http://roy.marples.name/projects/openresolv
[2]
http://www.gluster.org/
[3]
http://www.nilfs.org/en/about_nilfs.html
[4]
http://laurikari.net/tre/about/
[5]
https://developer.apple.com/bonjour/
[6]
http://fr.wikipedia.org/wiki/Executable_and_Linking_Format
[7]
https://www.acpica.org/documentation/faq.php
[8]
http://www.lua.org/about.html
[9]
http://zlib.net/pigz/
[10]
http://en.wikipedia.org/wiki/I%C2%B2C
[11]
http://www.netbsd.org/docs/rump/
[12]
http://blog.netbsd.org/tnf/entry/netbsd_binary_kernel_modules_usable