From 957a343fea7c09e080139f490358053e0fe3d215 Mon Sep 17 00:00:00 2001 From: aguerrero Date: Thu, 4 Jul 2024 20:00:13 +0000 Subject: [PATCH] Refs #202 global setting is added --- installer/ogboot_installer.py | 179 +++++++++++++++++++--------------- 1 file changed, 98 insertions(+), 81 deletions(-) diff --git a/installer/ogboot_installer.py b/installer/ogboot_installer.py index 933c0dc..163f73d 100755 --- a/installer/ogboot_installer.py +++ b/installer/ogboot_installer.py @@ -33,15 +33,17 @@ INSTALL_OPENGNSYS_TARGET = f"{env_ogCore_Dir}" INSTALL_OGBOOT_TARGET = f"{env_ogBoot_Dir}" GIT_REPO = f"{env_ogBoot_GitRepo}" +OSDISTRIB = "" +OSVERSION = "" IPXE_DIR = "/tmp/ipxe" -WORKDIR="/tmp/ogboot_installer" +WORKDIR ="/tmp/ogboot_installer" TFTPSERV = "tftpd-hpa" SAMBASERV = "smbd" SAMBACFGDIR = "/etc/samba" TFTPCFGDIR = "/var/lib/tftpboot" INETDCFGDIR = "/etc/xinetd.d/" -DEFAULTDEV = "enp0s3" +DEFAULTDEV = "" PACKAGES_TO_INSTALL = ["htop"] DEVICE = [] SERVERIP = [] @@ -210,6 +212,7 @@ def install_packages(missing, log_packages_file=f"/tmp/installed_packages.log"): del os.environ['DEBIAN_FRONTEND'] def autoConfigure(): + global OSDISTRIB, OSVERSION #distribution = platform.linux_distribution() #distribution = distro.linux_distribution() #OSDISTRIB = distribution[0] @@ -234,6 +237,7 @@ def generate_config_url(): return f"https://dl.cloudsmith.io/public/isc/kea-2-0/config.deb.txt?distro=ubuntu&codename={codename}&version={version}&arch={arch}" def downloadComposer(): + global WORKDIR, INSTALL_OGBOOT_TARGET #logger.info("Downloading composer.phar...") os.makedirs(os.path.join(WORKDIR, "ogboot", "bin"), mode=0o750, exist_ok=True) subprocess.run(["curl", "-sS", "-o", os.path.join(WORKDIR, "ogboot", "bin", "composer.phar"), "https://getcomposer.org/installer"], check=True) @@ -244,6 +248,7 @@ def downloadComposer(): return 0 def install_swagger_ui(): + global INSTALL_TARGET # Define la URL del archivo de Swagger UI que quieres descargar swagger_ui_url = "https://github.com/swagger-api/swagger-ui/archive/refs/heads/master.zip" # Define la ruta donde quieres descomprimir Swagger UI @@ -277,57 +282,60 @@ def og_core_create_user(OPENGNSYS_CLIENT_USER): logger.info(f"User {OPENGNSYS_CLIENT_USER} created successfully.") def og_boot_create_dirs(): - if os.path.exists(INSTALL_OGBOOT_TARGET): - if not os.path.isdir(INSTALL_OGBOOT_TARGET): - raise NotADirectoryError(f"{INSTALL_OGBOOT_TARGET} exists and is not a directory.") - else: - logger.warning(f"{INSTALL_OGBOOT_TARGET} directory already exists.") - else: - try: - # Crear los directorios necesarios - os.makedirs(INSTALL_OGBOOT_TARGET, mode=0o750, exist_ok=True) - os.makedirs(os.path.join(INSTALL_OGBOOT_TARGET, "client"), mode=0o750, exist_ok=True) - os.makedirs("/opt/ogboot/tftpboot/", mode=0o750, exist_ok=True) - os.makedirs("/opt/ogboot/tftpboot/ipxe_scripts", mode=0o750, exist_ok=True) - os.makedirs("/opt/ogboot/tftpboot/ipxe_scripts/templates", mode=0o750, exist_ok=True) - - # Cambiar el propietario de los directorios - subprocess.run(["sudo", "chown", "-R", "ogboot:ogboot", INSTALL_OGBOOT_TARGET]) - subprocess.run(["sudo", "chown", "-R", "ogboot:ogboot", "/opt/ogboot/tftpboot/"]) - - logger.info(f"{INSTALL_OGBOOT_TARGET} directory created successfully.") - except OSError: - logger.error("Error while creating directory paths!") - exit(1) + global INSTALL_OGBOOT_TARGET + if os.path.exists(INSTALL_OGBOOT_TARGET): + if not os.path.isdir(INSTALL_OGBOOT_TARGET): + raise NotADirectoryError(f"{INSTALL_OGBOOT_TARGET} exists and is not a directory.") + else: + logger.warning(f"{INSTALL_OGBOOT_TARGET} directory already exists.") + else: + try: + # Crear los directorios necesarios + os.makedirs(INSTALL_OGBOOT_TARGET, mode=0o750, exist_ok=True) + os.makedirs(os.path.join(INSTALL_OGBOOT_TARGET, "client"), mode=0o750, exist_ok=True) + os.makedirs("/opt/ogboot/tftpboot/", mode=0o750, exist_ok=True) + os.makedirs("/opt/ogboot/tftpboot/ipxe_scripts", mode=0o750, exist_ok=True) + os.makedirs("/opt/ogboot/tftpboot/ipxe_scripts/templates", mode=0o750, exist_ok=True) + + # Cambiar el propietario de los directorios + subprocess.run(["sudo", "chown", "-R", "ogboot:ogboot", INSTALL_OGBOOT_TARGET]) + subprocess.run(["sudo", "chown", "-R", "ogboot:ogboot", "/opt/ogboot/tftpboot/"]) + + logger.info(f"{INSTALL_OGBOOT_TARGET} directory created successfully.") + except OSError: + logger.error("Error while creating directory paths!") + exit(1) def og_boot_symfony_install(path_opengnsys_base): - logger.info("Creating Symfony application skeleton...") - - try: - # Copiar los archivos .env y composer.json primero - env_src = os.path.join(WORKDIR, "ogboot/.env") - composer_src = os.path.join(WORKDIR, "ogboot/composer.json") - env_dest = os.path.join(path_opengnsys_base, ".env") - composer_dest = os.path.join(path_opengnsys_base, "composer.json") + global WORKDIR + logger.info("Creating Symfony application skeleton...") + + try: + # Copiar los archivos .env y composer.json primero + env_src = os.path.join(WORKDIR, "ogboot/.env") + composer_src = os.path.join(WORKDIR, "ogboot/composer.json") + env_dest = os.path.join(path_opengnsys_base, ".env") + composer_dest = os.path.join(path_opengnsys_base, "composer.json") - shutil.copy(env_src, env_dest) - shutil.copy(composer_src, composer_dest) - logger.info(f"Copied {env_src} to {env_dest}") - logger.info(f"Copied {composer_src} to {composer_dest}") + shutil.copy(env_src, env_dest) + shutil.copy(composer_src, composer_dest) + logger.info(f"Copied environment source {env_src} to {env_dest}") + logger.info(f"Copied composer source{composer_src} to {composer_dest}") - # Cambiar permisos y propietario de los archivos copiados - os.chmod(env_dest, 0o644) - os.chmod(composer_dest, 0o644) - shutil.chown(env_dest, user='ogboot', group='ogboot') - shutil.chown(composer_dest, user='ogboot', group='ogboot') - logger.info(f"Set permissions and owner for {env_dest} and {composer_dest}") + # Cambiar permisos y propietario de los archivos copiados + os.chmod(env_dest, 0o644) + os.chmod(composer_dest, 0o644) + shutil.chown(env_dest, user='ogboot', group='ogboot') + shutil.chown(composer_dest, user='ogboot', group='ogboot') + logger.info(f"Set permissions and owner for {env_dest} and {composer_dest}") - logger.info(f".env and composer.json files copied to {path_opengnsys_base}") - except Exception as e: - logger.error(f"An error occurred while copying files: {e}") - raise + logger.info(f".env and composer.json files copied to {path_opengnsys_base}") + except Exception as e: + logger.error(f"An error occurred while copying files: {e}") + raise def og_boot_copy_files(path_opengnsys_base): + global INSTALL_TARGET, WORKDIR bin_source = os.path.join(WORKDIR, "ogboot/bin") bin_dest = os.path.join(path_opengnsys_base, "bin") src_source = os.path.join(WORKDIR, "ogboot/src") @@ -465,6 +473,7 @@ def backupFile(file): logger.info(f"Backup of {file} successful") def isc_keaDhcpConfigure(): + global DEVICE, NETMASK, NETIP, ROUTERIP, DNSIP, SERVERIP print(f"{isc_keaDhcpConfigure.__name__}(): Configuración de muestra para el servicio DHCP de Kea.") errcode = 0 i = 0 @@ -503,6 +512,7 @@ def isc_keaDhcpConfigure(): return 0 def testPxe(): + global TFTPCFGDIR logger.info(f"Checking TFTP service... please wait.") subprocess.run(["echo", "test"], stdout=open(f"{TFTPCFGDIR}/testpxe", "w")) try: @@ -521,6 +531,7 @@ def run_command(command): print(result.stdout) def tftpConfigure(): + global TFTPSERV, INETDSERV, TFTPCFGDIR # Update the package list #print("Updating package list...") run_command("sudo apt update") @@ -613,6 +624,7 @@ TFTP_OPTIONS="--secure" run_command(f"sudo ln -s {TFTPCFGDIR} {symlink_target}") def servicesCompilation(): + global WORKDIR hayErrores = 0 process = subprocess.run(["make"], cwd=f"{WORKDIR}/ogboot/sources/clients/ogAdmClient") subprocess.run(["mv", f"{WORKDIR}/ogboot/sources/clients/ogAdmClient/ogAdmClient", f"{WORKDIR}/ogboot/client/shared/bin"]) @@ -622,6 +634,7 @@ def servicesCompilation(): return hayErrores def copyInterfaceAdm(): + global WORKDIR, INSTALL_TARGET hayErrores = 0 cp_process = subprocess.run(["cp", "-ar", f"{WORKDIR}/ogboot/sources/interface", f"{INSTALL_TARGET}/client/interfaceAdm"]) if cp_process.returncode != 0: @@ -630,6 +643,7 @@ def copyInterfaceAdm(): return hayErrores def copyClientFiles(): + global WORKDIR, INSTALL_TARGET errstatus = 0 logger.info(f"Copying OpenGnsys Client files.") source_files = glob.glob(f"{WORKDIR}/ogboot/client/shared/*") @@ -678,13 +692,13 @@ def get_first_network_interface_with_traffic(): interface = parts[0].strip() if interface != "lo": traffic_data = parts[1].strip().split() - # Recibidos y enviados received_bytes = int(traffic_data[0]) transmitted_bytes = int(traffic_data[8]) if received_bytes > 0 or transmitted_bytes > 0: return interface def getNetworkSettings(): + global DEVICE, SERVERIP, NETMASK, NETBROAD, NETIP, ROUTERIP, DEFAULTDEV DHCPNET = "127.0.0.1" #print("getNetworkSettings(): Detecting network parameters.") output = subprocess.check_output(["ip", "-o", "link", "show", "up"]).decode("utf-8") @@ -716,7 +730,7 @@ def getNetworkSettings(): return (0) def openGnsysConfigure(): - global DEFAULTDEV + global DEFAULTDEV, INSTALL_TARGET, SERVER_OPENGNSYS, WORKDIR i = 0 dev = "" CONSOLEURL = "" @@ -734,6 +748,7 @@ def openGnsysConfigure(): logger.info(f"OpenGnsys config files created.") def mount_NFS(): + global IPXE_DIR, INSTALL_OPENGNSYS_TARGET if subprocess.call(["sudo", "mount", "-t", "nfs", "ognartefactos.evlt.uma.es:/", "/mnt"]) == 0: logger.info("Properly mounted NFS system.") else: @@ -774,7 +789,7 @@ def mount_NFS(): subprocess.call(["sudo", "cp", "bin-x86_64-efi/ipxe.efi", f"{INSTALL_OPENGNSYS_TARGET}/tftpboot"]) def generate_ipxe_script(): - global DEFAULTDEV + global DEFAULTDEV, INSTALL_OGBOOT_TARGET, WORKDIR ip_address_server = subprocess.check_output(["ifconfig", DEFAULTDEV]).decode().split("\n")[1].split()[1] template = os.path.join(WORKDIR, "ogboot/etc/dhcp_boot.ipxe.tmpl") ipxe_output = f"{INSTALL_OGBOOT_TARGET}/tftpboot/ipxe_scripts/dhcp_boot.ipxe" @@ -801,6 +816,7 @@ def generate_ipxe_script(): logger.info("ipxe files created correctly.") def smbConfigure(): + global SAMBACFGDIR, SAMBASERV, OPENGNSYS_CLIENT_PASSWD, OPENGNSYS_CLIENT_USER, PYTHON_VERSION #logger.info(f"{smbConfigure.__name__}(): Configuring Samba service.") backupFile(f"{SAMBACFGDIR}/smb.conf") # Copiar plantilla de recursos para OpenGnsys @@ -842,7 +858,7 @@ def smbConfigure(): return 0 def setup_nginx(): - global DEFAULTDEV + global DEFAULTDEV, WORKDIR try: # Obtener la IP del servidor ip_address_server = subprocess.check_output(["ifconfig", DEFAULTDEV]).decode().split("\n")[1].split()[1] @@ -938,45 +954,46 @@ def modify_php_fpm_config(): exit(1) def install_oglive_daemon(): - try: - DAEMON_SCRIPT_SRC = os.path.join(WORKDIR, "ogboot/bin/oglive_daemon.py") - DAEMON_SCRIPT_DEST = os.path.join(INSTALL_TARGET, "bin", "oglive_daemon.py") - SERVICE_FILE_SRC = os.path.join(WORKDIR, "ogboot/etc/oglive_daemon.service") - SERVICE_FILE_DEST = "/etc/systemd/system/oglive_daemon.service" + global WORKDIR, INSTALL_TARGET + try: + DAEMON_SCRIPT_SRC = os.path.join(WORKDIR, "ogboot/bin/oglive_daemon.py") + DAEMON_SCRIPT_DEST = os.path.join(INSTALL_TARGET, "bin", "oglive_daemon.py") + SERVICE_FILE_SRC = os.path.join(WORKDIR, "ogboot/etc/oglive_daemon.service") + SERVICE_FILE_DEST = "/etc/systemd/system/oglive_daemon.service" - # Crear directorio de destino si no existe - os.makedirs(os.path.dirname(DAEMON_SCRIPT_DEST), exist_ok=True) + # Crear directorio de destino si no existe + os.makedirs(os.path.dirname(DAEMON_SCRIPT_DEST), exist_ok=True) - # Copiar el script del demonio al directorio de destino - shutil.copyfile(DAEMON_SCRIPT_SRC, DAEMON_SCRIPT_DEST) - logger.info(f"Copied {DAEMON_SCRIPT_SRC} to {DAEMON_SCRIPT_DEST}") + # Copiar el script del demonio al directorio de destino + shutil.copyfile(DAEMON_SCRIPT_SRC, DAEMON_SCRIPT_DEST) + logger.info(f"Copied {DAEMON_SCRIPT_SRC} to {DAEMON_SCRIPT_DEST}") - # Hacer el script ejecutable - os.chmod(DAEMON_SCRIPT_DEST, 0o755) - logger.info(f"Set executable permissions for {DAEMON_SCRIPT_DEST}") + # Hacer el script ejecutable + os.chmod(DAEMON_SCRIPT_DEST, 0o755) + logger.info(f"Set executable permissions for {DAEMON_SCRIPT_DEST}") - # Copiar el archivo de servicio de systemd - shutil.copyfile(SERVICE_FILE_SRC, SERVICE_FILE_DEST) - logger.info(f"Copied {SERVICE_FILE_SRC} to {SERVICE_FILE_DEST}") + # Copiar el archivo de servicio de systemd + shutil.copyfile(SERVICE_FILE_SRC, SERVICE_FILE_DEST) + logger.info(f"Copied {SERVICE_FILE_SRC} to {SERVICE_FILE_DEST}") - # Recargar systemd para reconocer el nuevo servicio - subprocess.run(["systemctl", "daemon-reload"], check=True) - logger.info("Reloaded systemd daemon") + # Recargar systemd para reconocer el nuevo servicio + subprocess.run(["systemctl", "daemon-reload"], check=True) + logger.info("Reloaded systemd daemon") - # Habilitar el servicio para que arranque al inicio - subprocess.run(["systemctl", "enable", "oglive_daemon.service"], check=True) - logger.info("Enabled oglive_daemon service") + # Habilitar el servicio para que arranque al inicio + subprocess.run(["systemctl", "enable", "oglive_daemon.service"], check=True) + logger.info("Enabled oglive_daemon service") - # Arrancar el servicio - subprocess.run(["systemctl", "start", "oglive_daemon.service"], check=True) - logger.info("Started oglive_daemon service") + # Arrancar el servicio + subprocess.run(["systemctl", "start", "oglive_daemon.service"], check=True) + logger.info("Started oglive_daemon service") - except (shutil.Error, OSError) as e: - logger.error(f"File operation error: {e}") - except subprocess.CalledProcessError as e: - logger.error(f"Subprocess error: {e}") - except Exception as e: - logger.error(f"An unexpected error occurred: {e}") + except (shutil.Error, OSError) as e: + logger.error(f"File operation error: {e}") + except subprocess.CalledProcessError as e: + logger.error(f"Subprocess error: {e}") + except Exception as e: + logger.error(f"An unexpected error occurred: {e}") ############################################################################### ###:::::::::::::::::::::::::::::::: MAIN :::::::::::::::::::::::::::::::::::###