Jorge Fuertes

Consultor de sistemas infomáticos.
Administración de sistemas, desarrollo.

Soft. Libre

Inmutable: Ficheros que no se pueden borrar con rm

Si no te ha pasado te pasará:

$> rm fichero.tal
rm: cannot remove `fichero.tal': Operation not permitted

Es posible que el maldito tenga activado el atributo ‘inmutable’, la solución:

$> chattr -i fichero.tal
$> rm fichero.tal

Nunca más se supo de tal fichero. Pensé en dejar unos bytes, para que difundieran la palabra.

Backups de MySQL con Bash

Estos días he tenido que hacer un script en bash para realizar backups de MySQL todos los días, guardando los últimos quince. Lo más sencillo era hacer este guión para ponerlo en el crontab y que se ejecutase a diario por la noche.

El script obtiene un listado de las bases de datos presentes en el MySQL local, crea un directorio dentro del que se le haya configurado, con nombre del día y la hora actuales, y dentro de él vuelca una por una estas bases de datos, comprimidas con gzip.

Después borra los backups viejos hasta dejar solamente los quince más nuevos.

Por supuesto el script se puede ejecutar a mano para producir un backup en el momento que deseemos, sólo hay que tener en cuenta que esos backups van a contar entre los quince últimos que son mantenidos.

Otra cosa importante es que el script tira de mi biblioteca de funciones de bash, que es una cosa que me facilita bastante la vida, sobre todo a la hora de darle un mejor aspecto a los scripts, pero es muy mejorable, como todo, y explicarla aquí se sale un poco del alcance del post, simplemente la adjunto porque la necesitáis. Está todo en este paquete backups-mysql-bash.tar.gz, pero en las instrucciones ya se descarga si las seguís paso a paso.

Instrucciones:

1: Instalar los scripts

Necesitáis tener instalado wget, si es Debian creo que viene por defecto, si no: apt-get install wget.


#> mkdir /root/bin
#> cd /root/bin
#> wget http://jorgefuertes.com/wp-content/uploads/2013/12/backups-mysql-bash.tar.gz
#> tar xvzf backups-mysql-bash.tar.gz

2: Configurar .my.cnf

Es interesante configurar este archivo para acceder sin más al servidor MySQL, en principio no es ningún problema de seguridad, pero si preferís no hacerlo deberéis modificar el script para que admita el usuario y la contraseña de vuestro mysql.

Editamos el archivo /root/.my.cnf (ojo al punto de delante del nombre) y escribimos en él:


[client]
host = localhost
user = root
password = mypassword

Evidentemente sustituyendo los datos con los que correspondan a nuestro servidor.
Ahora si ejecutamos mysql deberemos conectar con el servidor sin problemas.

Ajustamos los permisos de este fichero para que sean restrictivos y otros usuarios de la máquina no puedan usarlo o leerlo:


chmod 600 /root/.my.cnf

3: Probar el script

Si todo ha ido bien tiene que funcionar a la primera:


#> /root/bin/backup-mysql.sh

Lo podemos ejecutar varias veces y observar el resultado en /root/backup.

4: Añadirlo al crontab

Añadiremos una línea al crontab para conseguir que se ejecute todos los días a las 12 de la noche. El fichero de cron se edita con la orden crontab -e.


# m h  dom mon dow   command
0 0 * * * /root/bin/backup-mysql.sh

Bien, con esto ya debería estar resuelto. Fácil, estúpido y funcional, KISS, pero nos puede salvar el pescuezo en más de una ocasión.

SSH Dialog: Una utilidad de consola

Últimamente tengo que hacer más SSH que de costumbre, a mis propios servidores y a servidores de otras empresas, algunos de ellos ni siquiera tienen un nombre DNS y hay que entrar por la IP, otros tienen un nombre extraño asignado por Amazon y algunos, para rizar el rizo, están en puertos diferentes al 22 estándar. ¿Suficiente? NO, todavía hay más casos, en unos se entra con usuario ‘root’, en otros con ‘ubuntu’ y en otros con ‘admin’, demonios.

Sé que hay muchas formas de llevar esto organizado, sesiones del programa de consola que utilizamos, la configuración del propio cliente de SSH… pero no me gusta ir a un menú para seleccionar un host, y me gustaría tener una configuración clara en formato YAML y que pueda ser compartida entre mis máquinas con dropbox o similar.

Así que decidí darle al “my own way” y al “KISS” y me salió un programita en ruby que considero muy útil y de fácil utilización. No es que sea una cosa de tirar cohetes, pero si a mi me resulta tan útil, a alguien más le puede servir, así que lo he puesto en GitHub, con licencia libre, por si acaso:

Clonad, clonad, malditos.

Crear un disco RAM en GNU/Linux

Lo mismo que hicimos el otro día sobre OSX se puede hacer sobre GNU/Linux, por supuesto. De hecho la versatilidad actual de OSX viene dada porque en realidad es un UNIX, un derivado de FreeBSD más concretamente.

Bueno, al rollo:

#> mkfs -q /dev/ram1 32768
#> mkdir /mnt/ramDisk
#> mount /dev/ram1 /mnt/ramDisk

Con esto tendréis el disco RAM montado en ‘/mnt/ramDisk’, pero podéis montarlo en el ‘/tmp’, dentro de vuestro ‘home’ o incluso hacer que GNOME o KDE lo monten solos, etc…

Dependiendo de como esté organizada vuestra distro vais a necesitar ‘sudo’ para el mkfs, o cambiar a usuario ‘root’.

¡Saludos!

Crear un disco RAM en OSX

Para tener un espacio temporal en el que hacer rápidas operaciones con ficheros y cosas así, es algo que uso desde los tiempos del Amiga, y eso que entonces sólo tenía 8Mb de RAM.

En OSX podéis hacer:


diskutil erasevolume HFS+ 'RAM Disk' `hdiutil attach -nomount ram://65536`

Con esa instrucción crearéis un disco RAM de 32Mb, pero podéis especificar cualquier cantidad calculando:


Mb x 2048 = número de bloques

Y sustituyendo el ‘65536’ por el número de bloques resultantes.

Tras ejecutar la operación el disco RAM aparecerá automágicamente en el Finder, y en la consola en “/Volumes/RAM Disk”.