aAnterior 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
Servidor de Streaming
Montar particiones ntfs para todos los usuarios
Establecer límites de uso por seguridad (máximo tiempo de CPU, etc)
Xinerama
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
Redireccionar todo el sonido hacia la salida S/PDIF
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
Buscar y eliminar archivos específicos
Reparar base de datos MYSQL
Averiguar el UUID de una partición para utilizarlo en grub o fstab
Varios scripting
Priorizar un repositorio en distribuciones basadas en Debian
    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 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.

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"
         }
 }
Crearemos el fichero ~/.asoundrc con el siguiente contenido:
(Puede variar según el sistema. En este caso funcionó para una tarjeta de sonido Realtek con chipset ALC892)
pcm.!default {
type plug
slave.pcm "dmixer"
}

pcm.snd_digital {
    type hw
    card 0
    device 1
}

ctl.snd_digital {
    type hw
    card 0
    device 1
}

pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666
slave {
pcm "snd_digital"
    period_time 0
    period_size 1024
    buffer_size 4096
    channels 6
   }
 }

ctl.dmixer {
type hw
card 0
}

En algunos casos tendremos que especificar en XBMC un dispositivo de audio personalizado: "plug:dmixer"
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.

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

Utilizaremos el comando blkid

Combinar dos ficheros en columnas
#pr -m -t -s  fichero1 fichero2


Si tenemos repositorios de varias ramas y sólo queremos establecer una por defecto, antiguamente bastaba con añadir APT::Default-Release "stable"; (o la que corresponda) en el fichero /etc/apt/apt.conf, pero en versiones modernas parece no funcionar. Sin embargo, otro método que sí funciona actualmente (04/2012) es el llamado APT pining, que consiste en establecer prioridades para los diversos repositorios que tengamos configurados. Dichas prioridades se establecen en función del nombre de la rama: "stable, testing, unstable, experimental). A mayor número asignado, mayor prioridad. Los repositorios con prioridad negativa solo se utilizarán cuando expresamente se le indique a apt-get mediante el parámetro "-t rama", de modo que conseguimos el mismo efecto que con APT::Default-Release. Para configurar APT pining añadiremos lo siguiente en el fichero /etc/apt/preferences, ajustándolo a nuestras necesidades:
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release a=testing
Pin-Priority: -10
En ocasiones queremos eliminar determinados archivos de todo el disco duro. Un caso típico son los molestos "Thumbs.db" que Windows nos deja desperdigados en carpetas con imágenes.
Hay mil maneras de llevar a cabo esta tarea, pero la más sencilla consiste en una única línea. Además tiene en cuenta los espacios en los nombres de directorios para que no se nos escape ningún fichero.

find . -iname Thumbs.db -print0 |xargs -0 rm

Con el parámetro "-print0" del comando find conseguimos que el separador (ICS) sea un carácter nulo en lugar de un retorno de carro.  El parámetro -0 de xargs hace lo propio a la hora de interpretar los ficheros que recibe.

Anterior Siguiente Inicio