[ALTSP] Local USB storage in ALTSP 4.0
Andrey Liakhovets
liakh at dol.ru
Tue May 5 13:26:19 MSD 2009
ALTLinux Terminal 4.0, обновлённый до Branch4.0 от 2009-05-01,
chroot также обновлён до Branch4.0 от 2009-05-01, в chroot
установлено и на терминалах грузится ядро 2.6.22-led-tc-alt16.
На терминале у меня не работали USB-дисковод и флешка без разделов.
Оказалось, это из-за того, что в udev-rules-108-alt2.M40.1 в chroot
в конце /etc/udev/rules.d/60-persistent-storage.rules выполняется
KERNEL=="*[!0-9]", ATTR{removable}=="1", GOTO="persistent_storage_end"
и в результате не вызывается IMPORT{program}="vol_id --export $tempnode"
для removable устройств без разделов.
Поэтому в lbuscd-0.6-alt7.M40.1 в /etc/udev/rules.d/88-ltsp.rules
на терминале для таких устройств не выполняется add_fstab_entry
(так как не существует ID_FS_TYPE) и т.д.
Исключение в /etc/udev/rules.d/88-ltsp.rules и в add_fstab_entry
сделано для KERNEL=="fd[0-9]*" (при этом в /lib/udev/add_fstab_entry
принудительно устанавливается fstype="vfat").
Но USB-дисковод и USB-флешка -- это не fd*.
Чтобы таки заработало, дополнил 88-ltsp.rules вызовом add_fstab_entry
для USB-floppy и вызовом vol_id для USB-disk и немного изменил
add_fstab_entry, сделав такую же обработку USB-floppy, что и fd*:
$ cat /etc/udev/rules.d/88-ltsp.rules
# /etc/udev/rules.d/88-ltsp.rules
ACTION=="remove", SUBSYSTEM=="block", RUN+="remove_fstab_entry %k"
ACTION!="add", GOTO="end_of_ltsp_rules"
KERNEL=="fd[0-9]*", RUN+="add_fstab_entry %k auto", GOTO="end_of_ltsp_rules"
# IDE CDRoms
ENV{ID_CDROM}=="?*", RUN+="add_fstab_entry %k auto", GOTO="end_of_ltsp_rules"
SUBSYSTEM!="block", GOTO="end_of_ltsp_rules"
ENV{ID_FS_TYPE}=="?*", GOTO="try_ltsp_block_fs"
ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="floppy", RUN+="add_fstab_entry %k auto", GOTO="end_of_ltsp_rules"
ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="disk", KERNEL=="*[!0-9]", ATTR{removable}=="1", IMPORT{program}="vol_id --export $tempnode"
LABEL="try_ltsp_block_fs"
ENV{ID_FS_TYPE}=="?*", RUN+="add_fstab_entry %k $ENV{ID_FS_TYPE} %s{size}"
LABEL="end_of_ltsp_rules"
$ diff -Nau add_fstab_entry.{old,new}
--- add_fstab_entry.old 2009-05-05 12:37:19 +0400
+++ add_fstab_entry.new 2009-05-05 12:42:58 +0400
@@ -6,10 +6,10 @@
devicename=$(basename $1)
fstype=$2
+BLOCKS=${3:-0}
+
if [ -z "$fstype" ]; then
fstype="$ID_FS_TYPE"
- # fstype unknown, do nothing
- [ -n "$fstype" ] || exit 1
fi
[ "$fstype" != "swap" ] || exit 0
@@ -25,6 +25,14 @@
if [ -z ${LABEL} ]; then
LABEL=$(echo ${ID_BUS}${ID_TYPE}-$devicename |tr " " "_")
fi
+ if [ -z "$fstype" -o "$fstype" = "auto" ]; then
+ if [ "${ID_TYPE}" = "floppy" ]; then
+ fstype="vfat"
+ BLOCKS=0
+ fi
+ fi
+ # fstype unknown, do nothing
+ [ -n "$fstype" ] || exit 1
fi
# make sure the root we mount to exists
@@ -35,7 +43,6 @@
MOUNTPOINT=$ROOT/$LABEL
[ -d $MOUNTPOINT ] || mkdir ${MOUNTPOINT}
-BLOCKS=${3:-0}
SIZE=$((${BLOCKS}*512/1048576))
DESCRIPTION="${ID_VENDOR}"
ENC_CONF="/etc/udev/fs-encoding.conf"
Это изменение ничего не испортило для моих флешек с разделами и
для кардридера. Также работают все разделы на жёстком диске на
тестовом терминале (правда там было ещё одно изменение для
использования ntfs-3g, а не ntfs).
Для того, чтобы "почувствовало" новую дискету, надо выдернуть
и вставить весь дисковод.
Не уверен, что надо проверять ENV{ID_BUS}=="usb",
но у меня других removable нет.
Андрей Ляховец
PS.
Поставил ALTLinux Terminal 5.0 alpha, посмотреть, как там.
USB-storage не заработали совсем.
Но это, наверное, отдельная тема.
More information about the Ltsp-server
mailing list