====== [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...