Fonte: Exportando automaticamente unidades USB pelo Samba | davidc.net
Para o meu novo NAS, eu queria que os discos USB recém-conectados fossem montados automaticamente e, em seguida, exportados pelo Samba. O programa usbmount do Debian é usado para lidar com a montagem, e alguns scripts lidam com a exportação do Samba.
USBMauricular
O Debian tem o pacote usbmount disponível, um programa prático que roda independente de qualquer GUI. udev chama-o quando um disco USB é inserido, e usbmount monta o disco automaticamente. Ele também executa quaisquer scripts em /etc/usbmount/mount.d usando run-parts (e o equivalente /etc/usbmount/umount.d após a desconexão). Isso permite que um script personalizado seja inserido para manipular a exportação do Samba.
usbmount por padrão será montado nos diretórios /media/usb0 até /media/usb7.
smb.conf
Eu não queria editar o smb.conf diretamente. O Samba tem uma diretiva de inclusão - não permite que você inclua um diretório, mas ignora silenciosamente todos os arquivos de inclusão que não existem.
Crie o diretório vazio /etc/samba/auto e adicione as seguintes linhas à parte inferior do smb.conf:
include = /etc/samba/auto/usb0.conf include = /etc/samba/auto/usb1.conf include = /etc/samba/auto/usb2.conf include = /etc/samba/auto/usb3.conf include = /etc/samba/auto/usb4.conf include = /etc/samba/auto/usb5.conf include = /etc/samba/auto/usb6.conf include = /etc/samba/auto/usb7.conf
mount.d
Em seguida, um script para criar automaticamente os arquivos de configuração acima quando uma unidade é inserida. Crie o arquivo /etc/usbmount/mount.d/50_add_samba_export com o seguinte conteúdo e chmod executável.
#!/bin/bash SHARENAME=`basename $UM_MOUNTPOINT` cat > /etc/samba/auto/$SHARENAME.conf <<EOF [$SHARENAME] comment = $UM_VENDOR $UM_MODEL path = $UM_MOUNTPOINT read only = no EOF /etc/init.d/samba restart
Obviamente, você pode colocar qualquer coisa que quiser no fragmento do arquivo de configuração para configurar o compartilhamento da maneira que desejar.
Note que eu forço um reinício do Samba, em vez de um reload. Isso depende de você - uma recarga não interromperá as conexões existentes, mas significará que os usuários terão que se desconectar e se reconectar para ver o novo compartilhamento. Uma reinicialização interromperá brevemente as conexões, mas permitirá que elas vejam o novo compartilhamento imediatamente. Escolha o que funciona melhor para você.
umount.d
Crie um script semelhante para remover o compartilhamento quando o disco for desmontado ou removido. Isso vai em /etc/usbmount/umount.d/50_remove_samba_export - novamente, lembre-se de chmod ele +x.
#!/bin/bash SHARENAME=`basename $UM_MOUNTPOINT` rm -f /etc/samba/auto/$SHARENAME.conf /etc/init.d/samba restart
Novamente, escolha se deseja recarregar ou reiniciar.
Arrumação final
Se a máquina for reinicializada sem desmontar corretamente, os compartilhamentos aparecerão novamente, mesmo que a unidade não esteja mais conectada. Para lidar com essa eventualidade, crie um script de inicialização para limpar o /etc/samba/auto.
Como o Debian gentilmente removeu o recurso rc.boot do administrador local, você tem que fazer isso da maneira complicada usando um script init, digamos /etc/init.d/auto-share-clean
#! /bin/sh ### BEGIN INIT INFO # Provides: auto-share-clean # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Cleans auto samba shares ### END INIT INFO rm -f /etc/samba/auto/*
Em seguida, chmod +x /etc/init.d/auto-share-clean e update-rc.d auto-share-clean padrões.
Outros trabalhos
Provavelmente há algo inteligente que pode ser feito aqui com o UUID e a nomenclatura persistente - ou seja, exportar o compartilhamento com um nome que seja persistente em reinicializações/reconexões. Por exemplo, com duas unidades USB conectadas, qual unidade é montada primeiro pode variar, o que não é ótimo para nomes de caminho de rede persistentes.