From a9a2d196537aec069d37bd8134825477e34cc91f Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Thu, 12 Jun 2025 15:46:06 +0200 Subject: [PATCH] refs #2206 give some care to the Custom scripts --- CHANGELOG.md | 6 ++ ogclient/scripts/bootOs.py | 2 +- ogclient/scripts/bootOsCustom.template | 92 ------------------- ogclient/scripts/bootOsCustomTemplate.py | 43 +++++++++ ogclient/scripts/configureOSCustomTemplate.py | 78 ---------------- ogclient/scripts/configureOs.py | 5 +- ogclient/scripts/configureOsCustom.template | 81 ---------------- ogclient/scripts/configureOsCustomTemplate.py | 38 ++++++++ ogclient/scripts/createImage.py | 2 +- ogclient/scripts/createImageCustom.template | 35 ------- ogclient/scripts/createImageCustomTemplate.py | 44 +++++---- ogclient/scripts/deployImage.py | 8 +- ogclient/scripts/restoreImageCustom.template | 37 -------- .../scripts/restoreImageCustomTemplate.py | 53 +++++------ 14 files changed, 139 insertions(+), 385 deletions(-) delete mode 100755 ogclient/scripts/bootOsCustom.template create mode 100755 ogclient/scripts/bootOsCustomTemplate.py delete mode 100755 ogclient/scripts/configureOSCustomTemplate.py delete mode 100644 ogclient/scripts/configureOsCustom.template create mode 100755 ogclient/scripts/configureOsCustomTemplate.py delete mode 100644 ogclient/scripts/createImageCustom.template delete mode 100644 ogclient/scripts/restoreImageCustom.template diff --git a/CHANGELOG.md b/CHANGELOG.md index 6657e58..27713b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.16.0] - 2025-06-12 + +### Changed + +- Gave some care to the "Custom" scripts + ## [0.15.3] - 2025-06-12 ### Fixed diff --git a/ogclient/scripts/bootOs.py b/ogclient/scripts/bootOs.py index 2683c19..2447623 100755 --- a/ogclient/scripts/bootOs.py +++ b/ogclient/scripts/bootOs.py @@ -47,7 +47,7 @@ if not mount_out or not re.search (rf'{mntdir}.*\(rw', mount_out): if shutil.which ('bootOsCustom.py'): print ('[10] Configuración personalizada del inicio.') - subprocess.run ([f'{ogGlobals.OGSCRIPTS}/bootOsCustom.py']) + subprocess.run ([f'{ogGlobals.OGSCRIPTS}/bootOsCustom.py', disk, par]) print ('[70] Desmontar todos los sistemas de archivos.') subprocess.run (['sync']) diff --git a/ogclient/scripts/bootOsCustom.template b/ogclient/scripts/bootOsCustom.template deleted file mode 100755 index efd4c1f..0000000 --- a/ogclient/scripts/bootOsCustom.template +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash -#/** -# 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 -#@date 2019/08/26 -#**/ -# CONFIGURAR: Partición de datos de Windows que no queremos ocultar (valor por defecto '0' no oculta nada) -DISKDATA=0 -PARTDATA=0 - -PROG="$(basename $0)" -# Control de errores -if [ $# -lt 2 ]; then - ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion" - exit $? -fi - -# Parámetros obligatorios. -DISK="$1" # Nº de disco. -PART="$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") || exit $? - -# 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) || exit $? -NAME="$(ogGetHostname)" -NAME=${NAME:-"pc"} -OSTYPE=$(ogGetOsType $DISK $PART) - -case "$OSTYPE" in - 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." - #[ $(ogGetPartitionType $DISK $PART) == "HNTFS" -o $(ogGetPartitionType $DISK $PART) == "WIN-RESERV" ] && ogUnhidePartition $DISK $PART - - ## Recorremos los distintos discos - #for DEVICE in $(ogDiskToDev); do - # 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=1; i<=$(ogGetPartitionsNumber $d); i++ )); do - # if [ $d == $DISK -a $i == $PART ] || [ $d == $DISKDATA -a $i == $PARTDATA ]; then - # [ $(ogGetPartitionType $d $i) == "HNTFS" -o $(ogGetPartitionType $d $i) == "WIN-RESERV" ] && ogUnhidePartition $d $i - # else - # [ "$(ogGetPartitionType $d $i)" == NTFS -o "$(ogGetPartitionType $d $i)" == "WINDOWS" ] && ogHidePartition $d $i - # fi - # done - - # ## 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=1; i<=$(ogGetPartitionsNumber $d); i++ )); do - # [ "$(ogGetOsType $d $i)" == "Windows" ] && ogMount $d $i &>/dev/null - # done - # rm -f /mnt/*/ogboot.* - - #done - ;; - Linux) - ## Modificar el nombre del equipo - #ogEcho log session "[30] Asignar nombre Linux \"$NAME\"." - #ETC=$(ogGetPath $DISK $PART /etc) - #[ -d "$ETC" ] && echo "$NAME" >$ETC/hostname 2>/dev/null - - ## Sustituir UUID o LABEL por su dispositivo en definición de sistema de archivo raíz. - #if [ -f "$ETC/fstab" ]; then - # ogEcho log session "[40] Actualizar fstab con particion raíz \"$PART\"." - # awk -v P="$PART " '{ if ($2=="/" && $1!~/^#/) {sub(/^.*$/, P, $1)} - # print }' $ETC/fstab >/tmp/fstab - # mv /tmp/fstab $ETC/fstab - #fi - - ## 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 [ -r $(ogGetGroupDir)/passwd ]; then - # ogEcho log session "[65] Cambiar claves de usuarios." - # cp $(ogGetGroupDir)/passwd $MNTDIR/etc - #fi - ;; -esac diff --git a/ogclient/scripts/bootOsCustomTemplate.py b/ogclient/scripts/bootOsCustomTemplate.py new file mode 100755 index 0000000..6629583 --- /dev/null +++ b/ogclient/scripts/bootOsCustomTemplate.py @@ -0,0 +1,43 @@ +#!/usr/bin/python3 + +#/** +# bootOsCustomTemplate.py +#@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.py" para personalizar el script estándar "bootOs.py". +#@note La partición a inicializar debe estar montada +#**/ + +import sys + +import ogGlobals +from SystemLib import ogRaiseError, ogEcho +from DiskLib import ogDiskToDev +from FileSystemLib import ogMount +from NetLib import ogGetHostname +from InventoryLib import ogGetOsType + +prog = sys.argv[0] + +# Control de errores +if len (sys.argv) < 3: + ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'Formato: {prog} ndisco nfilesys') + sys.exit (1) +disk, par = sys.argv[1:] + +device = ogDiskToDev (disk, par) +if not device: sys.exit (1) + +# Nota: el script "bootOs.py" llama al script "bootOsCustom.py" después de realizar la operaciones de inicio estándar y antes de desmontar las particiones e iniciar el sistema operativo. + +mntdir = ogMount (disk, par) +if not mntdir: sys.exit (1) +name = ogGetHostname() +if not name: name = 'pc' +ostype = ogGetOsType (disk, par) + +if 'Windows' == ostype: + pass +elif 'Linux' == ostype: + pass diff --git a/ogclient/scripts/configureOSCustomTemplate.py b/ogclient/scripts/configureOSCustomTemplate.py deleted file mode 100755 index 62c2cde..0000000 --- a/ogclient/scripts/configureOSCustomTemplate.py +++ /dev/null @@ -1,78 +0,0 @@ -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() \ No newline at end of file diff --git a/ogclient/scripts/configureOs.py b/ogclient/scripts/configureOs.py index 1965010..d89ae87 100755 --- a/ogclient/scripts/configureOs.py +++ b/ogclient/scripts/configureOs.py @@ -31,9 +31,8 @@ import FileLib ## [ -f $DEVICECFG ] && source $DEVICECFG ## pero luego no utiliza ninguna de las variables definidas en el archivo... -disk = sys.argv[1] -par = sys.argv[2] -imgname = sys.argv[3] +disk, par, *other = sys.argv[1:] +imgname = other[0] if len (other) > 0 else '' # Si el sistema de archivos no esta extendido, ampliarlo al tamaño de su partición. partsize = DiskLib.ogGetPartitionSize (disk, par) diff --git a/ogclient/scripts/configureOsCustom.template b/ogclient/scripts/configureOsCustom.template deleted file mode 100644 index f1c8e2a..0000000 --- a/ogclient/scripts/configureOsCustom.template +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash -#/** -# configureOsCustom -#@brief Plantilla para scirpt de configuracion 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. -#**/ - - -# Control de parámetros. -[ $# -eq 2 -o $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: configureOsCustom int_ndisc int_npart [str_repo str_imgname]" || exit $? - -# Parámetros obligatorios. -DISK="$1" # Nº de disco. -PART="$2" # Nº de partición. -# Parámetros opcionales. -REPO="${3^^}" # Repositorio (en mayúsculas). -IMGNAME="$4" # Nombre canónico de imagen (sin extensión). - - -# 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. -# Nota: incluye llamada al script "configureOs" para realizar previamente una configuración estándar. - -# Configurarción típica. -configureOs "$1" "$2" -# Postconfiguración personalizada para cada tipo de sistema operativo. -OSTYPE="$(ogGetOsType $1 $2)" -case "$OSTYPE" in - Windows) # Postconfiguración de Windows. - # Descomentar la siguiente línea para cambiar usuario de inicio. - #ogSetWinlogonUser $1 $2 " " - # OPCIONAL: desactivar el chkdisk de windows tras la restauracion. Requiere configuracion previa en el engine.cfg - #ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows - ;; - Linux) # Postconfiguración de GNU/Linux. - ##OPCIONAL Para UEFI: cambia el UUID de la partición (para tener dos linux en un equipo) - #ogUuidChange $DISK $PART - ##OPCIONAL Limpiar dispositivos reconocidos previamente - #ogCleanLinuxDevices $1 $2 - ## Instala (no configura) el codigo de arranque del Grub en la partición (no lo configura, se mantiene el original de la imagen) - #ogGrubInstallPartition $1 $2 - ## OPCIONAL: instala y configura el codigo de arranque del Grub en el MBR (no lo configura, se mantiene el original de la imagen) - #ogGrubInstallMbr $1 $2 - ## OPCIONAL: Instala y configura el Grub en el MBR y lo autoconfigura, entradas para los sitemas operativos, ademas al linux restaurado le añade los parmetros indicados. - #ogGrubInstallMbr $1 $2 TRUE "irqpoll pci=noacpi noresume quiet splash" - ;; - MacOS) # Postconfiguración de Mac OS X. - # Programa de inicio que será ejecutado en el arranque de Mac OS X. - # NOTA: no modificar la línea siguiente. - cat << EOT | sed -n -e '/rm -f /r /dev/stdin' -e 1x -e '2,${x;p}' -e '${x;p}' $MNTDIR/var/root/postconfd.sh - - ### 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' - -EOT - # NOTA: no modificar la línea anterior. - ;; -esac - -# Paso 2: Incluir código genérico de postconfiguración. - diff --git a/ogclient/scripts/configureOsCustomTemplate.py b/ogclient/scripts/configureOsCustomTemplate.py new file mode 100755 index 0000000..70ac70b --- /dev/null +++ b/ogclient/scripts/configureOsCustomTemplate.py @@ -0,0 +1,38 @@ +#!/usr/bin/python3 +#/** +# configureOsCustom +#@brief Plantilla para scirpt de configuracion 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. +#**/ + +import sys +import subprocess + +import ogGlobals +from SystemLib import ogRaiseError, ogEcho +from InventoryLib import ogGetOsType + +prog = sys.argv[0] + +if len (sys.argv) not in [3, 5]: + ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'{ogGlobals.lang.MSG_FORMAT} configureOsCustom int_ndisc int_npart [str_repo str_imgname]') + sys.exit (1) +disk, par, *other = sys.argv[1:] +repo = other[0].upper() if len (other) > 0 else '' +imgname = other[1] if len (other) > 1 else '' + +# Nota: incluye llamada al script "configureOs" para realizar previamente una configuración estándar. +subprocess.run ([f'configureOs.py', disk, par, imgname]) + +ostype = ogGetOsType (disk, par) +if 'Windows' == ostype: + pass +elif 'Linux' == ostype: + pass +elif 'MacOS' == ostype: + pass diff --git a/ogclient/scripts/createImage.py b/ogclient/scripts/createImage.py index 716c2b3..aabc3cb 100755 --- a/ogclient/scripts/createImage.py +++ b/ogclient/scripts/createImage.py @@ -63,7 +63,7 @@ def main (disk, par, repo, imgname): # Clear temporary file used as log track by httpdlog # Limpia los ficheros temporales usados como log de seguimiento para httpdlog # salvo si es llamado desde createImageCustom - if 'createImageCustom' != SystemLib.ogGetCaller(): + if 'createImageCustom.py' != SystemLib.ogGetCaller(): with open (ogGlobals.OGLOGSESSION, 'w') as fd: fd.write ('') with open (ogGlobals.OGLOGCOMMAND, 'w') as fd: fd.write ('') with open (f'{ogGlobals.OGLOGCOMMAND}.tmp', 'w') as fd: fd.write ('') diff --git a/ogclient/scripts/createImageCustom.template b/ogclient/scripts/createImageCustom.template deleted file mode 100644 index 73269d1..0000000 --- a/ogclient/scripts/createImageCustom.template +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -#/** -# createImageCustom -#@brief Plantilla para scirpt de creación personalizada de imagen. -#@param $1 nº de disco -#@param $2 nº de partición -#@param $3 Repositorio: CACHE, REPO o dirección IP -#@param $4 Nombre canónico de la imagen sin extensión -#@warning Renombrar este fichero como "createImageCustom" para sustituir al script estándar "createImage". -#**/ - - -# Control de parámetros. -[ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: createImageCustom int_ndisc int_npart str_repo str_imgname" || exit $? - -# Toma de parámetros. -DISK="$1" # Nº de disco. -PART="$2" # Nº de partición. -REPO="${3^^}" # Repositorio (en mayúsculas). -IMGNAME="$4" # Nombre canónico de imagen (sin extensión). - - -# Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado). - - -# Paso 1: Añadir aquí el código para el proceso previo antes de la creación de la imagen en el equipo modelo (opcional). - - -# Paso 2: Sustituir, si se desea, la llamada al proceso estándar de creación de imagen por código personalizado. -createImage "$@" - - -# Paso 3: Añadir aquí el código para el proceso posterior tras la creación de la imagen (opcional). - - diff --git a/ogclient/scripts/createImageCustomTemplate.py b/ogclient/scripts/createImageCustomTemplate.py index f47efbc..5aa69e6 100755 --- a/ogclient/scripts/createImageCustomTemplate.py +++ b/ogclient/scripts/createImageCustomTemplate.py @@ -1,27 +1,25 @@ +#!/usr/bin/python3 +#/** +# createImageCustom +#@brief Plantilla para scirpt de creación personalizada de imagen. +#@param $1 nº de disco +#@param $2 nº de partición +#@param $3 Repositorio: CACHE, REPO o dirección IP +#@param $4 Nombre canónico de la imagen sin extensión +#@warning Renombrar este fichero como "createImageCustom" para sustituir al script estándar "createImage". +#**/ + import sys -import os +import subprocess -#!/usr/bin/env python3 +import ogGlobals +from SystemLib import ogRaiseError -def main(): - # Control de parámetros. - if len(sys.argv) != 5: - ogRaiseError(os.getenv('OG_ERR_FORMAT', 1), "createImageCustom int_ndisc int_npart str_repo str_imgname") - - # Toma de parámetros. - DISK = sys.argv[1] # Nº de disco. - PART = sys.argv[2] # Nº de partición. - REPO = sys.argv[3].upper() # Repositorio (en mayúsculas). - IMGNAME = sys.argv[4] # Nombre canónico de imagen (sin extensión). +# Control de parámetros. +if len (sys.argv) != 5: + ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'{ogGlobals.lang.MSG_FORMAT} createImageCustom int_ndisc int_npart str_repo str_imgname') + sys.exit (1) +disk, par, repo, imgname = sys.argv[1:] +repo = repo.upper() - # Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado). - - # Paso 1: Añadir aquí el código para el proceso previo antes de la creación de la imagen en el equipo modelo (opcional). - - # Paso 2: Sustituir, si se desea, la llamada al proceso estándar de creación de imagen por código personalizado. - createImage(DISK, PART, REPO, IMGNAME) - - # Paso 3: Añadir aquí el código para el proceso posterior tras la creación de la imagen (opcional). - -if __name__ == "__main__": - main() \ No newline at end of file +subprocess.run (['createImage.py', disk, par, repo, imgname]) diff --git a/ogclient/scripts/deployImage.py b/ogclient/scripts/deployImage.py index 03fa1e8..791a3a7 100755 --- a/ogclient/scripts/deployImage.py +++ b/ogclient/scripts/deployImage.py @@ -138,9 +138,9 @@ def main (repo, imgname, disk, par, proto='UNICAST', protoopt=''): params = [repo, imgname, disk, par, proto, protoopt] # Si existe, ejecuta script personalizado "restoreImageCustom"; si no, llama al genérico "restoreImage". - if shutil.which ('restoreImageCustom'): + if shutil.which ('restoreImageCustom.py'): SystemLib.ogEcho (['log', 'session'], None, f'[55] {ogGlobals.lang.MSG_HELP_ogRestoreImage}: restoreImageCustom {params}') - retval = subprocess.run (['restoreImageCustom'] + params).returncode + retval = subprocess.run (['restoreImageCustom.py'] + params).returncode else: SystemLib.ogEcho (['log', 'session'], None, f'[55] {ogGlobals.lang.MSG_HELP_ogRestoreImage}: restoreImage {params}') retval = subprocess.run (['restoreImage.py'] + params).returncode @@ -160,9 +160,9 @@ def main (repo, imgname, disk, par, proto='UNICAST', protoopt=''): SystemLib.ogEcho (['log', 'session'], None, f' [ ] {ogGlobals.lang.MSG_SCRIPTS_TIME_PARTIAL} : {int (time3/60)}m {int (time3%60)}s') # Si existe, ejecuta script personalizado de postconfiguración "configureOsCustom"; si no, llama al genérico "configureOs". - if shutil.which ('configureOsCustom'): + if shutil.which ('configureOsCustom.py'): SystemLib.ogEcho (['log', 'session'], None, '[90] configureOsCustom') - subprocess.run (['configureOsCustom', disk, par, repo, imgname]) + subprocess.run (['configureOsCustom.py', disk, par, repo, imgname]) else: SystemLib.ogEcho (['log', 'session'], None, f'[90] {ogGlobals.lang.MSG_SCRIPTS_OS_CONFIGURE}') subprocess.run (['configureOs.py', disk, par, imgname]) diff --git a/ogclient/scripts/restoreImageCustom.template b/ogclient/scripts/restoreImageCustom.template deleted file mode 100644 index bb94ad1..0000000 --- a/ogclient/scripts/restoreImageCustom.template +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -#/** -# restoreImageCustom -#@brief Plantilla para scirpt de rastauración personalizada de imagen. -#@param $1 nº de disco -#@param $2 nº de partición -#@param $3 Repositorio: CACHE, REPO o dirección IP -#@param $4 Nombre canónico de la imagen sin extensión -#@warning Renombrar este fichero como "restoreImageCustom" para sustituir al script estándar "restoreImage". -#**/ - - -# Control de parámetros. -[ $# -ge 4 -a $# -le 6 ] || ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: restoreImageCustom str_repo str_imagen int_ndisco int_npart [ str_proto [\"str_opciones\"] ]" || exit $? - -# Toma de parámetros. -REPO="${1^^}" # Repositorio (en mayúsculas). -IMGNAME="$2" # Nombre canónico de imagen (sin extensión). -DISK="$3" # Nº de disco. -PART="$4" # Nº de partición. -PROTO="${5^^}" # Protocolo de comunicaciones (por defecto, UNICAST). -PROTO=${PROTO:-"UNICAST"} -PROTOOPT="$6" # Opciones del protocolo separadas por ":" (opcional). - - -# Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado). - - -# Paso 1: Añadir aquí el código para el proceso previo antes de la restauración de la imagen en los equipos (opcional). - - -# Paso 2: Sustituir, si se desea, la llamada al proceso estándar de restauración de imagen por código personalizado. -restoreImage "$@" - - -# Aviso: editar la plantilla "configureOsCustom" para añadir el código personalizado para el proceso de postconfiguración de los clientes (no incluir aquí dicho código). - diff --git a/ogclient/scripts/restoreImageCustomTemplate.py b/ogclient/scripts/restoreImageCustomTemplate.py index b2b5575..91c7321 100755 --- a/ogclient/scripts/restoreImageCustomTemplate.py +++ b/ogclient/scripts/restoreImageCustomTemplate.py @@ -1,35 +1,28 @@ -import sys -import os -import SystemLib +#!/usr/bin/python3 +#/** +# restoreImageCustom +#@brief Plantilla para scirpt de rastauración personalizada de imagen. +#@param $1 nº de disco +#@param $2 nº de partición +#@param $3 Repositorio: CACHE, REPO o dirección IP +#@param $4 Nombre canónico de la imagen sin extensión +#@warning Renombrar este fichero como "restoreImageCustom" para sustituir al script estándar "restoreImage". +#**/ -#!/usr/bin/env python3 -""" -restoreImageCustom -@brief Plantilla para script de restauración personalizada de imagen. -@param $1 nº de disco -@param $2 nº de partición -@param $3 Repositorio: CACHE, REPO o dirección IP -@param $4 Nombre canónico de la imagen sin extensión -@warning Renombrar este fichero como "restoreImageCustom" para sustituir al script estándar "restoreImage". -""" +import sys +import subprocess + +import ogGlobals +from SystemLib import ogRaiseError # Control de parámetros. -if not (4 <= len(sys.argv) <= 6): - SystemLib.ogRaiseError(os.getenv('OG_ERR_FORMAT'), "restoreImageCustom str_repo str_imagen int_ndisco int_npart [ str_proto [\"str_opciones\"] ]") - +if len (sys.argv) < 5 or len (sys.argv) > 7): + ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'restoreImageCustom str_repo str_imagen int_ndisco int_npart [ str_proto ["str_opciones"] ]') + sys.exit (1) # Toma de parámetros. -REPO = sys.argv[1].upper() # Repositorio (en mayúsculas). -IMGNAME = sys.argv[2] # Nombre canónico de imagen (sin extensión). -DISK = sys.argv[3] # Nº de disco. -PART = sys.argv[4] # Nº de partición. -PROTO = sys.argv[5].upper() if len(sys.argv) > 5 else "UNICAST" # Protocolo de comunicaciones (por defecto, UNICAST). -PROTOOPT = sys.argv[6] if len(sys.argv) > 6 else "" # Opciones del protocolo separadas por ":" (opcional). +repo, imgname, disk, par, *other = sys.argv[1:] +repo = repo.upper() +proto = other[0].upper() if len (other) > 0 else 'UNICAST' +protoopt = other[1] if len (other) > 1 else '' -# Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado). - -# Paso 1: Añadir aquí el código para el proceso previo antes de la restauración de la imagen en los equipos (opcional). - -# Paso 2: Sustituir, si se desea, la llamada al proceso estándar de restauración de imagen por código personalizado. -restoreImage(*sys.argv[1:]) - -# Aviso: editar la plantilla "configureOsCustom" para añadir el código personalizado para el proceso de postconfiguración de los clientes (no incluir aquí dicho código). +subprocess.run (['restoreImage.py', repo, imgname, disk, par, proto, protoopt])