Tag Archives: automatización

Programar Encendido de PC

Hace un par de días publicaban en Linux.com un artículo que me gustó mucho, consistía en usar el RTC (Real Time Clock) de la placa base para programar el encendido del PC a través del pseudo-sistema de fichero /sys.

La idea se basa en escribir en uno de los pseudo ficheros la hora a la que se desea encender la máquina. No se necesita nada más.

Uno de los beneficios que no ofrece en nuestro día a día sería poder programar un apagado por algún mantenimiento que nosotros no controlamos (podrían cortar la luz para alguna reparación) y programar un encendido cuando estimemos que se ha terminado ese mantenimiento.

Para empezar debemos comprobar que nuestra versión de Kernel soporta rtc lo vemos así:

# grep -i rtc /boot/config-$(uname -r)

Que debe devolver:

[...]
CONFIG_HPET_EMULATE_RTC=y 
CONFIG_PM_TRACE_RTC=y 
CONFIG_RTC_LIB=y 
CONFIG_RTC_CLASS=y 
CONFIG_RTC_HCTOSYS=y 
CONFIG_RTC_HCTOSYS_DEVICE="rtc0" 
[...]

También es posible verlo a través de los logs del Kernel:

# grep -i rtc /var/log/messages 
# grep -i rtc /var/log/kern.log

Que debe salir:

Dec  2 08:14:38 asgard kernel: [    0.853916] rtc_cmos 00:03: RTC can wake from S4
Dec  2 08:14:38 asgard kernel: [    0.854031] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0
Dec  2 08:14:38 asgard kernel: [    0.854053] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
Dec  2 08:14:38 asgard kernel: [    0.855641] rtc_cmos 00:03: setting system clock to 2012-12-02 07:14:23 UTC (1354432463)

Aquí muestra un par de cosas interesantes, la primera es que el reloj está sincronizado UTC e implica que no debemos tener en cuenta el cambio de horario de verano/invierno y que el dispositivo es rtc0, podría pasar, aunque es poco frecuente, que hubiera más de uno.

Probando

Ahora ya estamos listos para probar el invento, para ello solo necesitamos dos pasos:

Primero poner a cero el contador de la alarma:

# echo 0 > /sys/class/rtc/rtc0/wakealarm

Y segundo poner la alarma:

# echo $(date '+%s' -d '+ 3 minutes') > /sys/class/rtc/rtc0/wakealarm

Si ahora hacemos un cat del fichero veremos un número como este 1354444166 que es la fecha en formato epoch (segundos transcurridos desde el 1 de enero de 1970) y es el formato de tiempo que usa UNIX internamente.

Ahora podemos apagar el PC y ver como pasados los tres minutos arranca de nuevo.

A partir de aquí ya podemos escribir un script que simplifique la tarea, si queremos que se apague a cierta hora y se encienda de nuevo sin que tengamos que preocuparnos. O cosas así.

Referencia

Artículo original publicado por Carla Schroder en Linux.com con licencia Creative Commons 3.0

Ordenar Fotos por Tamaños

Es casi una regla que el informático de turno de una empresa se tiene que comer unos marrones a cada cual más raro y exótico, el de hoy ha sido ordenar por tamaño unas 15.000 fotos, así, en frío. Para resolverlo, tenemos dos opciones, ir una a una mirando el tamaño y clasificarla o ser listos y utilizar un programa que lo haga por nosotros.

Yo opté por escribir un pequeño script de Bash para resolver el problema, se identifica el archivo por su tamaño, y se traslada a donde queramos, en este caso particular vamos a discriminar por tres opciones,

  1. Más anchas que 1080px
  2. Más altas que 1920px
  3. Las pequeñas

Para identificar una imagen usamos el comando identify que sin parámetros nos mostrará una salida así:

# identify foto.png
foto.png JPEG 1312x984 1312x984+0+0 8-bit DirectClass 233KB 0.000u 0:00.000

Forma parte de ImageMagick, debes instalarlo para usar el comando identify

Pero para este caso le pasamos el parámetro format para que la salida sólo muestre lo que nos interese:

# identify -format "%w,%h" foto.png
1312,984

Ya con los valores de ancho y alto podemos escribir un bucle que lo haga por cada foto,

#!/bin/bash
# Ordena fotos por alto, ancho y otras
# Fede Diaz, Marzo 2011

TARGET="/path/to/output"
SOURCE="/path/to/input"

mkdir -p $TARGET/{anchas,altas,otras};

for FILE in $(ls $SOURCE);
do
  PROP=$(identify -format "%w,%h" $FILE);
  WEIGHT=$(echo $PROP | cut -d, -f1);
  HEIGHT=$(echo $PROP | cut -d, -f2);
  
  if [ $WEIGHT -gt 1080 ]; then
    mv $FILE $TARGET/anchas/;
  elif [ $HEIGHT -gt 1920 ]; then
    mv $FILE $TARGET/altas/;
  else
    mv $FILE $TARGET/otras/;
  fi
done

Y tardó bastante en procesar todas las fotos, pero siempre es mejor que el trabajo manual.

Servidor de LiveCD & Instalaciones

El tema de moda es el de Cloud Computing y existen muchas soluciones de despliegue de máquinas en una red de manera automatizada, en este post hablaremos de una de ellas y que lleva con GNU/Linux muchos años. Para ahorrarnos royos largos y aburridos copiamos de Wikipedia

PXE hace referencia al entorno de ejecución de prearranque (Preboot eXecution Environment). Es un entorno para arrancar e instalar el sistema operativo en ordenadores a través de una red, de manera independiente de los dispositivos de almacenamiento de datos disponibles (como discos duros) o de los sistemas operativos instalados.

La versatilidad de contar con un servidor de esta clase en la red son prácticamente ilimitadas, para mi red virtual, la monte sobre VirtualBox como un servidor, se encarga de dar IP (DHCP), Archivos (lftp, proftp) y sistemas operativos tanto en LiveCD como lanzando la instalación.

Read more »