ogclone-engine/client/shared/scripts/bootOSCustomTemplate.py

101 lines
4.0 KiB
Python

import sys
import os
#!/usr/bin/env python3
"""
bootOsCustom
@brief Plantilla para script de configuración personalizada de sistema operativo restaurado.
@param $1 nº de disco
@param $2 nº de partición
@warning Renombrar este fichero como "bootOsCustom" para personalizar el script estándar "bootOs".
@note La partición a inicializar debe estar montada
@version 1.1.1 Soporta varios discos
"""
# CONFIGURAR: Partición de datos de Windows que no queremos ocultar (valor por defecto '0' no oculta nada)
DISKDATA = 0
PARTDATA = 0
PROG = os.path.basename(__file__)
# Control de errores
if len(sys.argv) < 3:
ogRaiseError(OG_ERR_FORMAT, f"Formato: {PROG} ndisco nparticion")
sys.exit(1)
# Parámetros obligatorios.
DISK = sys.argv[1] # Nº de disco.
PART = sys.argv[2] # Nº de partición.
# Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado).
DEVICE = ogDiskToDev(DISK, PART)
if not DEVICE:
sys.exit(1)
# Paso 1: Adaptar el código de ejemplo para arranque personalizado.
# Nota: el script "bootOs" llama al script "bootOsCustom" después de realizar la operaciones de inicio estándar y antes de desmontar las particiones e iniciar el sistema operativo.
MNTDIR = ogMount(DISK, PART)
if not MNTDIR:
sys.exit(1)
NAME = ogGetHostname()
NAME = NAME if NAME else "pc"
OSTYPE = ogGetOsType(DISK, PART)
if OSTYPE == "Windows":
# Mostrar las particiones NTFS de sistema (dos opciones)
# Opción 1: SIN ocultar las demás.
# ogEcho log session "[40] Mostrar y activar particion de Windows {PART}."
# if ogGetPartitionType(DISK, PART) in ["HNTFS", "WIN-RESERV"]:
# ogUnhidePartition(DISK, PART)
# Recorremos los distintos discos
# for DEVICE in ogDiskToDev():
# d = ogDevToDisk(DEVICE)
# # Mostrar las particiones NTFS de sistema (dos opciones)
# # Opción 2: Ocultamos las demás.
# ogEcho log session "[40] Activar particion de Windows {PART} y ocultar las demás."
# for i in range(1, ogGetPartitionsNumber(d) + 1):
# if (d == DISK and i == PART) or (d == DISKDATA and i == PARTDATA):
# if ogGetPartitionType(d, i) in ["HNTFS", "WIN-RESERV"]:
# ogUnhidePartition(d, i)
# else:
# if ogGetPartitionType(d, i) in ["NTFS", "WINDOWS"]:
# ogHidePartition(d, i)
# # Borrar marcas de arrranque de todos los Windows instalados en el disco.
# ogEcho log session "[30] Borrar marcas de arrranque de todos los Windows instalados en el disco."
# for i in range(1, ogGetPartitionsNumber(d) + 1):
# if ogGetOsType(d, i) == "Windows":
# ogMount(d, i)
# os.system("rm -f /mnt/*/ogboot.*")
elif OSTYPE == "Linux":
# Modificar el nombre del equipo
# ogEcho log session "[30] Asignar nombre Linux \"{NAME}\"."
# ETC = ogGetPath(DISK, PART, "/etc")
# if os.path.isdir(ETC):
# with open(os.path.join(ETC, "hostname"), "w") as f:
# f.write(NAME)
# Sustituir UUID o LABEL por su dispositivo en definición de sistema de archivo raíz.
# if os.path.isfile(os.path.join(ETC, "fstab")):
# ogEcho log session "[40] Actualizar fstab con particion raíz \"{PART}\"."
# with open(os.path.join(ETC, "fstab"), "r") as f:
# lines = f.readlines()
# with open("/tmp/fstab", "w") as f:
# for line in lines:
# if line.split()[1] == "/" and not line.startswith("#"):
# line = line.replace(line.split()[0], PART)
# f.write(line)
# os.replace("/tmp/fstab", os.path.join(ETC, "fstab"))
# Cambiar claves usuarios, copiando fichero /etc/passwd
# En el servidor el nuevo fichero debe situarse en el directorio del grupo:
# /opt/opengnsys/images/groups/nombre_aula
# if os.path.isfile(os.path.join(ogGetGroupDir(), "passwd")):
# ogEcho log session "[65] Cambiar claves de usuarios."
# os.system(f"cp {os.path.join(ogGetGroupDir(), 'passwd')} {os.path.join(MNTDIR, 'etc')}")