[39b84ff] | 1 | #!/bin/bash |
---|
| 2 | # Libreria provisional para uso de UEFI |
---|
| 3 | # Las funciones se incluirán las librerías ya existentes |
---|
| 4 | |
---|
| 5 | #/** |
---|
| 6 | # ogGrubUEFIConf int_ndisk int_part str_dir_grub |
---|
| 7 | #@brief Genera el fichero grub.cfg de la ESP |
---|
| 8 | #@param int_ndisk nº de orden del disco |
---|
| 9 | #@param int_part nº de partición |
---|
| 10 | #@param str_dir_grub nombre del directorio de grub en la partición de sistema. ej: grubPARTITION |
---|
| 11 | #@return (nada, por determinar) |
---|
| 12 | #@exception OG_ERR_FORMAT formato incorrecto. |
---|
| 13 | #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. |
---|
| 14 | #@TODO Confirmar si el fichero "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" es necesario. |
---|
| 15 | #*/ ## |
---|
| 16 | function ogGrubUEFIConf { |
---|
| 17 | local EFIDIR BOOTLABEL GRUBEFI UUID DEVICE DIRGRUB |
---|
| 18 | |
---|
| 19 | # Si se solicita, mostrar ayuda. |
---|
| 20 | if [ "$*" == "help" ]; then |
---|
| 21 | ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" \ |
---|
| 22 | "$FUNCNAME 1 2" \ |
---|
| 23 | "$FUNCNAME 1 3 grubPARTITION/boot/grub" \ |
---|
| 24 | return |
---|
| 25 | fi |
---|
| 26 | |
---|
| 27 | # Error si no se reciben al menos 2 parámetros. |
---|
| 28 | [ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" || return $? |
---|
| 29 | |
---|
| 30 | # Directorio del grub en la partición de sistema |
---|
| 31 | DIRGRUB="${3:-boot/grub}" |
---|
| 32 | |
---|
| 33 | EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? |
---|
| 34 | BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) |
---|
| 35 | GRUBDIR="$EFIDIR/EFI/$BOOTLABEL/boot/grub" |
---|
| 36 | # Comprobamos que existe directorio |
---|
| 37 | [ -d "$GRUBDIR" ] || mkdir -p "$GRUBDIR" |
---|
| 38 | # Parcheamos uuid y particion en grub.cfg |
---|
| 39 | UUID=$(blkid -o value -s UUID $(ogDiskToDev $1 $2)) |
---|
| 40 | DEVICE="hd$(expr $1 - 1 ),gpt$2" |
---|
| 41 | |
---|
| 42 | cat << EOT > $GRUBDIR/grub.cfg |
---|
| 43 | set root='$DEVICE' |
---|
| 44 | set prefix=(\$root)'/$DIRGRUB' |
---|
| 45 | configfile \$prefix/grub.cfg |
---|
| 46 | EOT |
---|
| 47 | |
---|
| 48 | # Provisional: confirmar si el segundo archivo se utiliza |
---|
| 49 | cp $GRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" |
---|
| 50 | } |
---|
| 51 | |
---|
| 52 | #/** |
---|
| 53 | # ogUUIDChange int_ndisk str_repo |
---|
| 54 | #@brief Reemplaza el UUID de un sistema de ficheros. |
---|
| 55 | #@param int_ndisk nº de orden del disco |
---|
| 56 | #@param int_part nº de partición |
---|
| 57 | #@return (nada, por determinar) |
---|
| 58 | #@exception OG_ERR_FORMAT formato incorrecto. |
---|
| 59 | #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. |
---|
| 60 | #@TODO Se utiliza el comando uuidgen que no existe en el ogLive |
---|
| 61 | #*/ ## |
---|
| 62 | function ogUUIDChange { |
---|
| 63 | local MNTDIR DEVICE UUID NEWUUID f |
---|
| 64 | |
---|
| 65 | # Si se solicita, mostrar ayuda. |
---|
| 66 | if [ "$*" == "help" ]; then |
---|
| 67 | ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \ |
---|
| 68 | "$FUNCNAME 1 2" |
---|
| 69 | return |
---|
| 70 | fi |
---|
| 71 | |
---|
| 72 | # Error si no se reciben al menos 2 parámetros. |
---|
| 73 | [ $# -eq 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $? |
---|
| 74 | |
---|
| 75 | # Comprobamos que exista la partición |
---|
| 76 | MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_NOTFOUND "Device $1 $2" || return $? |
---|
| 77 | DEVICE=$(ogDiskToDev $1 $2) |
---|
| 78 | UUID=$(blkid -o value -s UUID $DEVICE) |
---|
| 79 | NEWUUID=$(uuidgen) |
---|
| 80 | |
---|
| 81 | # Cambiamos UUID a la partición |
---|
| 82 | ogUnmount $1 $2 |
---|
| 83 | tune2fs $DEVICE -U $NEWUUID |
---|
| 84 | |
---|
| 85 | # Cambiamos UUID en la configuración (fstab y grub) |
---|
| 86 | ogMount $1 $2 |
---|
| 87 | for f in $MNTDIR/etc/fstab $MNTDIR/{,boot/}{{grubMBR,grubPARTITION}/boot/,}{grub{,2},{,efi/}EFI/*}/{menu.lst,grub.cfg}; do |
---|
| 88 | [ -r $f ] && echo sed -i s/$UUID/$NEWUUID/g $f |
---|
| 89 | [ -r $f ] && sed -i s/$UUID/$NEWUUID/g $f |
---|
| 90 | done |
---|
| 91 | } |
---|