summaryrefslogtreecommitdiffstats
path: root/client/shared/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'client/shared/scripts')
-rwxr-xr-xclient/shared/scripts/bootOsCustom.template57
-rwxr-xr-xclient/shared/scripts/cloneRemoteFromMaster7
-rwxr-xr-xclient/shared/scripts/configureOs21
-rw-r--r--client/shared/scripts/configureOsCustom.template4
-rwxr-xr-xclient/shared/scripts/createImage15
-rwxr-xr-xclient/shared/scripts/deployImage6
-rwxr-xr-xclient/shared/scripts/grubSyntax31
-rwxr-xr-xclient/shared/scripts/initCache6
-rwxr-xr-xclient/shared/scripts/updateCache2
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