Nos gustaría contar con herramientas para la automatización de la instalación de software en nuestro sistema GNU/Linux. Hay veces que tenemos que instalar varios paquetes de software en un sistema GNU/Linux y queremos automatizar hasta cierto punto este proceso.
Para ello, queremos crear un script cuyo nombre será listInstall.sh que reciba por parámetro la ruta de un fichero con información de paquetes de software a instalar.
El fichero tendrá una más líneas con información de paquetes a instalar. En una línea podemos encontrarnos con uno o más paquetes de software, separados por espacios.
Lo primero que hará el script será comprobar si es posible instalar todos los paquetes del fichero. Para ello, podemos hacer una simulación de instalación de cada paquete.
Si huebiera un error al simular la instalación de alguno de los paquetes, el script no realizará su función y terminará con un código de retorno de error.
Si la simulación de instalación de todos los paquetes funciona correctamente, entonces procedemos a instalar los paquetes de software. Si se produce algún error al instalar alguno de los paquetes debemos terminar el script retornando un código de error.
Por supuesto tendremos que realizar el control de errores habitual, como es la ejecución del script como root y el paso de parámetros.
Un ejemplo de fichero de paquetes a instalar podría ser:
samba smbfs bind9
apache2
php
Log: errores e información de operación
Queremos que la ejecución de este script se pueda automatizar, así que vamos a configurar el script para que almacene los mensajes de error y los mensajes de instalación en un fichero de log propio.
El fichero de log estará en /var/log/educatica/listInstall.log. Si no existe el directorio de log, lo creamos.
En el fichero de log se almacenarán tanto los errores como mensajes de proceso. Los mensajes de error tendrán el siguiente formato:
[ERROR];fechayhora;Mensaje de error
Dónde:
- [ERROR] Es una cadena de texto fija que identifica el mensaje como error.
- fechayhora. Se trata de la fecha y hora en la que se generó el mensaje de error. fecha y hora tendrá el formato: YYDDMM-HH:MM
- Mensaje de error. Mensaje con la información del error concreto
En cuanto a los mensajes de instalación, se almacenará una línea para cada paquete instalado con la siguiente información:
[INSTALL];fechayhora;PaqueteInstalado;Estado
Dónde
- [INSTALL] Es una cadena de texto fija que identifica el mensaje como instalación.
- fechayhora. Se trata de la fecha y hora en la que se generó el mensaje de error. fecha y hora tendrá el formato: YYDDMM-HH:MM
- PaqueteInstalado. Nombre del paquete a instalar.
- Estado. {installed | error}. Si el paquete se ha instalado correctamente aparecerá installed, si ha habido un error, aparecerá error. En este último caso, además se generará una nueva línea de [ERROR] informando del error producido.
Solución propuesta
Esqueleto base
Pistas
Si no tenemos claro cómo hacer alguna de las operaciones que nos piden en el script, podemos consultar la página de manual del comando en cuestión y probar en una terminal con los comandos hasta que demos con la solución correcta.
¿Cómo recorremos el fichero de paquetes?
Según el enunciado, el fichero de paquetes de software a instalar tendrá en cada línea uno o varios paquetes de software, separados por espacio.
Para cada línea del fichero, recorremos cada paquete de la línea.
¿Cómo simulamos la instalación de software?
man apt-get
Buscamos la opción -s
Si además queremos que cuando instalemos el software no nos pregunten nada, tendremos que usar la opción -y
¿Cómo sabemos si la simulación o la instalación ha ido bien?
Para comprobar si un comando se ha ejecutado correctamente o no podemos utilizar el comando if, igual que hemos hecho hasta ahora. Si la simulación de la instalación devuelve un error, es decir no se cumple la condición, entonces tenemos un problema.
Para la instalación el proceso es el mismo, solo que vamos a tratar de instalar el paquete en lugar de simular.
¿Cómo obtenemos la fecha y hora?
Nos piden que en el fichero de log almacenemos distintos mensajes en los que aparece la fecha y hora. Para obtener la fecha y hora del sistema en el formato solicitado podemos utilizar el comando date y jugar con las opciones de formato.
Para más información, consulta la página de manual del comando date.
Solución propuesta
¿Y si..? Fichero de paquetes en /etc/educatica/packageList.txt
La finalidad de esta modificación o nueva versión es la de poder automatizar más todavía la instalación de paquetes. Vamos a usar un fichero en una ruta concreta que contendrá los paquetes a instalar. Si cuando se ejecute el script el fichero de paquetes no existe, el script no hace nada y termina su ejecución. Si el fichero existe, leerá los datos del fichero y después de instalar todos los paquetes, borrará el fichero. De esta forma, la próxima vez que se ejecute el script, si no está el fichero, no hará nada.
Javier
Supongamos que no le pasamos el fichero de paquetes al script, sino que ese fichero debería estar en /etc/educatica/packageList.txt. De esta forma, el script cuando se ejecute comprobará si existe ese fichero, si no existe, no hace nada, termina sin más.
Si el fichero si existe, leera los paquetes de este fichero y los instalará. Si todo ha ido bien, instalando todos los paquetes del fichero, borramos el fichero.
Dejar una respuesta