Refs #202 global setting is added

ogboot_installer
Antonio Guerrero 2024-07-04 20:00:13 +00:00
parent 6fc10e95df
commit 957a343fea
1 changed files with 98 additions and 81 deletions

View File

@ -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 :::::::::::::::::::::::::::::::::::###