[DNS-323] Fun_Plug

Fun_plug no necesita alterar el firmware original del NAS, por lo que trabaja, por decirlo de alguna manera, en segundo plano. Esto es lo ideal para mí, pues me permite eliminarlo y dejar el aparato con el firmware original de una manera más fácil y con menos riesgo.

1 - Condiciones iniciales

A continuación vamos a efectuar su instalación en el siguiente NAS:

Marca, modelo, versión hardware, firmware actual: D-Link, DNS-323, C1, 1.10 (04/06/2011).

Recordar restaurar valores de fabrica por defecto, Default settings después de actualizar firmware. Luego podemos escribir la configuración que se ha perdido de nuevo: Nombre de host, dirección IP, usuarios, grupos, carpetas compartidas, etc, no así la información de los discos, que no se ha alterado.

La dirección IP en principio será asignada dinamicamente por el router.

2 - Instalación básica

1) Descargar el fichero fun_plug.tgz correspondiente a nuestro aparato, en nuestro caso la versión EABI.

Enlaces

Descarga de versiones diferentes y paquetes

Versión para dispositivos OABI (como el DNS-323 y CH3SNAS). (Espejo)

Versión ARM en los dispositivos EABI (como el DNS-320/325/345 y CH3MNAS). (Espejo)

2) Copiamos en el raiz del volume_1 del NAS estos dos archivos:

El fun_plug.tgz correspondiente al aparato, de la lista de enlaces anterior.

Un fichero que llamaremos fun_plug, sin extensión ninguna, y que contenga:

#!/bin/sh # switch to safe working directory on ramdisk cd / if [[ ! -d /mnt/HD_a2 ]]; then FFP_HDD=/mnt/HD/HD_a2 else FFP_HDD=/mnt/HD_a2 fi # write a log, in case sth goes wrong FFP_LOG=$FFP_HDD/ffp.log #FFP_LOG=/dev/null exec >>$FFP_LOG 2>&1 # real path to ffp FFP_PATH=$FFP_HDD/ffp # where to search for the install tarball FFP_TARBALL=$FFP_HDD/fun_plug.tgz # setup script (used for ffp on USB disk) FFP_SETUP_SCRIPT=$FFP_HDD/.bootstrap/setup.sh # rc file path FFP_RC=/ffp/etc/rc echo "**** fun_plug script for DNS-323 (2008-08-11 tp@fonz.de) ****" echo "**** fun_plug script modded by Uli (2012-02-21 ffp@wolf-u.li) ****" date # check for setup script. an example use for this is to load USB # kernel modules and mount a USB storage device. The script is # sourced, that means you can change variables, e.g. FFP_PATH to point # to the USB device. if [ -f $FFP_SETUP_SCRIPT ]; then echo "* Running $SETUP ..." chmod a+x $FFP_SETUP_SCRIPT . $FFP_SETUP_SCRIPT fi # create /ffp link echo "ln -snf $FFP_PATH /ffp" ln -snf $FFP_PATH /ffp # install tarball if [ -r $FFP_TARBALL ]; then echo "* Installing $FFP_TARBALL ..." mkdir -p $FFP_PATH && tar xzf $FFP_TARBALL -C $FFP_PATH && /ffp/bin/tar xzf $FFP_TARBALL -C $FFP_PATH if [ $? -eq 0 ]; then echo "* OK" fi rm $FFP_TARBALL fi # suid busybox if [ -x /ffp/bin/busybox ]; then chown root.root /ffp/bin/busybox chmod 0755 /ffp/bin/busybox chmod u+s /ffp/bin/busybox fi # run fun_plug.init, if present if [ -x /ffp/etc/fun_plug.init ]; then echo "* Running /ffp/etc/fun_plug.init ..." /ffp/etc/fun_plug.init fi # run fun_plug.local, if present if [ -x /ffp/etc/fun_plug.local ]; then echo "* Running /ffp/etc/fun_plug.local ..." /ffp/etc/fun_plug.local fi # run commands if [ -x $FFP_RC ]; then echo "* Running $FFP_RC ..." $FFP_RC echo "* OK" else echo "$FFP_RC: Not found or not executable" fi

Este fichero deberá estar marcado como ejecutable y luego copiarlo en volume_1.

3) Reiniciamos el NAS y se descomprimirá e instalará funplug automáticamente. Concretamente, tendremos los archivos ffp.log y fun_plug, además de la carpeta ffp.

4) Nos conectamos via telnet (puerto 23) a la IP de nuestro NAS, ejecutando desde un terminal:

telnet ip_nas

Aparece un prompt sh-4.1#.

5) Ejecutar secuencialmente:

usermod -s /ffp/bin/sh root
mkdir -p /ffp/home/root/
sed -ie 's#:/home/root:#:/ffp/home/root:#g' /etc/passwd
pwconv

Tirar palante aunque aparezcan errores:

En la orden usermod: usermod: no changes, lo ignoramos, quiere decir que ya estaba bien y no era necesaria esta orden.

En la orden pwconv: pwconv: failed to change the mode of /etc/passwd- to 0600, también lo ignoramos.

6) Contraseña acceso. Ejecutar:

passwd

Y poner contraseña del root nueva.

Ejecutar:

login

Y entrar como root, comprobando la contraseña. Si funciona seguir palante. Si no, insistir hasta que esto funcione, pero no continuar.

Guardamos contraseña ejecutando:

wget http://wolf-u.li/u/172/ -O /ffp/sbin/store-passwd.sh
store-passwd.sh

3 - Activación de SSH

1) Activamos SSH, ejecutando:

chmod a+x /ffp/start/sshd.sh
sh /ffp/start/sshd.sh start

Comprobamos que funciona ssh, abriendo otro terminal simultaneo y ejecutando:

ssh root@ip_nas

También podemos usar el PuTTY desde Windows, por ejemplo.

Nos pedirá la contraseña del usuario root. Si entramos, podemos continuar. Si no, repetir hasta que funcione.

2) Deshabilitamos telnet, para una mayor seguridad. Para ello ejecutamos:

chmod -x /ffp/start/telnetd.sh

Podemos ver que todavía funciona telnet. Reiniciar el NAS, orden reboot, para que este servicio pare. Comprobamos que podemos entrar por SSH pero no por telnet.

Nota

Miramos en la web del NAS y comprobamos que hay un nuevo usuario sshd, que puede pertenecer al grupo sshd, y tambien hay un nuevo grupo utmp. Hacemos que el nuevo usuario pertenezca al nuevo grupo utmp y borramos el grupo sshd.

Resumen

Así pues, el acceso por terminal queda ssh root@ip_nas, donde el puerto por defecto es el 22.

4 - Servidor Samba

Problema

Después de reiniciar, entro con PuTTY por SSH:

login as: root
root@upc:~# ps aux | grep smbd
1046 root smbd -D
1058 root smbd -D
1688 root grep smbd

Los recursos no están accesibles. Si entro en configuración web del NAS y grabo cambios en Basic Setup > Device > Description > Save Settings > Luego ya están disponibles los recursos y repitiendo la orden en PuTTY, ahora da:

root@upc:~# ps aux | grep smbd
1812 root /usr/sbin/samba/smbd -D
1819 root /usr/sbin/samba/smbd -D
1821 root grep smbd

Solución

Vamos a reiniciar samba al arrancar, para que los recursos sean detectados inmediatamente.

1) Para ello, primero creo un fichero sambafix.sh:

#!/ffp/bin/sh # Euloxio dice: # Despues de reiniciar el NAS no tenemos acceso samba a los recursos # Vamos a parar y a volver a iniciar SAMBA al reinicio del NAS de # forma automática para corregir este efecto. smb stop smb start # Listo.

2) Copié al raiz del primer disco, volume_1, este fichero y lo puse después en /ffp/start con:

# cd /mnt/HD_a2
# cp sambafix.sh /ffp/start/
# cd /ffp/start
# ls

Todos los ficheros de /ffp/start/ con atributo de ejecutable se ejecutaran al reiniciar el sistema. Nos aseguramos de que sea ejecutable con:

# chmod +x sambafix.sh

y comprobamos los atributos con

# ls -l

Reiniciamos y comprobamos con:

# ps aux | grep smbd

5 - Paquetes

Enlaces

https://nas-tweaks.net/398/installing-and-uninstalling-packages-in-fonz-fun_plug-0-7/

https://nas-tweaks.net/373/uwsiteloader-tool-to-download-the-sites-definitions-for-packages-of-the-fun_plug-0-7/

Ya tenemos ffp y ssh funcionando. Ahora… a buscar paquetitos compilados, y guardarlos en una carpeta para instalarlos cuando interese, que uno no sabe cuando estas cosas desaparecen de internet.

Primero crearemos una carpeta para guardar los paquetes. En mi caso, como tengo dos discos en el NAS, hago:

# mkdir /mnt/HD_a2/ffp/pkg/

Vemos que podemos entrar en ella también así:

# cd /ffp/pkg/

Y ejecutamos la sincronización con fonz, para hacernos una copia de seguridad de los paquetes disponibles actualmente:

# rsync -av inreto.de::dns323/fun-plug/0.7/oabi/packages /ffp/pkg

Así, creamos una carpeta /ffp/pkg/packages donde descarga todos los archivos disponibles en el lugar indicado, lo que supuso bajar unos 102 MB. Todos ellos son paquetes compilados para fonz.

Versión

Controlar que bajemos los paquetes compilados para el modelo de nuestro NAS y para la versión de fun_plug correcta. En nuestro caso el NAS DNS-323 y fun_plug versión 0.7.

Actualización. Para actualizar se usa la opción -u. Una vez bajados los paquetes compilados, ejecutamos lo siguiente para actualizar los paquetes instalados por si hubiese en packages una versión posterior:

# cd /ffp/pkg/packages/
# funpkg -u *.txz

Update

Es muy importante hacer esto último antes de proseguir con el tutorial. Así nos aseguramos de tener instaladas las últimas versiones y por tanto corregidos posibles errores.

Instalación. Para instalar un paquete se usa la opción -i. Por ejemplo para instalar todos los paquetes disponibles:

# cd /ffp/pkg/packages/
# funpkg -i *.txz

Versión 0.7 (Incompleto)

Una de las nuevas características de la versión 0.7 de fun_plug es la posibilidad de añadir varias ubicaciones de los paquetes.

uwsiteloader: Herramienta para bajar la lista de paquetes disponibles. Válida sólo para la versión 0.7.

Se descarga así:

wget http://wolf-u.li/u/441 -O /ffp/bin/uwsiteloader.sh

Porque realmente se trata de un script. Finalmente se le dan derechos de ejecución a todos los usuarios:

chmod a+x /ffp/bin/uwsiteloader.sh

Para actualizar las definiciones de los sitios, lo ejecutaremos:

uwsiteloader.sh

Actualización inicial de paquetes. Después de instalar uwsiteloader necesitamos actualizar los datos de los repositorios usando slacker:

slacker -U

Instalación de paquetes. Después de que hemos actualizado la información de los repositorios, podemos instalar paquetes utilizando de nuevo slacker. Podemos elegir entre varios modos de instalación usando los parámetros -a, -i and -u. Ejemplo:

slacker -i

Y por ejemplo selecciono e instalo el nano.

Instalación de paquetes desactualizados. Con la siguiente orden se presentan los paquetes que tienen una versión superior en los repositorios. Los marco todos y los actualizo:

slacker -u

me da un error: /ffp/bin/funpkg: can't load library 'libxml2.so.2' . Aquí me quedo. A ver si puedo en otro momento proseguir con el tema…