From UnderLinux Wiki
Por Luciano Gaspar Farias - lucianogf - lucianogf@yahoo.com
Introdução
Este tutorial foi baseado no texto de Hélder Garcia, e adaptado de acordo com o manual do shfs.
Com o módulo shfs monte facilmente qualquer filesystem remoto através de uma conexão segura, via ssh.
Apenas com a compilação do módulo e um utilitário para a montagem dos filesystems, no lado do cliente, e tendo o ssh server instalado no servidor remoto, é possível para o usuário acessar filesystems remotos como se fossem locais. O servidor remoto pode, ainda, ser de diversas plataformas, como Linux, Solaris, AIX, Cygwin, entre outros, pois ele só precisa do ssh e de um bash ou perl 5 instalados.
Toda a comunicação é feita por uma conexão ssh, de forma secura e confiável. Neste artigo iremos realizar a instalação e montagem de um filesystem remoto.
Plataforma utilizada
Lado Cliente 01
Pentium MMX 233MHz
32MB RAM
Slackware 10.2
Kernel 2.4.31
Captive-NTFS 1.1.5
Lufs 0.9.7
Lado Cliente 02
Athlon 2600+ FSB 333MHz
512MB Ram
Conectiva 10
Kernel 2.6.11-72032U10_17cl
Kernel 2.6.5-63077c
shfs 0.35
Lado Servidor
Servidor Linux rodando SSHD
Compilação
Primeiro faça o download do pacote.
Pode ser baixado em:
http://shfs.sourceforge.net/
Siga os comandos abaixo:
# cd /tmp
# tar xzvf shfs-0.32.tar.gz
# cd shfs-0.32
Primeiro cheque a variável KERNEL_SOURCES no primeiro nível do arquivo Makefile. Veja se ela contém o caminho do seu kernel.
Importante (kernel 2.4): cheque seu compilador se é o mesmo usado para compilar seu kernel:
# gcc --version
gcc (GCC) 3.3.6
# cat /proc/version
Linux version 2.4.31 (root@tree) (gcc version 3.3.5) #6 Sun Jun 5 19:04:47 PDT 2005
Se a versão do compilador e do kernel forem diferentes vc deve adicionar a variável CC na hora da compilação.
ex.:
# gcc --version
gcc (GCC) 2.96
# cat /proc/version
Linux version 2.4.31 (root@tree) (gcc version 3.3.5) #6 Sun Jun 5 19:04:47 PDT 2005
# make CC=gcc-3.3.5
Caso esteja tudo OK proceda com o comando normal:
# make
Testando o módulo
Após compilar o módulo, podemos testá-lo antes de instalar. Carregue o módulo manualmente:
$ insmod shfs/Linux-2.6/shfs.o
Crie um mountpoint para montar o filesystem:
$ mkdir /mnt/shfs
Execute o utilitário compilado, passando como parâmetros user@host remotos e o mountpoint local:
$ shfsmount/shfsmount hlbog@192.168.1.2 /mnt/shfs
hlbog@192.168.1.2's password:
Certifique se funcionou:
$ cd /mnt/shfs
$ ls projetos/
Verifique que o filesystem montado é o home do usuário utilizado para realizar a conexão. Após esse teste inicial, você pode desmontar o filesystem e instalar o módulo no sistema.
Instalando
$ cd /tmp/shfs-0.32
$ shfsmount/shfsumount /mnt/shfs
$ make install
Criando arquivo .deb/.rpm
Se você desejar criar arquivo .deb ou .rpm e instalá-lo, proceda da seguinte forma:
# make deb
# dpkg -i ../shfs*.deb
ou
# make rpm
# rpm -ivh ../shfs*.rpm
Criando patch
É possível também criar um patch para o kernel
# cd shfs/Linux-2.x/
# make patch
Se o patch for aplicado, não há necessidade de módulo para o kernel, justo que o shfsmount foi instalado e configurado.
Utilização
Depois de instalado, você pode usar o utilitário mount normalmente, apenas passando o tipo do filesystem como shfs. Veja o exemplo abaixo:
$ mount -t shfs user@power /mnt/shfs
user@power's password:
$ ls -l /mnt/shfs
total 2
2 drwxr-xr-x 2 root root 4096 Feb 19 03:53 projetos/
Uso comum (montando o diretório home do usuário no host):
shfsmount user@host /mnt/shfs
ou
mount -t shfs user@host /mnt/shfs
Especificando o diretório remoto:
shfsmount user@host:/tmp /mnt/shfs
ou
mount -t shfs user@host:/tmp /mnt/shfs
Especificando porta diferente:
shfsmount -P 2222 user@host /mnt/shfs
Especificando outras opções de SSH:
shfsmount --cmd="ssh -c blowfish %u@%h /bin/bash" user@host:/tmp /mnt/shfs/
To make mount survive temporary connection outage (reconnect mode):
shfsmount --persistent user@host /mnt/shfs
Transferências longas? Aumente o tamanho do cache (1MB cache por arquivo):
shfsmount user@host /mnt/shfs -o cachesize=256
Para permitir a resolução de symlink:
shfsmount -s user@host /mnt/shfs
Para preservar o uid (gid) (NFS substitui o modo):
shfsmount root@host /mnt/shfs -o preserve,rmode=755
Para ver se algo está errado (forces kernel debug output too):
shfsmount -vvv user@host /mnt/shfs
Permissões
Se você quiser que qualquer usuário possa montar um filesystem remoto via shfs, ative o suid dos comandos /usr/bin/shfsmount e /usr/bin/shfsumount:
$ chmod u+s /usr/bin/shfsmount
$ chmod u+s /usr/bin/shfsumount
Também é possível utilizar o automounter para conectar automaticamente com o servidor remoto. Neste caso, considere utilizar chaves ssh.
Observações importantes
Nos testes utilizando kernel 2.6.5-63077c e 2.4.31 os resultados foram de acordo com o esperado.
Mas ao utilizar o kernel 2.6.11-72032U10_17cl não oi possível instalar o módulo.
Ainda não sei a causa do problema, mas quando descobrir será adicionado ao tutorial.
Conclusão
o SHFS mostrou-se muito útil para situações que precisamos conectar a algum servidor e compartilhar arquivos, o ideal seria a utilização de uma VPN, mas neste caso fica quase como uma VPN.
Para maiores detalhes acesse a página do projeto shfs no sourceforge.
http://shfs.sourceforge.net
http://shfs.sourceforge.net/install.html