/usr/share/drbl/sbin/set-netboot-1st-efi-nvram is in clonezilla 3.10.11-3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | #!/bin/bash
# License: GPL
# Author: Steven Shiau <steven _at_ nchc org tw>
# Description: Program to update the UEFI NVRAM for the restored disk
# Load DRBL setting and functions
DRBL_SCRIPT_PATH="${DRBL_SCRIPT_PATH:-/usr/share/drbl}"
. $DRBL_SCRIPT_PATH/sbin/drbl-conf-functions
. /etc/drbl/drbl-ocs.conf
. $DRBL_SCRIPT_PATH/sbin/ocs-functions
# Load the config in ocs-live.conf. This is specially for Clonezilla live. It will overwrite some settings of /etc/drbl/drbl-ocs.conf, such as $DIA...
[ -e "/etc/ocs/ocs-live.conf" ] && . /etc/ocs/ocs-live.conf
# Settings
ocs_batch_mode="false"
#
USAGE() {
echo "$ocs - Set network boot in 1st order of UEFI NVRAM"
echo "Usage:"
echo "To run $ocs:"
echo "$ocs [OPTION]"
echo "Options:"
echo "-b, --batch Run image checking in batch mode"
echo "Ex:"
echo "To set network boot in 1st order of UEFI NVRAM in batch mode, run"
echo " $ocs -b"
echo
} # end of USAGE
do_check_and_update_efi_nvram() {
#
# root@trusty64-10-0-0-1:~# efibootmgr -v
# BootCurrent: 0002
# BootOrder: 0002,0004,0001,0003,0000
# Boot0000* EFI VMware Virtual SCSI Hard Drive (1.0) ACPI(a0341d0,0)PCI(10,0)SCSI(1,0)
# Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0) ACPI(a0341d0,0)PCI(11,0)PCI(5,0)03120a00010000000000
# Boot0002* EFI Network ACPI(a0341d0,0)PCI(11,0)PCI(1,0)MAC(000c2968f323,0)
# Boot0003* EFI Internal Shell (Unsupported option) MM(b,3efcb000,3f355fff)
# Boot0004* Ubuntu 12.10 HD(1,800,5f000,9323f65d-c6ca-4041-abb7-18148a3fb6ab)File(\EFI\ubuntu\grubx64.efi)
# root@trusty64-10-0-0-1:~# efibootmgr -v | grep -Ew "^BootCurrent:" | awk -F" " '{print $2}'
# 0002
# root@trusty64-10-0-0-1:~# efibootmgr -v | grep -Ew "^Boot0002"
# Boot0002* EFI Network ACPI(a0341d0,0)PCI(11,0)PCI(1,0)MAC(000c2968f323,0)
bootcurrent_no="$(LC_ALL=C efibootmgr -v | grep -Eiw "^BootCurrent:" | awk -F" " '{print $2}')"
bootorder="$(LC_ALL=C efibootmgr -v | grep -Eiw "^BootOrder:" | awk -F" " '{print $2}')"
bootcurrent="Boot${bootcurrent_no}"
if [ -n "$(LC_ALL=C efibootmgr -v | grep -Eiw "^$bootcurrent" |\
grep -Eiw "EFI Network")" ]; then
# Change EFI network boot to 1st order.
# E.g. BootOrder: 0004,0002,0001,0003,0000 -> 0002,0004,0001,0003,0000
# Two possibilities, between numbers, or in the end, i.e.
# case 1: 0004,0002,0001,0003,0000
# case 2: 0004,0000,0001,0003,0002
# case 3: 0002,0004,0000,0001,0003 -> No need to change
# case 4: 0002 -> No need to change
new_bootorder=""
if [ -n "$(echo "$bootorder" | grep -E ",${bootcurrent_no},")" ]; then
# case 1: 0004,0002,0001,0003,0000 -> 0002,0004,0001,0003,0000
new_bootorder="$(echo $bootorder | sed -r -e "s|(.*)${bootcurrent_no}|${bootcurrent_no},\1|g")"
elif [ -n "$(echo "$bootorder" | grep -E ",${bootcurrent_no}$")" ]; then
# case 2: 0004,0000,0001,0003,0002 -> 0002,0004,0001,0003,0000
new_bootorder="$(echo $bootorder | sed -r -e "s|(.*)${bootcurrent_no}|${bootcurrent_no},\1|g")"
fi
if [ -n "$new_bootorder" ]; then
echo "Running: efibootmgr -o \"$new_bootorder\""
LC_ALL=C efibootmgr -o "$new_bootorder"
else
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "EFI network boot already in the 1st boot order."
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
fi
echo "The EFI bootmanager:"
LC_ALL=C efibootmgr
fi
} # do_check_and_update_efi_nvram
########################
##### MAIN PROGRAM #####
########################
#
ocs_file="$0"
ocs=`basename $ocs_file`
while [ $# -gt 0 ]; do
case "$1" in
-b|--batch) ocs_batch_mode="true"; shift;;
-*) echo "${0}: ${1}: invalid option" >&2
USAGE >& 2
exit 2 ;;
*) break ;;
esac
done
check_if_root
ask_and_load_lang_set
if [ "$ocs_batch_mode" = "false" ]; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "The following action is to set the network boot in the 1st order in the EFI NVRAM."
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_are_u_sure_u_want_to_continue"
echo -n "[y/N] "
read cont_ans
case "$cont_ans" in
y|Y|[yY][eE][sS])
echo $msg_ok_let_do_it
;;
*)
echo "Abort!"
exit 2
esac
fi
echo "Setting network boot in the 1st order of uEFI NVRAM..."
do_check_and_update_efi_nvram
exit 0
|