Ampliando el espacio de almacenamiento de la fonera
Bueno, tras unas cuantas peleas con los fuentes del kernel de la fonera, y tras horas y horas intentando hacer que funcionase el smbfs para poder montar uno de mis discos ethernet en mi fonera para dotarla de más espacio de almacenamiento, me dió por probar con el módulo cifs del kernel y... ¡lo conseguí hacer funcionar! jejeje mi fonerita ahora tiene un disco de 250 Gigabytes XD
El Making Of
Voy a relatar los pasos que he dado, por si alguno los quisera reproducir.
Primero, me bajé los fuentes de la fonera, los descomprimí, constuí el buildroot y el kit de desarrollo completo de la OpenWRT que trae.
Bueno, eso lo puedes leer en el anterior artículo:
Jugando con las fuentes de la Fonera
Una vez que tuve el buidroot, ya estaba en disposición de compilar cosillas, así que mi primer intento fué hacer funcionar el módulo smbfs del kernel, que es un modulo que permite mapear discos de red compartidos de ordenadores Windows (o de ordenadores Linux que usen el Samba).
Pude compilar el módulo sin problemas, pero a la hora de mapear algo me daba un error... claro, luego leí que con sólo el módulo ese del kernel no es suficiente.
El módulo necesita de un programa externo para realizar el montaje: el smbfs y claro, en la OpenWRT no lo veís como paquete, y no es cuestión de andar adaptando un paquete de otra distribución... (menudo coñazo).
Así que el siguiente paso fué intentarlo con el módulo cifs, que es lo que usan actualmente los Windows modernos para compartir sus recursos de red.
Bien, la fonera no trae incluído en el kernel el cifs, ni lo tiene tampoco compilado como módulo, así que necesitaba sacar de algún lado dicho módulo, metérlo en la fonera y probarlo, así que eso es lo que hice :)
En los fuentes proporcionados por fon se encuentran tambien las fuentes del kernel utilizado, así que sólo debía ir allí, hacer un make menuconfig, luego un make modules y ¡voila! ya tendría mi modulito.
(Para impacientes, más abajo en este documento he colocado un enlace al modulo que he generado, por si te quieres ahorrar todo este coñazo de la compilación).
Bien, así que explicaré un poco por encima cómo compilar ese modulo:
A partir de ahora, asumiré que tienes construido el buidroot y que las fuentes las tienes en /fonera asi todas las direcciones a directorios las explicaré tomando como origen eso, el /fonera, ¿ok?.
Hemos dicho que tenemos que configurar el kernel, asi que vamos al directorio /fonera/build_mips/linux-2.4-ar531x/linux-2.4.32 y allí mismo hacemos un: make menuconfig con lo que nos aparecerá la interface ncurses típica de configurar el kernel de linux.
Ahora nos vamos a la opcion File Systems y dentro de ella a la opción Network File Systems y allí activamos el CIFS como módulo externo.
Esta es una captura de la pantalla en esa parte:
Una vez hecho eso, salimos (con ESC varias veces), grabamos la configuración y salimos de ahi.
Una vez fuera, compilamos los módulos del kernel mediante una make modules de tal forma que cuando temine, ya tendremos listo nuestro modulo llamado cifs.o que tendremos que subir a la fonera.
En concreto el módulo lo tendremos en: /fonera/build_mips/linux-2.4-ar531x/modules/lib/modules/2.4.32/kernel/fs/cifs
Para subirlo a la fonera, teneis varias opciones: enviarselo mediante SCP, por ejemplo, mediante un cliente SCP en Windows o bien mediante el Konqueror, poniendo en la barra de direcciones fish://fonera (siendo fonera la dirección IP de vuestra fonera) o bien (que es la que al final he usado yo) entrar en la fonera por SSH y desde ella, hacer un wget y descargarse el ficherín.
Para impacientes, os he puesto en mi servidor el ficherín ya generado, lo teneis en http://fonera.trucomania.org/cifs.o así que si desde vuestra fonera poneis wget http://fonera.trucomania.org/cifs.o pues ya lo habreis metido en ella :)
Vamos al grano, ¡hagamos que funcione!
Bien, una vez generado el modulín, hay que meterlo en la fonera.
Lo más rápido que se me ocurre es que lo metais en la fonera haciendo un wget.
El módulo ha de ir alojado en el directorio /lib/modules/2.4.32/
Así que nos posicionamos en dicho directorio:
root@OpenWrt:/# cd /lib/modules/2.4.32/ root@OpenWrt:/lib/modules/2.4.32# ls
Y desde ahí nos descargamos el modulito necesario para usar el CIFS:
root@OpenWrt:/lib/modules/2.4.32# wget http://fonera.q3.nu/cifs.o Connecting to fonera.q3.nu[85.85.145.224]:80 cifs.o 100% |**************************************************************| 266 KB 00:00 ETA root@OpenWrt:/lib/modules/2.4.32#
Una vez metido en la fonera, tendremos que cargar el módulo, lo cual se consigue con el comando: insmod cifs
Podreis comprobar que está cargado con el típico lsmod:
root@OpenWrt:/lib/modules/2.4.32# lsmod Module Size Used by Tainted: P cifs 193840 1 ipt_REDIRECT 640 0 ipt_length 320 2 ipt_CONNMARK 816 1 tun 4344 3 ath_ahb 91820 1 ath_rate_sample 9096 0 [ath_ahb] wlan_xauth 332 0 (unused) wlan_wep 4332 0 (unused) wlan_tkip 11036 2 wlan_ccmp 6204 0 (unused) wlan_acl 2524 0 (unused) ath_hal 176896 1 [ath_ahb ath_rate_sample] wlan_scan_sta 10476 0 (unused) wlan_scan_ap 2940 1 wlan 178512 1 [ath_ahb ath_rate_sample wlan_xauth wlan_wep wlan_tkip wlan_ccmp wlan_acl wlan_scan_sta wlan_scan_ap] ar531x-wdt 1712 1 mini_fo 54176 1 root@OpenWrt:/lib/modules/2.4.32#
Vale, una vez que tengamos esto cargado y en marcha, podremos ya mapear un disco externo mediante el siguiente comando:
mount -t cifs //PcRemoto/Recurso /mnt/c -o unc=\\\\PcRemoto\\Recurso,ip=192.168.0.6,user=Usuario,pass=Clave,dom=GRUPODETRABAJO
Dónde:
IMPORTANTE: La ruta del recurso compartida que va tras el unc= ha de ir con dobles barras, para que el shell se lo trague. Si las poneis con barras simples no funciona, ah, y si, hay que especificar la ip del PCRemoto, sino tampoco funciona.
Aqui teneis una captura de mi fonera con una sobredosis de disco duro:
root@OpenWrt:/lib/modules/2.4.32# df Filesystem 1k-blocks Used Available Use% Mounted on none 7128 44 7084 1% /tmp /dev/mtdblock/2 5568 452 5116 8% /jffs / 1536 1536 0 100% / //gentil/todo 118957688 90085524 28872164 76% /mnt/c root@OpenWrt:/lib/modules/2.4.32#