import sys import subprocess #!/usr/bin/env python3 """ configureOsCustom @brief Plantilla para script de configuración personalizada de sistema operativo restaurado. @param $1 nº de disco @param $2 nº de partición @param $3 Repositorio: CACHE, REPO o dirección IP (opcional) @param $4 Nombre canónico de la imagen sin extensión (opcional) @warning Renombrar este fichero como "configureOsCustom" para sustituir al script estándar "configureOs". @note Los parámetros disco y partición son obligatorios y opcionalmente puede recibir también el repositorio y la imagen usada para en el despliegue. """ def main(): if len(sys.argv) not in [3, 5]: og_raise_error("OG_ERR_FORMAT", "Usage: configureOsCustom int_ndisc int_npart [str_repo str_imgname]") disk = sys.argv[1] part = sys.argv[2] repo = sys.argv[3].upper() if len(sys.argv) > 3 else None imgname = sys.argv[4] if len(sys.argv) > 4 else None # Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado). # Paso 1: Adaptar el código de ejemplo para postconfiguración personalizada. configure_os(disk, part) ostype = og_get_os_type(disk, part) if ostype == "Windows": # Postconfiguración de Windows. pass # Descomentar la siguiente línea para cambiar usuario de inicio. # subprocess.run(["ogSetWinlogonUser", disk, part, " "], check=True) # OPCIONAL: desactivar el chkdisk de windows tras la restauracion. Requiere configuracion previa en el engine.cfg # subprocess.run(["ogLoadHiveWindows", disk, part], check=True) # subprocess.run(["ogSetWindowsChkdisk", "OGWINCHKDISK"], check=True) # subprocess.run(["ogUpdateHiveWindows"], check=True) elif ostype == "Linux": # Postconfiguración de GNU/Linux. pass # OPCIONAL Para UEFI: cambia el UUID de la partición (para tener dos linux en un equipo) # subprocess.run(["ogUuidChange", disk, part], check=True) # OPCIONAL Limpiar dispositivos reconocidos previamente # subprocess.run(["ogCleanLinuxDevices", disk, part], check=True) # Instala (no configura) el codigo de arranque del Grub en la partición (no lo configura, se mantiene el original de la imagen) # subprocess.run(["ogGrubInstallPartition", disk, part], check=True) # OPCIONAL: instala y configura el codigo de arranque del Grub en el MBR (no lo configura, se mantiene el original de la imagen) # subprocess.run(["ogGrubInstallMbr", disk, part], check=True) # OPCIONAL: Instala y configura el Grub en el MBR y lo autoconfigura, entradas para los sistemas operativos, además al linux restaurado le añade los parámetros indicados. # subprocess.run(["ogGrubInstallMbr", disk, part, "TRUE", "irqpoll pci=noacpi noresume quiet splash"], check=True) elif ostype == "MacOS": # Postconfiguración de Mac OS X. with open(f"/mnt/{disk}/{part}/var/root/postconfd.sh", "a") as f: f.write(""" ### NOTA: descomentar las opciones deseadas. # Activar Journaling en HFS+ (no usar si el cliente continua en OpenGnsys). #diskutil enableJournal disk$[$1-1]s$2 # Pedir usuario y clave en pantalla de conexión. #defaults write /Library/Preferences/com.apple.loginwindow SHOWFULLNAME -bool yes # No mostrar botón de cambio rápido de usuario. #defaults write /Library/Preferences/.GlobalPreferences MultipleSessionEnabled -bool NO # Bloquear escritorio, fondo, dock, etc del usuario "usuario". #chflags uchange /Users/usuario/Library/Preferences/com.apple.desktop.plist #chflags uchange /Users/usuario/Library/Preferences/com.apple.dock.plist #chflags uchange /Users/usuario/Desktop # Añadir usuario "usuario" a la lista de desarrolladores de Xcode. #DevToolsSecurity --enable #dscl . -append /Groups/_developer GroupMembership usuario # Bajar volumen (valor entre 0 y 7). #osascript -e 'set volume 1' """) # Paso 2: Incluir código genérico de postconfiguración. if __name__ == "__main__": main()