Script pour monter en auto les clé USB

Bon je galère un poil là je me suis appuyer sur ce script pour une bonne base

http://www.debian-fr.org/automount-en-regles-udev-uniquement-t24845.html#p310289

J’ai pour l’instant commencer sérieusement la lecture de ceci :

https://wiki.archlinux.org/index.php/Udev#Auto_mounting_USB_devices

En particulier la partie sur le chiffrement et la prise en charge des cartes SD.

Je rencontre un souci pour l’instant assez ennuyeux mais surement pas grave depuis le début d’après midi avec le premier script de mougly.
Les clés USB monte bien mais ne se démonte pas bien, de plus les entrées dans le fstab persistent ( j’ai surement dût faire une énorme gaffe c’est pour ça que j’attaque la relecture complète ).
Et je cherche aussi le moyen pour pouvoir “binder” le montage et le démontage de partition sur disque dur USB.

Je repasserai ce soir ( petite tête blonde envahissante à l’heure actuelle :005 :005 ) pour vous dire ce qu’il en est si jamais des gens ont des idées d’où ça peut provenir n’hésitez pas j’aimerai bien aboutir rapidement sur cet “automont” de clé USB et de disque dur.

  • EDIT - Ouhps le Tajine m’a cloué au canapé hier soir :118

Bon j’ai fait une relecture te comparer un peut au script de mougly et j’ai donc bel et bien cerner le souci, le “fstab” n’est pas re écris au démontage de la clé USB du coup après plusieurs branchement de la même clé USB mon fstab est littéralement pollué :confused: .

Du coup ça me saoul je vois pas où ça coince dans le script :confused:

[code]#!/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/clochette/media" | awk '{print $2}' | sed -e 's|/home/clochette/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[/code]

les règles associé :

[code]# ne jamais laisser une variable d’environnement vide
ACTION==“add”, ENV{mntopt}="-t auto"
ACTION==“add”, ENV{mntpnt}="/home/clochette/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/clochette/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/clochette/media/%k qui est unique

ACTION==“add”, PROGRAM!="/bin/mountpoint $env{mntpnt}", GOTO=“MONTER”
ACTION==“add”, ENV{mntpnt}="/home/clochette/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_fstab.sh %k"
ACTION==“remove”, ENV{ID_BUS}==“usb”, ENV{SUBSYSTEM}==“block”, ENV{ID_FS_TYPE}!="" , RUN+="/lib/udev/usb_fstab.sh %k"[/code]

d’où pourrait provenir ce souci :think:

bon j’ai commencé à revoir de fond en comble les règles de montage pour inclure le déchiffrement à la volée d’une carte SD qui me sert habituellement pour stocker mes différentes clés de chiffrement.

Maintenant ce qui me gène c’est la partie automatique du montage des clés je ne pige toujours pas pourquoi le fstab n’est pas re écrit au propre après démontage des clés :confused:

Salut Clochette,
Sans vouloir offenser qui que ce soit, il me semble que modifier le fstab en dynamique afin de monter des périphériques amovibles n’est pas la bonne approche.

En effet, udev.d à été créer pour éviter cela ! (enfin entre autres :wink:). Car le fstab est plutôt voué à une gestion statique des mémoires masse. A l’installation du système, ajout d’un disque fixe, à la limite montage d’une clé pour l’administrateur qui vient souvent sur la station. Vouloir bidouiller le fstab c’est prendre des risques énormes pour le système. En effet, imagine qu’un bogue se glisse dans ton script, après une modification pour amélioration par exemple, te détériore ton fstab… Tu risques de ne plus pouvoir redémarrer ton système, et là, bonjour le rescuedisk ! et encore si tu as les bonnes sauvegardes, ou bien il faut tout reprendre à la main ! Pas très glamour…

Donc le chef d’orchestre ne doit pas être un script, mais bien le démon udev.d. Il fait tout le travail pour toi, sous réserve des bonnes règles (les fameuses rules).

C’est pour pourquoi, je t’engage vivement à lire les documents pointés par les liens suivants :
http://www.reactivated.net/writing_udev_rules.html
http://www.linuxjournal.com/article/7316?page=0,0

Personnellement, j’utilise souvent des règles comme :

Attribution d’un lien symbolique pour la clé USB Kingston 512Mo

ENV{ID_FS_LABEL}==“PH_KING_512”, ENV{ID_FS_UUID}==“9CE4-0FB7”, SUBSYSTEM==“block”, SYMLINK+="cle_USB_photo_kingston_512"
Puis, je monte à la main, avec pmount /dev/le_lien_symbolique_du_periph, en l’occurrence /dev/cle_USB_photo_kingston_512.
Et un pumount pour démonter. Une fois cela fait, udev.d supprime automatiquement les lien et le périphérique associé. Magique !
RUN+=“un_script” peut servir pour le montage automatique.

Une dernière chose… udevadm a un tas d’outils très pratiques (monitor, info…). n’hésite pas à me demander des renseignements…
Bon courage.

[quote=“valrik”]Salut Clochette,
Sans vouloir offenser qui que ce soit, il me semble que modifier le fstab en dynamique afin de monter des périphériques amovibles n’est pas la bonne approche.

En effet, udev.d à été créer pour éviter cela ! (enfin entre autres :wink:). Car le fstab est plutôt voué à une gestion statique des mémoires masse. A l’installation du système, ajout d’un disque fixe, à la limite montage d’une clé pour l’administrateur qui vient souvent sur la station. Vouloir bidouiller le fstab c’est prendre des risques énormes pour le système. En effet, imagine qu’un bogue se glisse dans ton script, après une modification pour amélioration par exemple, te détériore ton fstab… Tu risques de ne plus pouvoir redémarrer ton système, et là, bonjour le rescuedisk ! et encore si tu as les bonnes sauvegardes, ou bien il faut tout reprendre à la main ! Pas très glamour…

Donc le chef d’orchestre ne doit pas être un script, mais bien le démon udev.d. Il fait tout le travail pour toi, sous réserve des bonnes règles (les fameuses rules).

C’est pour pourquoi, je t’engage vivement à lire les documents pointés par les liens suivants :
http://www.reactivated.net/writing_udev_rules.html
http://www.linuxjournal.com/article/7316?page=0,0

Personnellement, j’utilise souvent des règles comme :

Attribution d’un lien symbolique pour la clé USB Kingston 512Mo

ENV{ID_FS_LABEL}==“PH_KING_512”, ENV{ID_FS_UUID}==“9CE4-0FB7”, SUBSYSTEM==“block”, SYMLINK+=“cle_USB_photo_kingston_512”
Puis, je monte à la main, avec pmount /dev/le_lien_symbolique_du_periph, en l’occurrence /dev/cle_USB_photo_kingston_512.
Et un pumount pour démonter. Une fois cela fait, udev.d supprime automatiquement les lien et le périphérique associé. Magique !
RUN+=“un_script” peut servir pour le montage automatique.

Une dernière chose… udevadm a un tas d’outils très pratiques (monitor, info…). n’hésite pas à me demander des renseignements…
Bon courage.[/quote]

Mon di… tu me sauva la vie j’épluche dès ce soir la documentation et dès que j’ai le temps je travail dessus :033

UHu uhhuh je viens de trouver pmount dans le dépôt experimental qui n’utilise plus hal du coup plus besoin de script pour tordu :033

Et il monte automatiquement tes clés lors de leur insertion sans aucune intervention de ta part ?

Non mais je reprends le problème autrement, et je pense que pour cette fin de semaine j’aurai eu le temps de faire le tour des différentes possibilités donné par “pmount” ( soit un petit bout de code dans mon bashrc, soit par le biais d’un script rattaché à un raccourci clavier, soit une règle udev, voir même une entrée dans “Dmenu” je suis pas encore décidé car ça à du bon aussi de choisir quand monter la clé ).

  • EDIT - d’ailleurs en écrivant ces quelques lignes j’ai à mon avis touché le point sensible … Dmenu … :083