cbenz::blog

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, septembre 18 2009

Travailler avec sshfs

Le système de fichiers virtuel http://fuse.sourceforge.net/sshfs.html basé sur http://fuse.sourceforge.net permet de monter un répertoire à travers SSH. Voici quelques astuces qui me sont utiles.

  • je crée un répertoire $HOME/mnt et les sous-répertoires des points de montage
  • je place mes points de montage dans /etc/fstab, par exemple :
sshfs#cbenz@hostname.com:/home/cbenz  /home/cbenz/mnt/hostname     fuse defaults,user,uid=cbenz,allow_other     0 0

On peut aussi placer l'option follow_symlinks, qui suivra les liens côté distant.

  • pour monter et démonter :
$ mount ~/mnt/hostname
$ fusermount -u ~/mnt/hostname

Maintenant qu'on a mis en place les bases, on se rend bien vite compte que certaines commandes sont longues lorsqu'elles manipulent un grand nombre de fichiers/répertoires. Par exemple, si on utilise git, la commande «git status» sera très longue (30sec pour un petit projet) alors qu'en local elle prend <1sec. Solution : un petit script python que j'ai nommé «sshdo», qui exécute la commande côté serveur, en se plaçant dans le répertoire correspondant au répertoire local en cours.

#!/usr/bin/env python
 
import os
import sys
 
if len(sys.argv) < 2:
    print 'please enter a command'
    sys.exit(-1)
 
command = ' '.join(sys.argv[1:])
remote_hostname = os.path.abspath('.').replace(os.environ['HOME']+'/mnt/', '').split('/')[0]
remote_path = os.path.abspath('.').replace(os.environ['HOME']+'/mnt/%s/'%remote_hostname, '')
os.system('ssh %s "cd %s; %s"' % (remote_hostname, remote_path, command))

Utilisation :

$ sshdo git status

Par contre il faut respecter cette arborescence ~/mnt/hostname pour que ça fonctionne.

jeudi, septembre 17 2009

GNU screen automatique au login

Quand je me connecte à une machine par SSH, et que je fais des opérations plutôt longues, quelle n'est pas ma (mauvaise) surprise lorsque la connexion coupe, et que je perds le shell en cours. Bien entendu, GNU screen est fait pour ça !

Seulement, je ne pense jamais à l'utiliser. Alors j'ai mis la ligne suivante dans .profile :

[ -x /usr/bin/screen ] && (screen -r || screen)

Si un screen existe déjà, il s'y connecte (option -r), sinon il en lance un.

D'autre part, ce qui m'embête avec screen, c'est le raccourci C-a dont je me sers sans arrêt pour revenir au début de la ligne. Je l'ai changé par C-z dans .screenrc :

escape ^Zz

Et pour scroller (remplacement de shift-pgup/pgdown) ? C-z ESC puis pgup/pgdown, flèches, ou roulette souris.

Là, plus d'excuse pour ne pas utiliser screen.

jeudi, septembre 10 2009

substitutions de commandes bash

Sous Bash, je connaissais la substitution de commande, avec $(cmd) ou `cmd`, par exemple :

$ grep 'body' $(find -name '*.html')

Par contre je découvre la substitution de processus (process substtitution en anglais) : <(cmd) ou >(cmd) C'est pareil, sauf que le résultat de la commande est considéré comme un fichier (un lien depuis /dev/fd vers un pipe en réalité) et non comme une string.

C'est utile avec des commandes travaillant sur des noms de fichiers et ne sachant pas prendre en compte l'entrée standard (stdin).

Par exemple, j'ai écrit un script Python qui extrait les adresses email d'un fichier fourni en paramètres et les affiche sur la sortie standard :

$ extract-emails.py file.txt
$ cat *.txt | extract-emails.py  => erreur, le script ne sait pas faire
$ extract-emails.py <(cat *.txt)

On peut utiliser la forme >(cmd) qui fournit l'entrée standard à la commande cmd.

Exemple de la vie réelle : on utilise git et on veut connaître les fichiers du dépôt n'ayant pas changé depuis les 100 derniers commits :

$ comm -13 <(git diff --name-only HEAD~100 | sort) <(git ls-files | sort)

La commande comm prend 2 fichiers en entrée. Le premier (git diff) fournit la liste des fichiers ayant changé, le second la liste totale des fichiers. La liste des fichiers n'ayant pas changé est la différence du deuxième et du premier, et c'est le rôle de «comm -13».

LodgeIt! le pastebin libre

J'ai découvert le pastebin LodgeIt! dont le code source est libre.

LodgeIt! est écrit en Python et utilise Pygments pour la coloration syntaxique (même auteur).

L'auteur a également écrit un plugin Vim permettant d'envoyer du code directement depuis Vim en tapant ":Lodgeit".

Et comme le code source est libre, il est possible d'installer son propre serveur LodgeIt!.

jeudi, août 20 2009

démarrer gnome-terminal avec un encodage différent

Pour lancer un gnome-terminal en iso-8859-1, par exemple :

$ env LANG=fr_FR.ISO-8859-1 gnome-terminal --disable-factory

synchro bi-directionnelle par FTP

Synchroniser un site web par FTP, c'est ça peut se faire :

  • à la main en uploadant / downloadant les fichiers dans un client FTP

C'est pénible et on ne s'y retrouve plus.

  • avec lftp et ses commandes mirror / reverse-mirror

C'est long car il parcourt toute l'arborescence. Et la synchro est unidirectionnelle, comme le mot «mirror» l'indique.

Ils utilisent un cache qui accélère grandement la synchro. Cependant le cache doit être stocké au même endroit que les sources du site web, par exemple dans le même dépôt Git. Sinon, il faut le reconstruire à chaque synchro et on perd l'intérêt d'avoir un cache. Cela est faisable mais en pratique j'ai trouvé ça lourd.

De plus, je crois ne pas me tromper, mais la synchro est unidirectionnelle.

Dans mon cas, je souhaite synchroniser un wiki (dokuwiki) dont les fichiers peuvent avoir changé à la fois sur le serveur et sur le client. Il me faut donc une synchronisation bi-directionnelle. J'ai pensé à l'outil Unison qui gère très bien la synchro bi-directionnelle, avec une interface texte en console ou GTK.

Problème : Unison travaille en local ou par SSH, mais pas par FTP.

Solution : utiliser curlftpfs

$ curlftpfs ftp://login:pass@ftp.blabla.org/ /mnt/ftp
$ unison -root www -root /mnt/ftp -force www
$ fusermount -u /mnt/ftp

L'affaire est dans le sac : Unison croit qu'il synchronise deux répertoires locaux. Reste à résoudre les conflits éventuels, et c'est parti pour une synchro. Problème : curlftpfs est lent, il doit sûrement y avoir moyen de lui ajouter un cache, à suivre...

Pour comprendre les options de la ligne de commande unison : RTFM !

lundi, août 3 2009

n95 usb-storage cassé, vive ObexFS

Mon Nokia N95 8GB reboote systématiquement lorsque je le branche en USB. Peu importe que je monte le système de fichiers ou non, il suffit que je branche la prise USB et il reboote sans prévenir. Cela ne se passait pas ainsi lorsque je l'ai acheté, quelque chose a dû se casser, ou c'est le noyau qui fait ça. D'un autre côté, sous Windows, le même problème survient.

Mais passons, car j'ai trouvé une solution : ObexFS en Bluetooth. Nautilus permet d'ouvrir le contenu de mon téléphone grâce à gnome-bluetooth, mais il passe par GVFS. Étant donné que je souhaite utiliser rsync pour sauvegarder le contenu de mon téléphone, cela pose problème. ObexFS est un système de fichiers en espace utilisateur s'appuyant sur FUSE.

Pour s'en servir :

  • il faut installer le paquet obexfs et bluetooth
  • l'utilisateur doit appartenir au groupe fuse
  • il faut identifier l'adresse BD_ADDR (équivalent de MAC pour ethernet) du téléphone (hcitool scan)
  • il faut ajouter ceci dans le fstab :
obexfs#-bXX:XX:XX:XX:XX:XX /mnt/n95 fuse user,fsname=obexfs#-bXX:XX:XX:XX:XX:XX 0 0

(remplacer XX:XX:XX:XX:XX:XX par l'adresse BD_ADDR de votre périphérique)

  • créer le répertoire /mnt/n95 (groupe fuse, avec g+w)
$ mount /mnt/n95
$ ls /mnt/n95
$ umount /mnt/n95

vendredi, juin 12 2009

Nouvelle ergonomie d'écran

Révolutionnaire !

Une nouvelle façon d'utiliser son écran, un peu comme un ordinateur portable :

écran ergonomique

Le secret :

$ xrandr -o inverted

Dans le souci de respecter le droit d'auteur, les crédits photo vont à Monsieur CSMEU.

jeudi, mai 7 2009

performance tip: disable smooth scroll in iceweasel (firefox)

about:config

set key general.smoothScroll to false.

Or, in preferences.js:

user_pref("general.smoothScroll", false);

jeudi, avril 2 2009

lorsque less se prend pour tail

D'habitude j'utilise tail -f pour visualiser un log en temps réel.

D'habitude l'utilise less pour parcourir un log.

Et je passe de l'un à l'autre plusieurs fois...

J'ai découvert la commande F de less, qui permet de faire comme tail -f. Ctrl-C revient au mode normal de less.

man less

mardi, mars 31 2009

Black-out de mon blog contre la loi HADOPI

Contre la loi HADOPI malvenue, je place un rectangle noir sur mon site web.

« La vente de la copie n’est pas un modèle économique viable. » (Paul Krugman, prix Nobel d’Economie 2008) source : article Marianne

Dans un article du 14 mars 2008, la revue Marianne publie un article contenant un document officiel qui explique que l'implémentation du dispositif technique (le mouchard) permettant la mise en œuvre d'HADOPI sera affectée par des limitations inhérentes à Internet, limitations qui ne pourront être «ni rapidement ni pleinement surmontées».

Moralité : le gouvernement a d'excellents conseillers techniques, mais les «conseillers lobbyistes» postillonnent plus fort.

jeudi, mars 26 2009

alix mon petit moineau

J'ai acheté une carte mère Alix 2C3 fanless avec son boitier et son alimentation. De plus, une carte compact flash SanDisk Extreme IV de 8go (hautes performances).

Ceci pour réaliser un mini serveur fanless (sans ventilateur) qui tourne 24h/24 chez moi. J'habite un petit studio et je ne veux pas d'un PC normal car il ferait trop de bruit la nuit.

Pourquoi diable ?

L'idée m'est apparue comme évidente suite au visionnage de la conférence de Benjamin Bayart Internet libre ou Minitel 2.0. J'en ai retenu que le Web était bien loin du maillage décentralisé qu'avaient imaginé ses créateurs, où chacun publie ses données mais les héberge lui-même. Aujourd'hui on est plutôt sur un modèle où monsieur tout-le-monde publie ses photos sur flickr, ses agendas sur facebook et ses mails chez gmail (ce qui est mon cas jusqu'à présent).

De plus en plus de constructeurs proposent des machines avec des interfaces simplifiées (eeePC et consorts), et je vois bien arriver d'ici peu des outils de publication.

En tant qu'informaticien, je ne veux pas attendre et dès à présent je souhaite mettre en œuvre ces concepts chez moi. Je souhaite également participer à l'élaboration de logiciels libres facilitant la publication et l'hébergement de ses propres données.

Allons-y !

La machine dispose d'un processeur à 500 MHz AMD Geode LX800, de 256 MB DDR DRAM, d'un lecteur de carte compact flash et d'une alimentation DC jack min. 7V à max. 20V et sans ventilateur. Autrement dit ça consomme que dalle !

J'ai donc installé la distribution Voyage Linux qui est dérivée de Debian, et utilise les repository officiels de Debian. L'avantage est qu'elle est toute paramétrée pour le matériel en question.

Comme je n'ai pas de câble série null-modem, j'ai opté pour une installation depuis mon PC habituel avec un lecteur de carte compact flash. L'assistant d'installation de Voyage Linux permet de copier le système très rapidement sur la carte compact flash, après quelques questions de configuration.

J'ai pu tester mon installation avec QEmu :

$ qemu /dev/sdb

Là, je peux configurer /etc/network/interfaces pour être sûr qu'au prochain démarrage, la machine alix aura la bonne IP.

auto eth1
iface eth1 inet static
       address 10.0.0.111
       netmask 255.255.255.0
       broadcast 10.0.0.255

Cette carte alix dispose de 3 ports ethernet, donc eth1 est celui du milieu (voir photo).

Je m'y connecte par SSH.

Avec apt-get, j'y ai installé lighttpd et php5-cgi pour l'instant, et ça fonctionne très bien.

alix 2c3

Performances

J'ai mesuré rapidos les performances d'écriture sur la carte compact flash et sur une clé USB (voir photo).

Compact flash :

cbenz@voyage:~$ time dd if=/dev/zero of=test.dat bs=1M count=500 conv=sync
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 35,355 s, 14,8 MB/s

real	0m43.110s
user	0m0.005s
sys	0m5.225s

Clé USB:

cbenz@voyage:~$ time dd if=/dev/zero of=/media/sda1/test.dat bs=1M count=500 conv=sync
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 87,7189 s, 6,0 MB/s

real	1m27.747s
user	0m0.008s
sys	0m7.677s

Conclusion : la carte Compact flash est bien plus rapide que la clé USB.

pourcentage d'avancement dans un file descriptor

Le répertoire /proc cache bien des secrets toujours intéressants à découvrir.

Question du jour : lorsqu'un processus ouvre un fichier en lecture, j'aimerais savoir à quelle position se trouve le curseur de lecture à l'intérieur du fichier. Et cela, bien entendu, sans programmer cela dans le programme qui lit le fichier : je veux trouver l'information par l'extérieur (le shell, ou un autre programme).

En l'occurence, je fais tourner un script Python qui parse linéairement un énorme fichier XML d'OpenStreetMap de 1.3gb, et je voudrais afficher le pourcentage d'avancement du parsing.

Le plus simple est de se situer au niveau des file descriptors ouverts par le processus. Tour d'horizon :

$ pidof python
8056
$ ls -l /proc/8056/fd
cbenz@marguerite:/proc/8056/fdinfo$ ls -l /proc/8056/fd
total 0
lrwx------ 1 cbenz ee 64 mar 26 11:28 0 -> /dev/pts/7
l-wx------ 1 cbenz ee 64 mar 26 11:28 1 -> /home/cbenz/projet/log
lrwx------ 1 cbenz ee 64 mar 26 11:28 2 -> /dev/pts/7
lr-x------ 1 cbenz ee 64 mar 26 11:28 3 -> /home/cbenz/projet/hexagone-latest.osm
lr-x------ 1 cbenz ee 64 mar 26 11:28 4 -> /home/cbenz/projet/hexagone-latest.osm

On voit que le processus 8056 ouvre 5 fichiers, et présentement le processus a ouvert hexagone-latest.osm 2 fois, ce qui est logique puisque mon script Python l'ouvre plusieurs fois (mais ce n'est pas le sujet).

Ensuite, il existe le répertoire fdinfo qui permet d'obtenir des informations sur les file descriptors ouverts. Par exemple le 4 :

cbenz@marguerite:~$ cat /proc/8056/fdinfo/4
pos:	211816448
flags:	0100000

Ce qui nous intéresse ici est l'information «pos», qui donne la position en octets depuis le début du fichier. Pour connaître la taille en octets du fichier :

cbenz@marguerite:~$ ls -lL --block-size=1 /proc/8056/fd/4
-rw-r--r-- 1 cbenz ee 1383266367 fév 26 03:31 /proc/8056/fd/4

Heureusement, mon grand-père m'a appris la règle de trois, un jour. En faisant une division, on devrait trouver le pourcentage.

Voici un script qui utilise ces connaissances pour afficher le pourcentage à la fin. Je l'ai appelé fd_percent.sh :

#!/bin/sh

function usage {
    echo 'usage: fd_percent.sh pid fd'
    exit -1
}

[ $# -gt 2 ] && usage
[ -z $1 ] && usage
[ -z $2 ] && usage

pid="$1"
fd="$2"

file_size=`ls --block-size=1 -lL /proc/$pid/fd/$fd | cut -d ' ' -f 5`
current_pos=`cat /proc/$pid/fdinfo/$fd | grep 'pos:' | cut -f 2`

percent=`echo $current_pos/$file_size*100 | bc -l`
percent_formatted=`env printf '%.2f
' $percent`

echo $percent_formatted

Exemple d'utilisation :

cbenz@marguerite:~$ fd_percent.sh 8056 4
15,87

Nickel, mission accomplie.

GNOME et les volumes amovibles

My new USB key.

Pour donner un label à la partition :

$ sudo dosfslabel /dev/sdb1 "Green Tiny"

Désormais GNOME monte le volume dans "/media/Green Tiny", et l'icône sur le bureau présente le label.

Simple, mais d'habitude je passais par les préférences de montage dans les propriétés du volume. Là, je nomme directement la partition.

Question : existe-t-il une interface graphique pour changer le label d'une partition ?

lundi, mars 23 2009

ssh: oops I shutdown my machine

aptitude install molly-guard

molly-guard protects machines from accidental shutdowns/reboots.

Si vous tapez halt ou reboot dans une session ssh, molly-guard vous demandera de confirmer : incroyablement utile !

mercredi, mars 18 2009

voyages-sncf.com vu de l'intérieur

Un commentaire sur linuxfr.org fournit un témoignage d'un gars qui a bossé pendant un an et demie sur le merveilleux site de la sncf : http://www.voyages-sncf.com

Au menu : dette technique, time to market et quelques conseils pour mieux utiliser ne pas tomber dans les nombreux pièges de ce site.

Perso, je suis assez fier d'avoir enfin réussi à réserver mon aller-retour Paris-Lille en moins de 15 minutes, à un bon prix. J'essaie depuis 2 jours au rythme d'erreurs, de site non disponible, d'erreurs de paiement, etc.

jeudi, mars 12 2009

Projet : Music Transcriber

Après avoir longtemps cherché un logiciel permettant de relever un moreau de musique sur papier (mélodie ou grille d'accords).

Bien entendu, si j'ai qualifié ce post de projet, c'est que je n'ai rien trouvé en logiciel libre.

Voilà la liste des logiciels propriétaires que j'ai trouvés :

Ah, le monde merveilleux du Shareware ! Cet article du Linux Journal présente les logiciels propriétaires sous GNU/Linux dédiés à la musique.

Note de vocabulaire : un relevé musical se traduit en anglais par transcription, mais en français une transcription est l'adaptation d'une composition à un médium — instrument ou voix humaine — pour lequel elle n'a pas été écrite initialement.

Plusieurs approches existent :

  • les logiciels qui disent faire tout automatiquement. Je n'y crois pas trop et ça ne m'intéresse pas.
  • les logiciels qui aident à faire le relevé avec des fonctions de navigation évoluées, ou de travail sur le son. Je préfère largement cette approche et c'est celle-ci que je choisis de mettre en œuvre.

Il peut être pratique d'utiliser une ou deux pédales commandées avec les pieds pour jouer et stopper le morceau de musique.

  • Cette page détaille les différentes pédales utilisables avec Express Scribe (logiciel propriétaire)
  • Cette page détaille les différentes pédales utilisables avec Transcribe! (logiciel propriétaire)
  • Cette page détaille l'utilisation des broches utilisées dans les câbles des pédales.

Voici une liste non exhaustive des fonctionnalités que je prévois d'implémenter :

  • affichage de la waveform (et peut-être du spectre)
  • repérage des parties du morceau grâce à des marqueurs
  • saisie de la grille d'accords
  • snap grid des mesures et des temps, avec peut-être détection du tempo
  • loops (nommés) avec pause réglable entre les répétitions
  • key bindings très accessibles, surtout pour les marqueurs et les loops (pourquoi pas des bindings pour le window manager, pour éviter d'avoir à donner le focus à l'appli)
  • changement du tempo en préservant le pitch
  • changement du pitch en préservant le tempo
  • détection des notes grâce à FFT
  • support des pédales

Les fonctionnalités du type equaliseur ne seront pas implémentées dans la mesure où un autre logiciel peut les prendre en charge (avec Jack).

Ceci est un premier jet, n'hésitez pas à commenter pour proposer des améliorations.

Je compte utiliser les technos suivantes :

  • Gtk
  • Gstreamer
  • Python
  • pourquoi pas Vala

Wiki de développement : cette page.

jeudi, mars 5 2009

Le ménage dans les paquets

Lister les paquets par taille occupée :

dpkg-query -W --showformat='${Installed-Size}\t${Package}
' | sort -n

Lister les paquets supprimés (apt-get remove) mais prenant encore un peu de place sur le disque (fichiers de configuration, etc) :

dpkg -l | grep '^rc' | awk '{print $2}'

ou

dpkg --get-selections |grep deinstall

Supprimer ces paquets :

aptitude purge $(dpkg -l | grep '^rc' | awk '{print $2}')

Utiliser deborphan (paquet à installer). Utiliser l'une de ces commandes (voir le man) puis purger avec aptitude :

deborphan
deborphan --libdevel
deborphan -a

x2x et ssh

Comment mutualiser un clavier et une souris entre plusieurs machines utilisant Xorg, à travers SSH.

Le copier-coller est pris en charge.

Au lieu de recopier cet article, je redirige :

http://www.cooldev.net/article-51-partager-le-clavier-et-la-souris-avec-x2x.html

mercredi, mars 4 2009

Désactiver Ctrl-Q dans Iceweasel (Firefox)

Pour personnaliser les raccourcis clavier dans Iceweasel, il existe l'extension keyconfig. Elle est toujours expérimentale.

http://forums.mozillazine.org/viewtopic.php?t=72994

https://addons.mozilla.org/en-US/firefox/addon/1537

- page 1 de 2