ogclone-engine/ogclient/scripts/installOfflineMode.py

83 lines
3.0 KiB
Python

import os
import subprocess
import sys
import SystemLib
import NetLib
#!/usr/bin/env python3
"""
installOfflineMode
Prepara el equipo cliente para el modo offline.
@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
@exception OG_ERR_NOTCACHE No existe cache.
@author Irina Gomez. ETSII. Universidad de Sevilla
@date 2013/12/5
"""
PROG = os.path.basename(__file__)
if len(sys.argv) > 1 and sys.argv[1] == "help":
SystemLib.ogHelp()
SystemLib.ogEcho("log", "session $MSG_HELP_installOfflineMode")
# Cargamos las variables de entorno.
OGENGINECONFIGURATE = os.getenv('OGENGINECONFIGURATE')
if not OGENGINECONFIGURATE:
exec(open('/opt/opengnsys/etc/engine.cfg').read())
DIRTFTP = "/opt/oglive/tftpboot"
DIROGCLIENT = os.path.join(DIRTFTP, "ogclient")
# Comprobamos que el DIROGCLIENT esta montado desde repo
repo_ip = NetLib.ogGetRepoIp()
result = subprocess.run(['df'], capture_output=True, text=True)
if f"{repo_ip} {DIRTFTP}" not in result.stdout:
SystemLib.ogRaiseError("OG_ERR_NOTFOUND", "REPO OGclient")
# Copiamos el kernel y el initrd.
SystemLib.ogEcho("log", "session [10] updateBootCache")
if not update_boot_cache():
SystemLib.ogRaiseError("OG_ERR_NOTCACHE", "")
# Creamos los dir necesarios.
OGCAC = "/path/to/ogcac" # Placeholder for OGCAC path
SystemLib.ogEcho("log", f"session [40] mkdir -p {OGCAC}/{{ogclient, menus, log}}.")
os.makedirs(os.path.join(OGCAC, "menus/images/iconos"), exist_ok=True)
os.makedirs(os.path.join(OGCAC, "ogclient"), exist_ok=True)
os.makedirs(os.path.join(OGCAC, "log"), exist_ok=True)
os.makedirs(os.path.join(OGCAC, "opt/opengnsys/images"), exist_ok=True)
# Comparamos el cliente en el server y en cache
SystemLib.ogEcho("log", f"session [60] cp {DIROGCLIENT}/ogclient.sqfs {OGCAC}/ogclient/")
try:
with open(os.path.join(DIROGCLIENT, "ogclient.sqfs.sum"), 'r') as f:
SERVEROGCLIENT = f.read().strip()
except FileNotFoundError:
SERVEROGCLIENT = None
try:
with open(os.path.join(OGCAC, "ogclient/ogclient.sqfs.sum"), 'r') as f:
CACHEOGCLIENT = f.read().strip()
except FileNotFoundError:
CACHEOGCLIENT = None
if CACHEOGCLIENT != SERVEROGCLIENT:
subprocess.run(['cp', os.path.join(DIROGCLIENT, "ogclient.sqfs"), os.path.join(OGCAC, "ogclient/")])
subprocess.run(['cp', os.path.join(DIROGCLIENT, "ogclient.sqfs.sum"), os.path.join(OGCAC, "ogclient/")])
# Si se ha generado el menu de inicio lo copiamos a cache.
IPCLIENT = NetLib.ogGetIpAddress()
MENU = os.path.join("/path/to/oglog", f"{IPCLIENT}.info.html") # Placeholder for OGLOG path
ICONO = "images/iconos/logoopengnsys.png"
if not os.path.isfile(MENU):
generate_menu_default()
SystemLib.ogEcho("log", f"session [90] cp {MENU} {OGCAC}/menus/{IPCLIENT}.html")
subprocess.run(['cp', MENU, os.path.join(OGCAC, f"menus/{IPCLIENT}.html")])
subprocess.run(['sed', '-i', 's/"../images"/"images"/g', os.path.join(OGCAC, f"menus/{IPCLIENT}.html")])
subprocess.run(['wget', '--no-check-certificate', f"https://{NetLib.ogGetRepoIp()}/opengnsys/{ICONO}", '-O', os.path.join(OGCAC, f"menus/{ICONO}")])