====== [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.
{{ico:enlace.png?nolink|}}
//Enlaces//
* [[http://www.inreto.de/dns323/fun-plug/|Descarga de versiones diferentes y paquetes]]
* [[http://ffp.inreto.de/ffp/0.7/oabi/fun_plug.tgz|Versión para dispositivos OABI (como el DNS-323 y CH3SNAS)]]. [[http://funplug.wolf-u.li/mirrors/s/0.7/oabi/fun_plug.tgz|(Espejo)]]
* [[http://inreto.de/dns323/fun-plug/0.7/arm/fun_plug.tgz|Versión ARM en los dispositivos EABI (como el DNS-320/325/345 y CH3MNAS)]]. [[http://funplug.wolf-u.li/mirrors/s/0.7/arm/fun_plug.tgz|(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.
{{ico:mouse_64.png?nolink|}}
//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''.
{{ico:nota.png?nolink|}}
//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 =====
{{ico:enlace.png?nolink|}}
//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 [[http://www.vicente-navarro.com/blog/2008/01/13/backups-con-rsync/|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.
{{ico:peligro.gif?nolink|}}
//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
{{ico:nota.png?nolink|}}
//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...