83 lines
3.0 KiB
Python
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}")])
|