Mandar mails desde el sistema a nuestro correo

Muchas veces cuando administras sistemas es un poco complicado saber qué es lo que le pasa a tus maquinas en cada momento o cuando aparece algún problema en alguna de ellas.

Para ello podemos configurar nuestra maquina para que nos mande correos cada vez que sucede alguna cosa.

El sistema internamente se manda mails, estos quedan normalmente en el directorio /var/mail/root, este fichero no es nada mas que un fichero de texto con la bandeja de entrada del usuario root.

Si en este directorio no tienes nada, lo mas probable es que no tengas el sistema configurado para mandar mails, así que a ello vamos.

Primero de todo será necesario que nuestro sistema tenga un servidor de correo smtp, es decir, el servicio que permite mandar mails.

# apt-get install exim4

También será necesario instalar un programa como transporte para mandarlos.

# apt-get install mailx

Este último será el gestor de correo que se encargará de mandar los mails al smtp interno.
También nos será útil para mandar el output de comandos a un mail.

cat report.txt |mail -s ‘Reporte del servidor `hostname`’ mi@correo.com

Si justo ejecutamos este comando, veremos que en nuestro correo no llega ningún mail, esto es porque tenemos que configurar el servidor para que pueda mandar correos al exterior.

Para evitar problemas de seguridad, sólo permitiremos que se pueda usar el smtp desde local. Para ello editaremos el fichero update-exim4.conf.conf

# vi /etc/exim4/update-exim4.conf.conf
dc_eximconfig_configtype=’internet’
dc_other_hostnames=’nombrelocal’
dc_local_interfaces=’127.0.0.1′
dc_readhost=”
dc_relay_domains=’dominio.com’
dc_minimaldns=’false’
dc_relay_nets=”
dc_smarthost=”
CFILEMODE=’644′
dc_use_split_config=’false’
dc_hide_mailname=”
dc_mailname_in_oh=’true’
dc_localdelivery=’mail_spool’

Administrar los runlevels

Esto que andaba buscando el comando para modificar automáticamente los servicios que se arrancan en cada runlevel, ya que al no ser un comando que uso mucho, se me olvida siempre su nombre, y para no ir andando con cincuentamil comandos, a veces simplemente basta con entender un poco el sistema y hacerlo manualmente (en este caso pones una K o una S en los ficheros de /etc/rc.N, cada fichero hace referencia a un servicio).

Así que he encontrado un programa que está bastante chulo, se trata de sysv-rc-conf

# apt-get install sysv-rc-conf

y al arrancarlo tenemos esta amigable interfaz :)

sysv_rc_conf

¿Quién dice que la consola es difícil? :D…

liberar memoria

Muchas veces nos encontramos que nuestro servidor/maquina linux tiene casi toda la memoria RAM ocupada aunque el top no nos muestre ningún proceso consumiendo un exceso de RAM. Para mirar el consumo de RAM propongo 2 formas:

# top
y una vez abierto shift+m (ordenar por consumo de memoria)

# free -m
la m corresponde a megas, si queremos que nos lo muestre en gigabytes usaremos g, bytes b y kilobytes k.

Para ello hay una forma (no destructiva) de liberar esta RAM reservada a procesos que ya no están activos.

echo 1 > /proc/sys/vm/drop_caches

Para los que tengáis ganas de leer:

Invalidating the Linux Buffer Cache

When you write data, it doesn’t necessarily get written to disk right then. The kernel maintains caches of many things, and disk data is something where a lot of work is done to keep everything fast and efficient.

That’s great for performance, but sometimes you want to know that data really has gotten to the disk drive. This could be because you want to test the performance of the drive, but could also be when you suspect a drive is malfunctioning: if you just write and read back, you’ll be reading from cache, not from actual disk platters.

So how can you be sure you are reading data from the disk? The answer actually gets a little complicated, particularly if you are testing for integrity, so bear with me.

Obviously the first thing you need to do is get the data in

avi a mov

post rápido.

convertir de avi a mov:

# apt-get install ffmpeg libavcodec-unstripped-52

# ffmpeg -i filename.avi -target ntsc-dvd filename.mov

los videos que se comprimen con el avidemux, los que estan en formato .avi usan el códec DX50. Lo que hace que el quicktime de apple no pueda reproducir muchos de los ficheros .avi.…

bash + crontab + mt

[boceto no comprobado]Os dejo con este boceto porqué sé que hay algunos de vosotros que estáis siguiendo de cerca la evolución de mi script en dialog (prometo un post chulísimo cuando lo tenga un poquito mas experimentado).

——-

Llevo unos días peleándome con un script de bash que cuando lo ejecuto con crontab no funciona, he hecho varias pruebas pero ninguna me ha funcionado, así que he empezado a leer a ver si a alguien mas le pasaba esto, y efectivamente no es una cosa que sólo me pase a mi, así que os voy a contar dentro de mis conocimientos lo qué sucede.

posible solución 1:
Nuestro script está escrito para correr bajo bash, la shell por defecto de linux, si hacemos un

# echo $SHELL
/bin/bash

pero qué pasa si esto mismo lo hacemos en crontab? pues que nos devolverá /bin/sh

estas pequeñas diferencias hacen que el comportamiento de los scripts sea un poquito distinto, y que por ejemplo tar no funcione como esperamos.

Para ello debemos añadir una linea en /etc/crontab que sea así:

SHELL=/bin/bash

Mantendremos la parte de arriba intacta, dejando la de abajo para los scripts de bash y arriba para los de sh.

Posible solución 2:Si esto no funciona, quizás sea un problema de permisos de acceso del usuario que está ejecutando el script en cron.

Tenemos derechos encima de ficheros, pero también encima de dispositivos, estos segundos se pueden controlar desde el udev

bpun Blackhold, check if /dev/st0 is accessible.. if its an …

Bash scripting básico y cuatro cosas mas

para crear un fichero de bash creas un fichero de texto plano, da igual el nombre, pero por costumbre se pone nombredelscript.sh y se le dan derechos de ejecución a este fichero, por ejemplo

chmod a+x script.sh

chmod sirve para cambiar los derechos de los ficheros, tienes para la primera parte u g o a, u para el usuario, g para el grupo, o para otros y a para all, después del símbolo + rwx, r para leer, w para escribir y x para ejecutar.

luego debes editar este fichero.

es importante iniciar el fichero de texto con la siguiente línea:

#!/bin/bash

con esto le indicamos que use el interprete de comandos bash, que es el propio de linux.

a continuación ponemos ahí nuestro código, el interprete nos va a permitir usar un gran numero de condiciones, while, switch, switch case, if, for, etc. cada una de las condiciones tiene también su sintaxis

condicional con un if

#!/bin/bash
if [ “foo” = “foo” ]; then
echo expression evaluated as true
fi

condicional con un if y un else

#!/bin/bash
if [ “foo” = “foo” ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi

condicional usando un if, un else y variables

#!/bin/bash
T1=”foo”
T2=”bar”
if [ “$T1” = “$T2” ]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi

condicional usando un case (este es uno de mis favoritos!)

#!/bin/bash
T1=1
case ($T1) in
1)
echo 1
;;
2)
echo 2

comandos bash

aquí tenéis un comando bash que sirve para eliminar las líneas contenidas en un fichero las cuales contengan una cadena de texto determinada:

$ sed -i ‘/cadenadetexto/d’ fichero…

eines networking (scanrand)

avui us mostraré una magnífica eina de xarxa, es troba dintre el quinteto d’eines de networking anomenada paketto (en debian apt-get install paketto) .

Estàs intentant fer ping a una màquina però no respon perquè té els ICMP capats? senzill doncs, utilitza l’scanrand i esbrina quins ports té oberts.

el seu funcionament és molt simple, va fent peticions TCP en els ports més comuns i et retorna el resultat amb els que estan oberts.

urbanita:~# scanrand www.google.com
UP: 64.233.183.104:80 [11] 0.427s
UP: 64.233.183.104:443 [11] 0.428s

com veieu es requereixen drets de root per executar l’eina, mireu què passa si poseu un link simòlic a /bin:
laura@urbanita:~$ scanrand www.google.com
PK requires root to access the network directly.: Success

el primer camp t’indica si el port obert hi ha un servidor a darrere o no (simplement, el servei que escolta a aquest port pot estar parat), després tenim la IP que ens retorna la ressolució del nom de domini, amb : el port, entre “[” i “]” els salts que ha de realitzar fins arribar a la màquina que ofereix el servei(1), és a dir, la meva petició ha hagut de passar per 11 màquines abans d’arribar a la màquina final i l’últim camp és el temps de resposta.

(1)
conta els salts que realitza un cop està dintre la xarxa local remota, fixa’t en aquesta petició, hi ha 5 i 6 salts, els 5 salts corresponen al router i els 6 que hi ha una màquina al darrere.
urbanita:~# scanrand www.domini.com