El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

sysinfo en el motd

| Comments

Desde que lo vi en unbuntu server, había querido hacer que mi servidores mostraran un overview en el MOTD)

Al menos debian, tiene una manera de cambiar el MOTD dinamicamente. Para sazonar bien el MOTD, vamos a usar figlet, una aplicación que genera letras en ascii-art a partir de una palabra dada.

“instalando todo”
1
aptitude install figlet

El directorio /etc/update-motd.d/ ejecutará en orden alfabético (o numérico en nuestro caso) aquellos script cuya salida estandard, compondrán nuestro MOTD.

“aprovisionando el update-motd.d”
1
2
3
4
mkdir /etc/update-motd.d/
cd /etc/update-motd.d/
touch 00-header && touch 01-sysinfo && touch 02-footer
chmod +x /etc/update-motd.d/*

Finalmente, nos echamos el MOTD de debian por defecto; que no deja de restregarnos en cara la falta de garantía.

Además, el fichero /var/run/motd contendrá nuestro motd resultante, así que lo lincamos con el que borramos.

“aprovisionando el update-motd.d”
1
2
rm /etc/motd
ln -s /var/run/motd /etc/motd

Por una cuestión de organización, usaremos 3 ficheros:

00-header con lo que queremos poner primero. En este caso, el nombre y version de la distribución, además de un mensajito de bienvenida.

“00-header”
1
2
3
4
5
6
7
8
9
#!/bin/bash
[ -r /etc/lsb-release ] && . /etc/lsb-release
if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
        DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
figlet $(hostname)
printf "\n"
printf "Welcome to %s (%s).\n" "$DISTRIB_DESCRIPTION" "$(uname -r)"
printf "\n"

Yo instalo los sistemas en inglés, así que para mantener todo parejo, escribimos güelcome y lo hacemos con printf para procesar mejor los “\n” y que pinche sin importar la shell que se esté usando.

El segundo fichero será 01-sysinfo y contendrá la parte linda, de la memoria RAM en uso, el CPU, la carga y la dirección ip de la primera interfaz.

“01-sysinfo”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
date=`date`
load=`cat /proc/loadavg | awk '{print $1}'`
root_usage=`df -h / | awk '/\// {print $(NF-1)}'`
memory_usage=`free -m | awk '/Mem:/ { total=$2 } /buffers\/cache/ { used=$3 } END { printf("%3.1f%%", used/total*100)}'`
swap_usage=`free -m | awk '/Swap/ { printf("%3.1f%%", "exit !$2;$3/$2*100") }'`
users=`users | wc -w`
time=`uptime | grep -ohe 'up .*' | sed 's/,/\ hours/g' | awk '{ printf $2" "$3 }'`
processes=`ps aux | wc -l`
ip=`ip a  s dev eth0|grep inet|awk '{print $2}'|cut -d '/' -f 1`

printf "System information as of: $date\n"
printf "System load:\t%s\tIP Address:\t%s\n" $load $ip
printf "Memory usage:\t%s\tSystem uptime:\t%s\n" $memory_usage "$time"
printf "Usage on /:\t%s\tSwap usage:\t%s\n" $root_usage $swap_usage
printf "Local Users:\t%s\tProcesses:\t%s\n\n" $users $processes

Por último 02-footer será la parte de abajo. Contendrá cualquier cosa que quieras poner en el fichero /etc/motd.tail por ejemplo, una anotación que quieras hacer específica para ese servidor. Se mostrará si existe el fichero.

“02-footer”
1
2
#!/bin/bash
[ -f /etc/motd.tail ] && cat /etc/motd.tail || true

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

Comments