A létező legjobb automount rendszer #2

Hozzávalók
----------

  • autofs
  • ivman
  • sudo

Aki nem akar módosítani az én scriptjeimen, annak ntfs-3g is kell. Az alábbiak teljes megértéséhez szükséges a hozzávalók használatának ismerete.

autofs beállítása
-----------------

A következő két sor legyen az /etc/auto.master fő konfigfájlban:

/media/.auto.static     /etc/auto.static        --timeout=3
/media/.auto.ivman      /etc/auto.ivman         --timeout=3

Az /etc/auto.static-ba mennek azok, amiknek sztatikus az eszközfájlja. Pl. cd, dvd, floppy. Nálam ez a következőképpen néz ki:

$ cat /etc/auto.static | grep -v '#'
cdrom           -fstype=iso9660,iocharset=iso8859-2,ro,nosuid,nodev                     :/dev/cdrom
cdrom1          -fstype=auto,iocharset=iso8859-2,ro,nosuid,nodev                        :/dev/cdrom1
fd0             -fstype=auto,iocharset=iso8859-2,umask=000,quiet,rw,nosuid,nodev        :/dev/fd0

Az /etc/auto.ivman tartalmát az ivman fogja állítani.

ivman scriptek
--------------

Kell két script, ami konfigurálja az autofs-t eszköz hozzáadásánál és eltávolításánál.

Az /etc/ivman/ivman-insert hozzáad egy új bejegyzés az auto.ivman fájlhoz. Első paramétere az eszközfájl, második a fájlrendszer.


#!/bin/bash

BLOCK_DEV="$1"
FSTYPE="$2"
DEV_NAME="$(echo $BLOCK_DEV | cut -d '/' -f 3- | sed 's/\//_/g')"
AUTO_IVMAN="/media/.ivman_dev_list"

# Extended partíciót nem csatolok (arra a hal.volume.fstype üres sztring)
if [ -z $FSTYPE ] ; then exit 0 ; fi

# Swap partíciót nem csatolok
if [ $FSTYPE = "swap" ] ; then exit 0 ; fi

# A saját harddiskem levő cuccok ide nem kellenek, azok az fstab-ból jönnek
if [ $(echo $BLOCK_DEV | grep '/dev/hda' | wc -l) = 1 ] ; then exit 0 ; fi

case $FSTYPE in
        ext2|ext3|reiserfs|jfs|xfs)
                MOUNT_OPT="nodev,nosuid"
                ;;
        msdos|vfat)
                MOUNT_OPT="dmask=000,fmask=111,codepage=852,iocharset=iso8859-2,quiet,showexec"
                ;;
        ntfs)
                FSTYPE="ntfs-3g"
                MOUNT_OPT="dmask=000,fmask=111,locale=en_US.UTF8"
                # Ehhez kell ntfs-3g. Ha nincs, akkor ezt a részt módosítani kell.
		# MOUNT_OPT = "ro,nls=utf8,dmask=000,fmask=111"
                ;;
        *)
                FSTYPE="auto"
                MOUNT_OPT="nodev,nosuid"
                ;;
esac

# Új bejegyzés a konfigfájlba
echo $DEV_NAME -fstype=$FSTYPE,$MOUNT_OPT :$BLOCK_DEV >> $AUTO_IVMAN

# Létrehozzuk a /media/.auto.ivman-t, ha eddig nem volt
mkdir -p /media/.auto.ivman

# Újra olvastassuk a konfigfájlt
sudo /usr/sbin/invoke-rc.d autofs reload >/dev/null 2>&1

# Létrehozzuk a linket (az autofs működési elve miatt jól jön)
ln -s .auto.ivman/$DEV_NAME /media/$DEV_NAME

echo "Device $DEV_NAME plugged in."

Az /etc/ivman/ivman-remove eltávolít egy bejegyzést az auto.ivman fájlból. Egyetlen paramétere az eszközfájl.


#!/bin/bash

BLOCK_DEV="$1"
DEV_NAME="$(echo $BLOCK_DEV | cut -d '/' -f 3- | sed 's/\//_/g')"
AUTO_IVMAN="/media/.ivman_dev_list"
TMP_FILE="/media/.tmp_dev_list"

# Eltávolítjuk a bejegyzést
grep -v "$BLOCK_DEV" < $AUTO_IVMAN > $TMP_FILE
cat < $TMP_FILE > $AUTO_IVMAN

# Ha eszköz használatban volt és az autofs még nem csatolta le, 
# akkor tudatjuk a rendszerrel, hogy most már az eszköz nem elérhető
sudo /sbin/umount -l $BLOCK_DEV >/dev/null 2>&1

# Létrehozzuk a /media/.auto.ivman-t, ha eddig nem volt
mkdir -p /media/.auto.ivman

# Újra olvastassuk a konfigfájlt
sudo /usr/sbin/invoke-rc.d autofs reload >/dev/null 2>&1

# Eltávolítjuk a linket
rm -f /media/$DEV_NAME

echo "Device $DEV_NAME removed."

Az /etc/auto.ivman egy link a /media/.ivman_dev_list-re. Később meglátjuk miért kell ez.
A sudo azért kell, mert ezek a scriptek az ivman felhasználó nevében fognak futni. Tehát az /etc/sudoers-be bele kell tenni a következő két sort:

ivman   ALL=(root) NOPASSWD: /usr/sbin/invoke-rc.d autofs reload
ivman   ALL=(root) NOPASSWD: /sbin/umount -l /dev/*

Aki nem Debian alapú rendszert használ, annak az invoke-rc.d-t helyettesítenie kell valami azzal ekvivalenssel! Az /etc/auto.ivman egy link a /media/.ivman_dev_list-re.

ivman beállítása
----------------

Most beállítjuk az ivmant, hogy használja ezeket a scripteket.

$ cat /etc/ivman/IvmConfigActions.xml
<?xml version="1.0" encoding="UTF-8"?>
<ivm:ActionsConfig version="0.2" xmlns:ivm="http://www.eikke.com/ivm">
    <!-- perform these rules on devices already attached when Ivman starts -->
    <ivm:Option name="checkOnInit" value="true" />

    <!-- try to mount any mountable volume at all -->
    <!-- <ivm:Match name="ivm.mountable" value="true"> -->
    <ivm:Match name="hal.volume.is_mounted" value="false">
        <ivm:Option name="exec" value="/etc/ivman/ivman-insert '$hal.block.device$' '$hal.volume.fstype$'" />
        <ivm:Option name="execun" value="/etc/ivman/ivman-remove '$hal.block.device$'" />
    </ivm:Match>
</ivm:ActionsConfig>

Még csak annyi hiányzik, hogy kikapcsolás előtt, ha nem húzunk le valami cuccot, akkor megmarad az autofs-nek a bejegyzés, meg a linkek a /media-ban. Ezt a következőképp oldottam meg.

A /media-t tmpfs-re tettem, tehát egy sor az fstabba:

tmpfs           /media         tmpfs   gid=plugdev,mode=775  0       0

Meg csináltam egy scriptet, ami a szükséges dolgokat indításnál beleteszi.

$ cat /etc/init.d/autofs-ivman-prepare
#!/bin/bash

ln -s .auto.static/cdrom        /media/cdrom
ln -s .auto.static/cdrom1       /media/dvd
ln -s .auto.static/fd0          /media/floppy

touch           /media/.ivman_dev_list
chown ivman     /media/.ivman_dev_list

mkdir /media/.auto.static

Ezt beraktam, hogy rendszerindításnál elinduljon.

$ ls -l /etc/rcS.d/S60autofs-ivman-prepare
lrwxrwxrwx 1 root root 30 2007-02-03 16:00 /etc/rcS.d/S60autofs-ivman-prepare -> ../init.d/autofs-ivman-prepare

Kész.

=================================

Szerkesztés: Gondoltam összeírom, mi az nem egy-az-egyben kell bemásolni másoknak, hanem szükség szerint módosítani kell.

1. autofs beállítása a sztatikus eszközfájlú eszközökhöz (pl. cd, dvd, floppy) - itt nem kell ivman.
man autofs automount auto.master mount

Középső rész az opciók, első sorban nálam cd-re, másodikban dvd-re, harmadikban floppyra.
A : után értelemszerűen érvényes eszközfileok kell, hogy legyenek.

Az első szó mindegy mi, de az autofs-ivman-preparet úgy kell elkészíteni, hogy a megfelelő névre készítsen linket.

Igazából ez a legfontosabb, a többire a megjegyzésekből többé-kevésbé rá lehet jönni.

Hozzászólások

Nálam nem jelenik meg az XML részlet. Iceweasel 2.0.0.1

Pastebin legközelebb, plz.
--
Gentoo motto: It's worth spending eight hours trying to make something load 20ns faster.

vfat partíció ékezetes fájlneveit latin2-re alakítod, ntfs-ét viszont utf8-ra. Ez nyilván tök következetlen és nem oké. Mindkét helyen egységesen azt a kódolást kellene megadni, amit a Linux rendszerben is használsz.

Ez azért nincs így, mert a vfat nem fogadja el az UTF-8 kódolást egyes helyeken, azon kívül a legtöbb vfat eszközön cp852 vagy iso-8859-2 a fájlnevek kódolása. Ha ezt UTF-8 mountolná fel, akkor teljesen használhatatlanok lennének az ékezetes nevű fájlok, főleg terminálról. Nagyon jól van az úgy, hidd el.

A Windows még mindég cp852 ment :(

nagyon tetszik a kezdeményezés.
én kezdő ubuntu/linux felhasználó vagyok.
megcsináltam mindent amit te leírtál, de nekem nem működik.
elsődleges HIBA jelenség: indítás után teljesen üres a /media mappa.

--
dont_worry_be_happy

KÉRDÉS: Az IvmConfigActions.xml tartalmát bővíteni, vagy lecserélni kell? (én lecseréltem).

--
dont_worry_be_happy

# apt-get install ivman
után, az IvmConfigActions.xml-ben ami nem volt megjegyzésbe téve, azt kell kicserélni erre. Szóval ez kell, hogy legyen az egyetlen működő kód, a már megjegyzésben lévő példákat nem fontos törölni, úgy sincs hatásuk.

<ivm:Match name="hal.volume.is_mounted" value="false">

helyett lehet akár

<ivm:Match name="ivm.mountable" value="true">

is benne.

Amikor próbálod, az egyéb automount megoldásokat kapcsold ki! (pl. GNOME-ét)

eddig értem.
de hogy kapcsolom ki a Gnome automount-ját?
parancssorban kell gondolom... de ilyet még nem csináltam.
-
ja meg az az igazság, hogy ez ahogy leírod, már linux haladó szint (azt hiszem), és lehet hogy néhány dolgot nem csinálok, amit te alapnak gondolsz, és ezért nem megy a kerék.
amúgy Ubuntu 6.10 edgy-m van.
-
ja és mégvalami, az ivman-insert fájlban beírtad az ntfs fájlrendszert, de arra nem gondoltál, hogy mi van ha valakinek már az fstab-ban ntfs-3g -re van állítva a fájlrendszer! persze nem nagy dolog az ntfs részt lemásolni, de azért beleírhattad volna. mindegy utólag mondom.

--
dont_worry_be_happy

1. Rendszer -> Beallitasok -> Cserelheto meghajtok es adathordozok
Ki kell venni a pipat, hogy ne csatlakoztasson es ne nyisson nautilust.

2.1. valóban nem kezdő szinten írtam le
2.2. Az jó, akkor a Debian specifikus parancsok (pl. invoke-rc.d) módosítás nélkül menni fognak.

3.1. De gondoltam rá:
if [ $(echo $BLOCK_DEV | grep '/dev/hda' | wc -l) = 1 ] ; then exit 0 ; fi
Ha a /dev/hda-n lévő partíciót talál az ivman, akkor nem csinál semmit.

1) még mindíg nem megy.
ha beírom parancssorba hogy ivman, akkor ezt kapom:

root@komate-desktop:/home/komate# ivman
manager.c:1362 (do_startup_configure) Directory /etc/ivman/ will be used for configuration files.
/bin/sh: /etc/ivman/ivman-insert: Permission denied
/bin/sh: /etc/ivman/ivman-insert: Permission denied
/bin/sh: /etc/ivman/ivman-insert: Permission denied
/bin/sh: /etc/ivman/ivman-insert: Permission denied
/bin/sh: /etc/ivman/ivman-insert: Permission denied
root@komate-desktop:/home/komate#

2) ugye az ilyen soroknak nincs szemantikai jelentőségük (azaz nem kell őket beírni sehova, én gedit-el szerkesztettem minden fájlt):
$ cat /etc/auto.static | grep -v '#'

--
dont_worry_be_happy

1.) Nem emeltem ki kulon, hogy minden script futtathato kell, hogy legyen.
# chmod +x filename
Van 2 ivman script meg 1 inicializalo, azaz:
/etc/ivman/ivman-insert
/etc/ivman/ivman-remove
/etc/init.d/autofs-ivman-prepare

ivman parancsot nem kell kiadni, ha ubuntu csomagbol van az ivman kellene, hogy induljon inditaskor automatikusan (autofs ugyszinten)

2.) Ez ($ cat /etc/auto.static | grep -v '#') azt jelenti, hogy ha ezt konzolba beirod, akkor valami hasonlot kellene hogy kapjal mint ami alatta van. Legalabb is nalam azt irja ki ami alatta van. a grep -v '#' azert van benne, hogy a megjegyzeseket eltavolitsa.

Azt szeretném a dologhoz hozzáfűzni hogy a "grep -v valami < fileom > fileom" annyira nem jó dolog, mivel a grep folyamatosan streamel, és így egyes rendszereken kapásból fejbe tudja vágni a fájlt. Én inkább egy /tmp/fileom-ba tenném az outputot.

megcsináltam a fentieket,működik.csak egy apróság maradt:
egyes eszközöket a system:/media/sdb1-re tesz a konqueror,és ad egy ilyen üzenetet,hogy:

"mount: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so"

ha kiszedem a system: részt,és csak a /media/sdb1-re ütök egy entert,akkor láthatóak a felcsatolt fájlok.

már idegesít egy ideje,de még nem jöttem rá a megoldásra.tudja valaki?csak FAT esetében csinálja..

Sziasztok,

Én is megcsináltam a leírás szerint mindent, reboot után létre is jönnek a fájlok a /media könyvtárban, cdrom-ot csatolja rendesen, de a pendriveokat nem.
Létrejön a .auto.ivman könyvtár, megteszi a bejegyzést a .ivman_dev_list-be, azonban ténylegesen nem csatolja fel.
Az eszköz eltávolítása után rendesen törli a bejegyzéseket.
Mi lehet a gáz?

Miután hozzáadja a .ivman_dev_list akkor már az autofs feladat lenne csatolni, igaz?
Igen, de a linknek létre kellene jönnie. Ha bemész a /media/.auto.ivman könyvtárba, és ott bele-cd-zel az sda1-be, akkor belép?

Mik a jogosultságok a /media könyvtárra? ("ls -l /media" mit mond?)

Épp ez az, hogy az sda1 könyvtár sem jön létre.

~$ls -la /media/
összesen 20
drwxr-xr-x 7 root root 4096 aug 20 00.32 .
drwxr-xr-x 23 root root 4096 aug 19 12.37 ..
drwxr-xr-x 2 root root 0 aug 20 00.32 .auto.ivman
drwxr-xr-x 2 root root 0 aug 20 00.33 .auto.static
lrwxrwxrwx 1 root root 19 aug 17 23.30 cdrom0 -> .auto.static/cdrom0
drwxr-xr-x 3 root root 22 aug 15 19.42 files
drwxr-xr-x 2 root root 4096 júl 30 10.48 iso
-rw-r--r-- 1 ivman root 97 aug 20 00.32 .ivman_dev_list
drwxr-xr-x 4 root root 4096 júl 31 12.08 old

~$cat /media/.ivman_dev_list
sda1 -fstype=vfat,dmask=000,fmask=111,codepage=852,iocharset=iso8859-2,quiet,showexec :/dev/sda1

Az sda1 könyvtár az első hozzáférés alkalmával jön létre. Tehát ilyesmire számíts:

/media/.auto.ivman$ ls -A
/media/.auto.ivman$ cd sda1
/media/.auto.ivman/sda1$ cd ..
/media/.auto.ivman$ ls -A
sda1
/media/.auto.ivman$ sleep 3
/media/.auto.ivman$ ls -A
/media/.auto.ivman$

Egyébként megvan a gond. Kihagytad a következő részt az fstabból:

tmpfs /media tmpfs gid=plugdev,mode=775 0 0

Mivel root:root a /media, ivman pedig ivman:plugdev-ként fut, ezért ivmannak nincs jogosultsága a linkek létrehozására.

Valóban, így már működik, köszi a segítséget!
Azt hittem, hogy az a beállítás opcionális.

Még annyit akarok megcsinálni, hogy miután felcsatolta, mc-ben nyissa is meg a könyvtárat.
Az ivman_insert fájl végéhez hozzáadtam ezt a sort:
sudo -u norbi urxvt -title mc -e mc /media/$DEV_NAME &

A sudoers fájlhoz pedig ezt:
ivman ALL=(norbi) NOPASSWD: /usr/bin/urxvt -title mc -e mc /media/*

Azonban nem nyitja meg s nem igazán értem, hogy miért, kell még valami beállítás?