Tabla de Contenidos

[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:

2 - Instalación básica

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

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

fun_plug
#!/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

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

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

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:

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

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…