Portál AbcLinuxu, 1. května 2025 16:25

automounter a slackware

13.4.2006 22:40 | Přečteno: 1709× | Slackware

V minulém blogu jsem slíbil návod na zprovoznění automountra ve Slackware. Tak s chutí do díla.

Požadovaný výsledek (Motivace :) )

Automounter funguje tak, že při vstupu do adresáře kam se připojuje nějaké médium se pokusí toto médium připojit. KRYTON: Je to zkomolené, matoucí a ještě nudnější než palubní časopis belgických aerolinií. (RedDwarf - Pekelně ostrý výlet). Uznávám definice je to kulhající na obě nohy, ale pro představu snad stačí.

Uveďme si příklad: do mechaniky jsme vložili CD a chceme se podívat na fotky z dovolené. V našem oblíbeném prohlížeči obrázků zadáme cestu kam připojujeme mechaniku, v našem případě /media/dvd/. V tomto okamžiku ovšem žádný takový adresář neexistuje(!). Automounter zjistí, že chceme přistoupit do /media/dvd/, zjistí, zda je vloženo médium, pokud ano tak vytvoří adresář a připojí nám CD. Až si fotečky pěkně pozorně prohlédneme a ukončíme všechny programy které mají otevřené něco z připojeného CD, tak automounter po zadané časové prodlevě CD odpojí a my jej můžeme z mechaniky vyjmout.

Co budeme potřebvat

Balíček s autofs. Nachází se na prvním CD v adresáři slackware/n/.

Další co potřebujeme je podpora v kernelu. Tu zajistíme natažením modulu autofs4. Provedením modprobe autofs4. Tento modul budeme chtít natahovat po každé, takže do /etc/rc.d/rc.modules přidáme řádek /sbin/modprobe autofs4.

Situace

Uvedu příklad (popíšu jakou situaci jsem řešil u Queega - snad už víte kdo je Queeg :) ).

DVD mechanika a vypalovačka. Obojí jsem chtěl mountovat automountrem do adresáře /media/dvd/ respektive /media/cdwriter/

Konfigurační soubory

Pro konfiguraci se používá jeden hlavní soubor /etc/auto.master a vícero takzvaných souborů s mapou (jak jinak chcete přeložit map file).

Hlavní soubor (auto.master) slouží k popisu které soubory s mapami se mají načíst a ke kterému adresáři v kořeni patří. Takže podle našeho příkladu bude /etc/auto.master vypadat takto:

/media /etc/auto.media --timeout=5
První položka je adresář pro který je mapa, ta je udána jako druhá položka a jako třetí se udávají další volby. V našem případě je adresář /media, mapa je v souboru /etc/auto.media a volba --timeout=5 určuje, že se má médium odpojit po 5 vteřinách nečinnosti.

Soubor s mapou vypadá následovně:

cdwriter -fstype=iso9660,owner,user,ro :/dev/hdd
dvd      -fstype=iso9660,owner,user,ro :/dev/hdc

První položka je adresář kam se bude mountovat (adresář se bude vnořen do adresáře pro který je určena mapa, tedy /media/cdwriter, respektive /media/dvd), další položka udává volby pro připojení a poslední je zařízení.

Startovací skript

jako základ jsem použil originální který je dodán s atuofs, ovšem řekněme si to na rovinu, nefungoval. Takže jsem ho tak nějak prošel a dal do funkčního stavu. Výsledek vypadá takto:

#!/bin/bash
#
# /etc/rc.d/rc.autofs
#
# rc file for automount using a Sun-style "master map".
# We first look for a local /etc/auto.master, then a YP
# map with that name
#

# Location of the automount daemon and the init directory
#
DAEMON=/usr/sbin/automount
initdir=/etc/rc.d


test -e $DAEMON || exit 0
thisscript="$0"
if [ ! -f "$thisscript" ]; then
    echo "$0: Cannot find myself" 1>&2
    exit 1
fi

#
# We can add local options here
# e.g. localoptions='rsize=8192,wsize=8192'
#
localoptions=''

#
# This function will build a list of automount commands to execute in
# order to activate all the mount points. It is used to figure out
# the difference of automount points in case of a reload
#
function getmounts()
{
#
# Check for local maps to be loaded
#
if [ -f /etc/auto.master ]
then
    cat /etc/auto.master | sed -e '/^#/d' -e '/^$/d'| (
        while read dir map options
        do
            if [ ! -z "$dir" -a ! -z "$map" \
                        -a x`echo "$map" | cut -c1` != 'x-' ]
            then
                map=`echo "/etc/$map" | sed -e 's:^/etc//:/:'`
                options=`echo "$options" | sed -e 's:^/etc//:/:'`
                if [ -x $map ]; then
                    echo "$DAEMON $options $localoptions $dir program $map"
                elif [ -f $map ]; then
                    echo "$DAEMON $options $localoptions $dir file $map"
                else
                    echo "$DAEMON $options $localoptions $dir `basename $map`"
                fi
            fi
        done
    )
fi

#
# Check for YellowPage maps to be loaded
#
if [ -e /usr/bin/ypcat ] && [ `ypcat -k auto.master 2>/dev/null | wc -l` -gt 0 ]
then
    ypcat -k auto.master | (
        while read dir map options
        do
            if [ ! -z "$dir" -a ! -z "$map" \
                        -a x`echo "$map" | cut -c1` != 'x-' ]
            then
                map=`echo "$map" | sed -e 's/^auto_/auto./'`
                if echo $options | grep -- '-t' >/dev/null 2>&1 ; then
                    mountoptions="--timeout $(echo $options | \
                      sed 's/^.*-t\(imeout\)*[ \t]*\([0-9][0-9]*\).*$/\2/g')"
                fi
                options=`echo "$options" | sed -e '
                  s/--*t\(imeout\)*[ \t]*[0-9][0-9]*//g
                  s/\(^\|[ \t]\)-/\1/g'`
                echo "$DAEMON $dir yp $map $options $localoptions"
            fi
        done
    )
fi
}

#
# Status lister.
#
function status()
{
        echo "Configured Mount Points:"
        echo "------------------------"
        getmounts
        echo ""
        echo "Active Mount Points:"
        echo "--------------------"
        ps ax|grep "[0-9]:[0-9][0-9] automount " | (
                while read pid tt stat time command; do echo $command; done
        )
}

#
# Status lister.
#
function status()
{
        echo "Configured Mount Points:"
        echo "------------------------"
        getmounts
        echo ""
        echo "Active Mount Points:"
        echo "--------------------"
        ps ax|grep "[0-9]:[0-9][0-9] automount " | (
                while read pid tt stat time command; do echo $command; done
        )
}


#
# Start function.
#
function start()
{
        # Check if the automounter is already running?
        if [ ! -f /var/lock/subsys/autofs ]; then
            echo 'Starting automounter...'
            getmounts  | sh
            touch /var/lock/subsys/autofs
        fi
}

#
# Stop function.
#
function stop()
{
        kill -TERM $(/sbin/pidof /usr/sbin/automount)
        rm -f /var/lock/subsys/autofs
}

#
# Restart function.
#
function restart()
{
 if [ ! -f /var/lock/subsys/autofs ]; then
                echo "Automounter not running"
                exit 1
        fi
        echo "Checking for changes to /etc/auto.master ...."
        TMP1=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >& 2;
exit 1; }
        TMP2=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >& 2;
exit 1; }
        getmounts >$TMP1
        ps ax|grep "[0-9]:[0-9][0-9] automount " | (
            while read pid tt stat time command; do
                echo "$command" >>$TMP2
                if ! grep -q "^$command" $TMP2; then
                        kill -USR2 $pid
                        echo "Stop $command"
                fi
            done
        )
        cat $TMP1 | ( while read x; do
                if ! grep -q "^$x" $TMP2; then
                        $x
                        echo "Start $x"
                fi
        done )
        rm -f $TMP1 $TMP2
}

#
# See how we were called.
#
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  reload|restart)
        restart
        ;;
  status)
        status
        ;;
  *)
        echo "Usage: $initdir/rc.autofs {start|stop|restart|reload|status}"
        exit 1
esac

Skript uložíme jako /etc/rc.d/rc.autofs a spustíme příkazem /etc/rc.d/rc.autofs start, je vhodné tento příkaz umístit do /etc.rc.d/rc.local, aby se spouštěl po zapnutí PC. Chrousty chroust cvaky cvak, mělo by to vypsat "Starting automounter..." :) a vše by mělo fungovat.

Celkové zhodnocení a závěr

Automounter jsem zatím nasadil jen experimentálně :), mě se moc nelíbí, raději si mountuji sám, ale to neznamená, že by to bylo nepoužitelné. Funguje to spolehlivě a za dobu používání (pravda, jen pár hodin) jsem nenarazil na žádný problém.

Keep Slack'in

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

13.4.2006 23:18 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: automounter a slackware
Odpovědět | Sbalit | Link | Blokovat | Admin
Automounter jsem zatím nasadil jen experimentálně :), mě se moc nelíbí, raději si mountuji sám, ale to neznamená, že by to bylo nepoužitelné. Funguje to spolehlivě a za dobu používání (pravda, jen pár hodin) jsem nenarazil na žádný problém.

Automounter na CD nepoužívám, v notebooku mám vypalovačku a s automounterem mi to kazilo media. Autofs používám na procházení po síti (NFS), strašně rychle si totiž člověk zvykne na cd /net/pocitac/sdileny_adresar/ :-)
-- Nezdar není hanbou, hanbou je strach z pokusu.
14.4.2006 09:34 RTOS | skóre: 6
Rozbalit Rozbalit vše Re: automounter a slackware
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc pěknej zápis. Děkuju. :-)
In God We Trust, Inc.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.