Hoy vamos a hacer dos personalizaciones más a nuestro nuevo NAS, tras lo que aprendimos en los últimos posts [primeros pasos y personalizando]. Primero configuraremos el ventilador para que funcione a distintas velocidades dependiendo de la temperatura (viene configurado por defecto para funcionar siempre al 100%) y después activaremos el puerto USB que incluye el aparato para poder conectar otros discos externos y aumentar así la capacidad haciendo que pueda servir más contenidos a la red local (es un puerto USB que por defecto viene capado para poder utilizarse únicamente como puerto para impresoras).
Configurando el ventilador
Vamos a añadir un script que se encargue de comprobar periódicamente la temperatura y de modificar en consecuencia la velocidad de giro del ventilador… esperando que así se pueda reducir el ruido. Lo haremos siguiendo uno de los tutoriales del wiki dns323.info, instalando concretamente los scripts que encontramos en la sección ‘A general use ctrl_fanspeed.sh script’, que son los que podremos utilizar si ya tenemos instalado el fonz fun_plug.
Primero comprobaremos que la temperatura que nos devuelve el comando temperature está en grados Fahrenheit, con el comando:
temperature g 0
Si este comando nos devuelve los resultados en Celsius, tendremos que editar las constantes del script con los valores correctos.
Copiamos el contenido del primer script del tutorial en el archivo /ffp/bin/fan_ctrl.sh:
#!/bin/sh
#
# This script was created at http://wiki.dns323.info by FIB,
# it has been slightly modified by leper (with help from
# fonz). It sets the fanspeed of the device depending on
# the temperature, which is measured in Fahrenheit. If
# your box measures temperature in Celsius, you need to
# edit it to work.
# Additional changes by gartylad.
# Uriel : corrected zero fanspeed when T exceeded T2
# minor code updates
# Set the path to use RAM-disk instead of harddrive, to
# execute from. This is done so that the disks will go
# into sleep mode, while the script is running.
PATH=/usr/bin:/bin:/usr/sbin:/sbin
# Create a logfile on the RAM-disk.
LOGDIR=/log
FANLOGFILE=${LOGDIR}/fan_ctrl.log
mkdir -p ${LOGDIR}
echo "Installing fan_ctrl.sh" >${FANLOGFILE}
# Kill the old fancontrol process if required
OLDPID=`pidof fancontrol`
if [ "$OLDPID" != "" ]
then
kill -9 $OLDPID
echo "killed old fancontrol process ($OLPID)" >>${FANLOGFILE}
fi
# With temps between T1 and T2, the script automatically
# lowers/raises the fan speed between RPM1 and RPM2. This
# it does every update_interval seconds.
update_interval=60
T1=108
T2=140
RPM1=2300
RPM2=4500
RPM3=15000
DRPM_DT=`expr \( $RPM2 - $RPM1 \) / \( $T2 - $T1 \)`
while [ 1 ]
do
T=`temperature g 0`
T=${T##*=}
# Check if temperature has fallen below T1 value
if [ $T -lt $T1 ]; then
# Temp below T1 fan stops
NEWRPM=0
elif [ $T -gt $T2 ]; then
# Temp greater than T2 requires emergency action
NEWRPM=$RPM3
else
# Compute new RPMs if in T1..T2 range
NEWRPM=`expr $RPM1 + \( \( $T - $T1 \) \* $DRPM_DT \)`
fi
CONVFTOC=`expr \( \( $T - 32 \) \* 10 + 9 \) \/ 18`
fanspeed w $NEWRPM
echo `date`" ::CURRENT::" $T"F" ${CONVFTOC}"C -- fanspeed:" $NEWRPM "(written to "${FANLOGFILE}")." >>${FANLOGFILE}
# wait for next cycle
sleep $update_interval
done
Y copiamos el contenido del segundo script en el archivo /ffp/start/fan.sh, dándole permisos de ejecución a ambos archivos (chmod 777), para que así se inicie cuando arranquemos el disco.
#!/ffp/bin/sh
# PROVIDE: fan_ctrl.sh
# REQUIRE: LOGIN
. /ffp/etc/ffp.subr
name="fan_ctrl.sh"
command="/ffp/bin/$name"
sshd_flags=
start_cmd="fan_ctrl_start"
fan_ctrl_start()
{
proc_start_bg $command
}
run_rc_command "$1"
Tras un reinicio, estos scripts ya estarán funcionando y controlando la velocidad del ventilador.
Activando el USB
En este caso seguiremos los tutoriales de esta página, aunque cambiaremos ligeramente los scripts de ejemplo por uno más concreto.
- Creamos una carpeta llamada usb, y otra linux_bin, ambas en la raíz del disco.
- Dentro de linux_bin copiamos el módulo que le falta al sistema operativo para que pueda funcionar el usb para transmitir datos, que no es otro que usb_storage.ko, que podemos descargarnos de esta página.
- Copiamos el siguiente script a la raíz del disco:
# # Script for sharing an external USB Disk # DIR=/mnt/HD_a2 if [ ! -d linux_bin ] then exit 0 fi if [ -f $DIR/linux_bin/usb-storage.ko ] then insmod $DIR/linux_bin/usb-storage.ko dmesg > $DIR/linux_bin/dmesg.out mkdir $DIR/usb mount -t vfat /dev/sdb1 /mnt/HD_a2/usb fi
Enchufamos nuestro disco al puerto USB y lo encendemos. Le concedemos permisos de ejecución al script que acabamos de copiar y lo ejecutamos. Lo primero que hará será instalar el módulo (con insmod). A partir de aquí puede dar errores en el comando mount si no se encuentra en el lugar que esperamos (sdb1). En ese caso consultaremos el final del archivo dmesg.out que se ha creado, donde se mostrará información sobre el nuevo disco que se ha enchufado. Si el dispositivo es distinto a /dev/sdb1, lo sustituimos en nuestro script. Si funcionó sin más, ya tendremos el contenido del disco externo disponible dentro de la carpeta usb. Si hemos tenido que editar el script, probamos a lanzarlo de nuevo y ahora debería funcionar.
Para desmontarlo:
umount /dev/sdb1
Naturalmente, si pensamos dejarlo conectado indefinidamente, podemos automatizar esto mediante un script dentro de la carpeta start, y podemos añadir muchas más funcionalidades, pero en mi caso apenas voy a utilizar esta funcionalidad de modo puntual, por lo que me vale con conectarme por ssh y activar el disco con una única llamada a un shell script.
Etiquetas: DLink DNS-323