Paquete debian para puestos de alumno
Todos los años preparamos una maqueta con Ubuntu para instalar en los ordenadores de profesores y alumnos. Quizás un paquete debian facilite la creación de la maqueta y su mantenimiento. Además, esto me ha permitido probar los servicios de CI/CD de Github, por medio de sus Action.
Creación de un paquete deb
El comando dpkg-deb utiliza el fichero DEBIAN/control del directorio especificado para construir un paquete de debian. En este fichero se especifican, entre otras cosas, las dependiencias del paquete.
Package: iesavellaneda-tools Version: 2022.11.25.09.40-a33pcprofesor Section: base Priority: optional Architecture: all Homepage: https://github.com/alvarogonzalezsotillo/iesavellaneda-tools Depends: libnotify-bin Recommends: epoptes-client, tmux, tcpdump, git, htop, iftop, sshfs Maintainer: alvaro.gonzalezsotillo@educa.madrid.org Description: Cosas que les ponemos a los ordenadores con linux en el IES Alonso de Avellaneda
Primera utilidad: monitoreo de cuota
Me sorprendió bastante no encontrar ningún programa que avise del nivel de cuota utilizado por los usuarios, más allá del envío de un email interno (que nadie leerá). Al final, he incluido en el paquete un script para que se monitorice cada hora la cuota, y si se pasa del 80% avisar con un cuadro de diálogo. Para ello he utilizando algo de bash, notify-send y zenity
#!/bin/bash
dialogo(){
local MSG="$*"
if which kdialog
then
kdialog --title Aviso de cuota --msgbox "$MSG"
return 0
fi
if which zenity
then
zenity --info --title "Aviso de cuota" --text "$MSG"
return 0
fi
echo "No se encuentra ningún programa para mostrar un diálogo"
return 1
}
IFS="\n" quota | tail -n +3 | awk '{print $2 " " $4 " " $1}' | while read LINEA
do
LINEA=$(echo "$LINEA" | tr -d '*')
read USADO MAXIMO DISCO < <(echo "$LINEA")
echo "Usado-maximo-disco:" $USADO $MAXIMO $DISCO
if [ $MAXIMO -gt 0 ]
then
PORCENTAJE=$((100*USADO/MAXIMO))
MSG="$PORCENTAJE del disco $DISCO ya utilizado ($USADO KB de un máximo de $MAXIMO $KB)"
notify-send --category=Aviso "$MSG" > /dev/null 2> /dev/null
echo "$MSG"
if [ $PORCENTAJE -gt 80 ]
then
dialogo "$MSG" > /dev/null 2> /dev/null
fi
fi
done
Despliegue continuo
He utilizado una Action de Github para crear el paquete DEB cada vez que se crea una etiqueta en la rama master
name: Makefile CI
on:
push:
branches: [ "master" ]
tags:
- '*'
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Construir el paquete DEB
run: ./build.sh
- name: Subir el DEB a la acción de Github
uses: actions/upload-artifact@v3
with:
name: iesavellaneda-tools.deb
path: iesavellaneda-tools.deb
- name: Crear la release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: iesavellaneda-tools.deb