106 lines
4.3 KiB
Python
106 lines
4.3 KiB
Python
import sys
|
|
import os
|
|
import SystemLib
|
|
import DiskLib
|
|
import FileSystemLib
|
|
import NetLib
|
|
import FileLib
|
|
|
|
#!/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:
|
|
SystemLib.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 = DiskLib.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 = FileSystemLib.ogMount(DISK, PART)
|
|
if not MNTDIR:
|
|
sys.exit(1)
|
|
|
|
NAME = NetLib.ogGetHostname()
|
|
NAME = NAME if NAME else "pc"
|
|
OSTYPE = Inventory.ogGetOsType(DISK, PART)
|
|
|
|
if OSTYPE == "Windows":
|
|
# Mostrar las particiones NTFS de sistema (dos opciones)
|
|
# Opción 1: SIN ocultar las demás.
|
|
# SystemLib.ogEcho log session "[40] Mostrar y activar particion de Windows {PART}."
|
|
# if DiskLib.ogGetPartitionType(DISK, PART) in ["HNTFS", "WIN-RESERV"]:
|
|
# DiskLib.ogUnhidePartition(DISK, PART)
|
|
|
|
# Recorremos los distintos discos
|
|
# for DEVICE in DiskLib.ogDiskToDev():
|
|
# d = DiskLib.ogDevToDisk(DEVICE)
|
|
|
|
# # Mostrar las particiones NTFS de sistema (dos opciones)
|
|
# # Opción 2: Ocultamos las demás.
|
|
# SystemLib.ogEcho log session "[40] Activar particion de Windows {PART} y ocultar las demás."
|
|
# for i in range(1, DiskLib.ogGetPartitionsNumber(d) + 1):
|
|
# if (d == DISK and i == PART) or (d == DISKDATA and i == PARTDATA):
|
|
# if DiskLib.ogGetPartitionType(d, i) in ["HNTFS", "WIN-RESERV"]:
|
|
# DiskLib.ogUnhidePartition(d, i)
|
|
# else:
|
|
# if DiskLib.ogGetPartitionType(d, i) in ["NTFS", "WINDOWS"]:
|
|
# DiskLib.ogHidePartition(d, i)
|
|
|
|
# # Borrar marcas de arrranque de todos los Windows instalados en el disco.
|
|
# SystemLib.ogEcho log session "[30] Borrar marcas de arrranque de todos los Windows instalados en el disco."
|
|
# for i in range(1, DiskLib.ogGetPartitionsNumber(d) + 1):
|
|
# if Inventory.ogGetOsType(d, i) == "Windows":
|
|
# FileSystemLib.ogMount(d, i)
|
|
# os.system("rm -f /mnt/*/ogboot.*")
|
|
|
|
elif OSTYPE == "Linux":
|
|
# Modificar el nombre del equipo
|
|
# SystemLib.ogEcho log session "[30] Asignar nombre Linux \"{NAME}\"."
|
|
# ETC = FileLib.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")):
|
|
# SystemLib.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")):
|
|
# SystemLib.ogEcho log session "[65] Cambiar claves de usuarios."
|
|
# os.system(f"cp {os.path.join(ogGetGroupDir(), 'passwd')} {os.path.join(MNTDIR, 'etc')}")
|