Articles avec le tag ‘Linux’

vcgencmd sur un Raspberry Pi avec une image Debian auto-fabriquée

J’ai acheté il y a quelque temps déjà un Rasperry Pi sur lequel j’ai mis une Debian Wheezy « standard » – comprenez « pas une Raspbian ». Pour cela j’ai suivi l’excellent tuto de Hödlmoser : http://blog.kmp.or.at/2012/05/build-your-own-raspberry-pi-image/
Mais ce n’est pas le sujet de ce post :)

Raspi_Colour_R.resized

 

Un outil permettant d’accéder à un bon nombre de paramètre du firmware du Raspberry existe : il s’agit de vcgencmd.
Dans mon cas, je voulais m’en servir pour récupérer la température interne du Raspberry, fournie par un capteur intégré au CPU.

 

Je suis tombé sur les problèmes suivant :
vcgencmd n’était pas connu dans mon PATH. Bon ce n’est pas très grave, il suffit de l’appeler avec son chemin complet : /opt/vc/bin/vcgencmd, ou mieux, d’ajouter /opt/vc/bin au PATH. J’ai choisi de carrément ajouter /opt/vc/bin dans le PATH créé dans le fichier /etc/profile, qui sert de « PATH de base ».

problème de librairie partagée non trouvée :

root@raspberrypi:~# /opt/vc/bin/vcgencmd
/opt/vc/bin/vcgencmd: error while loading shared libraries: libvcos.so: cannot open shared object file: No such file or directory

IL y a deux solutions à ce problème. Choisissez celle que vous préférez, inutile d’appliquer les deux.

La première solution (qui est plutôt une solution de contournement) que j’ai mise en oeuvre est de créer le script suivant dans /usr/local/bin (mais vous pouvez le placer dans n’importe quel dossier, pourvu qu’il soit dans votre PATH) :

#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/vc/lib
export LD_LIBRARY_PATH
exec /opt/vc/bin/vcgencmd $@

Ce script positionne correctement la variable LD_LIBRARY_PATH pour lancer l’utilitaire vcgencmd. Le fait de placer ce script dans un dossier de votre PATH corrigera aussi le premier problème qui était que vcgencmd n’était pas connu dans le PATH.

La deuxième solution est d’ajouter la librairie manquante aux « PATH des librairies partagées système » de Linux.
Pour cela, créez un fichier dans /etc/ld.so.conf.d/. Le nom du fichier doit finir par .conf (vcgen.conf par exemple).
Dans ce fichier, il n’y a qu’une ligne à mettre :

/opt/vc/lib

Passez la commande ldconfig pour appliquer les changements.
Le dossier /opt/vc/lib/ est maintenant utilisé pour la recherche des librairies partagées et la librairie manquante, libvcos.so, sera trouvée.
Il faut tout de même ajouter /opt/vc/bin/ à votre PATH ou bien créer un script (ou un lien) dans un dossier de votre PATH pour lancer la commander vcgencmd sans avoir à écrire tout le chemin.

 

L’avantage de la 1ère solution est que le dossier /opt/vc/lib ne sera scruté que lorsque vous lancerez la commande vcgencmd (via le script). L’inconvénient c’est que c’est un peu brouillon, et que vous risquez de retomber sur le même problème pour un autre programme qui aurait besoin de cette librairie partagée, ou bien d’une autre librairie partagée contenue dans /opt/vc/lib.
Pour la 2ème solution c’est l’inverse : elle est plus universelle car toutes les librairies partagées de /opt/vc/lib seront scrutées pour tous les programmes. L’inconvénient est que du coup, il y a une petite perte de performances. C’est négligeable lorsque l’on ajoute seulement un dossier qui contient quelques librairies partagées comme ici, mais ajouter de nombreux dossiers, contenant chacun de nombreuses librairies, peut affecter les performances du système puisque ce dernier va scruter toutes les librairies partagées indiquées (jusqu’à trouver la bonne) quand il devra chercher une librairie partagée.

 

Au final, j’ai choisi :
– d’ajouter /opt/vc/bin/ au « PATH de base » créé dans /etc/profile
– la 2ème solution pour le problème de la librairie partagée manquante

 

PS : quand même, un petit exemple d’utilisation de vcgencmd pour récupérer la température interne du Raspberry :

root@raspberrypi:~# vcgencmd measure_temp
temp=56.8'C

 
 

Liens utiles :
– A propos de LD_LIBRARY_PATH : http://www.cc.dtu.dk/?page_id=304
– Ajouter des librairies partagées à Linux : http://blog.andrewbeacock.com/2007/10/how-to-add-shared-libraries-to-linuxs.html
– A propos de vcgencmd : http://elinux.org/RPI_vcgencmd_usage
– Pour créer sa propre image Debian pour son Raspberry : http://blog.kmp.or.at/2012/05/build-your-own-raspberry-pi-image/

Mise en place d’un serveur musical avec MPD

J’ai mis en place chez moi un serveur de musique qui devait répondre a des besoins un peu particuliers :
– fonctionnement client-serveur, le serveur devant lire la musique (il est branché sur ma chaine hifi) et les clients permettant de contrôler la lecture de la musique à distance (pas d’écran sur le serveur)
– la musique est stockée non pas sur le serveur, mais sur mon PC fixe, dans ma chambre, qui n’est pas allumé tout le temps (bon il faudra l’allumer pour lire la musique évidement :D )
– tout ça sur du Linux bien entendu, le serveur étant sous Ubuntu server 10.10 et le PC fixe sous Ubuntu 10.04

Je me suis penché vers MPD (Music Player Deamon), qui a l’avantage de répondre parfaitement à tous ces besoins :)

Pour la suite : IP du serveur : 192.168.1.8 et IP du PC fixe : 192.168.1.4, les deux sont en DHCP mais le routeur est configuré pour leur attribuer toujours la même IP.

Voilà, le contexte étant posé, on y va :)
Première étape : rendre la musique présente sur le PC fixe accessible au serveur. J’ai choisi de faire ça avec NFS, à priori une autre méthode (comme avec Samba) aurait fonctionné tout aussi bien. Le partage NFS, donc :
0) Installation des paquets « nfs-common » (nécessaire sur le client et le serveur) et « nfs-kernel-server » (nécessaire uniquement sur le serveur). Attention, ici (et uniquement ici) c’est le PC fixe qui joue le rôle de serveur puisque c’est lui qui partage la musique
1) Création du point de montage sur le serveur (donc le « vrai » serveur cette fois ci) : mkdir /mnt/jidey_musique
2) Paramétrage de NFS sur le PC fixe (donc le serveur NFS) :
– ajouter une ligne dans le fichier /etc/exports :

/home/jidey/Musique/ *(ro,fsid=0,insecure,no_subtree_check)

– ajouter ces trois lignes dans le fichier /etc/hosts.deny :

portmap:ALL
nfsd:ALL
mountd:ALL

– ajouter ces 6 lignes dans le fichier /etc/hosts.allow (adapter les IP, il faut mettre l’IP du client nfs) :

portmap: 192.168.1.8
lockd: 192.168.1.8
nfsd: 192.168.1.8
mountd: 192.168.1.8
rquotad: 192.168.1.8
statd: 192.168.1.8

3) Monter le partage nfs sur le client nfs (le serveur MPD) :

sudo mount -t nfs4 192.168.1.4:/ /mnt/jidey_musique/

NB : j’ai été au plus rapide pour la partie NFS. C’est un peu crado, et surtout automatisable (avec fstab). Je ne veux pas m’étendre sur le sujet ici, tout ce qui importe c’est d’avoir un dossier avec de la musique sur le serveur MPD.

Deuxième étape : installation et configuration de MPD sur le serveur.
L’installation est, comme souvent sur Ubuntu, simplissime : sudo apt-get install mpd
Pour la configuration, c’est à peu près du même niveau. La configuration se fait dans /etc/mpd.conf pour une configuration valable pour tous les utilisateurs (c’est notre cas) ou dans ~/.mpdconf pour une configuration personnalisée à chaque utilisateur. Voici le contenu de mon /etc/mpd.conf :

port                    "6600"
music_directory         "/mnt/musique_jidey"
playlist_directory      "/var/lib/mpd/playlists"
db_file                 "/var/lib/mpd/tag_cache"
log_file                "/var/log/mpd/mpd.log"
pid_file                "/var/run/mpd/pid"
state_file              "/var/lib/mpd/state"

user                    "mpd"
bind_to_address         "localhost"

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"        # optional
        format          "44100:16:2"    # optional
        mixer_device    "default"       # optional
        mixer_control   "PCM"           # optional
        mixer_index     "0"             # optional
}

Notez qu’il faut créer les dossiers ci-dessus (.mpd et .mpd/playlists) s’ils n’existent pas.
Beaucoup d’autres options sont possibles, toutes sont très bien expliquées dans le fichier de configuration créé avec l’installation.
Si vous avez des problèmes de connexion avec les clients, essayez de commenter la ligne « bind_to_address « localhost »  »
Un petit restart du démon MPD et ça devrait être bon :

sudo /etc/init.d/mpd restart

Troisième étape : installation et configuration des clients. Il existe une multitude de clients compatibles avec MPD. La liste (à priori à peu près exhaustive) est disponible sur le site de MPD. Comme vous le constaterez, des clients existent pour à peu près toutes les plateforme imaginable, d’Androïd à Gnome (assez classique) en passant par la Wii…

Ubuntu/Debian : faire le ménage dans les noyaux

Après quelques mois d’utilisation, mon grub ressemble inévitablement à ça :

grub

Oui, je fais une collection de kernels, et alors? :D
Bref, tout ça pour dire que je fini par me retrouver avec 4 ou 5 noyaux, ce qui est, d’une part, inutile, et d’autre part gênant quand il faut commencer à scroller pour attendre la ligne « Windows » tout en bas de la liste (ok, je n’ai qu’à pas utiliser Windows, mais c’est pas la question :p ). Il y a bien la méthode crade d’adapter simplement grub, mais c’est quand même plus propre de supprimer tous ces noyaux inutiles. Voici comment faire.

Lister tous les noyaux installés

dpkg -l | grep linux-image
ii  linux-image-2.6.31-19-generic        2.6.31-19.56                               Linux kernel image for version 2.6.31 on x86
ii  linux-image-2.6.31-20-generic        2.6.31-20.58                               Linux kernel image for version 2.6.31 on x86
ii  linux-image-2.6.31-21-generic        2.6.31-21.59                               Linux kernel image for version 2.6.31 on x86
ii  linux-image-2.6.31-22-generic        2.6.31-22.60                               Linux kernel image for version 2.6.31 on x86
ii  linux-image-generic                  2.6.31.22.35                               Generic Linux kernel image

On voit à la fin le paquet générique du kernel. Il ne faut pas le supprimer.

En théorie, à chaque paquet « linux-image » est associé 2 paquets « linux-headers ».

dpkg -l | grep linux-headers
ii  linux-headers-2.6.31-19              2.6.31-19.56                               Header files related to Linux kernel version
ii  linux-headers-2.6.31-19-generic      2.6.31-19.56                               Linux kernel headers for version 2.6.31 on x
ii  linux-headers-2.6.31-20              2.6.31-20.58                               Header files related to Linux kernel version
ii  linux-headers-2.6.31-20-generic      2.6.31-20.58                               Linux kernel headers for version 2.6.31 on x
ii  linux-headers-2.6.31-21              2.6.31-21.59                               Header files related to Linux kernel version
ii  linux-headers-2.6.31-21-generic      2.6.31-21.59                               Linux kernel headers for version 2.6.31 on x
ii  linux-headers-2.6.31-22              2.6.31-22.60                               Header files related to Linux kernel version
ii  linux-headers-2.6.31-22-generic      2.6.31-22.60                               Linux kernel headers for version 2.6.31 on x
ii  linux-headers-generic                2.6.31.22.35                               Generic Linux kernel headers

Suppression des noyaux inutiles

Il est recommandé de conserver les 2 noyaux les plus récents (le plus récent pour une utilisation courante, l’autre en cas de problème sur le dernier noyau). Dans mon cas, je veux donc supprimer les versions 2.6.31-19.56 et 2.6.31-20.58 du noyau.
Ensuite, tout se fait classiquement avec apt-get et son option –purge :

sudo apt-get remove linux-image-2.6.31-19-generic linux-headers-2.6.31-19 linux-headers-2.6.31-19-generic linux-image-2.6.31-20-generic linux-headers-2.6.31-20 linux-headers-2.6.31-20-generic --purge

Grub sera (normalement) mis à jour automatiquement.

Chiffrer simplement un dossier sous linux

Un post rapide sur une méthode très simple et très efficace pour chiffrer un dossier sous linux. Je l’ai mise en pratique sur Ubuntu, mais ça devrait marcher sous n’importe quelle distribution, en adaptant quelques détails bien sur.

L’outil s’appelle « encfs » et est fourni par le paquet du même nom. Le paquet « fuse-utils » est également nécessaire.

sudo apt-get install fuse-utils encfs

On initialise encfs avec la commande suivante, qui défini le répertoire utilisé pour les données chiffrées et le répertoire utilisé pour les données en clair :

encfs /home/$USER/coffre/ /home/$USER/coffre_open/

Encfs vous posera quelques questions pour cette initialisation. Tout d’abord, il vous demande une confirmation pour la création des deux répertoires « coffre » et « coffre_open ». Ensuite, vous devrez choisir la configuration du nouveau volume crypté. « Paranoïaque » est un bon choix pour ceux (comme moi) qui ne veulent pas trop se prendre la tête, entrez donc « p ».

Enfin, choisissez un mot de passe. Attention : il n’existe aucune méthode permettant de retrouver un mot de passe oublié. Si vous oubliez ce mot de passe, le seul moyen pour récupérer vos données sera de casser la clé de 256 bits utilisée pour chiffrer vos données en AES (ça parlera pas à tout le monde, mais sachez que c’est pas gagné :D )

Voilà, c’est à peu près tout. Vous avez maintenant un dossier « coffre » et un dossier « coffre_open » dans votre home. Après l’initialisation, le coffre est ouvert. Vous avez alors un volume « coffre_open » monté (vous pouvez le vérifier dans votre poste de travail) dans le dossier « coffre_open » créé précédemment.

Mettez ce que vous voulez chiffrer dans ce volume « coffre_open ».
Lorsque vous fermerez le coffre, le volume sera démonté et les données seront chiffrées et stockées dans le répertoire « coffre ». Vous retrouverez vos données en clair lorsque vous rouvrirez le coffre.

Pour fermer le coffre :

fusermount -u /home/$USER/coffre_open

Pour ouvrir le coffre :

encfs /home/$USER/coffre/ /home/$USER/coffre_open/

Vous pouvez bien sur mettre ces commandes dans des fichiers /usr/bin/encrypt et /usr/bin/decrypt (vous n’oublierez pas de les rendre exécutables et de vous mettre en propriétaire…), ce qui vous permettra d’avoir simplement à taper « encrypt » ou « decrypt » dans un terminal pour fermer ou ouvrir votre coffre.

Encore quelques points auxquels il faut faire attention ou qu’il est bon de savoir :
– si vous copiez/déplacez votre coffre, déplacez bien le fichier « .encfs6.xml » qu’il contient, sinon il vous sera impossible d’utiliser votre coffre
– vous pouvez changer votre mot de passe avec encfsctl

Et sinon, la page de doc d’ubuntu-fr est, comme souvent, bien faite et plus complète que cet article : c’est ici.

Sauvegardes multi-plateformes automatisées

Ce premier article va traiter du système de sauvegardes automatisée que je me suis monté pour mes besoins personnels.
Les outils de sauvegardes automatiques sont nombreux. Je me suis tourné vers BackupPC car :
– il est multi-plateformes (tous mes PC sont en double-boot Windows / Linux)
– c’est un logiciel libre
– il supporte de nombreux modes de sauvegardes
– l’interface web est plutôt bien faite je trouve

Il est bien évident que cet article ne sera qu’une introduction à BackupPC. Le nombre de possibilités offertes par BackupPC et le nombre de cas de figures possibles pour des sauvegardes sont bien trop grands pour en faire un article exhaustif.
De plus, je ne vais traiter ici que des sauvegardes sous Linux. Backuppc permet aussi de gérer les sauvegardes de postes sous Windows, ça fera peut-être l’objet d’un autre article.

Sources :
http://doc.ubuntu-fr.org/backuppc
http://backuppc.sourceforge.net/

Configuration :
– Ubuntu Linux 10.04 LTS

Installation du serveur sous Linux

Installation

Installation par la logithèque Ubuntu (rechercher « backuppc »). L’installation va vous demander de choisir certaines options. Voici celles que j’ai choisies :
– Postfix Configuration : Pas de configuration (je n’ai pas besoin d’un service de mails pour ma solution de sauvegardes)
– Quel serveur web voulez-vous configurer automatiquement? : Cochez « apache2″
– Notez quelque par le mot de passe créé pour l’utilisateur « backuppc »

L’installation se termine sans problème particulier (en tous cas chez moi :p ).

Configuration

Je vous conseille de tout de suite changer le mot de passe créé pour l’utilisateur backuppc pour mettre un mot de passe que vous retiendrez. Ceci se fait avec la commande :

sudo htpasswd /etc/backuppc/htpasswd backuppc

L’interface web de BackupPC est accessible à l’adresse : http://localhost/backuppc (Remplacer localhost par l’IP du serveur si c’est une machine différente). L’interface web permet d’accéder à la grande majorité des options de configuration disponibles.

Choisir le répertoire utilisé pour les sauvegardes

Allez, on commence par une des seules options qu’il n’est pas possible de modifier via l’interface web. Par défaut, BackupPC stocke les sauvegardes dans « /var/lib/backuppc ». Si cela vous convient, ne touchez à rien, mais dans mon cas, j’ai acheté un disque dur spécialement pour y stocker mes sauvegardes. Il est monté sur « /media/sdc1″ et je veux que mes sauvegardes soient dans « /media/sdc1/backuppc ».
– On crée le répertoire, je ne vous fait pas l’affront d’expliquer comment.
– On édite avec son éditeur de texte préféré le fichier « /etc/backuppc/config.pl ». Attention, il faut être root. On cherche la ligne « $Conf{TopDir} = ‘/var/lib/backuppc'; » et on la remplace par « $Conf{TopDir} = ‘/media/sdc1/backuppc'; »
– On copie le contenu de l’ancien répertoire de sauvegarde vers le nouveau :

sudo cp -a /var/lib/backuppc/* /media/sdc1/backuppc/

– On redémarre BackupPC :

sudo /etc/init.d/backuppc restart

Attention : le disque utilisé pour ici doit être en ext3 (ou un autre système de fichier gérant les permissions, donc pas de NTFS par exemple)

Langue de l’interface web

C’est la 2ème (et dernière pour cet article) option qu’il faut changer dans le fichier de configuration « /etc/backuppc/config.pl »
Modifier la ligne « $Conf{Language} = ‘en'; » en « $Conf{Language} = ‘fr'; »

Sauvegarde d’un répertoire local

Dans l’interface web :
– « Serveur » -> « Modifier la configuration » -> « Machine » : vérifier que la machine (host) « localhost » existe bien, avec « backuppc » comme user
– « Hôtes » -> choisir « Localhost » dans la liste déroulante
– « localhost » -> « Modifier la configuration » -> « xfer » -> « XferMethod » : choisir « tar », « TarShareName » : indiquer le chemin à sauvegarder et cliquer sur « insérer » -> Cliquer sur « Sauvegarder » (apparaît en rouge)
– « localhost » -> « localhost Accueil » -> « Démarrer la sauvegarde complète »
– « localhost » -> « Explorer les sauvegardes » : vérifiez ici que ça a fonctionné.

Sauvegarde d’un répertoire linux distant

BackupPC permet de gérer de manière assez avancée les sauvegardes de postes distants. Voici comment faire une sauvegarde très basique d’un répertoire sur un poste distant sous Linux.
Avant tout, il faut qu’openssh_server soit installé sur le poste distant car la sauvegarde se fera via ssh (encore un bon point pour backuppc =) ). Par contre, cela entraine une identification par clés entre le serveur et le poste distant. Il faut donc mettre en place ce mécanisme avant tout :
– Passer en utilisateur « backuppc » :

sudo su - backuppc

– Générer les clés publique et privée :

ssh-keygen -t rsa

– On peut vérifier que la clé publique a bien été générée :

cat ~/.ssh/id_rsa.pub

– Transférer le fichier id_rsa.pub sur le poste distant d’une manière quelconque et ajouter son contenu au fichier « /root/.ssh/authorized_keys » sur le poste distant
– Faire une première connexion depuis le serveur vers le poste distant :

ssh root@adresse.ip.du.poste.distant

Répondre « yes ». Pour que cela fonctionne, il faut bien sur toujours être l’utilisateur « backuppc » sur le serveur.

Maintenant, on peut passer à la configuration de la sauvegarde via l’interface web :
– « Serveur » -> « Modifier les machines » -> « Machines » -> ajouter adresse.ip.de.la.machine.a.sauvegarder avec « backuppc » comme user
– « Hôtes » -> choisir adresse.ip.de.la.machine.distante dans la liste déroulante
– « Modifier la configuration » -> « xfer » -> « XferMethod » : choisir « rsync », -> cliquer sur « Sauvegarder »
– Aller sur « adresse.ip.de.la.machine.distante Accueil » -> « Démarrer la sauvegarde complète »
– Aller sur « Explorer les sauvegardes » et vérifier que ça a fonctionné.

Voila, normalement tout fonctionne. Ce n’est bien sur qu’un bref aperçu des possibilités et du fonctionnement de Backuppc, mais ça permet de monter assez rapidement un système de sauvegardes qui tient la route.
Reste à voir si Backuppc me conviendra à long terme. Il y a notamment une limitation pour la sauvegarde sur les disques NTFS, ce qui m’embête assez. Je trouverai peut-être une astuce, ce qui fera peut-être un prochain article.

C’est fini pour ce premier vrai post, assez long d’ailleurs. N’hésitez pas à aller voir la doc de Backuppc sur le site de la documentation Ubuntu, elle est très bien faite.