Recientemente adquirí una placa Cubietruck (Cubieboard 3) para trastear un poco y ver con qué le podía sacar provecho. Tras dedicarle un tiempo la he convertido en un servidor doméstico con los siguientes servicios:

  • Compartición de archivos (SAMBA)
  • Servidor de impresión (CUPS)
  • Cliente de BitTorrent (Transmission)
  • Es un sistema de bajo consumo, con unas dimensiones muy reducidas, totalmente silencioso, dispone de conexión SATA para un disco de 2.5 pulgadas, y existe una carcasa económica (

    Ewell case) para albergar cómodamente todo el conjunto. En comparación con el PC convencional que tenía anteriormente funcionando las 24 horas, supone un cambio muy satisfactorio. Tras algunas semanas en funcionamiento, no le puedo reprochar nada en cuanto a rendimiento ni estabilidad, sin un solo fallo hasta ahora.

    El único problema importante lo he encontrado con el grosor del disco duro, un Toshiba de 2TB de la serie MQ, que excede la altura del hueco dedicado a él en la caja, lo que me ha obligado a hacer un apaño para que no choque con la placa Cubietruck, y hace que no se pueda cerrar todo como es debido. Tenedlo en cuenta a la hora de comprar.

    Para la instalación del sistema me he decantado por Debian Wheezy, partiendo de la fantástica imagen preparada por Igor Pečovnik. Nos ponemos manos a la obra…

    Tras descargar la imagen y grabarla en la tarjeta SD, iniciamos el equipo con ella y transferimos la instalación a la memoria NAND del sistema:

    sh ./nand-install.sh

    Nos pedirá que reiniciemos y que volvamos a ejecutar de nuevo el mismo script, desde la SD. Tras esta segunda ejecución, ya podemos apagar el sistema y quitar la SD para iniciar de nuevo desde la NAND.

    Eliminamos algunos archivos que ya no serán necesarios:

    rm .install-exclude
    rm nand1-cubietruck-debian-boot.tgz
    rm nand_mbr.backup
    rm .reboot-nand-install.pid
    rm sata-install.sh

    Actualizamos el sistema:

    apt-get update
    apt-get upgrade

    Reconfiguramos el idioma, ejecutando dpkg-reconfigure locales. Añadimos es_ES.UTF-8, y seleccionamos “None” cuando nos pida el default locale.

    Establecemos el idioma por defecto ejecutando:

    echo ": ${LANG:=es_ES.utf8}; export LANG" >> /etc/profile

    Reconfiguramos la zona horaria con dpkg-reconfigure tzdata.

    Editamos el archivo /etc/network/interfaces, y cambiamos la siguiente línea:

    iface eth0 inet dhcp

    Por estas cuatro, sustituyendo la IP de la segunda línea por la que decidamos:

    iface eth0 inet static
    	address 192.168.1.11
    	netmask 255.255.255.0
    	gateway 192.168.1.1

    Podemos reiniciar y a partir de ahora podremos trabajar vía SSH contra esta IP fija que hemos definido.

    Lo siguiente es opcional, para deshabilitar los servicios correspondientes al receptor de infrarrojos y el bluetooth, si no vamos a utilizarlos:

    mv /etc/rc0.d/K01lirc /etc/rc0.d/k01lirc
    mv /etc/rc1.d/K01lirc /etc/rc1.d/k01lirc
    mv /etc/rc2.d/S03lirc /etc/rc2.d/s03lirc
    mv /etc/rc3.d/S03lirc /etc/rc3.d/s03lirc
    mv /etc/rc4.d/S03lirc /etc/rc4.d/s03lirc
    mv /etc/rc5.d/S03lirc /etc/rc5.d/s03lirc
    mv /etc/rc6.d/K01lirc /etc/rc6.d/k01lirc</p>
    <p style="text-align: justify;">mv /etc/rc0.d/K01bluetooth /etc/rc0.d/k01bluetooth
    mv /etc/rc1.d/K01bluetooth /etc/rc1.d/k01bluetooth
    mv /etc/rc2.d/S04bluetooth /etc/rc2.d/s04bluetooth
    mv /etc/rc3.d/S04bluetooth /etc/rc3.d/s04bluetooth
    mv /etc/rc4.d/S04bluetooth /etc/rc4.d/s04bluetooth
    mv /etc/rc5.d/S04bluetooth /etc/rc5.d/s04bluetooth
    mv /etc/rc6.d/K01bluetooth /etc/rc6.d/k01bluetooth

    Teniendo ya el disco conectado al interfaz SATA, creamos una nueva partición primaria de todo el tamaño del disco:

    fdisk /dev/sda

    Formateamos la partición recién creada:

    mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sda1

    Creamos el usuario que utilizaremos para acceder a los archivos compartidos, en este caso le llamaremos “stuff”:

    adduser stuff

    Creamos el punto de montaje para la partición del disco duro:

    mkdir /stuff

    Y montamos la partición:

    mount /dev/sda1 /stuff

    Configuramos el fstab para que la partición se monte automáticamente con el inicio del sistema:

    echo "/dev/sda1       /stuff  ext4    noatime    0       2" >> /etc/fstab

    Establecemos los permisos necesarios:

    chown stuff:stuff /stuff
    chmod 700 /stuff

    Configuramos el disco duro para que pase a modo “standby” tras 20 minutos de inactividad, añadiendo lo siguiente al final del archivo /etc/hdparm.conf:

    /dev/sda {
    	spindown_time = 240
    }

    Instalamos el servicio SAMBA:

    apt-get install samba samba-common-bin

    Editamos el archivo /etc/samba/smb.conf, descomentando en primer lugar la línea “security = user”, y comentando completamente los apartados [homes], [printers] y [print$]. Después añadimos las siguientes líneas al final del archivo:

    [stuff]
    path = /stuff
    valid users = stuff
    guest ok = no
    writable = yes
    browsable = yes

    Establecemos la contraseña del usuarios stuff para el servicio SAMBA:

    smbpasswd -a stuff

    Reiniciamos el servicio SAMBA y ya lo tendremos operativo:

    /etc/init.d/samba restart

    Instalamos el paquete de Transmission:

    apt-get install transmission-daemon

    Paramos el servicio para poder editar el archivo de configuración, ya que de lo contrario se perdería cualquier cambio que hagamos en él:

    /etc/init.d/transmission-daemon stop

    Editamos el archivo /etc/transmission-daemon/settings.json, donde configuraremos el directorio donde queremos que vayan las descargas (por ejemplo /stuff/download), la contraseña para acceder al interfaz web, y cualquier otro parámetro que consideremos. Uno de ellos es “umask”, y debemos cambiarlo a 0.

    Creamos el directorio de descargas que hemos configurado antes y establecemos los permisos necesarios:

    mkdir /stuff/download
    chmod a+x /stuff
    chmod 777 /stuff/download

    Ya podemos iniciar el servicio y comprobar el acceso vía web:

    /etc/init.d/transmission-daemon start

    Instalamos el servicio de gestión de impresoras:

    apt-get install cups

    Si vamos a conectar una impresora HP, como es mi caso, instalaríamos el siguiente paquete que proporciona todos los controladores necesarios:

    apt-get install hplip

    El sistema CUPS viene preparado para que lo configuremos desde el interfaz web, pero conectándonos localmente desde la propia máquina, no permitiendo conexiones externas. Para podernos conectar desde otro equipo, necesitaremos realizar un serie de cambios en el archivo /etc/cups/cupsd.conf.

    En primer lugar cambiaremos la línea “Listen localhost:631” por “Port 631”. Luego observaremos una serie de línea que aparecen así:

    # Restrict access to the server...
    <Location />
    Order allow,deny
    </Location>
    

    Restrict access to the admin pages…

    <Location /admin> Order allow,deny </Location>

    Restrict access to configuration files…

    <Location /admin/conf> AuthType Default Require user @SYSTEM Order allow,deny </Location>

    Y deberemos dejarlas tal que así:

    # Restrict access to the server...
    <Location />
    Order allow,deny
    Allow 192.168.1.*
    </Location>
    

    Restrict access to the admin pages…

    <Location /admin> Order allow,deny Allow 192.168.1.* </Location>

    Restrict access to configuration files…

    <Location /admin/conf> AuthType Default Require user @SYSTEM Order allow,deny Allow 192.168.1.* </Location>

    Reiniciamos el servicio para que actualice la configuración:

    /etc/init.d/cups restart

    Ahora ya nos podemos conectar desde cualquier navegador a la dirección http://192.168.1.11:631/admin (cambiando la IP por la que hayamos definido). Desde la opción Administración -> Añadir impresora, podremos seguir fácilmente los pasos para crear y compartir la impresora.

    Puesto que en algún momento puede que nos interese realizar un apagado controlado el sistema sin tener que conectarnos a él remotamente, vamos a configurarlo para que ocurra cuando pulsemos el botón de power. Para empezar instalamos el software de gestión ACPI:

    apt-get install acpid

    Creamos el archivo /etc/acpi/events/button-power con el siguiente contenido:

    event=button/power
    action=halt

    Reiniciamos el servicio para que actualice la configuración y ya podemos hacer la prueba pulsando el power:

    /etc/init.d/acpid restart

    Configuramos el sistema de envío de correos electrónicos, instalando primero el software necesario:

    sudo apt-get install ssmtp mailutils

    Creamos el archivo /etc/ssmtp/ssmtp.conf con los datos del servidor SMTP que utilizaremos:

    mailhub=host_servidor_smtp_externo:puerto
    FromLineOverride=YES
    AuthUser=usuario_smtp
    AuthPass=password_smtp

    Creamos el archivo /etc/ssmtp/revaliases especificando el usuario que va a hacer uso del sistema:

    root:usuario@dominio.com:host_servidor_smtp_externo:puerto

    Ahora viene la parte divertida. Creamos un script que controlará la activación y desactivación del parpadeo del led naranja de nuestro Cubietruck. Esto lo utilizaremos para activarlo en caso de que se produzca una alarma por temperatura del sistema o por un estado anómalo del disco duro. Este script se ubicará en /usr/local/bin/led_alarm.sh y tendrá el siguiente contenido:

    #!/bin/bash
    case "$1" in
    	on)
    		echo timer > /sys/class/leds/orange\:ph20\:led2/trigger
    		;;
    	off)
    		echo 0 > /sys/class/leds/orange\:ph20\:led2/brightness
    		;;
    esac

    Le damos permisos de ejecución:

    chmod +x /usr/local/bin/led_alarm.sh

    Creamos el script que se activará en caso de un problema con el disco duro en /usr/local/bin/smartdnotify:

    #!/bin/bash
    . /usr/local/bin/led_alarm.sh on
    echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS"

    Y le damos también los permisos necesarios:

    chmod +x /usr/local/bin/smartdnotify

    Instalamos las herramientas de monitorización de disco, que utilizarán el sistema S.M.A.R.T.:

    apt-get install smartmontools

    Reconfiguramos el servicio para que se inicie automáticamente y realice las comprobaciones cada 30 minutos:

    sed -i 's/#start_smartd=yes/start_smartd=yes/g' /etc/default/smartmontools
    sed -i 's/#smartd_opts="--interval=1800"/smartd_opts="--interval=1800"/g' /etc/default/smartmontools
    sed -i 's/^DEVICESCAN /#DEVICESCAN /g' /etc/smartd.conf

    Le indicamos que compruebe nuestro disco duro, pero no lo haga cuando se encuentra en “standby” (a menos que hayan pasado 24 horas desde el último chequeo), y que en caso de encontrar un error nos envíe un correo electrónico utilizando el script que hemos creado anteriormente:

    echo "/dev/sda -d ata -H -n standby,48,q -m usuario@dominio.com -M exec /usr/local/bin/smartdnotify" >> /etc/smartd.conf

    Iniciamos el servicio:

    /etc/init.d/smartmontools start

    Definimos el script que activará la alarma en caso de que se superen los 50 grados de temperatura del sistema, y la desactivará automáticamente cuando descienda por debajo de dicho umbral. Lo ubicaremos en /usr/local/bin/temperature_monitor.sh:

    if [ "$TEMP_TRUNC" -gt "50" ]; then
    	if [ ! -f $FLAG ]; then
    		. /usr/local/bin/led_alarm.sh on
    		touch $FLAG
    		echo "Temperatura: $TEMP°C" | mail -s "Alerta de temperatura" $DEST
    	fi
    else
    	if [ -f $FLAG ]; then
    		rm $FLAG
    		. /usr/local/bin/led_alarm.sh off
    		echo "Temperatura: $TEMP°C" | mail -s "Temperatura normalizada" $DEST
    	fi
    fi

    Le asignamos los permisos necesarios:

    chmod +x /usr/local/bin/temperature_monitor.sh

    Y añadimos la siguiente línea al crontab del usuario “root” para que se ejecute la comprobación cada 15 minutos:

    */15 * * * * /usr/local/bin/temperature_monitor.sh

    Recursos consultados:

    https://wiki.debian.org/Locale
    http://www.thomas-krenn.com/en/wiki/Ext4_Filesystem
    https://wiki.debian.org/BitTorrent/Transmission
    https://wiki.debian.org/SystemPrinting
    http://thismightbehelpful.blogspot.com.es/2008/09/remote-access-to-cups-web-interface.html
    https://groups.google.com/forum/#!topic/cubieboard/eNWzeyDSDYc
    http://kevin.deldycke.com/2011/05/setting-hdds-smart-monitoring-debian-squeeze/
    https://wiki.archlinux.org/index.php/S.M.A.R.T.
    http://stackoverflow.com/questions/8356698/how-to-remove-decimal-from-a-variable
    http://askubuntu.com/questions/221081/permission-denied-when-downloading-with-transmission-deamon
    http://info4admins.com/tips-to-spindown-your-hard-disk-in-debian-or-ubuntu/