#!/bin/bash set -e # Cargar el módulo de configuración de debconf . /usr/share/debconf/confmodule # Leer las variables de configuración OGBOOT_ROOT="/opt/opengnsys/ogboot" OGBOOT_API_DIR="/opt/opengnsys/ogboot/api" db_get opengnsys/ogboot_ip OGBOOT_IP="$RET" db_get opengnsys/ogboot_port OGBOOT_PORT="$RET" db_get opengnsys/ogboot_ogcoreUrl OGCORE_API_URL="$RET" db_get opengnsys/ogboot_ogliveUrl OGCORE_OGLIVE_URL="$RET" # db_get opengnsys/ogboot_sambaUser # SAMBA_USER="$RET" # db_get opengnsys/ogboot_sambaUserPass # SAMBA_PASS="$RET" # IPXE_REPO="https://github.com/ipxe/ipxe.git" IPXE_REPO="https://ognproject.evlt.uma.es/gitea/narenas/opengnsys_ipxe.git" # Asegurarse de que el usuario exista USER="opengnsys" USER_INFO=$(getent passwd "$USER") DEFAULT_OGLIVE=$OGCORE_OGLIVE_URL ENV_FILE=/opt/opengnsys/ogboot/api/.env if [ -z "$USER_INFO" ]; then echo "Error: El usuario '$USER' no existe." >&2 exit 1 fi USER_UID=$(echo "$USER_INFO" | cut -d: -f3) USER_GID=$(echo "$USER_INFO" | cut -d: -f4) INSTALL_OGBOOT_TARGET="/opt/opengnsys/ogboot" fstab_entries=( "$INSTALL_OGBOOT_TARGET/lib/oglive.iso $INSTALL_OGBOOT_TARGET/mnt iso9660 loop,ro,users,uid=$USER_UID,gid=$USER_GID,noauto 0 0" "/opt/opengnsys/ogboot/tftpboot/ogLive/ogclient.sqfs /tmp/ogclient_mount squashfs loop,ro,user,noauto 0 0" ) fstab_file="/etc/fstab" configure_sudo() { echo "Copiando configuración de sudo" if [ ! -f /etc/sudoers.d/opengnsys ]; then cp /opt/opengnsys/ogboot/etc/ogboot.sudoers /etc/sudoers.d/opengnsys chmod 440 /etc/sudoers.d/opengnsys sed -i "s|__OGBOOT_TARGET__|$OGBOOT_ROOT|g" /etc/sudoers.d/opengnsys else echo "El archivo /etc/sudoers.d/opengnsys ya existe." fi } add_fstab_entries(){ echo "Añadiendo entradas a /etc/fstab" for entry in "${fstab_entries[@]}"; do if ! grep -Fxq "$entry" "$fstab_file"; then echo "$entry" | sudo tee -a "$fstab_file" > /dev/null echo "Entrada añadida a /etc/fstab: $entry" else echo "La entrada ya existe en /etc/fstab: $entry" fi done } update_opengnsys_user() { echo "Actualizando grupos del usuario opengnsys" usermod -aG disk "$USER" } configure_tftp(){ echo "Modificando el archivo tftpboot" # Comprobar si el archivo ya está desviado if ! dpkg-divert --list /etc/default/tftpd-hpa | grep -q "/etc/default/tftpd-hpa"; then echo "Creando divert para /etc/default/tftpd-hpa" dpkg-divert --add --rename --divert /etc/default/tftpd-hpa.orig /etc/default/tftpd-hpa fi # Copiar archivo solo si no existe en la nueva ubicación if [ ! -f /etc/default/tftpd-hpa ]; then echo "Copiando configuración de tftpd-hpa" cp /opt/opengnsys/ogboot/etc/default/tftpd-hpa /etc/default/tftpd-hpa fi } install_oglive(){ echo "Download ogLive" /opt/opengnsys/ogboot/bin/oglivecli download "$DEFAULT_OGLIVE" } configure_ipxe(){ echo "Configure ipxe templates" cp $OGBOOT_ROOT/etc/dhcp_boot.ipxe.tmpl $OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe cp $OGBOOT_ROOT/etc/default.ipxe.tmpl $OGBOOT_ROOT/tftpboot/ipxe_scripts/default.ipxe sed -i "s|__SERVERIP__|$OGBOOT_IP|g" $OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe sed -i "s|__SERVERIP__|$OGBOOT_IP|g" $OGBOOT_ROOT/tftpboot/ipxe_scripts/default.ipxe echo "Instalando ipxe" rm -rf /tmp/ipxe_repo git clone $IPXE_REPO /tmp/ipxe_repo if [ ! -f $OGBOOT_ROOT/tftpboot/undionly.kpxe ]; then cd /tmp/ipxe_repo/src make -j4 -s bin/undionly.kpxe EMBED=$OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe make -j4 -s bin-x86_64-efi/ipxe.efi EMBED=$OGBOOT_ROOT/tftpboot/ipxe_scripts/dhcp_boot.ipxe cp bin/undionly.kpxe $OGBOOT_ROOT/tftpboot/ cp bin-x86_64-efi/ipxe.efi $OGBOOT_ROOT/tftpboot/ fi } configure_api(){ if ! grep -q "OGCORE_API_URL" $ENV_FILE; then echo "OGCORE_API_URL=$OGCORE_API_URL" >> $ENV_FILE fi if ! grep -q "OGBOOT_IP" $ENV_FILE; then echo "OGBOOT_IP=$OGBOOT_IP" >> $ENV_FILE fi if ! grep -q "OGBOOT_PORT" $ENV_FILE; then echo "OGBOOT_PORT=$OGBOOT_PORT" >> $ENV_FILE fi } configure_nginx_and_fpm() { echo "Configure nginx" PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;') if [ ! -f /etc/nginx/sites-available/ogboot.conf ]; then cp /opt/opengnsys/ogboot/etc/nginxServer.conf.tmpl /etc/nginx/sites-available/ogboot.conf sed -i "s|__ROOT__|$OGBOOT_API_DIR|g" /etc/nginx/sites-available/ogboot.conf sed -i "s|__PHPVERSION__|$PHP_VERSION|g" /etc/nginx/sites-available/ogboot.conf sed -i "s|__SERVERIP__|$OGBOOT_IP|g" /etc/nginx/sites-available/ogboot.conf sed -i "s|__PORT__|$OGBOOT_PORT|g" /etc/nginx/sites-available/ogboot.conf sed -i "s|__TFTPPATH__|$OGBOOT_ROOT/tftpboot|g" /etc/nginx/sites-available/ogboot.conf ln -s /etc/nginx/sites-available/ogboot.conf /etc/nginx/sites-enabled/ogboot.conf else echo "El archivo /etc/nginx/sites-available/opengnsys ya existe." fi echo "Modificando el fpm" if [ ! -f /etc/php/$PHP_VERSION/fpm/pool.d/ogboot.conf ]; then cp /opt/opengnsys/ogboot/etc/ogboot-fpm.conf /etc/php/$PHP_VERSION/fpm/pool.d/ogboot.conf fi } configure_samba(){ echo "Configurando Samba" cp /opt/opengnsys/ogboot/etc/samba/smb-ogboot.conf /etc/samba/ sed -i "s|__OGBOOTDIR__|$OGBOOT_ROOT|g" /etc/samba/smb-ogboot.conf INCLUDE_LINE="include = /etc/samba/smb-ogboot.conf" if ! grep -q "$INCLUDE_LINE" /etc/samba/smb.conf; then echo "$INCLUDE_LINE" | sudo tee -a /etc/samba/smb.conf > /dev/null fi } configure_permissions(){ echo "Cambiando la propiedad de los archivos al usuario $USER" chown opengnsys:www-data /opt/opengnsys/ chown -R opengnsys:www-data /opt/opengnsys/ogboot } restart_services(){ systemctl daemon-reload systemctl restart nginx systemctl restart tftpd-hpa systemctl restart php8.3-fpm systemctl restart samba } # Detectar si es una instalación nueva o una actualización if [ "$1" = "configure" ] && [ -z "$2" ]; then # Copy sudo configuration echo "Primera instalación" configure_sudo add_fstab_entries update_opengnsys_user configure_tftp install_oglive configure_ipxe configure_api configure_nginx_and_fpm configure_samba elif [ "$1" = "configure" ] && [ -n "$2" ]; then echo "Actualización desde la versión $2" configure_sudo configure_tftp configure_api configure_nginx_and_fpm configure_samba fi configure_permissions restart_services exit 0