Anterior Siguiente Inicio

Varios

Programa para visualizar cámara de vídeo a través de la tarjeta de TV
Alarma en caso de calentamiento
Reiniciar automáticamente el router cada x tiempo
Sistema de borrado de logs viejos y logs demasiado grandes
Servidor de Streaming
Montar particiones ntfs para todos los usuarios
Establecer límites de uso por seguridad (máximo tiempo de CPU, etc)
Xinerama
Autenticación mediante https en mambo
Abrir imágenes grandes en ventana nueva - Joomla + gallery2
Arranque dual de 2 Windows con Grub
Apagar vía software la pantalla del equipo
Seleccionar la tarjeta de sonido por defecto cuando se tiene más de una
Compartir un terminal para poder ayudar o enseñar a otra persona
Hacer una copia de seguridad de una tabla de particiones
Syslog remoto
Utilizar un proxy desde un terminal, para navegar o para usar apt-get
Apagar discos duros por software
Reparar base de datos MYSQL
    Se trataba de poder visualizar en la pantalla de nuestro servidor la cámara de vídeo situada en la entrada del local. En un principio intenté usar el programa fbtv ya que funciona en consola teniendo el framebuffer activado. Al final, dadas las limitaciones y la poca documentación que encontré sobre este programa, me decanté por el xawtv, que necesita un entorno gráfico para funcionar, pero permite que se le manden comandos después de ejecutar el programa principal, con el comando xawtv-remote, de forma que podemos por ejemplo, cambiar de canal con un mando a distancia y lirc, o capturar imágenes.

Posteriormente y dado que el servidor X se comía gran parte de los recursos de nuestro servidor, volvimos a fbtv, y capturamos imágenes vía web gracias al comando fbgrab. Este es el enlace a la página que hace esto posible.

    Es un sencillo script que nos mandará un mail cuando la temperatura del servidor sea elevada. Útil para controlar servidores externos que no siempre están bien ventilados, y el cliente se queja de que se cuelga mucho.

Se basa en el paquete lm-sensors y en los módulos del kernel, los cuales están en el kernel 2.6, bajo Device Drivers, I2C support. Debemos compilar el kernel con soporte para los sensores que lleve nuestra placa base.
Este es el enlace al script

    Esto vale para un router que lleve algún tipo de shell dentro.
Añadimos en cron.d una tarea que ejecute nuestro script en el intervalo de tiempo deseado.

El script está hecho en perl y es el siguiente:
#!/usr/bin/perl

use Net::Telnet ();

$machine = '111.111.111.111';

$t = new Net::Telnet (Timeout => 10);
$t->open($machine);
print "Connected to $machine\n";
$t->waitfor('/Login: $/');
$t->print("admin");
$t->waitfor('/Password: $/');
$t->print("password");
$t->waitfor('/\>/');
$t->cmd("reboot");
print "Device is being restarted\n"
Para el comando find, los parámetros que usaremos serán -mtime y -size.

1.-    "-mtime n"

Donde n es el tiempo en días. De este modo, buscamos los ficheros que tengan n días, o bien +n días. Para buscar ficheros que tengan más de 30 días, haríamos:
   
    find /var/log -mtime +30

2.-    "-size x
"

Donde x indica el tamaño en bloques de 512 bytes. De este modo si queremos buscar ficheros de más de 5 MB: 5*1048576=5242880 bytes. Dividimos esto en bloques de 512 bytes, y tenemos 10240, de este modo:

    find /var/log -size +10240

Nuestro script podría ser algo como:
   

    $LOGDIR=/var/log/
   
       for $logfile in `find $LOGDIR -type f -mtime +30 && find $LOGDIR -type f -size +163840`
Para escuchar en todos los ordenadores lo mismo, montamos un servidor de sonidos y de streaming.
    El servidor de sonidos es mpd (Music Player Daemon). Permite reproducir música en un servidor y administrar las listas de reproducción desde otro equipo. Tiene múltiples interfaces, incluyendo una para Mac OS X. Si lo queremos administrar desde windows podemos usar un interface en php, que se puede instalar en el mismo equipo que mpd, o en otro.
Para hacer streaming necesitamos un servidor de streaming, y un cliente que le envíe audio a dicho servidor.
    La intención era montar un servidor icecast, pero por vagancia opté por shoutcast, que me pareció más sencillo de configurar. Lo podemos descargar de http://www.shoutcast.com/download/files.phtml
Para enviar el stream de audio a dicho servidor usé Darkice http://darkice.sourceforge.net/, también muy sencillo de configurar echando un vistazo a su fichero de configuración. La versión disponible para Debian vía apt no incluye soporte para mp3, así que nos bajamos la última versión desde la web y compilamos. Nos pedirá un par de librerías, entre las que se incluyen libjack0.80.0-0 y libjack0.80.0-0-dev.
Una vez esté todo funcionando, el esquema es el siguiente:
Mpd reproduce audio. Darkice comprime y manda el stream de audio al servidor shoutcast. Los clientes escuchan el stream a través del servidor shoutcast.
Puede que tengamos algún problema si nuestra tarjeta de sonido no permite reproducir múltiples streams de audio al mismo tiempo. Para ello, o bien usamos una Sound Blaster live, que permite nativamente múltiples streams al mismo tiempo (Supongo que habrá muchas otras que lo permitan), o bien usamos arts como driver de audio, y creamos un /etc/asound.conf como este.
Añadimos en fstab:

/dev/X /mnt/Y ntfs users,owner,ro,umask=000 0 0

Para poder extender el escritorio a dos monitores utilizaremos las extensiones xinerama.
Basta con editar el fichero de configuración de las X acorde con nuestras gráficas y monitores, y al final del fichero espeficiar cómo queremos encajar ambas pantallas.
Veámoslo con un ejemplo:

Section "Device"
        Identifier      "nvidia"
        Driver          "nvidia"
        BusID           "PCI:01:00:00"
        VideoRam        65536
EndSection

Section "Device"
        Identifier      "permedia"
        Driver          "glint"
        BusID           "PCI:00:09:00"
        VideoRam        4096
EndSection

Section "Monitor"
        Identifier      "dell"
        HorizSync       30-130
        VertRefresh     60-160
        Option          "DPMS"
EndSection

Section "Monitor"
        Identifier      "bn"
        HorizSync       30-130
        VertRefresh     60-160
        Option          "DPMS"
EndSection

Section "Screen"
        Identifier      "screen1"
        Device          "nvidia"
        Monitor         "dell"
        DefaultDepth    24
        SubSection "Display"
                Depth           24
                Modes           "1024x768" "800x600"
        EndSubSection
EndSection

Section "Screen"
        Identifier      "screen2"
        Device          "permedia"
        Monitor         "bn"
        DefaultDepth    24
        SubSection "Display"
                Depth           24
                Modes           "800x600"
        EndSubSection
EndSection
Section "ServerLayout"
        Identifier      "Default Layout"
        Screen          "screen1"
        Screen          "screen2" RightOf "screen1"
        InputDevice     "Generic Keyboard"
        InputDevice     "Configured Mouse"
        InputDevice     "Generic Mouse"
EndSection

En el ejemplo configuramos dos tarjetas gráficas, dos monitores, y dos "screens". Al final de todo le especificamos que queremos dos "screens", de los cuales el "screen2" está a la derecha del "screen1"; de modo que ampliamos el escritorio hacia la pantalla de la derecha.

En primer lugar debemos poder acceder a nuestro dominio tanto por http como por https. Una vez tengamos esto hecho,

Para el backend:

Creamos una directiva en apache para que redirija /administrator a https://dominio.com/administrator

Redirect /administrator https://jesusvillaverde.com/administrator

Para el frontend:

Editamos el fichero "<%mambo root%>/modules/mod_login.php" y buscamos la línea

<form action="<?php echo sefRelToAbs( 'index.php' ); ?>" method="post" name="login" >

Cambiamos por:

<form action="<?php echo sefRelToAbs( 'https://dominio.com/index.php' ); ?>" method="post" name="login" >

Simplemente sustituímos el fichero photo.tpl por éste, dentro del directorio $path_to_gallery/themes/$nuestro_tema/templates
Se trata de tener dos windows instalados, y que cada uno no pueda ver al otro. Para ello creamos dos entradas en grub, y controlamos qué particiones están visibles con hide y unhide. Asimismo debemos mapear las unidades en el caso del windows que esté en la segunda partición. Opcionalmente ponemos contraseña a uno de los Windows.
Por último no debemos olvidar poner "rootnoverify" al definir las unidades, ya que de lo contrario no detectará correctamente el sistema de ficheros cuando la unidad esté oculta.

title           Microsoft Windows XP Home
rootnoverify (hd0,0)
unhide (hd0,0)
hide (hd1,0)
makeactive
chainloader     +1

title           Microsoft Windows XP Professional
rootnoverify (hd1,0)
unhide (hd1,0)
hide (hd0,0)
map (hd1) (hd0)
map (hd0) (hd1)
makeactive
chainloader +1
password 12345
Ejecutamos:
    xset dpms force off
Con el comando "less /proc/asound/modules" podemos ver qué tarjeta se
usa como primaria.

Y en el fichero "/etc/modprobe.d/alsa-base"
    Hacemos blacklist o damos preferencia a los módulos que necesitemos.

# Prevent abnormal drivers from grabbing index 0
options snd_emu10k1 index=-2

Otra opción es tocar en el fichero "~/.asoundrc" y cambiar la tarjeta por
defecto (hw:0,1)

pcm.!default {
         type asym
         playback.pcm {
                 type plug
                 slave.pcm "hw:0,1"
         }
 }
Una opción es usar el comando script. De este modo solo uno tiene el mando de la sesión.

El profesor ejecuta:
script -f /tmp/terminal

Y ahora el alumno:
tail -f /tmp/terminal

Sin embargo, con el comando screen se pueden compartir sesiones interactivas.

El profesor asigna un nombre a la sesión, y luego permite a determinados usuarios entrar en ella:
screen -S nombredelasesion
ctrl+a : multiuser on
ctrl+a : acladd alumno

Ahora el alumno ejecutará lo siguiente:
screen -x usuario/sesión

Esto puede tener muchas utilidades, como clonar discos para montar un Raid 0. Simplemente guardaremos la tabla de particiones en un fichero, y lo utilizaremos posteriormente para volcar dicha tabla en un nuevo disco.

Hacemos copia de seguridad de la tabla de particiones con el comando sfdisk

sfdisk -d /dev/sda > part_table_backup

Si falla un disco duro y lo cambiamos, ejecutamos esto sobre el nuevo disco para restaurar la tabla de particiones: (sustituír sdx por el apropiado)


sfdisk /dev/sdx < part_table_backup

Muy útil para centralizar los logs de todos nuestros equipos, o para utilizar en routers que lo permitan.
En la máquina que va a guardar los logs, tenemos que ejecutar syslog con el parámetro  -d. Lo podemos introducir en /etc/default/syslogd.
En la máquina originaria de los logs, ejecutaremos a mano syslog con el parámetro -R: "syslogd -R hostname_syslog_server", o bien especificaremos este parámetro en el fichero mencionado con anterioridad, /etc/default/syslogd

Los logs se agrupan en categorías o "facilities". Si queremos que los logs de nuestro router vayan a un fichero específico en lugar de syslog, debemos averiguar con qué facility llegan y enviar esas facilities a un fichero aparte. Esto se ajusta en "/etc/syslogd.conf".
Para averiguar qué facility está usando nuestor router, debemos iniciar syslogd a mano en el servidor, con "syslogd -d -r", y posteriormente enviarle un "kill -SIGUSR1" para activar el modo debug.  Tras esto, los mensajes de log irán apareciendo en la consola desde la que iniciamos syslog. En cada línea de log vendrán datos adicionales, entre ellos la facility usada. En el caso de LinuxAP sobre un SMC2682W, la facility usada es "user", por lo que agregaremos en syslog.conf lo siguiente:
user.*                          -/var/log/LinuxAP.log

Simplemente agregamos una variable de entorno con la url y puerto de nuestro proxy

export http_proxy=”http://proxy.organizacion.com:8080”
Puede ser por ahorro energético, por prolongar la vida de un disco que no se usa con frecuencia, o por otro motivo.
Tenemos dos opciones, apagarlo manualmente mediante hdparm, o instalar un programa que monitoriza los discos y los apaga cuando no se utilizan.
Spindown sería el programa de monitorización, y hdparm.
Dado que solo he probado hdparm, comento los parámetros más relevantes para el caso que nos ocupa:

hdparm -y / -Y / - C / -S
-y pone el disco en standby, apagando el motor principal
-Y pone el disco duro en modo sleep, apagando también parte de la electrónica
-C nos permite consultar el estado del disco. Si está en modo sleep, esta consulta encenderá la parte electrónica y el disco pasará a standby
-S permite apagar el disco tras un tiempo de inactividad del mismo. Dicho tiempo se pasa como parámetro, pero no está en un formato común, sino que depende del disco. En mi caso con "-S 5" el disco se apaga a los 30 segundos de inactividad, pero en otros discos el tiempo será diferente. Es cuestión de probar. Al poner el comando nos indica el tiempo, por lo que no tenemos que esperar a que se apague.

Reparar base de datos MYSQL
Si en algún momento, por un cierre incorrecto del sistema, caída de tensión o el motivo que fuere, alguna tabla de nuestras bases de datos no se cierra incorrectamente, es probable que necesitemos repararla, para lo cual ejecutaremos el siguiente comando

mysqlcheck -u $USER -p$PASSWORD --repair $DATABASE $TABLE


Anterior Siguiente Inicio