LinuxForum.Fans
Тема

Помогите подправить скрипт для авто монтирования флешек

Автор: XliN 31 сообщений 7581 просмотров
#239868
text

vb_ts3:~# cat /etc/udev/scripts/usb.sh
#! /bin/sh
#
# Mount Hotplug Device
#

. /etc/thinstation.env . $TS_GLOBAL

# Run post scripts for appropriate action run_scripts () { scriptdir=/etc/hotplug/scripts if [ -e $scriptdir/usb.$1 ] ; then (echo "`ls $scriptdir/usb.$1`") | while read script do $scriptdir/usb.$1/$script $devname done fi }

devname=`basename $DEVNAME`

case $ACTION in add)

if echo $devname | grep "/dev/sd$" > /dev/null ; then echo_log "We don't mount $devname directly" exit 0 fi

# add sync option to mount if set if [ "`make_caps $USB_STORAGE_SYNC`" == "OFF" ] ; then sync="" else sync="sync" fi

# add any of the optional USB mount options if set options="" if [ -n $USB_MOUNT_OPTIONS ] ; then options="$USB_MOUNT_OPTIONS" fi

# use a defined mount point directory mountdir="/mnt/usbdevice" # default if [ -n "$USB_MOUNT_DIR" ] ; then mountdir=$USB_MOUNT_DIR fi # create the usbdevice mount point if it doen't exist if [ ! -e "$mountdir" ]; then mkdir $mountdir fi

# get the volume info (including file system type and label blkid -o udev $DEVNAME > /tmp/volumeinfo . /tmp/volumeinfo rm /tmp/volumeinfo

# default the label to the device name label=$devname if [ -n "$USB_MOUNT_USELABEL" ] ;then if [ "`make_caps $USB_MOUNT_USELABEL`" == "YES" ] ; then # if the user has selected to use the volume label use it (if it exists) if [ -n "$ID_FS_LABEL" ] ; then label=$ID_FS_LABEL fi # if it has a value other than no, use it as the label if no volume label found elif [ "`make_caps $USB_MOUNT_USELABEL`" != "NO" ] ; then if [ -n "$ID_FS_LABEL" ] ; then label=$ID_FS_LABEL else label=$USB_MOUNT_USELABEL fi fi fi

mountpoint=$mountdir/$label

# cater for same labels etc., by adding a number suffix if it already exists let x=0 testmountpoint=$mountpoint while [ -e ${testmountpoint} ] do let x=x+1 testmountpoint=$mountpoint$x done if [ "$testmountpoint" != "$mountpoint" ] ; then mountpoint=$testmountpoint fi mkdir $mountpoint

# use the found file system type for vfat & ntfs or if supermount is not loaded (supermount has issues with vfat & ntfs) case $ID_FS_TYPE in vfat|ntfs) mount -t $ID_FS_TYPE -o $sync,codepage=866,iocharset=utf8 $DEVNAME $mountpoint ;; *) if check_module supermount ; then mount -t supermount -o fs=auto,dev=$DEVNAME,--,$sync,codepage=866,iocharset=utf8 $mountpoint else # Without supermount we'll just see if the FSTYPE is correct mount -t $ID_FS_TYPE -o $sync,codepage=866,iocharset=utf8 $DEVNAME $mountpoint fi ;; esac ls -la $mountpoint

if [ ! -e ~/.hotplug/${devname} ] ; then if [ ! -e ~/.hotplug ] ; then mkdir ~/.hotplug fi touch ~/.hotplug/${devname} fi echo "HOTPLUGMOUNTPOINT=$mountpoint" > ~/.hotplug/${devname} run_scripts $ACTION ;; remove) mountpoint="/mnt/usbdevice/${devname}" if [ -e ~/.hotplug/${devname} ] ; then . ~/.hotplug/${devname} mountpoint=$HOTPLUGMOUNTPOINT fi if [ -e ${mountpoint} ] ; then run_scripts $ACTION umount ${mountpoint} rmdir ${mountpoint} fi if [ -e ~/.hotplug/${devname} ] ; then rm ~/.hotplug/${devname} fi ;; esac

exit 0

Я вместо переменной $options поставил iocharset=utf8,codepage=866. Не помогло ((
Когда скрипт отробатывает, то вот с такими параметрами
[console]/dev/sdb1 on /mnt/usbdevice/sdb1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)[/console]
Я если честно не знаю, может и не udev отвечает за флешку, хотя
[console]vb_ts3:~# ls -la /etc/udev/rules.d/
total 24
drwxr-xr-x 2 root root 0 Mar 23 09:03 .
drwxr-xr-x 4 root root 0 Mar 22 14:44 ..
-rw-rw-r-- 1 1000 1000 191 Mar 22 14:37 00-vmwgfx.rules
-rw-rw-r-- 1 1000 1000 392 Mar 22 14:37 50-modeset.rules
-rw-rw-r-- 1 1000 1000 93 Mar 22 14:37 51-firmware.rules
-rw-r--r-- 1 root root 1060 Mar 22 14:44 60-pcmcia.rules
-rw-r--r-- 1 root root 482 Mar 23 09:03 70-persistent-net.rules
-rw-rw-r-- 1 1000 1000 1218 Mar 22 14:37 99-udev.rule[/console]
[console]vb_ts3:~# cat /etc/udev/rules.d/99-udev.rules
# There are a number of modifiers that are allowed to be used in some of the
# fields. See the udev man page for a full description of them.
#
# See the udev.rules.examples file for more examples of how to create rules
#


# Note you must use the RUN option if trying to use actual device in script

KERNEL=="fd[0-9]*", SYMLINK=="floppy/%n", RUN+="/etc/udev/scripts/floppy.sh"
KERNEL=="lp[0-9]*", SYMLINK=="printers/%n"

#Usb Keys
#KERNEL=="sd*", ACTION=="add", SUBSYSTEM=="usb", RUN+="/etc/udev/scripts/usb.sh", OPTIONS="last_rule"
#KERNEL=="sd*", ACTION=="remove", RUN+="/etc/udev/scripts/usb.sh", OPTIONS="last_rule"

#Usb Cdrom
#KERNEL=="sr*", ACTION=="add", SUBSYSTEM=="usb", RUN+="/etc/udev/scripts/usbcd.sh"
#KERNEL=="sr*", ACTION=="remove", RUN+="/etc/udev/scripts/usbcd.sh"

#IDE Devices
ENV{DEVTYPE}=="partition", RUN+="/etc/udev/scripts/scsi.sh", OPTIONS="last_rule"
SUBSYSTEM=="block", ENV{ID_CDROM}=="1", ACTION=="add", RUN+="/bin/start-stop-daemon -S -x /bin/cddetect -p /var/run/cddetect -m -b &"
SUBSYSTEM=="block", ENV{ID_CDROM}=="1", ACTION=="change", RUN+="/etc/udev/scripts/scsi.sh", OPTIONS="last_rule"

SUBSYSTEM!="net", GOTO="net_end"
RUN+="/etc/udev/scripts/net.sh"
LABEL="net_end"
[/console]

#239870

Меня смущает что #Usb Keys закоментирован

#239872

--=XliN=--, чем вызвана необходимость написания собственного скрипта? Готовые решения не подходят?

#239878

Мне если честно, то фиалетово. Это так в системе сделано. Пытаюсь найти концы. Задача, примонтировать флешку с нужными мне параметрами. Можно обойдя средства системы. Естественно автомонтирование нужно.
Можно это как то сделать? Добавить например новый файл типа 10-usbmount.rules. Что туда написать и сработает ли он первее и не перемонтирует ли флешку система своими приблудами?
ОС грущится через PXE и основана на CRUX

#239883
--=XliN=-- написал:
Добавить например новый файл типа 10-usbmount.rules. Что туда написать и сработает ли он первее и не перемонтирует ли флешку система своими приблудами?

У правил из /etc/udev/rules.d/ приоритет.

Гляньте для примера, у меня работало:
/etc/udev/rules.d/10-usb.rules

text

KERNEL!="sd[b-z][0-9]", GOTO="auto_mount_end"

IMPORT{program}="/sbin/blkid -o udev -p %N" ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}" ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -t auto -o rw,relatime,noexec,nodev,utf8 /dev/%k /media/%E{dir_name}"

ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"

LABEL="auto_mount_end"

#239885

--=XliN=--, моё предыдущее сообщение тоже самое, только короче. wink

#239887

Подскажи еще, как udev сказать чтобы он перечитал правила. Только что видел в гугле и потерял ((

#239888
--=XliN=-- написал:
Подскажи еще, как udev сказать чтобы он перечитал правила. Только что видел в гугле и потерял ((

Так в данном случае достаточно создать новое правило и «перетыкнуть» флешку.

#239889

Ну дык получилось. Сейчас попробую этот файл впихнуть в образ и протестить!!! Ура товарищи. Ура!!

#239895

Есть косяк. Когда первый раз вставляю флешку - белеберда. Выдерну и повторно вставлю. Все гуд. Как можно отловить скрипт который лезет вперед?

#239897

--=XliN=--, в /etc/udev/rules.d/ «дублирующих» правил не осталось?

#239910
Lupo Alberto написал:
в /etc/udev/rules.d/ «дублирующих» правил не осталось?

Остались, но на сколько я знаю udev берет первое и на нем останавливается. И дублирующее в 99

#239911

--=XliN=--, наверное, это так, если их функции идентичны.
Для «чистоты» эксперимента лучше оставить одно.
При загрузке системы флешка подключена?

#239912
Lupo Alberto написал:
При загрузке системы флешка подключена?

нет. Включаю после старта. Сейчас переделал. Пробую.

#239913

Впервый не верно, потом повторно
[console]/dev/sdb1 on /mnt/usbhd-sdb1 type vfat (rw,nodev,noexec,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/sdb1 on /mnt/usbdevice/sdb1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)[/console]
Два раза получается

#239915

Может удалить сам скрипт /etc/udev/scripts/usb.sh

UPD:
Удалил, он и без него в автомате лепет два раза.

#239924

Запустите команду и покажите вывод

text
udevadm test $(udevadm info -q path -n /dev/sdc1)

заменив, разумеется, /dev/sdc1 на устройство, соответствующее вашим реалиям.

#239926

Вот пожалуйста

Показать
run_command: calling: test
adm_test: version 181
This program is for debugging only, it does not run any program,
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

builtin_kmod_init: load module index
add_matching_files: unable to open '/run/udev/rules.d': No such file or directory
parse_file: reading '/etc/udev/rules.d/00-vmwgfx.rules' as rules file
parse_file: reading '/etc/udev/rules.d/10-usb.rules' as rules file
parse_file: reading '/lib/udev/rules.d/42-qemu-usb.rules' as rules file
parse_file: reading '/etc/udev/rules.d/50-modeset.rules' as rules file
parse_file: reading '/lib/udev/rules.d/50-udev-default.rules' as rules file
parse_file: reading '/etc/udev/rules.d/51-firmware.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-cdrom_id.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-alsa.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-input.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-serial.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage-tape.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-storage.rules' as rules file
parse_file: reading '/lib/udev/rules.d/60-persistent-v4l.rules' as rules file
parse_file: reading '/lib/udev/rules.d/61-accelerometer.rules' as rules file
parse_file: reading '/lib/udev/rules.d/69-xorg-vmmouse.rules' as rules file
parse_file: reading '/etc/udev/rules.d/70-persistent-net.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-cd-aliases-generator.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-net-description.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-persistent-net-generator.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-probe_mtd.rules' as rules file
parse_file: reading '/lib/udev/rules.d/75-tty-description.rules' as rules file
parse_file: reading '/lib/udev/rules.d/78-sound-card.rules' as rules file
parse_file: reading '/lib/udev/rules.d/80-drivers.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-keyboard-force-release.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-keymap.rules' as rules file
parse_file: reading '/lib/udev/rules.d/95-udev-late.rules' as rules file
parse_file: reading '/etc/udev/rules.d/99-udev.rules' as rules file
udev_rules_new: rules use 19404 bytes tokens (1617 * 12 bytes), 13823 bytes buffer
udev_rules_new: temporary index used 13820 bytes (691 * 20 bytes)
udev_device_new_from_syspath: device 0x8a6cb90 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1'
udev_device_new_from_syspath: device 0x8a6cfc0 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1'
udev_device_read_db: device 0x8a6cfc0 filled with db file data
udev_rules_apply_to_event: IMPORT '/sbin/blkid -o udev -p /dev/sdb1' /etc/udev/rules.d/10-usb.rules:3
udev_event_spawn: starting '/sbin/blkid -o udev -p /dev/sdb1'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_FS_UUID=2CD9-6190'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_FS_UUID_ENC=2CD9-6190'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_FS_VERSION=FAT32'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_FS_TYPE=vfat'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_FS_USAGE=filesystem'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_PART_ENTRY_SCHEME=dos'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_PART_ENTRY_TYPE=0xb'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_PART_ENTRY_FLAGS=0x80'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_PART_ENTRY_NUMBER=1'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_PART_ENTRY_OFFSET=63'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_PART_ENTRY_SIZE=15631182'
spawn_read: '/sbin/blkid -o udev -p /dev/sdb1'(out) 'ID_PART_ENTRY_DISK=8:16'
spawn_wait: '/sbin/blkid -o udev -p /dev/sdb1' [4927] exit with return code 0
udev_rules_apply_to_event: RUN '/bin/mkdir -p /mnt/%E{dir_name}' /etc/udev/rules.d/10-usb.rules:7
udev_rules_apply_to_event: RUN '/bin/mount -t auto -o rw,relatime,noexec,nodev,utf8 /dev/%k /mnt/%E{dir_name}' /etc/udev/rules.d/10-usb.rules:7
udev_rules_apply_to_event: GROUP 105 /lib/udev/rules.d/50-udev-default.rules:67
udev_device_new_from_syspath: device 0x8a6d318 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3/target3:0:0/3:0:0:0/block/sdb'
udev_device_read_db: device 0x8a6d318 filled with db file data
udev_rules_apply_to_event: LINK 'disk/by-id/usb-_silicon-power_10120615E6AC0E001147003E-0:0-part1' /lib/udev/rules.d/60-persistent-storage.rules:45
udev_device_new_from_syspath: device 0x8a737a8 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3/target3:0:0/3:0:0:0'
udev_device_new_from_syspath: device 0x8a73c28 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3/target3:0:0'
udev_device_new_from_syspath: device 0x8a74098 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3'
udev_device_new_from_syspath: device 0x8a744f0 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0'
udev_device_new_from_syspath: device 0x8a74940 has devpath '/devices/pci0000:00/0000:00:10.4/usb3/3-6'
udev_device_new_from_syspath: device 0x8a74d80 has devpath '/devices/pci0000:00/0000:00:10.4/usb3'
udev_device_new_from_syspath: device 0x8a751b8 has devpath '/devices/pci0000:00/0000:00:10.4'
udev_device_new_from_syspath: device 0x8a755f0 has devpath '/devices/pci0000:00'
udev_rules_apply_to_event: LINK 'disk/by-path/pci-0000:00:10.4-usb-0:6:1.0-scsi-0:0:0:0-part1' /lib/udev/rules.d/60-persistent-storage.rules:63
udev_rules_apply_to_event: IMPORT builtin 'blkid' /lib/udev/rules.d/60-persistent-storage.rules:76
builtin_blkid: probe /dev/sdb1 raid offset=0
udev_builtin_add_property: ID_FS_UUID=2CD9-6190
udev_builtin_add_property: ID_FS_UUID_ENC=2CD9-6190
udev_builtin_add_property: ID_FS_VERSION=FAT32
udev_builtin_add_property: ID_FS_TYPE=vfat
udev_builtin_add_property: ID_FS_USAGE=filesystem
udev_builtin_add_property: ID_PART_ENTRY_SCHEME=dos
udev_builtin_add_property: ID_PART_ENTRY_TYPE=0xb
udev_builtin_add_property: ID_PART_ENTRY_FLAGS=0x80
udev_builtin_add_property: ID_PART_ENTRY_NUMBER=1
udev_builtin_add_property: ID_PART_ENTRY_OFFSET=63
udev_builtin_add_property: ID_PART_ENTRY_SIZE=15631182
udev_builtin_add_property: ID_PART_ENTRY_DISK=8:16
udev_rules_apply_to_event: LINK 'disk/by-uuid/2CD9-6190' /lib/udev/rules.d/60-persistent-storage.rules:82
udev_rules_apply_to_event: RUN '/etc/udev/scripts/scsi.sh' /etc/udev/rules.d/99-udev.rules:22
udev_node_add: handling device node '/dev/sdb1', devnum=b8:17, mode=0660, uid=0, gid=105
node_fixup: preserve permissions /dev/sdb1, 060660, uid=0, gid=105
node_symlink: preserve already existing symlink '/dev/block/8:17' to '../sdb1'
link_find_prioritized: found 'b8:17' claiming '/run/udev/links/disk\x2fby-id\x2fusb-_silicon-power_10120615E6AC0E001147003E-0:0-part1'
link_update: creating link '/dev/disk/by-id/usb-_silicon-power_10120615E6AC0E001147003E-0:0-part1' to '/dev/sdb1'
node_symlink: preserve already existing symlink '/dev/disk/by-id/usb-_silicon-power_10120615E6AC0E001147003E-0:0-part1' to '../../sdb1'
link_find_prioritized: found 'b8:17' claiming '/run/udev/links/disk\x2fby-path\x2fpci-0000:00:10.4-usb-0:6:1.0-scsi-0:0:0:0-part1'
link_update: creating link '/dev/disk/by-path/pci-0000:00:10.4-usb-0:6:1.0-scsi-0:0:0:0-part1' to '/dev/sdb1'
node_symlink: preserve already existing symlink '/dev/disk/by-path/pci-0000:00:10.4-usb-0:6:1.0-scsi-0:0:0:0-part1' to '../../sdb1'
link_find_prioritized: found 'b8:17' claiming '/run/udev/links/disk\x2fby-uuid\x2f2CD9-6190'
link_update: creating link '/dev/disk/by-uuid/2CD9-6190' to '/dev/sdb1'
node_symlink: preserve already existing symlink '/dev/disk/by-uuid/2CD9-6190' to '../../sdb1'
udev_device_update_db: created db file '/run/udev/data/b8:17' for '/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1'
ACTION=add
DEVLINKS=/dev/disk/by-id/usb-_silicon-power_10120615E6AC0E001147003E-0:0-part1 /dev/disk/by-path/pci-0000:00:10.4-usb-0:6:1.0-scsi-0:0:0:0-part1 /dev/disk/by-uuid/2CD9-6190
DEVNAME=/dev/sdb1
DEVPATH=/devices/pci0000:00/0000:00:10.4/usb3/3-6/3-6:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1
DEVTYPE=partition
ID_BUS=usb
ID_FS_TYPE=vfat
ID_FS_USAGE=filesystem
ID_FS_UUID=2CD9-6190
ID_FS_UUID_ENC=2CD9-6190
ID_FS_VERSION=FAT32
ID_INSTANCE=0:0
ID_MODEL=silicon-power
ID_MODEL_ENC=silicon-power\x20\x20\x20
ID_MODEL_ID=3600
ID_PART_ENTRY_DISK=8:16
ID_PART_ENTRY_FLAGS=0x80
ID_PART_ENTRY_NUMBER=1
ID_PART_ENTRY_OFFSET=63
ID_PART_ENTRY_SCHEME=dos
ID_PART_ENTRY_SIZE=15631182
ID_PART_ENTRY_TYPE=0xb
ID_PART_TABLE_TYPE=dos
ID_PATH=pci-0000:00:10.4-usb-0:6:1.0-scsi-0:0:0:0
ID_PATH_TAG=pci-0000_00_10_4-usb-0_6_1_0-scsi-0_0_0_0
ID_REVISION=PMAP
ID_SERIAL=_silicon-power_10120615E6AC0E001147003E-0:0
ID_SERIAL_SHORT=10120615E6AC0E001147003E
ID_TYPE=disk
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR_ENC=\x20\x20\x20\x20\x20\x20\x20\x20
ID_VENDOR_ID=13fe
MAJOR=8
MINOR=17
SUBSYSTEM=block
UDEV_LOG=6
USEC_INITIALIZED=322625162
dir_name=usbhd-sdb1
run: '/bin/mkdir -p /mnt/usbhd-sdb1'
run: '/bin/mount -t auto -o rw,relatime,noexec,nodev,utf8 /dev/sdb1 /mnt/usbhd-sdb1'
run: '/etc/udev/scripts/scsi.sh'
builtin_kmod_exit: unload module index
Войдите или зарегистрируйтесь, чтобы ответить.