install-update: Use Gentoo shell functions
parent
e0d873bbf0
commit
a776a5aa96
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
# vim: set sw=4 ts=4 sts=4 et :
|
||||
|
||||
. /lib/gentoo/functions.sh
|
||||
|
||||
die() {
|
||||
rc=$?
|
||||
if [ $rc -eq 0 ]; then
|
||||
|
@ -10,23 +12,10 @@ die() {
|
|||
exit $rc
|
||||
}
|
||||
|
||||
error() {
|
||||
printf 'ERROR: '
|
||||
info "$@"
|
||||
}
|
||||
|
||||
get_partuuid() {
|
||||
blkid -o value -s PARTUUID "$1"
|
||||
}
|
||||
|
||||
info() {
|
||||
if [ $# -eq 1 ]; then
|
||||
echo "$1" >&2
|
||||
elif [ $# -gt 1 ]; then
|
||||
printf "$@" >&2
|
||||
fi
|
||||
}
|
||||
|
||||
set_default_boot() {
|
||||
_rc=0
|
||||
mkdir -p newroot || return
|
||||
|
@ -38,53 +27,55 @@ set_default_boot() {
|
|||
_kver=${_kernel#vmlinuz-}
|
||||
_partuuid=$(get_partuuid "$1")
|
||||
_id=id-${_partuuid}-${_kver}
|
||||
printf 'Setting default boot entry to %s\n' "${_id}"
|
||||
grub-editenv /boot/efi/EFI/gentoo/grubenv set "default=${_id}" || rc=$?
|
||||
ebegin 'Setting default boot entry'
|
||||
veindent
|
||||
veinfo "Menu entry ID: ${_id}"
|
||||
veoutdent
|
||||
grub-editenv /boot/efi/EFI/gentoo/grubenv set "default=${_id}" || _rc=$?
|
||||
eend $_rc
|
||||
umount newroot
|
||||
return $rc
|
||||
}
|
||||
|
||||
warn() {
|
||||
printf 'WARNING: '
|
||||
info "$@"
|
||||
return $_rc
|
||||
}
|
||||
|
||||
write_firmware() {
|
||||
_rc=0
|
||||
_esp=$(findfs PARTLABEL='EFI System Partition')
|
||||
if [ -z "${_esp}" ]; then
|
||||
error 'Could not identify EFI System Partition'
|
||||
eerror 'Could not identify EFI System Partition'
|
||||
return 1
|
||||
fi
|
||||
if ! mountpoint -q /boot/efi; then
|
||||
mount -o ro "${_esp}" /boot/efi \
|
||||
|| warn 'Failed to mount EFI System Partition'
|
||||
|| ewarn 'Failed to mount EFI System Partition'
|
||||
fi
|
||||
if [ -f /boot/efi/EFI/gentoo/grubenv ]; then
|
||||
info 'Saving current GRUB environment ...'
|
||||
cp /boot/efi/EFI/gentoo/grubenv . \
|
||||
|| warn 'Failed to save GRUB environment'
|
||||
ebegin 'Saving current GRUB environment'
|
||||
cp /boot/efi/EFI/gentoo/grubenv .
|
||||
ewend $? 'Failed to save GRUB environment'
|
||||
fi
|
||||
if mountpoint -q /boot/efi; then
|
||||
umount /boot/efi || return
|
||||
fi
|
||||
info 'Writing firmware image to EFI System Partition (%s) ...\n' "${_esp}"
|
||||
ebegin "Writing firmware image to EFI System Partition (${_esp})"
|
||||
dd if=firmware.img of="${_esp}" bs=1M || _rc=$?
|
||||
if [ $_rc -eq 0 ]; then
|
||||
mount -orw "${_esp}" /boot/efi || rc=$?
|
||||
fi
|
||||
if [ $_rc -eq 0 ]; then
|
||||
if [ -f grubenv ]; then
|
||||
printf 'Restoring GRUB environment ...\n'
|
||||
ebegin 'Restoring GRUB environment'
|
||||
cp grubenv /boot/efi/EFI/gentoo/grubenv || _rc=$?
|
||||
eend $_rc
|
||||
fi
|
||||
fi
|
||||
return $_rc
|
||||
}
|
||||
|
||||
write_rootfs() {
|
||||
printf 'Writing rootfs image to %s ...\n' "$1"
|
||||
dd if=rootfs.squashfs of="$1" bs=1M
|
||||
_rc=0
|
||||
ebegin "Writing rootfs image to $1"
|
||||
dd if=rootfs.squashfs of="$1" bs=1M || _rc=$?
|
||||
eend $_rc
|
||||
}
|
||||
|
||||
rc=0
|
||||
|
@ -94,10 +85,10 @@ write_rootfs "${newroot}" || die 'Failed to write new rootfs image to disk'
|
|||
write_firmware || die 'Failed to write new firmware image to disk'
|
||||
if ! set_default_boot "${newroot}"; then
|
||||
rc=$?
|
||||
error 'Failed to set default boot option'
|
||||
eerror 'Failed to set default boot option'
|
||||
fi
|
||||
|
||||
if [ $rc -eq 0 ]; then
|
||||
info 'Successfully installed update'
|
||||
einfo 'Successfully installed update'
|
||||
fi
|
||||
exit $rc
|
||||
|
|
Reference in New Issue