LINUX.ORG.RU

Подскажите почему не работает правило udev

 , , ,


0

3

Собственно, написал правило udev которое будет запускать скрипт при появлении зашифрованной флешки:

SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="crypto_LUKS", ENV{ID_BUS}=="usb" RUN+="/opt/scripts/luxmount.sh"

Вот содержание скрипта:

#!/bin/env bash
DEVICE="$(blkid | grep LUKS | cut -d : -f1)"
export DEVICE
BLOCK="$(echo "$DEVICE" | cut -d / -f3)"
export BLOCK
REALUSER="$(who | grep ":0" | head -n1 | awk '{print($1)}')"
if [ -n "$DEVICE" ]; then
	cryptsetup -v luksOpen "$DEVICE" "$BLOCK"_crypt --key-file=/etc/luks-keys/disk_secret_key \
		2>&1 > "/tmp/cryptmount.log"
		mkdir -p "/media/$REALUSER/LUKS_USB"
		mount /dev/mapper/"$BLOCK"_crypt "/media/$REALUSER/LUKS_USB" 2>&1 >> "/tmp/cryptmount.log"
else
	exit 0
fi

При запуске скрипта в терминале он нормально отробатывает. Udev показывает что скрипт failed with exit code 32.

Конкретно mount /dev/mapper/«$BLOCK»_crypt «/media/$REALUSER/LUKS_USB» не выполняется. Не могу понять почему (для меня udev вообще штука крайне непонятная).


И чтоб два раза не писать, udev умеет сам передавать что он монтирует (sda1, sda2 …) что бы не искать грепом?

Ответ на: комментарий от pfg

Монтировать надобно от рута. Пробовал запускать через su и su root, ничего не меняется. От юзера соответственно тоже не монтируется. В Ksystemlog показывает что ошибка (то ли 32 то ли 34). Прописывание полных путей ничего не дает. Да и то, что скрипт создает папку в /media, куда юзер доступа не имеет, говорит о том что udev исполняет скрипт от рута…

Ничего не понимаю…

Vochatrak-az-ezm ()

Читаю ник этого участника как Vot-zachem-tak

// Постинг заблокирован: 5.1 Нецензурные выражения. Да ладно? Отсосите по второму разу )))

anonymous ()

Так с этим кажись разобрался.

Нужно заменить mount на systemd-mount и юдев чудесным образом начинает монтировать то что его просят.


На всякий случай спрошу еще раз: udev имеет переменные вида k% и т.д. Как я могу передать их скрипту монтирования из юдева?

Vochatrak-az-ezm ()