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 | } |
---|