Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Category: Sysadmin

Niveau :      
Résumé : /proc/sys/fs/binfmt_misc/register

Exécution

Savez-vous qu'on peut rendre n'importe quel fichier exécutable sous linux ? Bien sûr il suffit de faire un chmod +x, mais le noyau risque de vous envoyer balader si le fichier n'est pas réellement exécutable.

Mais je parle ici de rendre exécutable n'importe quel fichier, un jar, un source en C, un MP3 ...

Mais comment quoi que donc !?

Pour exécuter un fichier, le noyau lit les premiers octets du fichier et vérifie qu'ils correspondent à un format binaire (binfmt) connu. Il existe un système pour ajouter des formats binaires à ceux déjà supportés dans le noyau (en gros les elf et les scripts). Il s'agit du format misc.

Pour savoir si ce format est supporté chez vous, ce qui est très probable, lancez la commande :

$ cat /proc/sys/fs/binfmt_misc/status

S'il n'est pas supporté, il faut charger le module et monter le répertoire :

$ modprobe binfmt_misc
$ mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc 

continue reading...

Niveau :      
Résumé : arecord && aplay ; ctrl-x ctrl-e ; vim :sudo save ; mount ; table ASCII

Lire en local le son enregistré sur un micro distant avec alsa (merci buntu35) :

$ ssh USER@REMOTESYSTEM arecord - | aplay -

Sous bash, éditer une longue ligne de commande en cours (avec $EDITOR) :

ctrl-x ctrl-e

Sous vim, faire un "sudo save" :

:w !sudo tee %

Enfin afficher proprement le résultat de mount (faites en carrément un alias) :

$ mount | column -t

Si comme moi il vous arrive de chercher la table ascii sur google, ne cherchez plus :

$ man ascii

Niveau :      
Résumé : xkbprint ; setxkbmap

Je ne vais pas parler du dvorak ni du bépo.

Je ne vais pas non plus parler des claviers physiques comme le typematrix ou l'optimus.

Commençons par le commencement, savez-vous quelle est la disposition de votre clavier ? Le cancre au fond qui a dit iso8859-1 a perdu !

Il ne faut pas confondre iso8859-1 qui est un ensemble de caractères et latin1 qui est une disposition de touches sur un clavier. Au cours du temps la table des caractères a évoluée en iso8859-15 et la disposition clavier en latin9 et ce dans le but de gérer le symbole euro. Mais le latin9 est aussi utilisé pour écrire de l'unicode qui remplace petit à petit la table iso.

Mais le besoin de caractères accentués fait qu'une nouvelle disposition est apparue. Le fr-oss, que je vous conseille. Il vous permet de faire quasiment tous les caractères accentués avec la touche alt-gr. En effet, avec la disposition latin9, soit le caractère accentué est sur le clavier, soit il n'est pas accessible.

Pour connaitre votre disposition actuelle, vous pouvez l'afficher :

# remplacez 1 par 2 pour voir ce qui se passe avec alt-gr
$ xkbprint -color :0 -ll 1 -o layout.ps
# aficher l'image avec gv
$ gv layout.ps

Pour être plus précis, latin9 est un variante du clavier français. C'est à dire que la base est la même que les autres claviers français, mais quelques petites choses changent. La variante oss est bien pratique lorsqu'on écrit du français plus littéraire.

Comment la tester ? En l'activant :

$ setxkbmap fr -variant oss

Et voila, vous avez maintenant accès aux « œ » … directement avec la touche alt-gr.

Pour plus de détail sur ce qui change, vous pouvez lire cet article : http://idoric.free.fr/dotclear/inde...

Et si vous n'avez pas de clavier du tout essayez un clavier virtuel.

Niveau :      
Résumé : zdump ; zic

Le temps est absolu

Le temps est quelque chose de sensible. Si mon serveur est en retard il va croire que la personne qui vient de s'authentifier sur mon site essaie de me flouer en me donnant une date invalide. S'il est en avance, il va croire qu'il n'est pas venu depuis longtemps et va le déconnecter.

Il est donc important d'être toujours à l'heure, car l'heure c'est l'heure et quand il est pas encore l'heure c'est pas l'heure et s'il n'est plus l'heure ce n'est toujours pas l'heure. Vous me suivez ?

Mais pour une fois je ne vais pas vous parler de l'heure selon NTP, mais l'heure selon Saint Matthieu, enfin presque.

Supposons que, grâce à votre professionnalisme, votre machine soit à l'heure, voire à la seconde, grâce à NTP. Supposons que vous vouliez connaitre cette heure. Que faites-vous ? Vous la demandez au noyau (via time ou gettimeofday), et il vous la donne en UTC ...

Mais en pratique vous voulez l'heure de chez vous, celle qui dit que le soleil va se coucher dans la belle province. Bien sûr la libc va faire la conversion pour vous (via localtime, mais voyons comment elle fait.

Enfin presque

La date et l'heure s'expriment de plusieurs façons. L'heure UTC est la version "absolue"', c'est à dire qu'elle ne dépend pas des différentes régions de la planète où l'on se place. Mais tous les pays ne l'entendent pas de cette oreille et veulent chacun définir leur heure. Définition qui peut changer dans le temps ...

Pour faire la conversion, il faut donc connaître toutes ces règles. Heureusement des acharnés on fait ce travail de récupération et les ont déposées dans /usr/share/timezone sur le système de fichier.

Vous croyez qu'il n'y à que 24 fuseaux horaires ? Faux il y en a un peu plus. Maintenant comptons les timezone :

$ find /usr/share/zoneinfo/ -type f | wc -l
1764

Imaginez le temps qu'il a fallu pour compiler ces données ...

Vous constaterez que ce sont des fichiers binaires. La libc les lit directement (pour en savoir un peu plus, man tzfile et man tzset), mais pour nous humains ? On utilise zdump

$ zdump -v Europe/Paris

Vous y verrez les changements d'heure une seconde avant et une seconde après chaque changement. Remarquez qu'il y a plus d'information dans le binaire que dans le dump qui ne fait qu'afficher les dates de saut temporel.

Pas du tout

Mais aujourd'hui est un grand jour, je vais faire ma propre nation (une de plus). J'y édicterai un nouvel horaire, UTC+1,25 et heure d'été en UTC +0,75. Le changement se fera à MON anniversaire.

Il faut donc que je crée un fichier de zone correspondant à mon pays. Prenons le source suivant :

# règles de changement d'heure
Rule peck 2010 max odd Mar 6 4:00 -0:30 -
Rule peck 2010 max odd Sep 6 4:00 0 -
# définition de l'heure standard dans la zone
Zone peck 1:15 peck PCK

Et on le compile avec zic :

# notez que j'ai récupéré yearistype dans le source de tzdata
# il permet l'usage de odd dans mon fichier de règles
$ /usr/sbin/zic -d . -y "sh yearistype.sh" peck

Il suffit maintenant de le déposer dans /usr/share/timezone et voilà ce qu'on peut obtenir :

$ TZ=peck LC_TIME=C date
Mon Mar  7 17:48:02 PCK 2011
# notez la différence (UTC+x et PCK)
$ TZ=peck LC_TIME=fr_FR date
lundi 7 mars 2011, 17:48:37 (UTC+0045)

Votre timezone perso !

Pour des exemples complets et complexes de zones, vous pouvez regarder le source du paquet tzdata. C'est votre référence, mais je doute que vous ayez à y toucher prochainement !

Niveau :      
Résumé : mount -t cgroup cgroup /sys/fs/cgroup

Parfois, il faut savoir se mettre à jour. On crois que le noyau n'évolue que sur les performances et le support de nouveaux périphériques, mais il faut bien plus que ça. Son interface utilisateur évolue, progresse, change.

Aujourd'hui parlons d'une nouveauté récente, mais qu'il faudra bientôt tous connaître car c'est un nouveau système qui sont au cœur du noyau et qui peut être utilisé par beaucoup d'autres. Il s'agit des control group.

Les control group ont profité de l'expérience de l'histoire d'unix. Cette fois pas d'erreur, tout est fichier. D'où viennent tous ces fichiers ? C'est tout simple, c'est un nouveau type de système de fichier. Une convention veut qu'on le monte dans /sys/fs/cgroup mais ce n'est pas complètement établi, et le répertoire en question peut ne pas exister, dans ce cas utilisez /cgroup :

$ mount -t cgroup cgroup /sys/fs/cgroup

Mais à quoi ca sert ?

Ça sert à faire des groupes de processus. Et c'est tout. Enfin presque, on y attache d'autres fonctionnalités, mais j'en parlerai par la suite.

Comment ca marche ?

Les groupes sont gérés à travers le fichier tasks.

Par défaut les processus sont tous présents dans le groupe par défaut. Pour en avoir la preuve, c'est tout simple, il suffit de lancer la commande suivante (notez que par la suite je suppose que vous êtes toujours dans le répertoire de montage de cgroup) :

$ cat tasks

Maintenant vous voulez faire un groupe qui s'appelle disons trucs :

$ mkdir trucs
# et on met un processus dedans 
$ echo 1234 >> truc/tasks

continue reading...

Niveau :      
Résumé : Bonne année

Plutôt que de vous souhaiter une bonne année comme tout le monde avec des vœux et du bonheur je vais plutôt vous écrire un article utile.

J'en profite pour ne pas vous demander vos résolutions, de toute façon une résolution est faite pour ne pas être tenue, sinon ça serait déjà fait ! La mienne sera comme tous les ans 1024x1280.

Faire un grep d'un mot (et non pas d'une suite de caractère) :

$ grep -w lemot "lemotte lemot"

Faire un xargs mais résistant aux entrées vides :

$ xargs -r rm < list

Faire un append en fin de fichier :

$ echo toto >> fichier

Faire un insert en début de fichier :

$ sed -i -e '1i\toto/' fichier

Lister les dernières erreurs de connexion :

$ faillog

Niveau :      
Résumé : /dev/random /dev/urandom

Quelle différence y a-t-il entre /dev/random et /dev/urandom ? Et d'abord à quoi servent-il ?

Aléatoire

Qu'est-ce qu'un nombre aléatoire ? C'est un nombre faisant partie d'une série dont on ne peut pas prédire le prochain à partir des nombres précédents de la série.

Il existe de nombreuses méthodes pour créer des nombres aléatoires. Je vous donne la plus mauvaise : rand : i -> 0

Mais il existe aussi des suites moins prévisibles, par exemple prendre le dernier chiffre d'une opération récursive produisant de grands nombres. Voire complètement imprévisible comme utiliser la mesure d'un bruit blanc.

Il existe donc plusieurs niveaux d'"aléatoirité" ou de "prévisibilité". Un bon générateur qui peut par exemple être utilisé en cryptographie est en pratique soit un générateur matériel, soit un générateur basé sur un état interne et une fonction de hachage forte.

Les générateurs logiciels sont appelés PRNG (pseudo random number generator). Puisqu'un tel algorithme est déterministe, il faut l'initialiser avec des valeurs vraiment aléatoires pour éviter qu'on puis en deviner la sortie en devinant comment il a été initialisé.

Entropie

Sous linux il y a deux sources de nombres aléatoires, /dev/random et /dev/urandom.

La première utilise uniquement l'entropie disponible pour fournir des nombres aléatoires et le second est un générateur pseudo aléatoire initialisé avec cette entropie.

Mais qu'est-ce que l'entropie ?


continue reading...