Software libre práctico, jugueteando con GNU/Linux 5

Ya estamos en nuestra 5ª entrega. En el post anterior dije que os explicaría como poder conectaros desde Internet, a programar un par de scripts para automatizar las copias de seguridad y las actualizaciones automáticas y por último instalaríamos webmin, un sistema de gestión basado en web.

De momento la primera la vamos a dejar para el siguiente post. En el que haremos una entrada para montar nuestra propia VPN (Virtual Private Network o Red Privada Virtual) y conseguir así además de conectarnos desde fuera hacerlo de forma segura desde cualquier dispositivo. Esto lo hago así por la complejidad de la VPN y que la nube funciona bien a nivel local con lo que podemos centrarnos en configurarla bien.

Antes de empezar solo quería hacer un pequeño paréntesis y comentar 2 cosas.

Todo lo expuesto hasta ahora se puede hacer con la Raspberry Pi, o con cualquier ordenador basado en GNU/Linux. Raspbian es un derivado de Debian para Raspberry Pi, y prácticamente se puede exportar todo al 100% a Debian y sus derivadas (Ubuntu, Mint, etc). Pero si quieres usar cualquier otra distribución funcionaria igual, solo sería cuestión de adaptar algunas cosillas.

Esto no solo es útil a nivel particular. Las asociaciones vecinales, entidades sociales, etc. pueden aprovechar este tipo de tecnologías que muchas veces pasan desapercibidas. Solo estamos empezando, pero se pueden hacer muchas cosas.

Y dicho esto vamos a empezar. Intentare que la entrada de hoy sea algo más corta (no os prometo nada, que luego me emociono). Para compensar la de la semana pasada. Lo primero que vamos ha hacer es automatizar las actualizaciones y las copias de seguridad. Ambas las haremos con un script y programaremos un cron.

Cron es un programa que corre en segundo plano y que nos permite programar tareas. Podemos programar desde 1 vez al mes a 1 por minuto. Y un script es un archivo de instrucciones (comandos) que se ejecutan secuencialmente, algunos son realmente complejos, pero no os preocupéis los nuestros son nivel elemental. Pues vamos al lío. Empezaremos por las actualizaciones.

Lo primero crear un archivo de scrip. Conéctate a nuestro servidor por ssh, tal como aprendimos en el post anterior. Y pasa a modo superusuario. Lo que vamos ha hacer ahora no nos ha hecho falta por el momento, pero vamos a intentar mantener un poco de orden y poner cada cosa en su sitio. Cuando cambias de usuario te mantienes en la carpeta en la que estás. Que significa esto, que al logearnos como pi, accedemos al sistema por la carpeta home de pi. Pero al cambiar a root nos mantenemos en el home de pi. Ahora vamos a crear scripts administrativos, con lo que nos vamos a tener que ir al home del root para guardarlos. Es cuestión de orden, no tiene sentido que la llaves de un banco las guarde la persona que esta en la entrada, ¿no es más lógico que las guarde la persona con más rango? pues aquí algo parecido.

Moviéndonos por el sistema. Carpeta home root

La carpeta home del root esta en /root. Cuando una ruta empieza por / significa que la ruta empieza en la raíz del punto de montaje, y en esa raíz en la carpeta root. Para movernos hasta ella es fácil. Basta con poner cd /root, o aún más fácil solo con poner cd a secas nos movemos a la carpeta home del usuario activo. Cuando estas en la carpeta home del usuario activo aparece el símbolo ~ en la línea de la terminal.

Ya estamos en el home del root. Vamos a crear una carpeta donde guardar los scripts, mkdir scripts; y nos movemos dentro de la carpeta cd scripts. Y ahora vamos a por el script de actualización, nano actualizacion.sh. Antes de empezar, se ha creado un archivo SIN permisos de ejecución, algo que es indispensable para poder usar el script. Y además se ha creado con acceso de lectura y escritura para el propietario y de lectura para cualquier usuario. Vamos a añadirle permisos de ejecución para el propietario y quitarle los permisos de lectura para cualquier otro usuario, para esto usamos chmod 700 actualizacion.sh.

Aquí tienes el código de los 4 scripts utilizados en este tutorial:

El lenguaje de script es muy potente y a veces complicado, pero no está de más aprender 4 cosas para automatizar nuestras pequeñas tareas.

Los scripts siempre tienen que empezar indicando el interprete de ordenes que queremos a usar, el más común es bash, alojado en /bin. Con lo que la primera linea siempre será “#!/bin/bash”. Las líneas que empiecen por # son comentarios, la primera es una excepción. Todas las líneas que empiezan por echo son literales, se muestran tal como las veis. Y usamos una redirección para la salida estándar (que es la pantalla) hacia un archivo. Usando esta redirección “ >>” al final de la línea indicamos que desvíe la información que habitualmente veríamos por pantalla al archivo de log. Si en lugar de >> ponemos solo > borra todo y deja solo la última instrucción. En este caso no nos interesa, queremos mantener un registro de todo el proceso. Si os descargáis, o miráis, el script en el enlace que he puesto podréis observar que he comentado todo en el script. De esta forma explico que hace cada línea y evito ponerlos aquí y alargar tontamente la entrada.

Script de actualización

Ahora vamos a por la copia de seguridad. Pero antes de empezar un pequeño detalle. No tiene mucho sentido hacer una copia sobre el mismo disco, si este falla perderemos las 2 cosas, los datos y la copia. Lo mínimo es usar otro disco (otro pendrive en nuestro caso) y lo deseable es usar otro equipo. Esta es nuestra nube para uso privado, es decir, la tenemos en casa para nosotros, pareja, hijos, etc. no vamos a vender el servicio, con lo que solo necesitamos que copie los archivos almacenados en /media/datos para no perderlos en caso de fallo. De forma que usaremos un sistema rápido para el respaldo de los datos.

Haremos 2 versiones de nuestro script, el primero solo va a copiar y comprimir los archivos en otro pendrive, enchufado en la misma raspberry pi. Y el segundo además enviará la copia a otro equipo, pero esta segunda versión la haremos cuando tratemos el tema de conexión vía Internet. Hoy solo haremos la primera versión. Una copia en una segunda memoria sobre la misma máquina.

Lo haré igual que con el otro script, os dejo el código comentado para evitar alargar esto. También guardaremos un registro. Para hacerlo fácil, ya que vamos a reutilizar parte del código anterior copia el anterior script con el comando cp, tal que así cp actualizacion.sh backup.sh. Y ya podemos editarlo, de esta forma ya tienes los permisos creados, además del código que vamos a reutilzar.

En el post anterior tuvimos que editar el archivo fstab para asegurar que siempre monte igual el pendrive. Pues ahora vamos a hacer lo mismo para nuestro pendrive de respaldo. En mi caso la carpeta donde voy a montar el sistema de backup es /media/backup. Creo la carpeta y añado mi pendrive al archivo fstab. Ya sabes como hacerlo, sino mira el post anterior.

Aquí viene cuando lo matan. Vamos a programar los dos scripts para que se ejecuten automáticamente. Y como he dicho, usaremos cron. Abrimos el editor de crontab con el comando crontab -e, la primera vez que lo hagas te preguntara que editor quieres usar. Elije el 2, nano, es el que hemos estado usando hasta ahora.

Eligiendo editor para crontab (nano = 2)

Cron tiene su miga, baja hasta la última línea y escribe “01 1 * * * /root/scripts/actualizacion.sh”. Las posiciones son, de izquierda a derecha, minutos, horas, día del mes, día de la semana, usuario, comando. Si ponemos un * significa que queremos que se ejecute siempre, en la línea de antes le hemos dicho que en el minuto 1 de la hora 1, de cada día del mes y de cada día de la semana ejecute como usuario root (*) el script que hay en /root/script/actualizacion.sh. La línea para el backup quedaría tal que así “01 3 * * * /root/scripts/backup.sh”, pero en lugar de a la 1 de la madrugada a las 3.

Ejemplo crontab con programación de scripts

Aunque se supone que los sistemas basados en GNU/Linux solo tienen que reiniciarse en contadas ocasiones no esta de más reiniciarlo de vez en cuando. Con los que hay otra linea que reinicia el equipo cada día, puedes ponerlo cuando quieras. Y por último un script que registra todos los reinicios, tanto lo programados como los que no. Como no puedo saber cuando se va a apagar (por ejemplo por un corte de luz) cron dispone de unas expresiones reservadas para hacernos la vida más fácil. En concreto la que nos interesa es @reboot, la cual indica a cron que ejecute ese script en cada una inicio del sistema.

Instalar webmin

Este último paso es totalmente opcional. Vamos a instalar un sistema para administrar el equipo usando un navegador y una interface web, en lugar de la consola. Va bien para algunas cosas, pero a mi me gusta más la terminal. En fin… para gustos los colores.

Lo primero es descargarlo webmin no está en los repositorios de raspbian. Hasta ahora hemos usado 2 métodos de instalación, el uso de apt-get y los repositorios. Y nextcloud y un archivo comprimido. Ahora vamos a usar un paquete *.deb, aunque necesitaremos el uso de apt-get para finalizar la instalación.

Descarga e instalación de webmin

Pues lo dicho, nos vamos a la web de webmin y localizamos el enlace de la última versión estable (http://www.webmin.com/deb.html). Esta gente son super majos, nos dejan el enlace de descarga junto al comando wget. Copiamos la línea que hay en la web y nos vamos a la carpeta home de pi. Pegamos el texto wget http://…. y esperamos que acabe de descargar. Una vez acabe, y como superusuario, escribimos dpkg -i webmin_1.831_all.deb. El comando dpkg se encarga de gestionar los paquetes, con el parámetro -i le indicamos que se trata de una instalación. Esperamos que acabe. Nos devolverá algunos errores por dependencias incumplidas. Esto se corrige muy fácilmente con apt-get. Escribes apt-get -f install, sin paquete para instalar, solo el parámetro -f. Esto indica a apt-get que debe resolver los errores por dependencias incumplidas que encuentre. Ahora si, que ya está.

Imagen pantalla principal de webmin

Para acceder a webmin pon la IP de tu raspi pero indicando que entre por el puerto 10000. En mi caso https://192.168.1.10:10000/. El navegador dará un error por que vamos por una conexión segura (https), pero no disponemos de certificado, esto es absolutamente normal. Confirma la excepción de seguridad, el propio navegador te tiene que dar una opción por ahí, mas o menos escondida. El usuario de acceso es root y el password el que le hayas asignado al superusuario. Originalmente está en inglés, puedes cambiarle el idioma si quieres. Ojo con esta herramienta, igual que con un rm -Rf mal tirado (que por cierto siempre está mal tirado) en la terminal aquí puedes organizar una sangría.

Bueno, pues ya basta por hoy. La semana que viene más, pero antes una apreciación personal, la última vez que use webmin era feo, pero muy feo, te entraban ganas de arrancarte los ojos. Me he llevado una muy grata sorpresa al ver está versión tan limpia y moderna.

Un comentario sobre “Software libre práctico, jugueteando con GNU/Linux 5

Comentarios cerrados.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies