(Ca n’est pas un problème mais une solution, ça pourrait aller dans t&a mais ça requiert plus de tests)
J’ai récemment viré hal et dbus, seulement voilà, l’automount des clés USB j’aime bien, et je me voyais pas remplir mon fstab et je peux pas utiliser pmount (qui utilise hal vu qu’il foire en utilisant sysfs).
Ca me laisse donc comme seul choix de créer mon propre automounter dynamique avec udev directement, usbmount ne montant pas par label. Je pensais que celà se trouverait facilement sur google mais c’était pas le cas, notamment dans certains exemples, y a un problème d’accès concurrent sur le point de montage (cas des labels identiques non géré).
L’execution de commandes externes dans des règles udev étant bloquant, et connaissant la pauvreté syntaxique des règles udev, c’était pas forcément gagné, en plus je voulais pas de dépendances sur un script externe
Le plus gros problème est que, mon ipod pointe en /dev/sdX(sans chiffre), or j’ai une de mes clés usb avec une table des partitions foireuses où le block principal se monte alors qu’il ne le devrait pas - donc les régles fonctionnent mais toute partition valide pointant en /dev/sdX doit être mise en “liste blanche”.
Talk is cheap. Show me the code. - Linus Torvalds
# [b-z] car mon disque dur est en SATA.
KERNEL!="sd[b-z]*", GOTO="FIN"
# ne jamais laisser une variable d'environnement vide
ACTION=="add", ENV{mntopt}="-t auto"
ACTION=="add", ENV{mntpnt}="/media/%k"
# détermination du point de montage et du FS
ACTION=="add", PROGRAM=="/sbin/blkid -s TYPE -o value %N", RESULT=="vfat",\
ENV{mntopt}="-t vfat -o uid=1000"
ACTION=="add", PROGRAM=="/sbin/blkid -s LABEL -o value %N", RESULT!="" \
ENV{mntpnt}="/media/%c"
# on vérifie que le point de montage n'est pas déjà utilisé
# s'il l'est on redéfinit le point de montage à /media/%k qui est unique
ACTION=="add", PROGRAM!="/bin/mountpoint $env{mntpnt}", \
GOTO="MONTER"
ACTION=="add", ENV{mntpnt}="/media/%k"
LABEL="MONTER"
# montage commun
ACTION=="add", KERNEL=="sd[b-z]?", \
RUN+="/bin/mkdir -p $env{mntpnt}"
ACTION=="add", KERNEL=="sd[b-z]?", \
RUN+="/bin/mount $env{mntopt} %N $env{mntpnt}"
# exception de l'Ipod >.<
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{product}=="iPod", \
RUN+="/bin/mkdir $env{mntpnt}"
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{product}=="iPod", \
RUN+="/bin/mount $env{mntopt} %N $env{mntpnt}"
# umount commun à tous les périphs
ACTION=="remove", KERNEL=="sd[b-z]*", \
RUN+="/bin/umount -l %N"
ACTION=="remove", KERNEL=="sd[b-z]*", \
RUN+="/bin/rmdir $env{mntpnt}"
LABEL="FIN"
A noter que /media aurait pu être mis dans une variable…
Ca marche impecc sur mes 2 machines, comme avec hal+dbus+ivman - 20MB de ram et du polling en moins en bonus - c’est appréciable ! De plus toutes les commandes utilisées appartiennent à des paquets de base et vitaux (e2fsprogs, initscripts, coreutils), on peut donc mettre en place le script dès le premier reboot après installation !
:wq!