# Automount en règles udev uniquement :)

**URL:** <https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 9:15 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004 "2016-02-20T21:15:28Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 20, 2016, 9:15 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/1 "2016-02-20T21:15:28Z")

</div>

(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

```auto
# [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! ![:smt006](https://www.debian-fr.org/uploads/default/original/1X/924eb3db8bedad6a0d333b02031d3c6a9af9d9c5.gif)

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 20, 2016, 9:15 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/2 "2016-02-20T21:15:33Z")

</div>

Salut,

J’attends les tests et l’approbation de le passer en T&A.

Je n’ai pas les moyens de participer aux tests. Un MP quand vous serez fixé 🙂

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 9:15 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/3 "2016-02-20T21:15:34Z")

</div>

Sur ce point, j’ai déjà fait un paquet modifiant /etc/fstab à la volée et créant le répertoire /media/ correspondant avec udev. Paquet plugusb sur  
deb [boisson.homeip.net/debian](http://boisson.homeip.net/debian) lenny divers  
(ou squeeze, etch sarge, woody…)

---

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 20, 2016, 9:15 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/4 "2016-02-20T21:15:41Z")

</div>

[quote=“fran.b”]Sur ce point, j’ai déjà fait un paquet modifiant /etc/fstab à la volée et créant le répertoire /media/ correspondant avec udev. Paquet plugusb sur  
deb [boisson.homeip.net/debian](http://boisson.homeip.net/debian) lenny divers  
(ou squeeze, etch sarge, woody…)[/quote]  
J’avais essayé en premier lieu, mais le problème c’est que j’ai absolumenet besoin d’un point de montage suivant le label s’il existe, donc j’aurais du modifier ton script, ce qui me revient au même que faire mes propres règles.

Je t’explique, j’ai un script qui selon le périphérique de stockage de masse USB branché, effectue certaines actions, ça va du rsync à l’import de photos, le problème est que je veux que cela ne soit pas automatique. J’ai donc besoin de savoir si tel périphérique avec le label X est monté.

Si je monte par noeud, je suis obligé de faire:

```auto
if mountpoint /media/$(basename /dev/disk/by-label/UNLABEL); then
# quelque chose, et je devrais assigner le point de montage à une variable en plus
fi
```

Par label maintenant:

```auto
# avec les règles udev plus haut, c'est déjà monté - pas besoin de vérifier
if [-d /media/label]; then 
# quelque chose
fi
```

Forcément l’execution du deuxième code est largement plus rapide, je sors mon vieux thinkpad, et je regarde la difference, le script gérant 17 périphériques USB, sans en brancher un:

```auto
# montage par noeud:
$ time usbmagic 
real 0m1.001s
user 0m0.274s
sys 0m0.658s

# montage par label:
$ time usbmagic
real 0m0.364s
user 0m0.000s
sys 0m0.020s
```

Bon, ok, on reste dans le domaine de la seconde, je ratiocine là, par contre le pire reste dans les accès disques - et ça niveau batterie de portable, ça pardonne pas 😉

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:16 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/5 "2016-02-20T21:16:00Z")

</div>

Ça m’intéresserais bien mais je ne sais pas comment virer hal sans virer xorg…

---

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 20, 2016, 9:16 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/6 "2016-02-20T21:16:02Z")

</div>

> [@](#):
>
> Ça m’intéresserais bien mais je ne sais pas comment virer hal sans virer xorg…

Y a une dépendance dure sur xorg en testing/sid, ça a fait des vagues sur certaines ml 😒 La solution la plus sale c’est de virer hald au boot avec update-rc.d - et ce à chaque update.

La plus longue mais qui s’avère la plus propre est de repackager via les sources de xorg, je te fais pas de dessins, par contre tu “localises” ton build de xorg, en gros:

```auto
apt-get source xserver-xorg
mv xserver-xorg_x.x xserver-xorg_x.x-misterfreez0
cat <<EOF > xserver-xorg_x.x-misterfreez0/debian/changelog
xserver-xorg (x.x-misterfreez0) testing; urgency=low

  * quelque chose, c'est important
 
 -- Misterfreez <mister@freez.fr> Sat, 26 Dec 2009 18:52:46 +0100
EOF
dpkg-buildpackage ...
```

La version locale sera toujours préférée à celle du dépot, sauf si ton /etc/apt/preferences differe des valeurs par défaut.

Ensuite, tu vas surement avoir besoin de ça:

```auto
$ cat /etc/apt/apt.conf
APT::Install-Recommends "0";
APT::Install-Suggests "0";
# apt-get update
```

dans la mesure où par défaut apt installe les recommends - dont dbus(-x11), néanmoins certains paquets devront être tout de même repackagés, ce qui est un peu chiant en testing…

Et enfin, pas oublier:

```auto
# apt-get install xserver-xorg-input-mouse xserver-xorg-input-keyboard
# cat /etc/X11/xorg.conf
[...]
Section "ServerLayout"
        [...]
        # desactivation du support hal pour le hotplug
        Option "AutoAddDevices" "False"
        Option "AllowEmptyInput" "False"
EndSection
[...]
```

Bref, prépares toi à un peu de bricolage si tu veux vraiment le faire, surtout que l’interet n’est pas si énorme que ça sur une machine récente.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 9:16 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/7 "2016-02-20T21:16:02Z")

</div>

Houla houla, non quitte à être crade autant le faire proprement. Pour virer une dépendance d’un paquet:

[code]# cp paquet.deb /tmp

# cd /tmp

# mkdir gre

# dpkg-deb -x paquet.deb gre

# cd gre

# dpkg-deb -e …/paquet.deb

# emacs DEBIAN/control

[/code]  
là virer les dépendances enquiquinantes

```auto

```

et voilà…

---

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 20, 2016, 9:16 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/8 "2016-02-20T21:16:03Z")

</div>

[quote=“fran.b”]Houla houla, non quitte à être crade autant le faire proprement. Pour virer une dépendance d’un paquet:  
[/quote]  
Ca ne marche pas si le rules est pas modifié:  
gtkpod: missing ‘/usr/lib/libdbus-1.so.3’

Je vois pas ce qu’il y a de sale à prendre un paquet Debian, le “localiser” en modifiant le nécessaire dans /debian, ça marche nickel:  
[frwendling.free.fr/slimfast/lenn … 1\_i386.deb](http://frwendling.free.fr/slimfast/lenny/gtkpod_0.99.12-3-knuck1_i386.deb)

```auto
$ lintian gtkpod_0.99.12-3-knuck1_i386.deb
W: gtkpod: debian-changelog-line-too-long line 3
W: gtkpod: spelling-error-in-changelog dependancies dependencies
```

J’ai oublié la mise en forme du changelog 😒

Enfin, tu dois avoir tes raisons de dire ça 🙂 (edit: ah j’ai compris, je presuppose que Misterfreez le sais déjà !)

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 9:16 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/9 "2016-02-20T21:16:03Z")

</div>

Ta méthode consiste à recompiler le paquet en virant les dépendances. Il faut dans ce cas non seulement virer les dépendances mais aussi adapter le «rules» i.e les options de fabrication sinon ça ne marchera pas à tous les coups. Ma méthode consiste juste à virer la dépendance avec hal du paquet. Ce sont les mêmes binaires simplement le paquet ne demande plus l’installation d’autres paquets. C’est plus simple mais plus «crade». Ici tu as constaté que tout marchait bien sans hal. Il te suffit juste de virer «hal» des dépendances du paquet binaire parce que là, tu lui demandes de recompiler tout Xorg à vue de nez…

---

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 20, 2016, 9:16 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/10 "2016-02-20T21:16:03Z")

</div>

> [@](#):
>
> Ta méthode consiste à recompiler le paquet en virant les dépendances. Il faut dans ce cas non seulement virer les dépendances mais aussi adapter le «rules» i.e les options de fabrication sinon ça ne marchera pas à tous les coups. Ma méthode consiste juste à virer la dépendance avec hal du paquet. Ce sont les mêmes binaires simplement le paquet ne demande plus l’installation d’autres paquets. C’est plus simple mais plus «crade». Ici tu as constaté que tout marchait bien sans hal. Il te suffit juste de virer «hal» des dépendances du paquet binaire parce que là, tu lui demandes de recompiler tout Xorg à vue de nez…

Ok, je comprends mieux, trop l’habitude faire avec les “moyens du bord” (et de l’interface chaise clavier), je modifie toujours le rules, control, changelog et je repackage - j’aurais pas oser toucher directement au paquet binaire 😉

Sinon, oui je suis sur ca se désactive à la compilation si on le précise dans rules, je peux mettre ma main à couper (–disable-config-dbus, --disable-config-hal).

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:16 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/11 "2016-02-20T21:16:03Z")

</div>

> [@](#):
>
> `# emacs DEBIAN/control`

J’appelle ça du prosélytisme 😆

Pourquoi ne pas utiliser editor ?  
Surtout que chez moi je me suis fais un petit wrapper :

[code]#!/bin/sh

if [$[$RANDOM%2] -eq 0 ] ; then  
exec vim $@  
else  
exec emacs -nw $@  
fi[/code]

Sinon je verrais plus tard pour faire ces changements.

---

<div class="post-metadata">

**Author:** ![eol](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/b782af/32.png) [@eol](https://www.debian-fr.org/u/eol)\
**Post date:** [Février 20, 2016, 9:28 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/12 "2016-02-20T21:28:01Z")

</div>

[quote=“MisterFreez”]Ça m’intéresserais bien mais je ne sais pas comment virer hal sans virer xorg…[/quote]Ça doit pas être très compliqué, sur ma machine il n’y a pas hal et concernant xorg, j’ai tout ces paquets d’installé :`~$ dpkg -l |grep xorg
ii xserver-xorg 1:7.5+3 the X.Org X server
ii xserver-xorg-core 2:1.7.4-2 Xorg X server - core server
ii xserver-xorg-input-evdev 1:2.3.2-3 X.Org X server -- evdev input driver
ii xserver-xorg-input-kbd 1:1.4.0-1 X.Org X server -- keyboard input driver
ii xserver-xorg-input-mouse 1:1.5.0-1 X.Org X server -- mouse input driver
ii xserver-xorg-input-synaptics 1.2.1-1 Synaptics TouchPad driver for X.Org server
ii xserver-xorg-video-intel 2:2.9.1-2 X.Org X server -- Intel i8xx, i9xx display d`Ce qui est largement suffisant pour profiter de X.  
J’ai rien eu besoin de recompiler, aptitude permet ça tout seul.

@ knucky, pour l’instant j’utilise pmount (qui n’utilise pas forcément hal, juste libhal) mais si j’arrive à mettre ton topic en pratique je vais m’en débarasser ainsi que des derniers résidus de libhal.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:28 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/13 "2016-02-20T21:28:37Z")

</div>

Comment on fait pour l’installer (maintenant j’ai pu virer hal) ?  
J’ai copier dans un fichier /etc/udev/rules.d/60-automount.rules puis j’ai relancé udev.

Puis pleins d’espoire je branche ma clef usb et puis rien…

J’ai raté un truc ?

@fran \> plugusb monte par exemple dans /media/sdc1 ?

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 9:28 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/14 "2016-02-20T21:28:42Z")

</div>

plugusb crée le répertoire et fait une modification de /etc/fstab, c’est un peuy différent. Pour ce que tu veux faire, il te suffit de t’inspirer du script:

regle [udev.sh](http://udev.sh)

`ACTION=="add", ENV{SUBSYSTEM}=="block", ENV{ID_TYPE}=="floppy" , PROGRAM="/lib/udev/usb_fstab.sh %k"
ACTION=="add", ENV{SUBSYSTEM}=="block", ENV{ID_FS_TYPE}!="" , PROGRAM="/lib/udev/usb_fstab.sh %k"
ACTION=="remove", ENV{SUBSYSTEM}=="block", ENV{ID_TYPE}=="floppy" , PROGRAM="/lib/udev/usb_fstab.sh %k"
ACTION=="remove", ENV{SUBSYSTEM}=="block", ENV{ID_FS_TYPE}!="" , PROGRAM="/lib/udev/usb_fstab.sh %k"
`

fichier /lib/udev/usb\_fstab.sh que tu modifies:

[code]#!/bin/sh  
date \>\> /tmp/dev\_usb  
echo $ACTION \>\> /tmp/dev\_usb  
echo $1 $ID\_FS\_TYPE $ID\_TYPE \>\> /tmp/dev\_usb  
echo $ID\_SERIAL \>\> /tmp/dev\_usb  
echo “----------”\>\> /tmp/dev\_usb

if [“$ACTION” = “add”] ; then  
NOM=$1\_$ID\_SERIAL  
DEVICE=/dev/$1  
if [“$ID\_FS\_TYPE” = “”] ; then  
ID\_FS\_TYPE=auto  
fi  
while [-f /tmp/\_\_insertusb] ; do /bin/true ; done  
touch /tmp/\_\_insertusb  
mkdir -p /media/$1  
echo “#$NOM” \>\> /etc/fstab  
if grep -q "$DEVICE " /etc/fstab \> /dev/null ; then  
echo -n “#” \>\> /etc/fstab  
fi  
if [$ID\_FS\_TYPE = ntfs] ; then  
ID\_FS\_TYPE=ntfs-3g  
chmod 777 /media/$1  
fi  
echo $DEVICE /media/$1 $ID\_FS\_TYPE user,defaults 0 0 \>\> /etc/fstab

# ici tu peux faire le montage automatique…

```
rm /tmp/__insertusb

```

fi  
if [“$ACTION” = “remove”] ; then  
NOM=$1\_$ID\_SERIAL  
DEVICE=/dev/$1  
while [-f /tmp/fstab\_mod] ; do /bin/true ; done  
touch /tmp/fstab\_mod  
umount -f /media/$1  
rmdir /media/$1  
LISTE=`cat /etc/fstab | grep " /media" | awk '{print $2}' | sed -e 's|/media/||' | sort -u`  
cp /etc/fstab /tmp/fstab  
for device in $LISTE ; do  
if [! -d /media/$device] ; then  
grep -v $device’ ’ /tmp/fstab | grep -v $device’_’ \> /tmp/fstab_$device  
cp /tmp/fstab\_$device /tmp/fstab  
fi  
done  
if [`ls -l /tmp/fstab_$device | awk '{print $5}'` = “0”] ; then  
touch /tmp/panique.$1  
else  
mv /tmp/fstab\_$device /etc/fstab  
fi  
rm /tmp/fstab\_mod  
fi  
[/code]

---

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 20, 2016, 9:29 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/15 "2016-02-20T21:29:26Z")

</div>

[quote=“MisterFreez”]Comment on fait pour l’installer (maintenant j’ai pu virer hal) ?  
[/quote]  
J’ai mis ça dans /etc/udev/rules.d/10-local.rules, c’est à dire en première position - c’est peut être mauvais, mais j’ai jamais eu de problèmes, je mets aussi le démarrage/arret automatique de cups etc. dedans.

> [@](#):
>
> J’ai raté un truc ?

Non, mais faut pas oublier qu’un automounter en règles udev uniquement est encore considéré comme “fantaisiste” à l’heure actuelle, notamment parce que tu n’as aucune sortie de déboguage, c’est tout l’interêt des scripts comme plugusb où là t’as un controle intégral de ce qu’il se passe !

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 9:37 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/16 "2016-02-20T21:37:13Z")

</div>

Attention, j’ai oublié de préciser que /dev/sdb1 (par exemple) n’existe pas forcément au moment de l’appel du script, il faut donc en tenir compte (le créer si besoin…)

---

<div class="post-metadata">

**Author:** ![mougly](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/82dd89/32.png) [@mougly](https://www.debian-fr.org/u/mougly)\
**Post date:** [Février 20, 2016, 11:51 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/17 "2016-02-20T23:51:02Z")

</div>

Bonjour à tous,

Excusez moi de déterrer le sujet, mais je ne pense pas qu’il soit utile d’ouvrir un nouveau fil pour ça.

Ca fait quelques temps que je cherche une solution pour l’automount simple et perso (n’aime pas les FM qui le font, j’utilise XFE), et j’ai l’impression d’avoir presque trouvé. Par contre, je me pose quelques questions :

```auto
ACTION=="add", PROGRAM=="/sbin/blkid -s TYPE -o value %N", RESULT=="vfat",\
        ENV{mntopt}="-t vfat -o uid=1000"
```

C’est qui ce %N, j’ai trouvé %k, %n dans udev, mais lui ?

```auto

```

Pourquoi on ne retrouve pas cette condition dans le plugusb de fran.b ? Est ce que c’est grâce au ENV{SUBSYSTEM}==“block” ?

`
ACTION=="add", ENV{SUBSYSTEM}=="block", ENV{ID_FS_TYPE}!="" , PROGRAM="/lib/udev/usb_fstab.sh %k"`  
Si j’ai tout compris la doc de udev ([http://www.reactivated.net/writing\_udev\_rules.html#external-run](http://www.reactivated.net/writing_udev_rules.html#external-run) “PROGRAM is used for running programs which produce device names (and they shouldn’t do anything other than that).”), ne faudrait il pas plutôt utiliser RUN+= ?

J’ai quand même dpkg -i plugusb et je le trouve très bien, mais je cherche aussi à monter par label. Je voudrais donc modifier un peu le script et la règle (car je veux bien un script externe) ou modifier les règles de Knucky (quand même, j’aime bien la modif du fstab à la volée…)

Merci de vos lumières.

mougly

---

<div class="post-metadata">

**Author:** ![Knucky](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71e660/32.png) [@Knucky](https://www.debian-fr.org/u/Knucky)\
**Post date:** [Février 21, 2016, 12:09 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/18 "2016-02-21T00:09:43Z")

</div>

Salut,

Oui, c’est possible de faire passer le nom du noeud crée et aussi le label de la partition.

A noter que j’utilise à présent les règles qui se trouvent la : [wiki.archlinux.org/index.php/Udev](https://wiki.archlinux.org/index.php/Udev), et que cela fonctionne parfaitement.

Aussi [reactivated.net/writing\_udev\_rules.html](http://www.reactivated.net/writing_udev_rules.html) n’est pas obsolète, mais n’est plus exhaustif.

---

<div class="post-metadata">

**Author:** ![mougly](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/82dd89/32.png) [@mougly](https://www.debian-fr.org/u/mougly)\
**Post date:** [Février 21, 2016, 12:12 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/19 "2016-02-21T00:12:24Z")

</div>

Salut,

Finalement, j’ai bien tout lu les docs et je me suis concoté mon propre automount. Je vous le met si ça intéresse quelqu’un.

/etc/udev/rules.d/z99\_clef.rules

```auto
# ne jamais laisser une variable d'environnement vide
ACTION=="add", ENV{mntopt}="-t auto"
ACTION=="add", ENV{mntpnt}="/home/batbat/media/%k"
ACTION=="add", ENV{mntname}="usb_disk"

# détermination du point de montage et du FS
ACTION=="add", ENV{ID_BUS}=="usb", ENV{SUBSYSTEM}=="block", ENV{ID_FS_TYPE}!="" , PROGRAM=="/sbin/blkid -c /dev/null -s TYPE -o value %N", RESULT=="vfat",ENV{mntopt}="-t vfat -o uid=1000"
ACTION=="add", ENV{ID_BUS}=="usb", ENV{SUBSYSTEM}=="block", ENV{ID_FS_TYPE}!="" , PROGRAM=="/sbin/blkid -c /dev/null -s LABEL -o value %N", RESULT!="", ENV{mntname}="%c",ENV{mntpnt}="/home/batbat/media/$env{mntname}", 
# 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 Ã /home/batbat/media/%k qui est unique
ACTION=="add", PROGRAM!="/bin/mountpoint $env{mntpnt}", GOTO="MONTER"
ACTION=="add", ENV{mntpnt}="/home/batbat/media/%k", ENV{mntname}="usb_disk"

# Quoi faire
LABEL="MONTER"
ACTION=="add", ENV{ID_BUS}=="usb", ENV{SUBSYSTEM}=="block", ENV{ID_FS_TYPE}!="", RUN+="/lib/udev/usb_bat_fstab.sh %k"
ACTION=="remove", ENV{ID_BUS}=="usb", ENV{SUBSYSTEM}=="block", ENV{ID_FS_TYPE}!="" , RUN+="/lib/udev/usb_bat_fstab.sh %k"
```

et le /lib/udev/usb\_bat\_fstab.sh

```auto
#!/bin/bash
date >> /tmp/dev_usb
echo $ACTION >> /tmp/dev_usb
echo $1 $ID_FS_TYPE $ID_TYPE >> /tmp/dev_usb
echo $ID_SERIAL >> /tmp/dev_usb
echo `echo $mntpnt | tr ' ' '_'` $mntopt >> /tmp/dev_usb
echo "----------">> /tmp/dev_usb

#Ajustement pour les noms avec espace
v_=$IFS
IFS='
'

# Action ADD
if ["$ACTION" = "add"] ; then
    NOM=$1_$ID_SERIAL
    DEVICE=/dev/$1
    if ["$ID_FS_TYPE" = ""] ; then
	ID_FS_TYPE=auto
    fi
    while [-f /tmp/__insertusb] ; do /bin/true ; done
    touch /tmp/__insertusb
    mkdir -p `echo $mntpnt | tr ' ' '_'`
    echo "#$NOM" >> /etc/fstab
    if grep -q "$DEVICE " /etc/fstab > /dev/null ; then
	echo -n "#" >> /etc/fstab
    fi
    if [$ID_FS_TYPE = ntfs] ; then 
	ID_FS_TYPE=ntfs-3g
	chmod 777 `echo $mntpnt | tr ' ' '_'` 
    fi
    echo $DEVICE `echo $mntpnt | tr ' ' '_'` $ID_FS_TYPE users,defaults,uid=1000,gid=1000 0 0 >> /etc/fstab
    /bin/mount $DEVICE
    rm /tmp/__insertusb
fi

# Action REMOVE
if ["$ACTION" = "remove"] ; then
    NOM=$1_$ID_SERIAL
    DEVICE=/dev/$1
    while [-f /tmp/fstab_mod] ; do /bin/true ; done
    touch /tmp/fstab_mod
    /bin/umount -f `echo $mntpnt | tr ' ' '_'`
    /bin/rmdir `echo $mntpnt | tr ' ' '_'`
# echo "sed -e '/^#"$NOM"/{N;d}' /etc/fstab > /tmp/fstab_$1"> /tmp/edite.$1
# cp /etc/fstab /tmp/fstab.$1
# sh /tmp/edite.$1
    LISTE=`cat /etc/fstab | grep " /home/batbat/media" | awk '{print $2}' | sed -e 's|/home/batbat/media/||' | sort -u`
    cp /etc/fstab /tmp/fstab
    for device in $LISTE ; do
	if [! -d /home/batbat/media/$device] ; then
	    grep -v $device' ' /tmp/fstab | grep -v $device'_' > /tmp/fstab_$device
	    cp /tmp/fstab_$device /tmp/fstab
	fi
    done
    if [`ls -l /tmp/fstab_$device | awk '{print $5}'` = "0"] ; then
	touch /tmp/panique.$1
    else
	mv /tmp/fstab_$device /etc/fstab
    fi
    rm /tmp/fstab_mod
fi

IFS=$v_

exit 0
```

N.B. Le /sbin/blkid -c /dev/null sert à “outrepasser /etc/blkid.tab” (cf. [http://www.cepcasa.info/blog/?p=143](http://www.cepcasa.info/blog/?p=143))

On remarque quelques similitudes avec ce qui est publié plus haut …  
Merci à vous

mougly

EDIT du 4/12 : remplace $mntpnt par `echo $mntpnt | tr ' ' '_'` pour une meilleure gestion des noms avec espaces. Peut-être redondant avec v\_=$IFS ?

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 12:12 UTC](https://www.debian-fr.org/t/automount-en-regles-udev-uniquement/24004/20 "2016-02-21T00:12:37Z")

</div>

belle amélioration…
