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.
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
[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'
[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 ?
[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.
[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
[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
[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