Autofs no Slackware

Finalmente consegui fazer o autofs funcionar no Slackware. Estranhamente, o pacote que está na pasta "extras" não traz o rc.autofs. Ele está na pasta de documentação, mas não funciona pra Slackware, só para RedHat e Debian. Neste artigo veremos como resolver isso.

[ Hits: 56.097 ]

Por: Daniel Ribeiro em 01/03/2004


O script rc.autofs



Copie e cole o script abaixo no seu editor de texto favorito. Salve-o como rc.autofs - caso você deseje mudar o timeout (o tempo que o automount levará para desmontar o dispositivo), você deve fazê-lo nesse arquivo. Indiquei o local com um comentário. Se você não sabe se quer mudar, deixe a opção default mesmo (5 segundos). Agora digite:

# chmod +x rc.autofs

E copie o arquivo para /etc/rc.d:

# cp rc.autofs /etc/rc.d/

NOTA: você deve ser root para fazer isto.

Agora, para iniciar automaticamente no boot, adicione a seguinte linha ao /etc/rc.d/rc.local:

/etc/rc.d/rc.autofs start

Segue o código do rc.autofs:

##! /bin/bash
#
# $Id: rc.autofs.in,v 1.4 2000/01/22 22:17:34 hpa Exp $
#
# 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
#
# On most distributions, this file should be called:
# /etc/rc.d/init.d/autofs or /etc/init.d/autofs
#

# For Redhat-ish systems
#
# chkconfig: 345 15 85
# description: Automounts filesystems on demand

# This is used in the Debian distribution to determine the proper
# location for the S- and K-links to this init file.
# The following value is extracted by debstd to figure out how to
# generate the postinst script. Edit the field to change the way the
# script is registered through update-rc.d (see the manpage for
# update-rc.d!)
#

FLAGS="defaults 21"

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

#
# Determine which kind of configuration we're using
#
system=unknown
if [ -f /etc/debian_version ]; then
    system=debian
elif [ -f /etc/redhat-release ]; then
    system=redhat
elif [ -f /etc/slackware-version ]; then
    system=slackware
else
    echo "$0: Unknown system, please port and contact [EMAIL PROTECTED]" 1>&2
    exit 1
fi

if [ $system = redhat ]; then
    . $initdir/functions
fi

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

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

#
# 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
#
#
#É logo aqui em baixo, onde tem '-t 5' você muda para o tempo que
#desejar (em segundos). Recomendo deixar como está ou baixar para
#3 ou 1
#

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/\(^\|[ \t]\)-/\1/g'`
                if [ -x $map ]; then
                    echo "$DAEMON -t 5 $dir program $map $options $localoptions"
                elif [ -f $map ]; then
                    echo "$DAEMON -t 5 $dir file $map $options $localoptions"
                else
                    echo "$DAEMON -t 5 $dir `basename $map` $options $localoptions"
                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
        )
}


#
# Redhat start/stop function.
#
function redhat()
{

#
# See how we were called.
#
case "$1" in
  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)
        kill -TERM $(/sbin/pidof /usr/sbin/automount)
        rm -f /var/lock/subsys/autofs
        ;;
  reload|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
        ;;
  status)
        status
        ;;
  *)
        echo "Usage: $initdir/rc.autofs {start|stop|restart|reload|status}"
        exit 1
esac
}

#
# Debian start/stop functions.
#
function debian()
{
#
# See how we were called.
#
case "$1" in
    start)
        echo -n 'Starting automounter:'
        getmounts | while read cmd mnt rest
        do
                echo -n " $mnt"
                pidfile=/var/run/autofs`echo $mnt | sed 's/\//./'`.pid
                start-stop-daemon --start --pidfile $pidfile --quiet \
                        --exec $DAEMON -- $mnt $rest
                #
                #       Automount needs a '--pidfile' or '-p' option.
                #       For now we look for the pid ourself.
                #
                ps ax | grep "[0-9]:[0-9][0-9] $DAEMON $mnt" | (
                        read pid rest
                        echo $pid > $pidfile
                        echo "$mnt $rest" >> $pidfile
                )
        done
        echo "."
        ;;
    stop)
        echo 'Stopping automounter.'
        start-stop-daemon --stop --quiet --signal USR2 --exec $DAEMON
        ;;
    reload|restart)
        echo "Reloading automounter: checking for changes ... "
        TMP=/var/run/autofs.tmp
        getmounts >$TMP
        for i in /var/run/autofs.*.pid
        do
                pid=`head -n 1 $i 2>/dev/null`
                [ "$pid" = "" ] && continue
                command=`tail +2 $i`
                if ! grep -q "^$command" $TMP
                then
                        echo "Stopping automounter: $command"
                        kill -USR2 $pid
                fi
        done
        rm -f $TMP
        $thisscript start
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $initdir/autofs {start|stop|restart|reload|status}" >&2
        exit 1
        ;;
esac
}

if [ $system = debian ]; then
        debian "$@"
elif [ $system = redhat ]; then
        redhat "$@"
elif [ $system = slackware ]; then
        redhat "$@"
fi

exit 0
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O script rc.autofs
   3. Configurando e testando
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Configuração de impressora Lexmark Z25-35

Reempacotamento e repositório local em um sistema Debian-like

Montagem de Cluster Beowulf

VsFTPD com TLS no Debian 4.0

Aumentando sua produtividade com o teclado padrão Dvorak

  
Comentários
[1] Comentário enviado por maximous em 02/03/2004 - 01:33h

Bah, ateh q enfim um lugar q explique como fazer isto funcionar no Slackware!!

[]s

[2] Comentário enviado por maximous em 02/03/2004 - 01:37h

Bah, ateh q enfim um lugar q explique como fazer isto funcionar no Slackware!!

[]s

[3] Comentário enviado por lordello em 04/03/2004 - 18:13h

Excelento o artigo, eu mesmo tive problemas e rtesolvi de utra forma que não me lembro agora. O único problema do autofs é que ele não funciona com o Nautilus, quando entro no cdrom de deixo o nautilus parado o tempo do timeout, ele simplemente fecha ou vai para a pasta home. No KDE isso não ocorre, não sei porque! O melhor de todos é o SuperMount, to usando ele agora e ele tem uma latência bem menor, não precisa de timeout e de quebra é mais leve, exigindo menos da máquina na hora de montar e procurar as mídias..
Falow!

[4] Comentário enviado por removido em 08/03/2004 - 02:58h

Excelente. Agora consigo "auto-mountar" os dispositivos. Entretanto, tive um problema na criação dos links simbólicos. Se alguém tiver alguma idéia de como colocá-los como "mountado" e "unmountado", agradeceria.
Obrigado.

[5] Comentário enviado por canaman em 08/03/2004 - 14:08h

Respondendo o email recebido do fhidel:
A pasta usada pelo autofs deve estar vazia. Se você tiver a partição windows montada em /mnt/win, ao usar o diretorio mnt no autofs, a pasta win não vai aparecer. O que vc pode fazer é colocar atalhos na pasta mnt. Mas para fazer o atalho, provavelmente o dispositivo deve estar montado.
Abra um terminal e digite: #cd /misc/cd, depois abra outro terminal e crie o atalho: "#ln -s /misc/cd /mnt/cdrom"
No caso do cd deve apenas substituir /dev/cdrom por /dev/scd0.
a linha do cd ficaria assim:
cd -fstype=iso9660,ro,user :/dev/scd0

[6] Comentário enviado por canaman em 09/03/2004 - 09:30h

Respondendo outro email:
Ah, eu tinha esquecido disto! Vc deve comentar (recomendado) ou apagar as linhas do cd e do floppy no fstab.

Quanto às pastas, é o seguinte, vc deixa o windows como está e dentro da pasta /mnt cria os atalhos para o /misc/cd e /misc/floppy (ou a pasta que o autofs vai usar, tem gente que usa a /vol), daí dentro da pasta /mnt vai ter o seguite:

#ls -l

.....win98

.....cd -> /misc/cd

...... floppy -> /misc/floppy


Eu uso o slackware, provavelmente funcionará em ouras distros, o script foi feito originalmente para debian e red-hat e as distros baseadas nestas. A única diferença fica por conta da inicialização do script, pois no slakcware basta colocar a linha: '/etc/rc.d/rc.autofs start' dentro do '/etc/rc.d/rc.local'. Nas distros que usam a inicialização systemV eu não me lembro mais como faz, mas essas distros geralmente vem com isso tudo habilitado.
Qualquer outra dúvida e só perguntar

[7] Comentário enviado por andregup em 11/03/2004 - 22:43h

quado eu inicio o rc.autofs (start) recebo um erro

/etc/rc.d/rc.autofs: line 49:     system=slackware: command not found
/etc/rc.d/rc.autofs: line 101: syntax error near unexpected token `then'
/etc/rc.d/rc.autofs: line 101: `                 if [ -x $map ]; then'

que será que não entendo nada de script

Valeu

[8] Comentário enviado por canaman em 13/03/2004 - 00:59h

Vc tem q ver se copiou direitinho o código. O erro da linha 49 com certeza é algo errado, pq é uma atribuição e não um comando. Copia o script todo e tenta novamente. Eu tb n entendo muito de script. Inclusive esqueci de incluir no artigo o altor do script, na verdade da modificação do rc.autofs original. A msg original, de onde me inspirei para o artigo (da lista do autofs@kernel.org) :

* From: Dennis Bijwaard
* Subject: [autofs] autofs for slackware
* Date: Thu, 11 Dec 2003 18:32:11 -0800

Hi,

I've modified the automount script to work on slackware (works at least
on version 9.1). It seems to work mostly similar to the redhat one.
The autofs version is: autofs-3.1.7-i386-1, my attached script goes in
/etc/rc.d/rc.autofs.

Furthermore, the options to automount when given in /etc/auto.master
doesn't seem to work in autofs. At least the --timeout=5 or -t 5
don't work (There at least is an extra - necessary to show up correctly in
"ps -wfu root |grep automount").

It does work when the timeout is given as first option on the commandline
of automount. So I preset this in rc.autofs (I need the timeout for
umounting the usbstorage of my camera when not in use).
--
Kind regards,
Dennis


[9] Comentário enviado por canaman em 13/03/2004 - 01:01h

Foi mal pelo:"o erro da linha 49 com certeza é um erro", faltou erro "de digitação ou de cópia, verifique se as linhas estão como no script, se não há uma quebra de linha no local errado."

[10] Comentário enviado por mmacoli em 20/04/2004 - 22:32h

fiz todos os passos quando vou tentar acessar traz a mensagem de erro abaixo:
macoli@lab211:~$ cd /misc/cd
-bash: cd: /misc/cd: No such file or directory

Tenho que criar o diretorio /cd na pasta /misc? Pois não consegui faze-lo!

[11] Comentário enviado por canaman em 23/04/2004 - 17:35h

Não! não pode haver nenhum diretório na pasta! Faz o seguinte, dá um "#px aux" e vê se o /sbin/automount está rodando.. melhorando, dá o seguinte comando: ´#ps aux | grep automount´. Posta o resultado aqui! Pode aparecer alguma linha, ou não aparecer nada.

[12] Comentário enviado por xlynx em 01/06/2004 - 11:34h

Agradecimentos canaman para este script. Trabalha bom. Eu encontrei também o script do slackware 8 e tive também os problemas do time-out, but not anymore ;-)

Você considerou emitir suas modificações a autofs@linux.kernel.org ?

Agradecimentos uma vez mais =)

[13] Comentário enviado por canaman em 02/06/2004 - 08:07h

Obrigado xlynx, o script na verdade, como eu citei em um comentário acima, não foi modificado por mim, mas pelo Dennis Bijwaard.
Eu tirei o script da lista do autofs e coloquei aqui porque muita gente não sabe procurar bem as coisas, ou não entende inglês.
Thanks to xlynx, the script realy, how i tell in a comentary in this article, has not been modified by me, but by Dennis Bijwaard.
I get the script of the autofs list and put here because some people cant find somethinks in the net, or they cant underestand english.

[14] Comentário enviado por kenjiro em 28/07/2004 - 16:22h

Cara, tem alguma coisa errada por aqui. Estou usando o slackware 10.0 e meti esse "teu" script pra rodar. Beleza, o automount "starta" direitinho, se eu dou um 'ls /misc/floppy' ele lê o diskete beleza. Porém... ele NUNCA desmonta os drives (seja floppy, camera, CD, etc). Tentei aumentar o timeout, tentei setar o timeout no /etc/auto.misc... mas dá tudo na mesma. Ele só desmonta quando eu dou um '/etc/rc.d/rc.autofs stop' ou quando mando desmontar no braço mesmo.

Alguma dica?

[15] Comentário enviado por canaman em 03/08/2004 - 08:39h

Provavelmente tem algum programa acessando as partições. Eu tive esse problema aqui, mas somente quando estava usando o gkrellm pra ler as infomações dessas partições. Daí ele n desmontava nunca porque o autofs só desmonta o dispositivo depois de x segundos de inatividade. Se algum programa estiver lendo o dispositivo ele nunca irá desmontar. Tente dá um fuser /dev/floppy pra ver se aparece algum processo. Espero que descubra o problema! Falow

[16] Comentário enviado por kenjiro em 03/08/2004 - 10:28h

Pois é, mas eu já chequei isso (com o 'fuser' e com o 'lsof') e não tem NADA acessando o /dev/fd0 ou /dev/sr0)

"Oh e agora, quem poderá me defender?" hehehe

[17] Comentário enviado por gamaia em 16/08/2004 - 15:48h

Cara, muito bom este script... tentei editar o original do redhat e, bom, como nao saco muito bem a programacao de scripts, nao consegui... gracas a vc meus problemas foram reolvidos. Muito bom mesmo! Faloura!

[18] Comentário enviado por canaman em 16/08/2004 - 16:39h

Muito Obrigado. Só lembrando que meus créditos são apenas por postar o artigo. Quem descobriu o problema com o script original foi o Dennis Bijwaard (eu não o conheço). Eu apenas fui o responsável por garimpar a informação (me inscrevi na lista do programa, mandei um email pro autor do script) e redigi-la em português. Falow

[19] Comentário enviado por Renick em 08/03/2007 - 14:18h

Funciona normal no slack 11?

[20] Comentário enviado por glaudiston em 17/03/2007 - 15:41h

Funciona sim... acabei de configurar aqui no Slackware 11 e até agora não tive nenhum problema.

Graaande Dennis Bijwaard...
e obrigado por postar aqui canaman... fica realmente bem mais fácil de encontrar...

[21] Comentário enviado por dtux em 15/02/2008 - 07:36h

Bom dia cara estou usando slackware-current, copiei o script montei os arqivos necessários, inicio o serviço vejo pelo ps ax q ele está rodando mesmo, é criada a pasta misic, mas as subpasta cd não é criada, e também gostaria de sabe se funciona tambem com pen e mp4
valeus

[22] Comentário enviado por canaman em 15/02/2008 - 10:44h

Cara, é o seguinte, já faz muito tempo que escrevi esse artigo. No momento não uso mais slackware, então infelismente não poderei ajudar. Provavelmente alguma coisa já deve ter mudado, ou então verifique com calma os arquivos de configuração.
Abraços

[23] Comentário enviado por zoby em 05/04/2008 - 04:26h

Para quem usa Slackware 12, vejam
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7877


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts