diff options
author | Irina Gómez <irinagomez@us.es> | 2019-01-23 13:23:05 +0100 |
---|---|---|
committer | Irina Gómez <irinagomez@us.es> | 2019-01-23 13:23:05 +0100 |
commit | 7dc06be98d438dc20709a764103bf384cbd5dd7a (patch) | |
tree | 86191bc9687b09583a448d15da38260535f55283 /client | |
parent | a31f7a97b1516650135bca967949f430158491e8 (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-x | client/engine/Boot.lib | 67 | ||||
-rw-r--r-- | client/engine/UEFI.lib | 22 | ||||
-rwxr-xr-x | client/shared/scripts/configureOs | 8 | ||||
-rw-r--r-- | client/shared/scripts/configureOsCustom.template | 4 |
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) |