OpenGnsys  1.1.1
UEFI.lib
Ir a la documentación de este archivo.
1 #!/bin/bash
2 # Libreria provisional para uso de UEFI
3 # Las funciones se incluirán las librerías ya existentes
4 
5 # ##
14 function ogNvramActiveEntry () {
15 local NUMENTRY
16 
17 # Si se solicita, mostrar ayuda.
18 if [ "$*" == "help" ]; then
19  ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \
20  "$FUNCNAME 2" \
21  "$FUNCNAME \"Windows Boot Manager\""
22  return
23 fi
24 
25 # Error si no se recibe 1 parámetro.
26 [ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $?
27 
28 # Si no es equipo UEFI salir con error
29 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
30 
31 # Distingo si es número de orden o etiqueta
32 if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then
33  NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}')
34 else
35  NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}')
36 fi
37 
38 [ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'")
39 
40 efibootmgr -a -b $NUMENTRY &>/dev/null
41 }
42 
43 # ##
54 function ogNvramAddEntry () {
55 local EFIDISK EFIPART BOOTLABEL BOOTLOADER ADDORDER
56 
57 # Si se solicita, mostrar ayuda.
58 if [ "$*" == "help" ]; then
59  ogHelp "$FUNCNAME" "$FUNCNAME Str_label_entry Str_boot_loader [ Bool_add_bootorder ]" \
60  "$FUNCNAME 1 2 TRUE" \
61  "$FUNCNAME grub /EFI/grub/grubx64.efi TRUE" \
62  "$FUNCNAME Windows /EFI/Microsoft/Boot/bootmgfw.efi"
63  return
64 fi
65 
66 # Error si no se recibe 1 parámetro.
67 [ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME Str_label_entry Str_boot_locader" || return $?
68 
69 # Si no es equipo UEFI salir con error
70 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
71 
72 read -e EFIDISK EFIPART <<<"$(ogGetEsp)"
73 [ -n "$EFIPART" ] || ogRaiseError $OG_ERR_NOTFOUND "ESP" || return $?
74 
75 # Recogemos parámetros
76 # Distinguimos si es disco/partición o etiqueta/cargador
77 if [[ "$1$2" =~ ^([0-9]+)$ ]]; then
78  BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
79  BOOTLOADER="/EFI/$BOOTLABEL/Boot/ogloader.efi"
80 else
81  BOOTLABEL="$1"
82  BOOTLOADER="$2"
83 fi
84 
85 
86 # Si existe entrada con la misma etiqueta la borramos
87 ogNvramDeleteEntry "$BOOTLABEL" 2>/dev/null
88 
89 efibootmgr -C -d $(ogDiskToDev $EFIDISK) -p $EFIPART -L "$BOOTLABEL" -l "$BOOTLOADER" &>/dev/null
90 
91 # Incluimos la entrada en el orden de arranque (opcional)
92 if [ "${3^^}" == "TRUE" ]; then
93  NUMENTRY=$(efibootmgr |awk -v LABEL="$BOOTLABEL" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}')
94  ogNvramSetOrder $(ogNvramGetOrder |tr , " ") $NUMENTRY
95 fi
96 }
97 
98 
99 # ##
109 function ogCopyEfiBootLoader () {
110 # Variables locales
111 local MNTDIR EFIDIR BOOTLABEL OSVERSION LOADER f
112 
113 # Si se solicita, mostrar ayuda.
114 if [ "$*" == "help" ]; then
115  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \
116  "$FUNCNAME 1 2"
117  return
118 fi
119 
120 # Error si no se reciben 2 arámetros.
121 [ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $?
122 
123 # Comprobamos que exista partición de sistema y la ESP
124 MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_PARTITION "$DISK $PART" || return $?
125 EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
126 
127 # Comprobamos que exista el cargador
128 BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
129 OSVERSION=$(ogGetOsVersion $1 $2)
130 case $OSVERSION in
131  *Windows\ 10*)
132  for f in $EFIDIR/EFI/{Microsoft,$BOOTLABEL}/Boot/bootmgfw.efi; do
133  [ -r $f ] && LOADER=$f
134  done
135  [ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($OSVERSION, EFI)" || return $?
136  # Si existe el directorio Boot lo borramos
137  [ -d $MNTDIR/ogBoot ] && rm -rf $MNTDIR/ogBoot
138  DIRLOADER=$(realpath "${LOADER%/*}/..")
139  cp -r ${DIRLOADER}/Boot $MNTDIR/ogBoot
140  ;;
141 esac
142 }
143 
144 
145 # ##
154 function ogNvramDeleteEntry () {
155 local NUMENTRY n
156 
157 # Si se solicita, mostrar ayuda.
158 if [ "$*" == "help" ]; then
159  ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \
160  "$FUNCNAME 2" \
161  "$FUNCNAME \"Windows Boot Manager\""
162  return
163 fi
164 
165 # Error si no se recibe 1 parámetro.
166 [ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $?
167 
168 # Si no es equipo UEFI salir con error
169 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
170 
171 # Distingo si es número de orden o etiqueta
172 if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then
173  NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}')
174 else
175  NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}')
176 fi
177 
178 [ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'")
179 
180 for n in $NUMENTRY; do
181  efibootmgr -B -b $n &>/dev/null
182 done
183 }
184 
185 
186 # ##
192 function ogNvramGetCurrent () {
193 
194 # Si se solicita, mostrar ayuda.
195 if [ "$*" == "help" ]; then
196  ogHelp "$FUNCNAME" "$FUNCNAME" \
197  "$FUNCNAME"
198  return
199 fi
200 
201 # Si no es equipo UEFI salir con error
202 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
203 
204 efibootmgr| awk -v bootentry=99999 '{if ($1~/BootCurrent/) bootentry=$2; if ($1~bootentry) printf "%s %s %s\n", gensub(/^0{1,3}/,"",1,substr($1,5,4))," ", substr($0, index($0,$2))}'
205 }
206 
207 
208 # ogNvramGetNext
209 #@brief Muestra la entrada del gestor de arranque (NVRAM) que se utilizará en el próximo arranque.
210 #@return Entrada que se utilizará en el próximo arranque
211 #@exception OG_ERR_NOTUEFI UEFI no activa.
212 #*/ ##
213 function ogNvramGetNext () {
214 # Si se solicita, mostrar ayuda.
215 if [ "$*" == "help" ]; then
216  ogHelp "$FUNCNAME" "$FUNCNAME" \
217  "$FUNCNAME"
218  return
219 fi
220 
221 # Si no es equipo UEFI salir con error
222 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
223 
224 efibootmgr|awk '{ if ($1 == "BootNext:") print $2}'
225 }
226 
227 
228 # ogNvramGetOrder
229 #@brief Muestra el orden de las entradas del gestor de arranque (NVRAM)
230 #@return Orden de las entradas
231 #@exception OG_ERR_NOTUEFI UEFI no activa.
232 #*/ ##
233 function ogNvramGetOrder () {
234 # Si se solicita, mostrar ayuda.
235 if [ "$*" == "help" ]; then
236  ogHelp "$FUNCNAME" "$FUNCNAME" \
237  "$FUNCNAME"
238  return
239 fi
240 
241 # Si no es equipo UEFI salir con error
242 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
243 
244 efibootmgr|awk '{ if ($1 == "BootOrder:") print $2}'
245 }
246 
247 
248 # ##
254 function ogNvramGetTimeout () {
255 # Si se solicita, mostrar ayuda.
256 if [ "$*" == "help" ]; then
257  ogHelp "$FUNCNAME" "$FUNCNAME" \
258  "$FUNCNAME"
259  return
260 fi
261 
262 # Si no es equipo UEFI salir con error
263 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
264 
265 efibootmgr|awk '{ if ($1 == "Timeout:") print substr($0, index($0,$2))}'
266 }
267 
268 
269 # ##
280 function ogGrubUefiConf () {
281 local EFIDIR BOOTLABEL GRUBEFI UUID DEVICE PREFIXSECONDSTAGE EFIGRUBDIR
282 
283 # Si se solicita, mostrar ayuda.
284 if [ "$*" == "help" ]; then
285  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" \
286  "$FUNCNAME 1 2" \
287  "$FUNCNAME 1 3 /boot/grubPARTITION"
288  return
289 fi
290 
291 # Error si no se reciben al menos 2 parámetros.
292 [ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part [ str_dir_grub ]" || return $?
293 
294 # Directorio del grub en la partición de sistema
295 PREFIXSECONDSTAGE="$3"
296 
297 EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
298 BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
299 EFIGRUBDIR="$EFIDIR/EFI/$BOOTLABEL/boot/grub"
300 # Comprobamos que existe directorio
301 [ -d "$EFIGRUBDIR" ] || mkdir -p "$EFIGRUBDIR"
302 # Parcheamos uuid y particion en grub.cfg
303 UUID=$(blkid -o value -s UUID $(ogDiskToDev $1 $2))
304 DEVICE="hd$(expr $1 - 1 ),gpt$2"
305 
306 cat << EOT > $EFIGRUBDIR/grub.cfg
307 set root='$DEVICE'
308 set prefix=(\$root)'${PREFIXSECONDSTAGE}/boot/grub'
309 configfile \$prefix/grub.cfg
310 EOT
311 
312 # Provisional: confirmar si el segundo archivo se utiliza
313 cp $EFIGRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg"
314 }
315 
316 
317 # ##
326 function ogNvramInactiveEntry () {
327 local NUMENTRY
328 
329 # Si se solicita, mostrar ayuda.
330 if [ "$*" == "help" ]; then
331  ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \
332  "$FUNCNAME 2" \
333  "$FUNCNAME \"Windows Boot Manager\""
334  return
335 fi
336 
337 # Error si no se recibe 1 parámetro.
338 [ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $?
339 
340 # Si no es equipo UEFI salir con error
341 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
342 
343 # Distingo si es número de orden o etiqueta
344 if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then
345  NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}')
346 else
347  NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}')
348 fi
349 
350 [ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'")
351 
352 efibootmgr -A -b $NUMENTRY &>/dev/null
353 }
354 
355 
356 # ##
362 function ogNvramList () {
363 
364 # Si se solicita, mostrar ayuda.
365 if [ "$*" == "help" ]; then
366  ogHelp "$FUNCNAME" "$FUNCNAME" \
367  "$FUNCNAME"
368  return
369 fi
370 
371 # Si no es equipo UEFI salir con error
372 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
373 
374 efibootmgr |awk '{if($1~/Boot[[:digit:]]/) ; active="" ;if ($1~/*/) active="*"; if($1~/Boot[[:digit:]]/) printf "%4s %s %s %s\n", gensub(/^0{1,3}/,"",1,substr($1,5,4))," ", substr($0, index($0,$2)), active}'
375 }
376 
377 
378 # ##
384 function ogNvramPxeFirstEntry (){
385 local NUMENTRY ORDER
386 
387 # Si se solicita, mostrar ayuda.
388 if [ "$*" == "help" ]; then
389  ogHelp "$FUNCNAME" "$FUNCNAME" \
390  "$FUNCNAME"
391  return
392 fi
393 
394 # Si no es equipo UEFI salir con error
395 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
396 
397 NUMENTRY=$(printf %04X 0x$(efibootmgr|awk '/IP[vV]{0,1}4/ {print gensub(/^0{1,3}/,"",1,substr($1,5,4))}'))
398 
399 # Si la entrada es la primera nos salimos.
400 [[ $(ogNvramGetOrder) =~ ^$NUMENTRY ]] && return
401 
402 # Si la entrada ya existe la borramos.
403 ORDER="$NUMENTRY $(ogNvramGetOrder| sed -e s/$NUMENTRY//g -e s/,/' '/g)"
404 
405 ogNvramSetOrder $ORDER
406 }
407 
408 
409 # ##
419 function ogRestoreEfiBootLoader () {
420 # Variables locales
421 local MNTDIR EFIDIR BOOTLABEL OSVERSION LOADER f UUID DEVICE
422 
423 # Si se solicita, mostrar ayuda.
424 if [ "$*" == "help" ]; then
425  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \
426  "$FUNCNAME 1 2"
427  return
428 fi
429 
430 # Error si no se reciben 2 arámetros.
431 [ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $?
432 
433 # Comprobamos que exista partición de sistema y la ESP
434 MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_PARTITION "$DISK $PART" || return $?
435 EFIDIR=$(ogMount $(ogGetEsp))
436 if [ "$EFIDIR" == "" ]; then
437  ogFormat $(ogGetEsp) FAT32
438  EFIDIR=$(ogMount $(ogGetEsp)) || ogRaiseError $OG_ERR_PARTITION "ESP" || return $?
439 fi
440 
441 # Comprobamos que exista el cargador
442 #BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
443 OSVERSION=$(ogGetOsVersion $1 $2)
444 case $OSVERSION in
445  *Windows\ 10*)
446  BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2)
447  LOADER=$(ogGetPath $MNTDIR/ogBoot/bootmgfw.efi)
448  [ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($OSVERSION, EFI)" || return $?
449  [ -r $EFIDIR/EFI/$BOOTLABEL ] && rm -rf $EFIDIR/EFI/$BOOTLABEL
450  mkdir -p $EFIDIR/EFI/$BOOTLABEL
451  cp -r "${LOADER%/*}" $EFIDIR/EFI/$BOOTLABEL/Boot
452  # Nombre OpenGnsys para cargador
453  cp $LOADER $EFIDIR/EFI/$BOOTLABEL/Boot/ogloader.efi
454 
455  # Si existe subcarpeta Microsoft en la partición EFI la renombramos
456  [ "$(ogGetPath $EFIDIR/EFI/Microsoft)" == "" ] || mv $EFIDIR/EFI/{Microsoft,Microsoft.backup.og}
457  ;;
458 esac
459 }
460 
461 
462 # ##
473 function ogRestoreUuidPartitions () {
474 local DISK PART IMGNAME INFOFILE DEVICE DATA GUID UUID IMGGUID
475 local EFIDEVICE EFIDATA EFIGUID EFIUUID EFIUUID IMGEFIGUID
476 
477 # Si se solicita, mostrar ayuda.
478 if [ "$*" == "help" ]; then
479  ogHelp "$FUNCNAME" "$FUNCNAME REPO|CACHE str_imgname int_ndisk int_npart" \
480  "$FUNCNAME REPO Windows 1 2"
481  return
482 fi
483 # Error si no se reciben 4 parámetros.
484 [ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME REPO|CACHE str_imgname int_ndisk int_npart" || return $?
485 
486 # Sólo se ejecuta si es UEFI
487 ogIsEfiActive || return
488 
489 # Parámetros de entrada
490 IMGNAME="$2"
491 INFOFILE="$OGIMG/.$IMGNAME.img.json"
492 [ "${1^^}" == "CACHE" ] && INFOFILE="$OGCAC$INFOFILE"
493 # TODO: que la función getPath soporte archivos ocultos
494 ls $INFOFILE &>/dev/null || ogRaiseError $OG_ERR_NOTFOUND "$INFOFILE" || return $?
495 DISK=$3
496 PART=$4
497 
498 DEVICE=$(ogDiskToDev $DISK)
499 read -e EFIDISK EFIPART <<<"$(ogGetEsp)"
500 
501 # Datos de la imagen
502 IMGGUID=$(jq .guid $INFOFILE|tr -d \")
503 IMGEFIGUID=$(jq .espguid $INFOFILE|tr -d \")
504 
505 # Datos actuales
506 DATA=$(sfdisk -J $DEVICE)
507 GUID=$(echo $DATA|jq ".partitiontable|.id"|tr -d \")
508 
509 if [ "$IMGGUID" != "$GUID" ]; then
510  echo sgdisk -U "$IMGGUID" "$DEVICE"
511  sgdisk -U "$IMGGUID" "$DEVICE"
512  partprobe
513 fi
514 
515 if [ $DISK -eq $EFIDISK ]; then
516  EFIDATA=$DATA
517  EFIDEVICE=$DEVICE
518 else
519  EFIDEVICE=$(ogDiskToDev $EFIDISK) || return $?
520  EFIDATA=$(sfdisk -J $EFIDEVICE)
521  EFIGUID=$(echo $EFIDATA|jq ".partitiontable|.id"|tr -d \")
522  if [ "$IMGEFIGUID" != "$EFIGUID" ]; then
523 echo sgdisk -U "$IMGEFIGUID" "$EFIDEVICE"
524  sgdisk -U "$IMGEFIGUID" "$EFIDEVICE"
525  partprobe
526  fi
527 fi
528 }
529 
530 
531 #/**
532 # ogNvramSetNext
533 #@brief Configura el próximo arranque con la entrada del gestor de arranque (NVRAM) identificada por la etiqueta o el orden.
534 #@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar.
535 #@return (nada)
536 #@exception OG_ERR_FORMAT formato incorrecto.
537 #@exception OG_ERR_NOTUEFI UEFI no activa.
538 #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado.
539 #*/ ##
540 function ogNvramSetNext () {
541 local NUMENTRY
542 
543 # Si se solicita, mostrar ayuda.
544 if [ "$*" == "help" ]; then
545  ogHelp "$FUNCNAME" "$FUNCNAME [ Num_order_entry | Label_entry ] " \
546  "$FUNCNAME 2" \
547  "$FUNCNAME \"Windows Boot Manager\""
548  return
549 fi
550 
551 # Error si no se recibe 1 parámetro.
552 [ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME [ Num_order_entry | Label_entry ]" || return $?
553 
554 # Si no es equipo UEFI salir con error
555 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
556 
557 # Distingo si es número de orden o etiqueta
558 if [[ $1 =~ ^([0-9a-fA-F]+)$ ]]; then
559  NUMENTRY=$( efibootmgr |awk -v NUM="$(printf %04x 0x$1|tr '[:lower:]' '[:upper:]')" '{ if($1~NUM) print substr($1,5,4)}')
560 else
561  NUMENTRY=$(efibootmgr |awk -v LABEL="$1" '{ if(substr($0, index($0,$2))==LABEL) print substr($1,5,4)}')
562 fi
563 
564 [ "$NUMENTRY" == "" ] && return $(ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry '$1'")
565 
566 efibootmgr -n $NUMENTRY &>/dev/null
567 }
568 
569 # ##
578 function ogNvramSetOrder () {
579 # Si se solicita, mostrar ayuda.
580 if [ "$*" == "help" ]; then
581  ogHelp "$FUNCNAME" "$FUNCNAME Num_order1 [ Num_order2 ] ... " \
582  "$FUNCNAME 1 3"
583  return
584 fi
585 #
586 # Error si no se recibe al menos 1 parámetro.
587 [ $# -ge 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME Num_order1 [ Num_order2 ] ..." || return $?
588 
589 # Si no es equipo UEFI salir con error
590 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
591 
592 # Comprobamos que sean números
593 [[ "$@" =~ ^([0-9a-fA-F ]+)$ ]] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME Num_order1 [ Num_order2 ] ..." || return $?
594 
595 # Entradas de la NVRAM actuales
596 NUMENTRYS=$(efibootmgr|awk '{ if ($1~/Boot[0-9a-fA-F]{4}/) printf "0%s ", substr($1,5,4)}')
597 
598 ORDER=""
599 for ARG in $@; do
600  # Si no existe la entrada me salgo
601  ARG=$(printf %04X 0x$ARG)
602  echo $NUMENTRYS | grep "$ARG" &>/dev/null || ogRaiseError $OG_ERR_NOTFOUND "NVRAM entry order \"$ARG\"" || return $?
603  ORDER=${ORDER},$ARG
604 done
605 
606 # Cambiamos el orden
607 efibootmgr -o ${ORDER#,} &>/dev/null
608 }
609 
610 
611 # ##
620 function ogNvramSetTimeout () {
621 # Si se solicita, mostrar ayuda.
622 if [ "$*" == "help" ]; then
623  ogHelp "$FUNCNAME" "$FUNCNAME int_Timeout (seg)" \
624  "$FUNCNAME 2"
625  return
626 fi
627 #
628 # Si no es equipo UEFI salir con error
629 ogIsEfiActive || ogRaiseError $OG_ERR_NOTUEFI || return $?
630 
631 # Error si no se recibe 1 parámetro.
632 [ $# -eq 1 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_Timeout (seg)" || return $?
633 
634 # Comprobamos que sea un número
635 [[ "$1" =~ ^([0-9 ]+)*$ ]] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_Timeout (seg)" || return $?
636 
637 # Cambiamos el orden
638 efibootmgr -t $1 &>/dev/null
639 }
640 
641 
642 # ##
651 function ogUuidChange () {
652 local MNTDIR DEVICE UUID NEWUUID f
653 
654 # Si se solicita, mostrar ayuda.
655 if [ "$*" == "help" ]; then
656  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part" \
657  "$FUNCNAME 1 2"
658  return
659 fi
660 
661 # Error si no se reciben al menos 2 parámetros.
662 [ $# -eq 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_part" || return $?
663 
664 # Comprobamos que exista la partición
665 MNTDIR=$(ogMount $1 $2) || ogRaiseError $OG_ERR_NOTFOUND "Device $1 $2" || return $?
666 DEVICE=$(ogDiskToDev $1 $2)
667 UUID=$(blkid -o value -s UUID $DEVICE)
668 NEWUUID=$(cat /proc/sys/kernel/random/uuid)
669 
670 # Cambiamos UUID a la partición
671 ogUnmount $1 $2
672 tune2fs $DEVICE -U $NEWUUID
673 
674 # Cambiamos UUID en la configuración (fstab y grub)
675 ogMount $1 $2
676 for f in $MNTDIR/etc/fstab $MNTDIR/{,boot/}{{grubMBR,grubPARTITION}/boot/,}{grub{,2},{,efi/}EFI/*}/{menu.lst,grub.cfg}; do
677  [ -r $f ] && sed -i s/$UUID/$NEWUUID/g $f
678 done
679 }
function ogDiskToDev()
Devuelve la equivalencia entre el nº de orden del dispositivo (dicso o partición) y el nombre de fich...
Definition: Disk.lib:484
function ogIsEfiActive()
Comprueba si el sistema tiene activo el arranque EFI.
Definition: Inventory.lib:124
function ogNvramActiveEntry()
Activa entrada de la NVRAM identificada por la etiqueta o el orden #.
Definition: UEFI.lib:14
function ogNvramAddEntry()
Crea nueva entrada en el gestor de arranque (NVRAM), opcionalmente la incluye al final del orden de a...
Definition: UEFI.lib:54
function ogNvramGetTimeout()
Muestra el tiempo de espera del gestor de arranque (NVRAM) #.
Definition: UEFI.lib:254
Funciones para arranque y post-configuración de sistemas de archivos. #.
function ogRaiseError()
Devuelve el mensaje y el código de error correspondiente. #.
Definition: System.lib:188
function ogHelp()
Muestra mensaje de ayuda para una función determinda. #.
Definition: System.lib:153
function ogFormat()
Definition: FileSystem.lib:201
function ogCopyEfiBootLoader()
Copia el cargador de arranque desde la partición EFI a la de sistema. #.
Definition: UEFI.lib:109
function ogGetPath()
Inicia el proceso de arranque de un sistema de archivos. #.
Definition: File.lib:237
function ogNvramGetCurrent()
Muestra la entrada del gestor de arranque (NVRAM) que ha iniciado el equipo. #.
Definition: UEFI.lib:192
function ogNvramGetNext()
Definition: UEFI.lib:213
function ogNvramGetOrder()
Definition: UEFI.lib:233
function ogMount()
Definition: FileSystem.lib:704
function ogGrubUefiConf()
Genera el fichero grub.cfg de la ESP #.
Definition: UEFI.lib:280
function ogNvramList()
Lista las entradas de la NVRAN (sólo equipos UEFI) #.
Definition: UEFI.lib:362
function ogUnmount()
function ogNvramDeleteEntry()
Borra entrada de la NVRAM identificada por la etiqueta o el orden #.
Definition: UEFI.lib:154
function ogBoot()
Inicia el proceso de arranque de un sistema de archivos. #.
Definition: Boot.lib:44
function ogNvramInactiveEntry()
Inactiva entrada de la NVRAM identificada por la etiqueta o el orden #.
Definition: UEFI.lib:326
function ms sys()
Definition: ToolsGNU.c:42
function ogGetEsp()
Devuelve números de disco y partición para la partición EFI (ESP).
Definition: Disk.lib:697
function awk()
Definition: ToolsGNU.c:89