diff --git a/debian/ogcore.postinst b/debian/ogcore.postinst index c4d8150..5173ede 100644 --- a/debian/ogcore.postinst +++ b/debian/ogcore.postinst @@ -4,8 +4,30 @@ set -e set -x . /usr/share/debconf/confmodule +restore_config_if_modified() { + local new="$1" + local backup="$1.bak" + + if [ -f "$backup" ]; then + if ! cmp -s "$new" "$backup"; then + echo ">>> Archivo modificado por el usuario detectado en $new" + echo " - Guardando archivo nuevo como ${new}.new" + mv -f "$new" "${new}.new" + echo " - Restaurando archivo anterior desde backup" + mv -f "$backup" "$new" + else + echo ">>> El archivo $new no ha cambiado desde la última versión, eliminando backup" + rm -f "$backup" + fi + fi +} + USER="opengnsys" + + + + # Detectar si es una instalación nueva o una actualización if [ "$1" = "configure" ] && [ -z "$2" ]; then # Detectar IP de la interfaz de red asociad a la ruta por defecto. @@ -90,29 +112,48 @@ if [ "$1" = "configure" ] && [ -z "$2" ]; then echo ">>> Usuario administrador $ADMIN_USER creado." fi - + # Install crontab + echo ">>> Configurando cron para comprobar disponibilidad de clientes" + cp /opt/opengnsys/ogcore/etc/cron.d/opengnsys-check-clients /etc/cron.d/opengnsys-check-clients + chmod 644 /etc/cron.d/opengnsys-check-clients + chown root:root /etc/cron.d/opengnsys-check-clients elif [ "$1" = "configure" ] && [ -n "$2" ]; then echo ">>> Actualización detectada desde la versión $2" - cd /opt/opengnsys/ogcore/api + # Restaurar archivos de configuración si han sido modificados + restore_config_if_modified "/opt/opengnsys/ogcore/etc/nginx/sites-available/ogcore.conf" + restore_config_if_modified "/opt/opengnsys/ogcore/etc/nginx/sites-available/mercure.conf" + restore_config_if_modified "/opt/opengnsys/ogcore/etc/php/8.3/fpm/pool.d/ogcore-fpm.conf" + restore_config_if_modified "/opt/opengnsys/ogcore/etc/systemd/system/og-mercure.service" + restore_config_if_modified "/opt/opengnsys/ogcore/api/env.json" + cd /opt/opengnsys/ogcore/api echo ">>> Aplicando migraciones de base de datos" php bin/console doctrine:migrations:migrate --no-interaction echo ">>> Configurando servidor web y servicios" - ln -s /opt/opengnsys/ogcore/etc/nginx/sites-available/ogcore.conf /etc/nginx/sites-enabled/ogcore.conf - ln -s /opt/opengnsys/ogcore/etc/php/8.3/fpm/pool.d/ogcore-fpm.conf /etc/php/8.3/fpm/pool.d/ogcore-fpm.conf - ln -s /opt/opengnsys/ogcore/etc/systemd/system/og-mercure.service /etc/systemd/system/og-mercure.service + [ ! -L /etc/nginx/sites-enabled/ogcore.conf ] && ln -s /opt/opengnsys/ogcore/etc/nginx/sites-available/ogcore.conf /etc/nginx/sites-enabled/ogcore.conf + [ ! -L /etc/php/8.3/fpm/pool.d/ogcore-fpm.conf ] && ln -s /opt/opengnsys/ogcore/etc/php/8.3/fpm/pool.d/ogcore-fpm.conf /etc/php/8.3/fpm/pool.d/ogcore-fpm.conf + [ ! -L /etc/systemd/system/og-mercure.service ] && ln -s /opt/opengnsys/ogcore/etc/systemd/system/og-mercure.service /etc/systemd/system/og-mercure.service echo ">>> Configurando permisos de archivos" chown opengnsys:www-data /opt/opengnsys/ chown -R opengnsys:www-data /opt/opengnsys/ogcore + if [ ! -f /etc/cron.d/opengnsys-check-clients ]; then + echo ">>> Configurando cron para comprobar disponibilidad de clientes" + cp /opt/opengnsys/ogcore/etc/cron.d/opengnsys-check-clients /etc/cron.d/opengnsys-check-clients + chmod 644 /etc/cron.d/opengnsys-check-clients + chown root:root /etc/cron.d/opengnsys-check-clients + else + echo ">>> El archivo de cron ya existe, no se realizan cambios se ajustan permisos" + chmod 644 /etc/cron.d/opengnsys-check-clients + chown root:root /etc/cron.d/opengnsys-check-clients + fi systemctl daemon-reload systemctl enable og-mercure systemctl restart og-mercure systemctl restart nginx systemctl restart php8.3-fpm -fi - +fi # Recargar systemd y reiniciar servicios en ambos casos diff --git a/debian/ogcore.preinst b/debian/ogcore.preinst index dc60472..5fd2cfc 100644 --- a/debian/ogcore.preinst +++ b/debian/ogcore.preinst @@ -2,6 +2,19 @@ set -e +backup_file_if_exists() { + local original="$1" + local backup="$1.bak" + + if [ -e "$original" ]; then + echo " - Guardando backup de $original en $backup" + cp -a "$original" "$backup" + fi +} + +CONFIG_FILE="/opt/opengnsys/ogcore/api/env.json" +BACKUP_FILE="/opt/opengnsys/ogcore/api/env.json.bak" + # Asegurarse de que el usuario exista USER="opengnsys" HOME_DIR="/opt/opengnsys" @@ -12,4 +25,18 @@ else useradd -m -d "$HOME_DIR" -s /bin/bash "$USER" fi -exit 0 \ No newline at end of file +CONFIG_FILE="/opt/opengnsys/ogcore/api/env.json" +BACKUP_FILE="/opt/opengnsys/ogcore/api/env.json.bak" + +# Solo hacemos backup si el archivo existe y es una actualización (posición 1 = upgrade) +if [ "$1" = "upgrade" ]; then + echo ">>> Backup de archivos de configuración reales en /opt/opengnsys" + backup_file_if_exists "/opt/opengnsys/ogcore/etc/nginx/sites-available/ogcore.conf" + backup_file_if_exists "/opt/opengnsys/ogcore/etc/nginx/sites-available/mercure.conf" + backup_file_if_exists "/opt/opengnsys/ogcore/etc/php/8.3/fpm/pool.d/ogcore-fpm.conf" + backup_file_if_exists "/opt/opengnsys/ogcore/etc/systemd/system/og-mercure.service" + backup_file_if_exists "/opt/opengnsys/ogcore/api/env.json" +fi + +exit 0 + diff --git a/etc/cron.d/opengnsys-check-clients b/etc/cron.d/opengnsys-check-clients new file mode 100644 index 0000000..e762794 --- /dev/null +++ b/etc/cron.d/opengnsys-check-clients @@ -0,0 +1 @@ +*/5 * * * * opengnsys php -d memory_limit=512M /opt/opengnsys/ogcore/api/bin/console opengnsys:check-client-availability >> /opt/opengnsys/ogcore/api/var/log/cron.log 2>&1