summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorIrina Gómez <irinagomez@us.es>2019-01-23 13:23:05 +0100
committerIrina Gómez <irinagomez@us.es>2019-01-23 13:23:05 +0100
commit7dc06be98d438dc20709a764103bf384cbd5dd7a (patch)
tree86191bc9687b09583a448d15da38260535f55283 /client
parenta31f7a97b1516650135bca967949f430158491e8 (diff)
#802 #890 Postconfiguración de linux (ubuntu) compatible con UEFI. ogGrubInstallMbr y ogGrubInstallPartition: incluye opciones UEFI. ogUuidChange: genera UUID con un comando existente en el ogLive.
Diffstat (limited to 'client')
-rwxr-xr-xclient/engine/Boot.lib67
-rw-r--r--client/engine/UEFI.lib22
-rwxr-xr-xclient/shared/scripts/configureOs8
-rw-r--r--client/shared/scripts/configureOsCustom.template4
4 files changed, 48 insertions, 53 deletions
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index d3b683f5..c49b08a4 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -734,7 +734,7 @@ ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
#@date 2018-01-21
#@version 1.1.1 - #802 Equipos EFI: Se crea el grub.cfg de la partición EFI
#@author Irina Gomez, ETSII Universidad de Sevilla
-#@date 2019-01-08
+#@date 2019-01-08
#*/ ##
function ogGrubInstallMbr ()
@@ -785,10 +785,9 @@ if ogIsEfiActive; then
EFISECONDSTAGE=$(ogMount $EFIDISK $EFIPART) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
EFISUBDIR=$(printf "Part-%02d-%02d" $DISK $PART)
[ -d ${EFISECONDSTAGE}/EFI/$EFISUBDIR ] || mkdir -p ${EFISECONDSTAGE}/EFI/$EFISUBDIR
- #Instalar el grub
- grub-install --force --target x86_64-efi --efi-directory=${EFISECONDSTAGE} --root-directory=${EFISECONDSTAGE}/EFI/$EFISUBDIR $FIRSTSTAGE
- # Solo para ubuntu: falta generalizar
- mv -v $EFISECONDSTAGE/EFI/ubuntu/grubx64.efi $EFISECONDSTAGE/EFI/$EFISUBDIR
+ EFIOPTGRUB=" --target x86_64-efi --efi-directory=${EFISECONDSTAGE}/EFI/$EFISUBDIR "
+else
+ EFIOPTGRUB=""
fi
# Si Reconfigurar segunda etapa (grub.cfg) == FALSE
@@ -801,12 +800,12 @@ then
# Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys.
[ -d ${SECONDSTAGE}${PREFIXSECONDSTAGE} ] && rm -fr ${SECONDSTAGE}${PREFIXSECONDSTAGE}
# Reactivamos el grub con el grub.cfg original.
+ grub-install --force ${EFIOPTGRUB} --root-directory=${SECONDSTAGE} $FIRSTSTAGE
+ # Movemos el grubx64.efi
if ogIsEfiActive; then
- # Configuración de grub.cfg para EFI
- ogGrubUefiConf $1 $2
- else
- grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE
- fi
+ mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/ubuntu/grubx64.efi ${EFISECONDSTAGE}/EFI/$EFISUBDIR
+ rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI
+ fi
return $?
fi
fi
@@ -831,12 +830,13 @@ sed -i 's/^set -e/#set -e/' /etc/grub.d/00_header
#Preparar configuración segunda etapa: crear entrada del sistema operativo
grubSyntax "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg
-# Instalar el grub no EFI, configurar EFI
-# Para EFI en ESP para otros en la partición de sistema.
+#Instalar el grub
+grub-install --force ${EFIOPTGRUB} --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
+
+# Movemos el grubx64.efi
if ogIsEfiActive; then
- ogGrubUefiConf $1 $2 ${PREFIXSECONDSTAGE}
-else
- grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
+ mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/ubuntu/grubx64.efi ${EFISECONDSTAGE}/EFI/$EFISUBDIR
+ rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI
fi
}
@@ -861,7 +861,7 @@ fi
#@date 2012-03-13
#@version 1.1.1 - #802 Equipos EFI: Se crea el grub.cfg de la partición EFI
#@author Irina Gomez, ETSII Universidad de Sevilla
-#@date 2019-01-08
+#@date 2019-01-08
#*/ ##
function ogGrubInstallPartition ()
@@ -907,10 +907,9 @@ if ogIsEfiActive; then
EFISECONDSTAGE=$(ogMount $EFIDISK $EFIPART) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
EFISUBDIR=$(printf "Part-%02d-%02d" $DISK $PART)
[ -d ${EFISECONDSTAGE}/EFI/$EFISUBDIR ] || mkdir -p ${EFISECONDSTAGE}/EFI/$EFISUBDIR
- #Instalar el grub
- grub-install --force --target x86_64-efi --efi-directory ${EFISECONDSTAGE} --root-directory=${EFISECONDSTAGE}/EFI/ubuntu $FIRSTSTAGE
- # Solo para ubuntu: falta generalizar
- mv -v $EFISECONDSTAGE/EFI/ubuntu/grubx64.efi $EFISECONDSTAGE/EFI/$EFISUBDIR
+ EFIOPTGRUB=" --target x86_64-efi --efi-directory=${EFISECONDSTAGE}/EFI/$EFISUBDIR "
+else
+ EFIOPTGRUB=""
fi
# Si Reconfigurar segunda etapa (grub.cfg) == FALSE
@@ -923,11 +922,11 @@ then
# Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys.
[ -d ${SECONDSTAGE}${PREFIXSECONDSTAGE} ] && rm -fr ${SECONDSTAGE}${PREFIXSECONDSTAGE}
# Reactivamos el grub con el grub.cfg original.
+ grub-install --force ${EFIOPTGRUB} --root-directory=${SECONDSTAGE} $FIRSTSTAGE
+ # Movemos el grubx64.efi
if ogIsEfiActive; then
- # Configuración de grub.cfg para EFI
- ogGrubUefiConf $1 $2
- else
- grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE
+ mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/ubuntu/grubx64.efi ${EFISECONDSTAGE}/EFI/$EFISUBDIR
+ rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI
fi
return $?
fi
@@ -949,11 +948,13 @@ sed -i 's/^set -e/#set -e/' /etc/grub.d/00_header
#Preparar configuración segunda etapa: crear entrada del sistema operativo
grubSyntax $DISK $PART "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg
-#Instalar el grub si no es EFI, configurar si es EFI
+#Instalar el grub
+grub-install --force ${EFIOPTGRUB} --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
+
+# Movemos el grubx64.efi
if ogIsEfiActive; then
- ogGrubUefiConf $1 $2 ${PREFIXSECONDSTAGE}
-else
- grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
+ mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/ubuntu/grubx64.efi ${EFISECONDSTAGE}/EFI/$EFISUBDIR
+ rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI
fi
}
@@ -981,7 +982,7 @@ function ogConfigureFstab ()
{
# Variables locales.
local FSTAB DEFROOT PARTROOT DEFSWAP PARTSWAP
-local EFIDISK EFIPART DEVEFI OPTEFI
+local EFIDISK EFIPART EFIDEV EFIOPT
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -1022,14 +1023,14 @@ fi
# Si es un sistema EFI incluimos partición ESP (Si existe la modificamos)
if [ ogIsEfiActive ]; then
read EFIDISK EFIPART <<< $(ogGetEsp)
- DEVEFI=$(ogDiskToDev $EFIDISK $EFIPART)
+ EFIDEV=$(ogDiskToDev $EFIDISK $EFIPART)
# Opciones de la partición ESP: si no existe ponemos un valor por defecto
- OPTEFI=$(awk '$1!~/#/ && $2=="/boot/efi" {print $3"\t"$4"\t"$5"\t"$6 }' ${FSTAB})
- OPTEFI=${OPTEFI:-vfat\tumask=0077\t0\t1}
+ EFIOPT=$(awk '$1!~/#/ && $2=="/boot/efi" {print $3"\t"$4"\t"$5"\t"$6 }' ${FSTAB})
+ [ "$EFIOPT" == "" ] && EFIOPT='vfat\tumask=0077\t0\t1'
sed -i /"boot\/efi"/d ${FSTAB}
- echo -e "$DEVEFI\t/boot/efi\tvfat\tumask=0077\t0\t1" >> ${FSTAB}
+ echo -e "$EFIDEV\t/boot/efi\t$EFIOPT" >> ${FSTAB}
fi
}
diff --git a/client/engine/UEFI.lib b/client/engine/UEFI.lib
index f87e2ce0..cfd818f5 100644
--- a/client/engine/UEFI.lib
+++ b/client/engine/UEFI.lib
@@ -7,20 +7,20 @@
#@brief Genera el fichero grub.cfg de la ESP
#@param int_ndisk nº de orden del disco
#@param int_part nº de partición
-#@param str_dir_grub nombre del directorio de grub en la partición de sistema. ej: grubPARTITION
+#@param str_dir_grub prefijo del directorio de grub en la partición de sistema. ej: /boot/grubPARTITION
#@return (nada, por determinar)
#@exception OG_ERR_FORMAT formato incorrecto.
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
#@TODO Confirmar si el fichero "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" es necesario.
#*/ ##
function ogGrubUefiConf () {
-local EFIDIR BOOTLABEL GRUBEFI UUID DEVICE DIRGRUB
+local EFIDIR BOOTLABEL GRUBEFI UUID DEVICE PREFIXSECONDSTAGE EFIGRUBDIR
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" \
"$FUNCNAME 1 2" \
- "$FUNCNAME 1 3 grubPARTITION/boot/grub"
+ "$FUNCNAME 1 3 /boot/grubPARTITION"
return
fi
@@ -28,25 +28,25 @@ fi
[ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" || return $?
# Directorio del grub en la partición de sistema
-DIRGRUB="${3:-boot/grub}"
+PREFIXSECONDSTAGE="$3"
EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
-GRUBDIR="$EFIDIR/EFI/$BOOTLABEL/boot/grub"
+EFIGRUBDIR="$EFIDIR/EFI/$BOOTLABEL/boot/grub"
# Comprobamos que existe directorio
-[ -d "$GRUBDIR" ] || mkdir -p "$GRUBDIR"
+[ -d "$EFIGRUBDIR" ] || mkdir -p "$EFIGRUBDIR"
# Parcheamos uuid y particion en grub.cfg
UUID=$(blkid -o value -s UUID $(ogDiskToDev $1 $2))
DEVICE="hd$(expr $1 - 1 ),gpt$2"
-cat << EOT > $GRUBDIR/grub.cfg
+cat << EOT > $EFIGRUBDIR/grub.cfg
set root='$DEVICE'
-set prefix=(\$root)'/$DIRGRUB'
+set prefix=(\$root)'${PREFIXSECONDSTAGE}/boot/grub'
configfile \$prefix/grub.cfg
EOT
# Provisional: confirmar si el segundo archivo se utiliza
-cp $GRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg"
+#cp $EFIGRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg"
}
#/**
@@ -57,7 +57,6 @@ cp $GRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg"
#@return (nada, por determinar)
#@exception OG_ERR_FORMAT formato incorrecto.
#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
-#@TODO Se utiliza el comando uuidgen que no existe en el ogLive
#*/ ##
function ogUuidChange () {
local MNTDIR DEVICE UUID NEWUUID f
@@ -76,7 +75,7 @@ fi
MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_NOTFOUND "Device $1 $2" || return $?
DEVICE=$(ogDiskToDev $1 $2)
UUID=$(blkid -o value -s UUID $DEVICE)
-NEWUUID=$(uuidgen)
+NEWUUID=$(cat /proc/sys/kernel/random/uuid)
# Cambiamos UUID a la partición
ogUnmount $1 $2
@@ -85,7 +84,6 @@ tune2fs $DEVICE -U $NEWUUID
# Cambiamos UUID en la configuración (fstab y grub)
ogMount $1 $2
for f in $MNTDIR/etc/fstab $MNTDIR/{,boot/}{{grubMBR,grubPARTITION}/boot/,}{grub{,2},{,efi/}EFI/*}/{menu.lst,grub.cfg}; do
- [ -r $f ] && echo sed -i s/$UUID/$NEWUUID/g $f
[ -r $f ] && sed -i s/$UUID/$NEWUUID/g $f
done
}
diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs
index c251b0ff..3170a994 100755
--- a/client/shared/scripts/configureOs
+++ b/client/shared/scripts/configureOs
@@ -126,12 +126,8 @@ case "$OSTYPE" in
fi
;;
Linux) # Postconfiguración de GNU/Linux.
- # Instalamos EFI Boot Loader
- if [ ogIsEfiActive ]; then
- # Cambio UUID del sistema de ficheros
- ogUuidChange $1 $2
- ogConfigureFstab $1 $2
- fi
+ # Configuro fstab: particion de Swap y si es UEFI 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
# Eliminar el antiguo cliente de Linux.
diff --git a/client/shared/scripts/configureOsCustom.template b/client/shared/scripts/configureOsCustom.template
index 920e6b3c..d5603a34 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)