#!/bin/sh
_SCRIPT_NAME=efi-boot-update
-_SCRIPT_VERSION=0.0
+_SCRIPT_VERSION=0.1
. /etc/rc.d/init.d/functions
echo " --mount, -m Try to mount /boot/efi first"
echo " --verbose, -v Verbose output"
echo " --force Force file updates"
+ echo " --auto Automatic run from packages %post"
}
msg () {
local bootnum
bootnum=$(find_bootmgr_entry "$1")
[ -n "$bootnum" ] || return 0
- verbose_cmd $EFIBOOTMGR $EFIBOOTMGR_OPTS --delete-bootnum -b --quiet "$bootnum"
+ verbose_cmd $EFIBOOTMGR $EFIBOOTMGR_OPTS --quiet --delete-bootnum -b "$bootnum"
echo -n "$bootnum"
}
echo -n "$bootnum"
}
+safe_string () {
+ echo -n "$*" | tr -c '[a-zA-Z0-9_]' '_'
+}
+
+ALLOW_AUTO="no"
FORCE_UPDATES="no"
MOUNT_EFI_PARTITION="no"
LABEL_PREFIX=""
-DEFAULT=""
VERBOSE="no"
[ -e /etc/efi-boot/update.conf ] && . /etc/efi-boot/update.conf
+AUTO_RUN=no
+
while [ -n "$*" ] ; do
local arg
arg="$1"
--force)
FORCE_UPDATES="yes"
;;
+ --auto)
+ is_yes "$ALLOW_AUTO" || exit 0
+ AUTO_RUN=yes
+ ;;
*)
usage >&2
exit 2
LABEL="$LABEL_PREFIX$LABEL"
if ! is_yes "$ENABLED" ; then
- remove_bootmgr_entry "$LABEL"
+ remove_bootmgr_entry "$LABEL" >/dev/null
continue
fi
local efi_arch
if [[ "$ARCH" = i?86 || "$ARCH" = pentium[45] || "$ARCH" = "athlon" ]] ; then
# %ix86
- efi_arch=x32
+ efi_arch=ia32
elif [[ "$ARCH" = "x86_64" || "$ARCH" = "amd64" || "$ARCH" = "ia32e" ]] ; then
# %x8664
efi_arch=x64
install_files
if [ -n "$BINARY" ] ; then
bootnum="$(add_bootmgr_entry "$LABEL" "$BINARY" "$ARGS")"
- eval "_${CONFIG_NAME}_bootnum=\"$bootnum\""
+ eval "_$(safe_string ${CONFIG_NAME})_bootnum=\"$bootnum\""
fi
done
-if [ -n "$ORDER" ] ; then
+if [ -n "$ORDER" -a "$EFIBOOTMGR" != "/bin/true" ] ; then
# set up the configured boot order, not removing any existing entries
- tail="$(efibootmgr | awk '/^BootOrder:/ {gsub(/,/," ",$2); print $2}')"
+ tail="$($EFIBOOTMGR | awk '/^BootOrder:/ {gsub(/,/," ",$2); print $2}')"
head=""
for config_name in $ORDER ; do
- eval "bootnum=\$_${config_name}_bootnum"
+ eval "bootnum=\$_$(safe_string ${config_name})_bootnum"
if [ -z "$bootnum" ] ; then
- msg "Cannot find '$config_name' config - won't add to boot order."
+ verbose "Cannot find '$config_name' config - won't add to boot order."
continue
fi
tail="$(list_remove "$tail" "$bootnum")"
fi
fi
+if ! is_yes "$ALLOW_AUTO" && ! is_yes "$AUTO_RUN"; then
+ msg "ALLOW_AUTO is not enabled in /etc/efi-boot/update.conf,"
+ msg "files will not be automatically updated on upgrades."
+fi
+
# vi: ft=sh sw=4 sts=4 et