Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archive for 2009

I'm back ! Pour ceux qui suivent, les vacances c'était sympa. Allez au Vietnam, vous verrez, c'est beau et pas cher.

Aujourd'hui, comme à chaque fois que je sens que je n'avance pas trop, je vais faire une liste de sujets que j'aurais aimé traiter mais dont je sais pour lesquels je ne trouverai pas le temps et le courage d'écrire un article, j'essaie donc de vous fournir un lien intéressant à la place.

Sujet non traités :

Lectures intéressantes :

Pas d'article parce que sujet trop naze :

Niveau :      
Résumé : export PS1="> "

Désolé de ne pas écrire plus souvent. Et ca risque de durer encore un peu puisque je pars en vacances ...

PS veut dire prompt string. Les 4 prompt string de bash sont les chaines de caractères affichées par le shell en différentes situations. Nous allons nous intéresser à PS1 mais sachez que la suite vaut pour toutes les autres.

Exemples

Je vais faire simple : des exemples de chaînes ainsi que la capture d'écran associée, il ne vous reste plus qu'a choisir et à copier/coller dans votre .bashrc

Toutes les captures ont été faites avec les settings suivants :

  • user : peck
  • hostname : mamachine.linux-attitude.fr

Exemples unilignes

PS1Fond noir / Fond Blanc
"[\t] \[\e[01;32m\]\u\[\e[01;33m\]@\h\[\e[00m\]:\[\e[01;34m\]\w\[\e[00m\]\$ " black
white
"\[\033[01;32m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]" black
white
"\[\033[0;34m\][\[\033[0;31m\]$(date +%H%M)\[\033[0;34m\]]\[\033[0;34m\][\[\033[1;31m\]\u@\h:\w\[\033[0;34m\]]\[\033[1;37m\]$\[\033[0m\] " black
white
 
 

continue reading...

Niveau :      
Résumé :

Aujourd'hui nous allons mettre en valeur deux articles précédents. J'espère que vous avez déjà mis votre home sous un système de suivi de version pour suivre ses évolutions. J'ai déjà décrit à dans un article précédent. En résumé :

$ cd
$ git init
$ git add .bashrc # et tout ce que vous voulez
$ git commit

Le but étant de propager tout cela automatiquement sur différentes machines. Il est difficile de toujours penser à mettre a jour lorsqu'on fait une modification. C'est pourquoi nous allons mettre à profit l'article précédent et intercepter ssh. Grâce à cela le home de toutes nos machines seront à jour sans qu'on ait à s'en préoccuper.

Mise en place

Cette fois nous allons modifier le script en question pour lancer automatiquement une mise à jour de git de façon furtive à chaque connexion ssh. La méthode run était prévue pour :

# test permettant de savoir qu'on est bien sur le bon dépôt git pour les mises à jour (id du premier commit)
MASTER=11edf02e95ceac1fa58d4444f82f8cd4ae9c1cf5
# command tu run via the ssh socket
run()
{
    # no test if running init
    if [ "$MASTER" != "" ]
    then
        # test if distant has OUR git
        ssh -S "$1" XXX '[ -e /usr/bin/git ] && [ -d .git ] && git rev-list --reverse master 2>/dev/null | head -1' | grep "$MASTER" > /dev/null
    else
        ssh -S "$1" XXX '[ -e /usr/bin/git ]'
    fi
    if [ $? -eq 0 ]
    then
        # if yes push updates
        tmp=$(mktemp ~/.sshgit.XXXXXX)
        echo "#!/bin/sh" > $tmp
        echo "exec ssh -S $1 \"\$@\"" >> $tmp
        chmod +x $tmp
        GIT_SSH=$tmp git push --all ssh://XXX/~ > /dev/null 2> /dev/null
        rm -f $tmp
        ssh -S "$1" XXX 'git checkout -f > /dev/null'
    fi
}

continue reading...

^--- billet invité

Niveau :      
Résumé : proxy ndp

Aujourd'hui nous allons parler d'IPv6. Pas du troll sur son arrivée imminente (ou pas), mais de situations qui nécessitent l'utilisation d'une fonctionnalité du noyau linux appelée proxy NDP.

Rappels sur IPv6 et NDP (les habitués d'IPv6 peuvent passer)

En IPv4, on dispose du protocole ARP pour trouver, à partir de l'adresse IP, l'adresse MAC à laquelle envoyer le paquet Ethernet sur le même réseau. Si c'est sur un autre réseau, il suffit d'avoir une table de routage et de connaître le routeur (la passerelle) pour cette destination, à qui on envoie le paquet.

En IPv6, on fait fi d'ARP pour utiliser ICMPv6. Vous me direz, on ne fait que reporter le problème, on n'a toujours pas l'adresse MAC : c'est là qu'intervient la notion de lien local. En effet vous avez déjà du remarquer qu'à peine votre interface réseau montée, vous disposez d'une adresse de lien local (obtenue à partir de votre adresse MAC).

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:19:66:8c:b0:d9
          inet6 addr: fe80::219:66ff:fe8c:b0d9/64 Scope:Link
[...]

De la même manière, vos voisins sur le même lien Ethernet ont leur adresse de lien local, et c'est en utilisant celle-ci combinée au protocole ICMPv6 qu'on voit passer les requêtes NDP (Neighbor Discovery Protocol) de découverte de voisinage. On y retrouve exactement le principe de l'ARP d'IPv4 (who has/target is at), avec un nouveau vocabulaire (neighbor solicitation/neighbor advertisement).

# tcpdump -ni eth0 ip6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

16:06:29.756895 IP6 2a01:e35:3e93:68c0:4d0a:f82b:3678:aaac > ff02::1:ff8c:b0d9: ICMP6, neighbor solicitation, who has 2a01:e35:3e93:68c0:219:66ff:fe8c:b0d9, length 32

16:06:29.757294 IP6 2a01:e35:3e93:68c0:219:66ff:fe8c:b0d9 > 2a01:e35:3e93:68c0:4d0a:f82b:3678:aaac: ICMP6, neighbor advertisement, tgt is 2a01:e35:3e93:68c0:219:66ff:fe8c:b0d9, length 32

continue reading...

Niveau :      
Résumé :alias ssh='ssh macommande && ssh'

Aujourd'hui interceptons les commandes ssh. Alors ne commencez pas à penser que je suis passé du côté obscur de la force. Il y a des usage bien pratique ce script et je vous en proposerai un dans le prochain article.

Tout d'abord le problème : on veut pouvoir intercepter une commande ssh de façon silencieuse pour pouvoir utiliser la connexion qui va s'établir et lancer les commandes qu'on veut sur la machine distante. Cela implique une acceptation implicite de l'utilisateur puisqu'on va utiliser un simple alias pour "intercepter" la commande. Bien sûr rien ne vous empêche de modifier l'alias d'un ami selon les moyens qui sont à votre disposition ;-)

Principe de fonctionnement

Vous vous dites qu'il suffit de reprendre les paramètres de la commande et de la relancer. Non, habitués que vous êtes à l'agent ssh, vous avez oublié qu'en son absence l'utilisateur devra taper un mot de passe pour que la commande passe.

Pour récupérer la connexion ssh, openssh met à notre disposition tout ce qu'il faut. L'option s'appelle ControlMaster, elle crée une socket sur laquelle ssh peut ensuite se connecter pour ouvrir un nouveau terminal sans repasser toute la chaine de connexion au serveur.

La méthode est donc fait simple :

  • on intercepte la commande ssh (alias)
  • on lance notre script en background ($0 &)
  • on ajoute un option -M et -S si besoin à la commande ssh pour créer la socket
  • on garde les options originales et le processus original (exec ssh -M -S "$@")
  • dans le script en background on peut ensuite utiliser directement la socket en question pour faire ce qu'on veut

continue reading...

Ceci est un article invité, regardez en haut à gauche le nom de l'auteur ...

Niveau :      
Résumé :

Peut-être avez-vous déjà rêvé, lors de vos soirées d'été, de contrôler votre musique à distance avec votre téléphone portable dernière génération, ou tout simplement en étant gentiment assis dans votre chaise longue ? MPD peut être la solution.

Music Player Daemon (MPD)

MPD fait partie de cette famille de lecteurs de musique basés sur un modèle client/serveur (dans la même catégorie se trouve xmms2 par exemple). Globalement, le serveur lit les fichiers audio sur la machine hôte, et vous pouvez contrôler à distance (et bien sûr localement) la musique à diffuser. Ainsi, il faut bien comprendre que les seuls messages qui transitent sur le réseau sont des messages de contrôle, et qu'aucun streaming audio n'est mis en jeu.

Les intérêts d'un tel modèle sont :

  • bien sûr, le contrôle à distance par plusieurs machines
  • la lecture de musique indépendante de tout lecteur nécessitant un serveur X
  • le logiciel de contrôle (qu'on pourrait à tord appeler "lecteur") n'a pas à se soucier des divers plugins nécessaires à la lecture des fichiers audio ou encore de gérer la bibliothèque. MPD le fait déjà pour lui.

L'un des principaux désavantages est que cela rajoute un poil de complexité lorsqu'un simple "play music.mp3" peut lire un fichier audio, mais les avantage sus-cités méritent de s'y essayer.

Installation

Sous Debian et dérivés, tout simplement faire en tant que root :

$ aptitude install mpd

Il va ensuite falloir configurer votre nouveau joujou. On se basera pour l'exemple sur la configuration par défaut du paquet Debian, mais le tout peut être adapté pour d'autres distributions. Le fichier de configuration /etc/mpd.conf contient des informations sur, entre autres, :

  • le répertoire où se trouve toute votre musique. Par défaut, sous Debian, il se trouve dans /var/lib/mpd/music
  • l'utilisateur sous lequel tourne le daemon (mpd par défaut, toujours sous Debian). Je conseillerai de laisser cet utilisateur crée par le paquet, et de ne pas mettre root...
  • l'adresse de bind du serveur. "127.0.0.1" par défaut, à adapter si vous voulez contrôler votre daemon à distance ("0.0.0.0" par exemple)
  • contrôle d'accès sur la gestion de la playlist, la lecture de la bilbiothèque, etc... par mot de passe (se référer au man pour plus d'infos.)

continue reading...

Niveau :      
Résumé :accton ; ac ; sa ; lastcomm

Le noyau linux fournit une fonctionnalité ancienne, mais parfois bien utile nommée process accounting. Pour ceux qui compilent leur noyau elle est disponible dans les options générales sous le nom "BSD process accounting".

Pour pouvoir en profiter sur votre système, il faut aussi disposer des commandes disponibles dans le paquet acct. Ces commandes sont peu nombreuses. La première est accton qui active ou désactive l'accounting sur le système. La plupart des distributions incluent un fichier dans init.d appelant cette commande au démarrage.

Une fois l'accounting activé, les données liées aux processus sont stockées dans /var/log/account/pacct (ou équivalent). Les autres commandes du paquets servent à lire ces données.

Les plus importantes sont sa et lastcomm. Notons tout de même ac qui donne le temps de connexion total des utilisateurs et last (en provenance d'un autre paquet) indiquant les dates de connexion des utilisateurs. Un système non GNU vous proposerait des commandes supplémentaires.

sa permet d'obtenir des statistiques sur le lancement des processus.

lastcomm permet d'obtenir une liste de commandes lancées par utilisateur.

Usage

lastcomm permet de surveiller l'activité utilisateur sur le système. On peut ainsi retrouver qui a fait quoi en cas de problème (si vous pouvez garantir le fichier de log bien sûr :-). Un BOFH peut même s'amuser à espionner en temps réel ses utilisateurs avec un watch -d.


continue reading...