Jorge Fuertes

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

Trucos

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.

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”.

Script configuración git

Básicamente lo mismo que en este post pero en un script que si colocamos dentro de nuestro $PATH nos permitirá configurar git a nuestro gusto en un sólo comando. Útil para los que usamos muchos repositorios propios y clonados.

~/bin/git-configure.sh


#!/bin/bash

echo "Configurando GIT"

# Nombre
echo "user.name"
git config --global user.name "Jorge Fuertes AKA Queru"
# Email
echo "user.email"
git config --global user.email jorge@jorgefuertes.com

# Alias para acortar comandos usuales
echo "alias.ci"
git config alias.ci commit
echo "alias.co"
git config alias.co checkout
echo "alias.st"
git config alias.st status
echo "alias.br"
git config alias.br branch

# Salida coloreada
echo "color.ui"
git config --global color.ui true


Tontería enorme que ahorra muchísimo tiempo.

Backups sincronizados mediante Dropbox

Últimamente se está poniendo muy de moda un servicio de sincronización de ficheros llamado Dropbox.

dropboxSe trata de un servicio combinado de interfaz web, protocolo webdav y un residente que se ocupa de sincronizar una carpeta con el servidor. Podemos instalar dropbox en varios ordenadores y así tener lo mismo en esa carpeta en todos ellos.

El servicio nos deja, de forma gratuita, unos 2Gb de espacio para meter lo que queramos, y entre otras características nos permite obtener enlaces públicos para los ficheros de la carpeta “Public“, o compartir directorios con sólo dar la dirección de correo que debe recibirlos.

Para hacer copias de respaldo de carpetas que tengamos por el disco, por ejemplo la de los profiles de Firefox, o una copia de seguridad de nuestras facturas… podríamos recurrir a jugar con enlaces simbólicos, aunque esto no siempre funciona, y resulta un poco peligroso. Si estropeamos algo en un ordenador, lo estropeamos en todos, y realmente no queremos editar en todos, sólo tirar copias de seguridad de cada uno en su directorio correspondiente y tenerlas a salvo incluso de un incendio.

Lo que yo he hecho es utilizar rsync de forma local, desde lo que quiero copiar hasta un directorio dentro de ~/Dropbox, y para ello he hecho el siguiente script:

bk_docs-dropbox.sh:

#!/bin/bash

ORIGEN="/home/queru/Documentos"
DESTINO="/home/queru/Dropbox/Backups"
OPCIONES="-axE --stats"
LOGDIR="/home/queru/Desktop/logs"
LOG="$LOGDIR/bk_docs-dropbox.log"

mkdir -p $DESTINO
mkdir -p $LOGDIR

INICIO=$(date +"%H:%M:%S@%d-%m-%Y")
echo -e "\n\n+ Sincronizando a las $INICIO." >> $LOG

rsync $OPCIONES $ORIGEN $DESTINO &>> $LOG 

FIN=$(date +"%H:%M:%S@%d-%m-%Y")
echo -e "\nFinalizado a las $FIN.\n" >> $LOG

Si ejecutamos el script a mano, obtendremos una copia exacta de la carpeta de documentos dentro de dropbox, con lo que el demonio que instalamos de este servicio se pondrá a subir todos los datos al servidor. Las siguientes veces que lo ejecutemos será muy rápido, sólo transmitirá los cambios si los ha habido.

Ahora sólo nos quedaría automatizar la tarea para que se ejecute sola, por ejemplo cada 10 minutos.

crontab -e:

# m    h   dom mon dow command
  */10 *   *   *   *   /home/queru/bin/bk_docs-dropbox.sh

Listo. Copia de seguridad sincronizada cada 10 minutos.

Nota: Este sistema sirve para cualquier UNIX, incluido OS-X. Sólo recordad que la carpeta “home”, en OS-X se llama “Users”.