Serverstats, el “cacti” ligero

En mi búsqueda habitual de aplicaciones lightweight y tras tirar “cacti” a la basura por motivos de rendimiento óbvios, he encontrado “serverstats” a través de un blog donde lo analizan bastante bien, asi que no voy a ponerme a analizarlo yo :P

La cuestión viene cuando he intentando personalizar la configuración inicial.
Lo primero que he visto que aunque en la documentación diga que modificando el fichero “config/sources.php” carga módulos… no lo hace :-P, únicamente hará caso del fichero “config/simple.php“.
Por ejemplo, para activar el módulo de monitorización de mysql he tenido que habilitarlo en el “simple.php“:

'mysql' => array(
'used' => true,
'host' => 'localhost',
'user' => 'serverstats',
'password' => 'serverstats',
'graphs' => array(
'questions' => array('used' => true, 'title' => 'MySQL: questions per second'),
'processes' => array('used' => true, 'title' => 'MySQL: query count ("SHOW PROCESSLIST")')
)
),

Continue reading “Serverstats, el “cacti” ligero”

Script de copia y restauración de un sistema windows

Imagino que todos los sysadm/informaticos de este mundo hemos sufrido alguna vez el caso del “Amigo informatico“.

En mi caso últimamente, después de usar muchas veces ghost, he decidido cambiar… Nada de dar un dvd con la imagen, que para eso tenemos toneladas de gigas de espacio en disco y si el usuario se queja, pues mira, habérselo pedido a otro.

Partiendo de esto, he decidido hacer un script tipo menú de instalación con las opciones mínimas y que sea fácilmente gestionable por el usuario final.

El preparación es simple:

  • Se particiona el disco.
  • Instalamos windows
  • Instalamos un linux “minimal”, y dependencias necesarias para que el script funcione
  • Añadimos nuestro script.
  • Modificamos los parámetros de configuración necesarios en el mismo
  • Creamos un usuario de sistema sin privilegios, modificamos ~/.bashrc para lanzar automáticamente el script cuando se logue el usuario.
  • Deshabilitamos la posibilidad de salir del script (trap) para evitar problemas.
  • Nos guardamos el pass de root ;-)
  • Modificamos grub para que el menú diga algo como Restore or similar y el usuario no se asuste viendo GNU/Linux
  • Informar al usuario de como funciona el entorno, aunque es muy muy sencillo)

Con eso y generar nosotros mismos la primera imagen que será imborrable (desde el script), ya estaría todo.

El funcionamiento es mucho más simple aún:

  1. Restaurar imagen
  2. Generar Imagen
  3. Borrar Imagen
  4. Listar Imágenes
  5. Ayuda
  6. Reboot

No deberían añadirse muchas más opciones, cuanto menos se pueda hacer, mejor.

Las ventajas son bastante óbvias:

  • El propio usuario se gestiona sus imágenes, por lo que cambio de sistema windows (de xp a 7 por ejemplo), no deberían necesitar más ayuda.
  • El script debería funciona en cualquier linux mientras se cumplan las deps.
  • El backup “va contigo”, no hay discos adicionales.

Y las desventajas:

  • Espacio en disco
  • Que se carguen grub
  • Que alguna vez falle el ntfsclone (FAIL!)

Por supuesto puede que el script no esté libre de fallos, por ejemplo, no consigo hacer trap de “CONTROL+Z” aunque haga trap de todas las señales. Aunque probado está ;-)

El script está documentado en la wiki.

Ciclo Herramientas gnu/linux (VI): busybox

Hoy un compañero ha tenido un “pequeño” percance con la actualización de unas vmware-tools… Le han petado /root.
Por algún motivo corrompieron todo el fs.
La cuestión es que necesitábamos tener los comandos básicos por que tras diversas acciones “/lib64” desapareció O:-) y no podíamos ejecutar ni un “mv“.
Es decir, teníamos shell y … poco más.
En estas le comento y por qué no metemos un busybox, no tiene dependencias (compilado estático) y tenemos todo!
Se quedó un poco parado por lo de busybox, no lo había oido nunca, asi que como muestra un botón, cogí mi android, puse el terminal emulator y ejecuté:
[cc lang=”bash”]dodger:~ $ busybox
BusyBox v1.10.3 (2010-10-13 23:52:46 CEST) multi-call binary
Copyright (C) 1998-2007 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]…
or: function [arguments]…

BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as!

Currently defined functions:
[, [[, addgroup, adduser, ar, ash, awk, basename, bunzip2, bzcat, bzip2, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, df, diff, dirname,
dmesg, dos2unix, dpkg, dpkg-deb, du, echo, env, expr, false, fdisk, find, fold, free, getopt, getty, gunzip, gzip, halt, head, hexdump, hostid, hostname, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod,
install, ip, kill, killall, killall5, klogd, less, linuxrc, ln, logger, login, logname, losetup, ls, lsmod, md5sum, mdev, mkdir, mknod, mkswap, mktemp, modprobe, more, mount, mv, netstat, nice, nslookup, od, openvt,
passwd, patch, pidof, ping, pivot_root, pkill, poweroff, printf, ps, pwd, rdate, readlink, reboot, reset, rm, rmdir, rmmod, route, run-parts, sed, sh, sha1sum, sleep, sort, start-stop-daemon, strings, stty, su,
sulogin, swapoff, swapon, sync, syslogd, tail, tar, tee, telnet, telnetd, test, time, top, touch, tr, traceroute, true, tty, udhcpc, umount, uname, uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode,
vi, vlock, wc, wget, which, whoami, xargs, yes, zcat, zcip
[/cc]
Para cualquier amante de trastear routers y cualquier cosa con un linux embebido es el pan de cada día, pero si no te has puesto puede sonar un poco a chino.

Asi que subimos con netcat (esto pa otro día) el busybox compilado para rhel4 de dag.wieers y listo! Comandos básicos ready-to-go.

Ciclo Herramientas gnu/linux (V): pbzip2 y pigz

Hoy comentando con un compañero un filesystem (una partición) que se estaba quedando sin espacio, le he indicado que usase el pbzip2, que lo había dejado yo instalado hace unos días por el mismo problema (y unos ficheros de log enormes).

La verdad es que la teoría es bastante simple, ya que lo único que añade es la opción de paralelismo (pbzip2) sobre bzip2, pero el resultado es bastante impresionante si no quieres esperar a que termine la compresión para irte a casa:

[cc lang=”bash”]
[SERVER02].root:/logs/common/core > time bzip2 -9fv core-2559-1321322015
core-2559-webseald-1321322015: 22.662:1, 0.353 bits/byte, 95.59% saved, 638181376 in, 28161115 out.

real 0m56.240s
user 0m55.379s
sys 0m0.850s
[/cc]
vs
[cc lang=”bash”]
[SERVER02].root:/logs/common/core > time pbzip2 -9fvp16 core-2559-1321322015
Parallel BZIP2 v1.0.5 – by: Jeff Gilchrist [http://compression.ca]
[Jan. 08, 2009] (uses libbzip2 by Julian Seward)

# CPUs: 16
BWT Block Size: 900k
File Block Size: 900k
——————————————-
File #: 1 of 1
Input Name: core-2559-webseald-1321322015
Output Name: core-2559-webseald-1321322015.bz2

Input Size: 638181376 bytes
Compressing data…
——————————————-

Wall Clock: 4.103929 seconds

real 0m4.106s
user 0m55.404s
sys 0m0.923s
[/cc]

En este caso lo que se comprime es un core dumped de un proceso interno y la diferencia está clara (aún usando solo 16 cores de los 64 de la máquina).
Eso sí, si hay un sistema de monitorización muy sensible por medio, puede que salte alguna alarma.

EDIT: Añado pigz que aunque soy fan de bzip2, gzip se usa de manera mucho más habitual…

The easiest way to start X

Yesterday while reinstalling Arch in the x86_64 flavour :-) I was thinking which will be the best way to start X window system.
I want to start my X window’s without user prompt (so CDM is not an option), and I don’t any of common login-managers (gdm, xdm, kdm or slim)… I’ve tried to use the simplest way, and it works!

Let’s go, deps:
[cc lang=”bash”]
pacman -Ss xorg-xinit screen
[/cc]
And optional:
[cc lang=”bash”]
pacman -Ss xterm xort-twm
[/cc]
Cool? ;-) Of course, you must have the X-window (1 &2) system installed and your preferred lightweight desktop manager.

Add your super-power-user:
[cc lang=”bash”]
useradd -s /bin/bash -c “super-power-user” dodger
[/cc]

And now the script:
[cc lang=”bash”]
vim /etc/rc.d/autofluxbox
[/cc]
[cc lang=”bash”]
#!/bin/bash -x
LOGDIR=/var/log/autofluxbox
[ ! -d $LOGDIR ] && mkdir $LOGDIR
exec 1> $LOGDIR/autofluxbox.$(date +%Y%m%d%H%M).log
exec 2> $LOGDIR/autofluxbox.$(date +%Y%m%d%H%M).err
USER=dodger
STARTX=”/usr/bin/startx”

su – ${USER} -c “screen -S Fluxbox_startup -d -m ${STARTX}”
[/cc]

And:
[cc lang=”bash”]
chmod +x /etc/rc.d/autofluxbox
[/cc]
One thing I’ve just found is ${PATH} seems to be wrong on my X environment ¬¬’… I will continue investigating.

Strange feature in bash script

Today, while programming (or reprogramming) some parts of one script, I’ve noticed a strange thing.
First, the two scripts.

The working one:

#!/bin/bash
let x=0
echo -e "a\nb\nc\nd" > auxfile
while read LINE
do
[[ "${LINE}" =~ ^(a|c|d)$ ]] && AUX[$x]=${BASH_REMATCH[1]} && let x++
done < auxfile
echo ${AUX[@]}

And the not working (for my purpose):

#!/bin/bash
let x=0
echo -e "a\nb\nc\nd" | while read LINE
do
[[ "${LINE}" =~ ^(a|c|d)$ ]] && AUX[$x]=${BASH_REMATCH[1]} && let x++
done
echo ${AUX[@]}

The only difference between both is just the piped while.
Someone can explain why seems to be a “reset vars” at the end of the piped while?