Partimos de la base de un servidor corriendo samba, del que quiero montar sus shares (compartidos) desde mi FreeBSD. Esto ya lo he hecho antes desde Linux, donde hay una gran abundancia de recursos para configurar esta situación (aunque también vale la pena que reces un poco para encontrar algo que esté un poco en condiciones, no esté muy desfasado, no sea para una distribución concreta con sus «particularidades», etc, etc). El caso es que llegado el turno de hacer lo mismo en FreeBSD, la documentación para este tipo de acción es muy escasa. Más que nada debido a que la información para el automounter para cualquier cosa que no sea NFS es muy rara. Pero por otro lado también a que el desarrollo de las herramientas AMD ha estado inactivo durante unos años, hasta hará cuestión de 2 ó 3 años atrás, momento en que el proyecto fué acogido de nuevo por un mantenedor. Actualmente el nombre del nuevo proyecto AMD es “am-utils”. Pero en contra de la tradición, hay que decir que la documentación de FreeBSD tampoco es que sea muy clara, así que lo que aquí os expongo es la traducción y adaptación de un magnífico escrito al respecto que he encontrado en inglés.
El HOWTO
Lo primero de todo es saber cómo montar un compartido samba bajo FreeBSD, usando para ello el comando mount. Algo tan simple como: mount -t smbfs //user@servidor/share /punto/demontaje. Lo que ocurre es que el comando lo debes ejecutar como usuario root, y además deberás tener presente una serie de temas al respecto:
-
Por defecto el comando te preguntará el password del usuario de forma interactiva. Evidentemente con el automounter no hay posibilidad alguna de poder hacer esto. Para ello el comando necesita de opciones adicionales para evitar que pida el password. Sería algo así como: mount -t smbfs -o rw,-N //user@servidor/share /mount/point. La opción -N permite que la operación de montaje continue sin preguntar por el password, pero a no ser que hayas configurado una cuenta de usuario invitado, tendrás que escribir las credenciales de usuario (nombre usuario y password para servidores) en el fichero /etc/nsmb.conf. Echale un vistazo a la página man (si, en FreeBSD si haces “man nsmb.conf”, al contrario que en la gran mayoría de distros Linux, te indicará todo lo necesario sobre ese fichero de configuración y las indicaciones a otra documentación de ser necesaria).
-
A veces es útil usar la opción -I (“i” latina mayúscula) para especificar la dirección IP o el nombre DNS del servidor samba, especialmente si hay algún problema en la resolución del nombre NetBIOS del servidor. El comando mount pasaría a ser algo como esto: mount -t smbfs -o rw,-N,-I=192.168.1.5 //user@server/share /mount/point.
-
Encontrareis información adicional sobre todas las opciones en la página man del comando mount_smbfs. Este comando es el que hace el montaje para compartidos samba. Notad que en el comando mount, cualquier opción a pasar a mount_smbfs necesita ser escrita con el valor -o opción, separado por comas, con opción y sus valores separados por “=”. Por ejemplo, dada la siguiente línea de órdenes de comando mount_smbfs mount_smbfs -r -N -E gbk:cp936 //user@server/share /mount/point, la correspondiente línea de comando mount sería: mount -t smbfs -o ro,-N,-E=gbk:cp936 //user@server/share /mount/point.
Pasemos entonces ya a la parte del automounter. El automounter en FreeBSD se llama AMD, y es bastante diferente del automounter en Linux, por cómo trabaja y la configuración y formato de los ficheros correspondientes. Comenzaremos con los ficheros de configuración. AMD no soporta smbfs nativamente. Así que la solución pasa por usar un programa para ello en AMD, el cual nos permitirá especificarle los comandos para montar y desmontar un filesystem. Con esto, virtualmente se podrá añadir dentro de AMD cualquier sistema de ficheros en AMD aunque no lo soporte nativamente.
Crearemos un fichero llamado /etc/amd.conf que contenga lo siguiente (siempre como usuario root):
[global]
auto_dir = /.amd
log_file = /var/log/amd.log
log_options = error,fatal,warning
map_type = file
search_path = /etc
[/smb]
map_name = amd.smb
Esta configuración indica a AMD lo necesario sobre su directorio raiz de automontaje, localización de logs y opciones de contenido, además de donde buscar sus ficheros de mapeo. Luego la sección [/smb] define un punto de automontaje /smb, y su correspondiente fichero de mapeo amd.smb.
He mencionado el fichero /etc/amd.smb, así que es hora de crearlo con lo siguiente:
share fs:=${autodir}${path};type:=program;mount:=”/sbin/mount mount -t smbfs -o rw,-N \\/\\/user@server/share ${fs}”;
Este fichero de mapeo indica a AMD que cuando necesite automontar un share samba, necesitará ejecutar el programa definido por la flag de mount. Fíjate, la línea de comando en mount:=… parece un pelín rarilla. Dos cosas debes tener en cuenta:
-
-
1. La línea de comando en mount:=… no es simplemente un comando a ejecutar. En vez de eso está compuesta de dos partes. La primera palabra en la línea de comando es el nombre del ejecutable, y después, las palabras que siguen son argumentos para ejecutar el comando, incluyendo argv[0] (o $0). Ahí teneis el porqué hay un comando “mount” extra ahí metido.
2. La opción por defecto de AMD normalizará las barras en su fichero de configuración. Las dobles barras (como la que aparece al principio de una URL de un compartido samba) serán normalizadas en una sola barra. Pero las barras de escape extras son necesarias para ello (“\\/\\/user@server/share”).
-
Un comando unmount puede también darse aquí si el “umount ${fs}” por defecto no se aplicase (por ejemplo para un filesystem fuse).
Con estos dos ficheros preparados, podemos activar AMD. Para ello editamos el fichero /etc/rc.conf, y añadimos (o modificamos) las siguientes líneas:
amd_enable=”YES”
amd_flags=””
La segunda línea permite a AMD iniciar sin ninguna opción extra. Esto hará leer el fichero AMD /etc/amd.conf para buscar las opciones.
A continuación inicia AMD con el comando /etc/rc.d/amd start. Esto iniciará todo y, dado que hemos puesto las dos líneas anteriores en el fichero rc.conf, cuando se reinicie la máquina se activará automáticamente el servicio.
Terminado esto, cuando accedamos a /smb/share AMD ejecutará el comando mount y montará todo automáticamente. Y además, si el mount está inactivo durante 5 minutos, AMD los desmontará automáticamente también.
Espero que pueda seros de utilidad a más de uno/a, y no haber fallado mucho en la traducción/adaptación realizada.
Have a nice day ;-)
TooManySecrets
