diff options
Diffstat (limited to 'client/shared/scripts')
-rwxr-xr-x | client/shared/scripts/bootOsCustom.template | 57 | ||||
-rwxr-xr-x | client/shared/scripts/cloneRemoteFromMaster | 7 | ||||
-rwxr-xr-x | client/shared/scripts/configureOs | 21 | ||||
-rw-r--r-- | client/shared/scripts/configureOsCustom.template | 4 | ||||
-rwxr-xr-x | client/shared/scripts/createImage | 15 | ||||
-rwxr-xr-x | client/shared/scripts/deployImage | 6 | ||||
-rwxr-xr-x | client/shared/scripts/grubSyntax | 31 | ||||
-rwxr-xr-x | client/shared/scripts/initCache | 6 | ||||
-rwxr-xr-x | client/shared/scripts/updateCache | 2 |
9 files changed, 114 insertions, 35 deletions
diff --git a/client/shared/scripts/bootOsCustom.template b/client/shared/scripts/bootOsCustom.template index b457fde4..efd4c1fc 100755 --- a/client/shared/scripts/bootOsCustom.template +++ b/client/shared/scripts/bootOsCustom.template @@ -6,8 +6,11 @@ #@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 +# 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)" @@ -22,51 +25,57 @@ 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 postconfiguración personalizada. +# 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) +MNTDIR=$(ogMount $DISK $PART) || exit $? NAME="$(ogGetHostname)" NAME=${NAME:-"pc"} OSTYPE=$(ogGetOsType $DISK $PART) case "$OSTYPE" in Windows) - ## Borrar marcas de arrranque de todos los Windows instalados en el disco. - #echo "[30] Borrar marcas de arrranque de todos los Windows instalados en el disco." - #for (( i=1; i<=$(ogGetPartitionsNumber $1); i++ )); do - # [ "$(ogGetOsType $1 $i)" == "Windows" ] && ogMount $1 $i &>/dev/null - #done - #rm -f /mnt/*/ogboot.* - ## Mostrar las particiones NTFS de sistema (dos opciones) ## Opción 1: SIN ocultar las demás. - #echo "[40] Mostrar y activar particion de Windows $PART." - #[ $(ogGetPartitionType $1 $2) == "HNTFS" ] && ogUnhidePartition $1 $2 + #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) - ## Opción 2: Ocultamos las demás. - #echo "[40] Activar particion de Windows $PART y ocultar las demás." - #for (( i=1; i<=$(ogGetPartitionsNumber $DISK); i++ )); do - # if [ $i == $PART -o $i == $PARTDATA ]; then - # [ $(ogGetPartitionType $DISK $PART) == "HNTFS" ] && ogUnhidePartition $1 $PART - # # Activo la particion si no es de datos - # [ $i -ne $PARTDATA ] && ogSetPartitionActive $DISK $i + # ## 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 $DISK $i)" == NTFS ] && ogHidePartition $DISK $i + # [ "$(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 - #echo "[30] Asignar nombre Linux \"$NAME\"." - #ETC=$(ogGetPath $1 $2 /etc) + #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 - # echo "[40] Actualizar fstab con particion raiz \"$PART\"." + # 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 @@ -76,7 +85,7 @@ case "$OSTYPE" in ## En el servidor el nuevo fichero debe situarse en el directorio del grupo: ## /opt/opengnsys/images/groups/nombre_aula #if [ -r $(ogGetGroupDir)/passwd ]; then - # echo "[65] Cambiar claves de usuarios." + # ogEcho log session "[65] Cambiar claves de usuarios." # cp $(ogGetGroupDir)/passwd $MNTDIR/etc #fi ;; diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index b78bd629..6d8001d2 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -159,6 +159,13 @@ case $MASTERIP in #Obtener tamaño de la partición. SIZE=$(ogGetPartitionSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar tamaño partcion $2 $3 l127"; echo $?) + # Si es UEFI copio el cargador de arranque a la partición + OSTYPE="$(ogGetOsType $2 $3)" + if ogIsEfiActive && [ "$OSTYPE" == "Windows" ]; then + ogEcho log session "[12] $MSG_HELP_ogCopyEfiBootLoader" + ogCopyEfiBootLoader $2 $3 + fi + if [ "$OGWINREDUCE" == "TRUE" ] then ogEcho log session "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs index 4b7ec6f7..2e529c9e 100755 --- a/client/shared/scripts/configureOs +++ b/client/shared/scripts/configureOs @@ -32,6 +32,9 @@ #@version 1.0.6b - llamadas opcionales para mejoras varias. Descomentar la instruccion para su activacion. ogConfigureFstab #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2016-11-03 +#@version 1.1.1 - Equipos UEFI: para Windows copia cargador de arranque a partición UEFI, para linux configura particion ESP en fstab. (ticket #802 #889 #890) +#@author Irina Gomez, ETSII Universidad de Sevilla +#@date 2019-01-08 #*/ ## # Carga el configurador del engine y los parámetros de red. @@ -67,8 +70,14 @@ case "$OSTYPE" in # Cambiar nombre en sistemas Windows. HOST=${HOST:-"pc"} ogSetWindowsName $1 $2 "$HOST" - # Configurar el boot sector de la partición Windows. - ogFixBootSector $1 $2 + # Si es UEFI copio el cargador de arranque a la partición EFI e instalo rEFInd. + if ogIsEfiActive; then + ogRestoreEfiBootLoader $1 $2 + ogRefindInstall + else + # Configurar el boot sector de la partición Windows. + ogFixBootSector $1 $2 + fi # Configurar el gestor de arranque de Windows XP/Vista/7. ogWindowsBootParameters $1 $2 # Registrar en Windows que la partición indicada es su nueva unidad C:\ @@ -82,12 +91,20 @@ case "$OSTYPE" in fi ;; Linux) # Postconfiguración de GNU/Linux. + # Configuro fstab: particion de Swap y si es UEFI además la partición EFI. + ogConfigureFstab $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 + # Si es UEFI instalo rEFInd. + ogIsEfiActive && ogRefindInstall # Eliminar el antiguo cliente de Linux. [ -n "$(find $MNTDIR/usr/sbin $MNTDIR/sbin $MNTDIR/usr/local/sbin -name ogAdmLnxClient -print)" ] && ogUninstallLinuxClient $1 $2 # Configurar nuevo agente OGAgent. ogConfigureOgagent $1 $2 + ## Modificar el nombre del equipo + echo "Asignar nombre Linux \"$HOST\"." + ETC=$(ogGetPath $1 $2 /etc) + [ -d "$ETC" ] && echo "$HOST" >$ETC/hostname 2>/dev/null ;; MacOS) # Postconfiguración de Mac OS X. # Fichero indicador de activación de postconfiguración. diff --git a/client/shared/scripts/configureOsCustom.template b/client/shared/scripts/configureOsCustom.template index 66be3c63..f1c8e2a6 100644 --- a/client/shared/scripts/configureOsCustom.template +++ b/client/shared/scripts/configureOsCustom.template @@ -39,8 +39,8 @@ case "$OSTYPE" in #ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows ;; Linux) # Postconfiguración de GNU/Linux. - ##OPCIONAL: Configurar el FSTAB. En esta versión solo autoconfigura la partición SWAP - #ogConfigureFstab $1 $2 + ##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) diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage index 65da156b..be1cb439 100755 --- a/client/shared/scripts/createImage +++ b/client/shared/scripts/createImage @@ -35,6 +35,9 @@ #@version 1.1.0 - Se muestra el espacio necesario para alojar la imagen y el disponible (ticket #771) #@author Irina Gomez - ETSII Universidad de Sevilla #@date 2017-03-28 +#@version 1.1.1 - #802 Equipos EFI: se guarda el cargador de arranque y UUID de las particiones +#@author Irina Gomez - ETSII Universidad de Sevilla +#@date 2019-01-08 #*/ ## # Test 1. crear una imagen en un REPO sin espacio libre. @@ -123,10 +126,17 @@ ogEcho log session "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB)" ogUnmount $1 $2 2>/dev/null ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?) +# Si es UEFI copio el cargador de arranque a la partición +OSTYPE="$(ogGetOsType $1 $2)" +if ogIsEfiActive && [ "$OSTYPE" == "Windows" ]; then + ogEcho log session "[25] $MSG_HELP_ogCopyEfiBootLoader" + ogCopyEfiBootLoader $1 $2 +fi + # Evaluar variable de engine.cfg para reducir el sistema de archivos en la creacion if [ "$IMGREDUCE" == "TRUE" ] then - ogEcho log session "[30]: $MSG_HELP_ogReduceFs" + ogEcho log session "[30] $MSG_HELP_ogReduceFs" ogReduceFs $1 $2 &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?) NEWSIZEFS=$(ogGetFsSize $1 $2) TIMEAUX=$[SECONDS-TIME1] @@ -135,7 +145,7 @@ fi # Renombrar el fichero de imagen si ya existe. if [ -f "$IMGFILE" ]; then - ogEcho log session "[10] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." + ogEcho log session "[35] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." mv "$IMGFILE" "$IMGFILE.ant" mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null mv "$IMGFILE.sum" "$IMGFILE.sum.ant" 2>/dev/null @@ -170,4 +180,3 @@ TIME=$[SECONDS-TIME1] ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" ogEcho log session " FileSystem $PART with $NEWSIZEFS KB data created onto file-image as $4 and used $IMGSIZE KB across DFS $ogprotocol" ogEcho log session " Image-file $4 metada: $IMGOS" - diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage index 824da2af..9406d80e 100755 --- a/client/shared/scripts/deployImage +++ b/client/shared/scripts/deployImage @@ -119,6 +119,8 @@ case "$MODE" in # Si protocolo es torrent|torrent-cache o multicast|multicast-cache TORRENT|TORRENT-CACHE|MULTICAST|MULTICAST-CACHE|UNICAST|UNICAST-CACHE) + # Eliminamos CACHE o DIRECT + PROTO=${PROTO%%-*} ogEcho log session "[2] updateCache "$REPO" \"/$IMGNAME.img\" $PROTO $PROTOOPT" TIME2=$SECONDS updateCache "$REPO" "/$IMGNAME.img" "$PROTO" "$PROTOOPT" @@ -165,6 +167,10 @@ case "$MODE" in # Time-out en la transferencia multicast (El mensaje de error está enviado) exit $RETVAL ;; + *) + # Error desconocido + exit $RETVAL + ;; esac ;; *) # Error: protocolo desconocido. diff --git a/client/shared/scripts/grubSyntax b/client/shared/scripts/grubSyntax index 209cfc00..aa1adb2e 100755 --- a/client/shared/scripts/grubSyntax +++ b/client/shared/scripts/grubSyntax @@ -7,6 +7,8 @@ set -e #basado en scripts del paquete de grub #Antonio Doblas Viso #Universidad de Málaga +#@version 1.1.1 - En los parámetros del kernel se sustituye el UUID por el dispositivo. +#@version 1.1.1 - Detecta cargador de Windows en directorio Part-xx-yy dentro de ESP (#802 #888) DISK= PART= @@ -31,7 +33,13 @@ fi grub_probe=${grub_probe:-$OGBIN/grub-probe1.99_$(arch)} #librerias del osProber para kernel antiguos: detecta e identifica sistema operativos. -grub-install --version | grep 1.99 && cp -r /opt/opengnsys/lib/os-probes/* /usr/lib/os-probes/ +if grub-install --version | grep 1.99 ; then + cp -r /opt/opengnsys/lib/os-probes/* /usr/lib/os-probes/ +else + # Librería os-probe para cargador de microsoft en dir part-x-y (uefi) + OSPROBE_MS_PART="/opt/opengnsys/lib/os-probes/mounted/efi/31part-x-y" + [ -f $OSPROBE_MS_PART ] && cp $OSPROBE_MS_PART /usr/lib/os-probes/mounted/efi +fi #Autoreconocimiento del ogLive en cache @@ -341,6 +349,24 @@ EOF } EOF ;; + efi) + + found_other_os=1 + EFIPATH=${DEVICE#*@} + DEVICE=${DEVICE%@*} + onstr="$(gettext_printf "(on %s)" "${DEVICE}")" + cat << EOF +menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")' { +EOF + save_default_entry | sed -e "s/^/\t/" +#ADV prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/" + OG_prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/" + + cat <<EOF + chainloader ${EFIPATH} +} +EOF + ;; linux) KERNELPARAM="" #linuxprobed detecta todos los kernels de una partición. @@ -358,6 +384,9 @@ EOF LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`" LINITRD="`echo ${LINUX} | cut -d ':' -f 5`" LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`" + # En los parámetros cambiamos el UUID por el valor de LROOT + UUID=$(blkid -s UUID -o value $LROOT) + LPARAMS="$(echo $LPARAMS | sed "s|UUID=$UUID|$LROOT|g")" if [ -z "${LLABEL}" ] ; then LLABEL="${LONGNAME}" fi diff --git a/client/shared/scripts/initCache b/client/shared/scripts/initCache index 796ab84f..9caf0be0 100755 --- a/client/shared/scripts/initCache +++ b/client/shared/scripts/initCache @@ -69,6 +69,8 @@ else ogUnmountCache 2>/dev/null ogDeleteCache fi + # Tomamos el tamaño actual. Si no existe cache será 0. + OLDSIZE=$(ogGetCacheSize 2>/dev/null) || OLDSIZE=0 # Error si tamaño definido no es >0. if [ ! $SIZE -gt 0 ]; then @@ -83,9 +85,9 @@ else ogCreateCache $NDISK $NPART $SIZE ogUpdatePartitionTable $NDISK fi - # Si caché no montada y no formateada, formatear. + # Si caché no montada y no formateada o cambia el tamaño: formatear. CACHE=$(ogFindCache) || exit $? - if ! ogIsFormated $CACHE; then + if ! ogIsFormated $CACHE || [ $SIZE -ne $OLDSIZE ]; then echo "[50] Formatear caché local." ogFormatCache fi diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache index 0632365f..73086bb7 100755 --- a/client/shared/scripts/updateCache +++ b/client/shared/scripts/updateCache @@ -207,7 +207,7 @@ case "$PROTOCOLO" in ogEcho log session "ogCopyFile $REPOSITORIO $2.torrent absolute $OGCAC/$OGIMG" # tiempos timewait=$(expr $(printf '%d\n' 0x$(ogGetMacAddress | awk -F: '{print $5$6}')) \* 120 / 65535) - ogExecAndLog command ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR" + ogExecAndLog command ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR" || exit $? #TODO: comprobar que el tracker definido en el fichero es correcto. #TODO comprobar que el fichero torrent está en cache # retardamos el inicio -aleatorio de 0 a 120 segundos- al tracker para gestionar mas de +-40 equipos |