From 8707518746a789ee72707e92c5ee39791468489f Mon Sep 17 00:00:00 2001 From: Zach Dykstra Date: Tue, 10 Dec 2019 22:24:58 -0600 Subject: [PATCH] Create generate-zbm which can be used to manage the lifecycle of the initramfs, kernel and combined EFI image needed to boot a system. This script is considered beta, ensure you have backups of the files in your ESP before using it. Remove old void packages --- .perltidyrc | 1 + .../zfsbootmenu-parse-commandline.sh | 8 + 90zfsbootmenu/zfsbootmenu.sh | 87 ++++--- VERSION | 1 + bin/generate-zbm | 240 ++++++++++++++++++ etc/default/zfsbootmenu | 2 - etc/zfsbootmenu/config | 2 - etc/zfsbootmenu/config.ini | 16 ++ .../dracut.conf.d/zfsbootmenu.conf | 1 - .../mount-zfs.sh.diff | 0 examples/refind_linux.conf | 2 + void/zfsbootmenu-0.7.2_1.noarch.xbps | Bin 8080 -> 0 bytes void/zfsbootmenu/INSTALL | 59 ----- void/zfsbootmenu/INSTALL.msg | 2 - void/zfsbootmenu/template | 25 -- 15 files changed, 315 insertions(+), 131 deletions(-) create mode 100644 .perltidyrc create mode 100644 VERSION create mode 100755 bin/generate-zbm delete mode 100644 etc/default/zfsbootmenu delete mode 100644 etc/zfsbootmenu/config create mode 100644 etc/zfsbootmenu/config.ini rename mount-zfs.sh.diff => examples/mount-zfs.sh.diff (100%) create mode 100755 examples/refind_linux.conf delete mode 100644 void/zfsbootmenu-0.7.2_1.noarch.xbps delete mode 100644 void/zfsbootmenu/INSTALL delete mode 100644 void/zfsbootmenu/INSTALL.msg delete mode 100644 void/zfsbootmenu/template diff --git a/.perltidyrc b/.perltidyrc new file mode 100644 index 0000000..b7620fb --- /dev/null +++ b/.perltidyrc @@ -0,0 +1 @@ +-i=2 --maximum-line-length=120 -ce -cb diff --git a/90zfsbootmenu/zfsbootmenu-parse-commandline.sh b/90zfsbootmenu/zfsbootmenu-parse-commandline.sh index d888b2b..b4a1e17 100755 --- a/90zfsbootmenu/zfsbootmenu-parse-commandline.sh +++ b/90zfsbootmenu/zfsbootmenu-parse-commandline.sh @@ -26,6 +26,14 @@ else import_args="-o readonly=on -N" fi +# Set a menu timeout, to allow immediate booting +menu_timeout=$( getarg timeout=) +if [ -n "${menu_timeout}" ]; then + info "ZFSBootMenu: Setting menu timeout from command line: ${menu_timeout}" +else + menu_timeout=10 +fi + wait_for_zfs=0 case "${root}" in ""|zfsbootmenu|zfsbootmenu:) diff --git a/90zfsbootmenu/zfsbootmenu.sh b/90zfsbootmenu/zfsbootmenu.sh index c8983d3..b13bebe 100755 --- a/90zfsbootmenu/zfsbootmenu.sh +++ b/90zfsbootmenu/zfsbootmenu.sh @@ -70,50 +70,57 @@ done <<<"${datasets}" # If BOOTFS is not empty display the fast boot menu fast_boot=0 if [[ ! -z "${BOOTFS}" ]]; then - - # Clear the screen - tput civis - HEIGHT=$(tput lines) - WIDTH=$(tput cols) - tput clear - - # Draw the line centered on the screen - mes="[ENTER] to boot" - x=$(( ($HEIGHT - 0) / 2 )) - y=$(( ($WIDTH - ${#mes}) / 2 )) - tput cup $x $y - echo -n ${mes} - - # Draw the line centered on the screen - mes="[ESC] boot menu" - x=$(( $x + 1 )) - y=$(( ($WIDTH - ${#mes}) / 2 )) - tput cup $x $y - echo -n ${mes} - - x=$(( $x + 1 )) - tput cup $x $y - - IFS='' # Draw a countdown menu - for (( i=10; i>0; i--)); do - mes="$( printf 'Booting %s in %0.2d seconds' ${BOOTFS} ${i} )" + if [[ ${menu_timeout} -gt 0 ]]; then + # Clear the screen + tput civis + HEIGHT=$(tput lines) + WIDTH=$(tput cols) + tput clear + + # Draw the line centered on the screen + mes="[ENTER] to boot" + x=$(( ($HEIGHT - 0) / 2 )) y=$(( ($WIDTH - ${#mes}) / 2 )) tput cup $x $y - echo -ne "${mes}" + echo -n ${mes} - # Wait 1 second for input - read -s -N 1 -t 1 key - # Escape key - if [ "$key" = $'\e' ]; then - break - # Enter key - elif [ "$key" = $'\x0a' ]; then - fast_boot=1 - break - fi - done - IFS="${OLDIFS}" + # Draw the line centered on the screen + mes="[ESC] boot menu" + x=$(( $x + 1 )) + y=$(( ($WIDTH - ${#mes}) / 2 )) + tput cup $x $y + echo -n ${mes} + + x=$(( $x + 1 )) + tput cup $x $y + + IFS='' + for (( i=${menu_timeout}; i>0; i--)); do + mes="$( printf 'Booting %s in %0.2d seconds' ${BOOTFS} ${i} )" + y=$(( ($WIDTH - ${#mes}) / 2 )) + tput cup $x $y + echo -ne "${mes}" + + # Wait 1 second for input + read -s -N 1 -t 1 key + # Escape key + if [ "$key" = $'\e' ]; then + break + # Enter key + elif [ "$key" = $'\x0a' ]; then + fast_boot=1 + break + fi + done + IFS="${OLDIFS}" + elif [[ ${menu_timeout} -eq 0 ]]; then + # Bypass the menu, immediately boot $BOOTFS + fast_boot=1 + else + # Make sure we bypass the other fastboot check + i=1 + fi # Boot up if we timed out, or if the enter key was pressed if [[ ${fast_boot} -eq 1 || $i -eq 0 ]]; then diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..f38fc53 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.7.3 diff --git a/bin/generate-zbm b/bin/generate-zbm new file mode 100755 index 0000000..9b70fb3 --- /dev/null +++ b/bin/generate-zbm @@ -0,0 +1,240 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +our $VERSION = '0.7.3'; + +use Getopt::Long qw(:config no_ignore_case auto_version); +use Pod::Usage qw(pod2usage); +use File::Basename; +use Sys::Hostname; +use Config::IniFiles; +use File::Temp qw(tempfile tempdir); +use File::Copy; +use File::Path qw(make_path remove_tree); + +use Data::Dumper; +$Data::Dumper::Indent = 1; +$Data::Dumper::Sortkeys = 1; +$Data::Dumper::Purity = 1; + +sub latestKernel; +sub createInitramfs; +sub unifiedEFI; +sub execute; + +my ( %runConf, %config, %components ); + +my $configfile = "/etc/zfsbootmenu/config.ini"; +my $version_file = "/usr/share/zfsbootmenu/VERSION"; + +$runConf{bootdir} = "/boot"; +$runConf{confd} = "/usr/share/zfsbootmenu/dracut.conf.d"; + +GetOptions( + "version|v=s" => \$runConf{version}, + "pkgname|p=s" => \$runConf{pkgname}, + "action|a=s" => \$runConf{action}, + "update|u=s" => \$runConf{update}, + "kernel|k=s" => \$runConf{kernel}, + "bootdir|b=s" => \$runConf{bootdir}, + "confd|C=s" => \$runConf{confd}, + "config|c=s" => \$configfile, +); + +# Sanity check, ensure we have a configuration file +unless ( -f $configfile ) { + print "$configfile missing, exiting\n"; + exit; +} + +# Read our config into a hash +tie %config, 'Config::IniFiles', ( -file => $configfile ); + +unless ( ( defined $config{Global}{ManageImages} ) and ( $config{Global}{ManageImages} ) ) { + print "ManageImages not enabled, no action taken\n"; + exit; +} + +# Override the location of our specific dracut.conf.d directory +if ( defined $config{Global}{DracutConfDir} ) { + $runConf{confd} = $config{Global}{DracutConfDir}; +} + +# Sanity check that we can determine the version of zfsbootmenu +unless ( defined $runConf{version} ) { + if ( -f $version_file ) { + print "Found $version_file\n"; + open(my $fh, '<', $version_file); + read $fh, $runConf{version}, -s $fh; + close($fh); + chomp($runConf{version}); + } else { + print "Unable to determine version\n"; + exit; + } +} + +# Create a temp directory +# It is automatically purged on program exit +my $dir = File::Temp->newdir(); +my $tempdir = $dir->dirname; + +# Set our kernel from the CLI, or pick the latest available in /boot +if ( ( defined $runConf{kernel} ) and ( length $runConf{kernel} ) ) { + unless ( -f $runConf{kernel} ) { + printf "The provided kernel %s was not found, unable to continue", $runConf{kernel}; + exit; + } +} else { + $runConf{kernel} = latestKernel; +} + +$runConf{bootdir} = dirname( $runConf{kernel} ); +( $runConf{kernel_prefix}, $runConf{kernel_version} ) = split( '-', basename( $runConf{kernel} ) ); + +# We always need to create an initramfs +printf "Creating ZFS Boot Menu %s, with %s %s\n", $runConf{version}, $runConf{kernel_prefix}, $runConf{kernel_version}; + +$runConf{initramfs} = createInitramfs( $tempdir, $runConf{kernel_version} ); + +if ( defined( $config{EFI}{Copies} ) and ( $config{EFI}{Copies} gt 0 ) ) { + $runConf{unified_efi} = unifiedEFI( $tempdir, $runConf{kernel}, $runConf{initramfs} ); + + if ( defined( $config{EFI}{Versioned} ) and ( $config{EFI}{Versioned} ) ) { + $runConf{efi_target} = sprintf( "%s/ZFSBootMenu-%s.EFI", $config{EFI}{ImageDir}, $runConf{version} ); + } else { + $runConf{efi_target} = sprintf( "%s/ZFSBootMenu.EFI", $config{EFI}{ImageDir} ); + } + + my $glob = join( '/', ( $config{EFI}{ImageDir}, "ZFSBootMenu*.EFI" ) ); + my @efi = sort glob($glob); + + my $index = 0; + foreach my $entry (@efi) { + if ( $entry eq $runConf{efi_target} ) { + splice @efi, $index, 1; + } + $index++; + } + + printf "Found %s existing images, allowed to have a total of %s\n", scalar @efi, $config{EFI}{Copies}; + while ( scalar @efi > $config{EFI}{Copies} ) { + my $image = shift(@efi); + printf "Removing %s\n", $image; + unlink $image; + } + + copy $runConf{unified_efi}, $runConf{efi_target}; + printf "Created a unified EFI at %s\n", $runConf{efi_target}; +} + +if ( defined( $config{Components}{Copies} ) and ( $config{Components}{Copies} gt 0 ) ) { + if ( defined( $config{Components}{Versioned} ) and ( $config{Components}{Versioned} ) ) { + $runConf{kernel_target} = + sprintf( "%s/%s-%s", $config{Components}{ImageDir}, $runConf{kernel_prefix}, $runConf{version} ); + $runConf{initramfs_target} = sprintf( "%s/initramfs-%s.img", $config{Components}{ImageDir}, $runConf{version} ); + + my $glob = sprintf( "%s/%s-*", $config{Components}{ImageDir}, $runConf{kernel_prefix} ); + my @components = sort glob($glob); + + # Drop the component count if the entry we're making already exists + my $index = 0; + foreach my $entry (@components) { + if ( $entry eq $runConf{kernel_target} ) { + splice @components, $index, 1; + } + $index++; + } + + printf "Found %s existing images, allowed to have a total of %s\n", scalar @components, $config{Components}{Copies}; + while ( scalar @components > $config{Components}{Copies} ) { + my $kernel = shift(@components); + my $initramfs = sprintf( "%s.img", $kernel ); + $initramfs =~ s/\Q$runConf{kernel_prefix}/initramfs/; + printf "Removing %s, %s\n", $kernel, $initramfs; + unlink $kernel; + unlink $initramfs; + } + } else { + $runConf{kernel_target} = sprintf( "%s/%s-bootmenu", $config{Components}{ImageDir}, $runConf{kernel_prefix} ); + $runConf{kernel_backup} = + sprintf( "%s/%s-bootmenu-backup", $config{Components}{ImageDir}, $runConf{kernel_prefix} ); + $runConf{initramfs_target} = sprintf( "%s/initramfs-bootmenu.img", $config{Components}{ImageDir} ); + $runConf{initramfs_backup} = sprintf( "%s/initramfs-bootmenu-backup.img", $config{Components}{ImageDir} ); + + if ( -f $runConf{kernel_target} ) { + copy $runConf{kernel_target}, $runConf{kernel_backup}; + copy $runConf{initramfs_target}, $runConf{initramfs_backup}; + printf "Created %s, %s\n", $runConf{kernel_backup}, $runConf{initramfs_backup}; + } + } + + copy $runConf{kernel}, $runConf{kernel_target}; + copy $runConf{initramfs}, $runConf{initramfs_target}; + printf "Created %s, %s\n", $runConf{kernel_target}, $runConf{initramfs_target}; +} + +# Finds the latest kernel in /boot +sub latestKernel { + my @prefixes = ( "vmlinux*", "vmlinuz*", "linux*", "kernel*" ); + for my $prefix (@prefixes) { + my $glob = join( '/', ( $runConf{bootdir}, $prefix ) ); + my @kernels = sort glob($glob); + next if !@kernels; + return pop @kernels; + } +} + +# Returns the path to an initramfs, or dies with an error +sub createInitramfs { + my ( $temp, $kver ) = @_; + + my $output_file = join( '/', $temp, "zfsbootmenu" ); + my @cmd = ( qw(dracut -q -f --confdir), $runConf{confd}, $output_file, qw(--kver), $kver, ); + my ( $output, $status ) = execute(@cmd); + if ( $status eq 0 ) { + return $output_file; + } else { + print $output; + die "Failed to create $output_file"; + } +} + +sub unifiedEFI { + my ( $temp, $kernel, $initramfs ) = @_; + + my $output_file = join( '/', $temp, "zfsbootmenu.efi" ); + my $cmdline_file = join( '/', $temp, "cmdline.txt" ); + my $cmdline = $config{Kernel}{CommandLine}; + + open( my $fh, '>', $cmdline_file ); + print $fh $cmdline; + close($fh); + + my @cmd = ( + qw(objcopy), + qw(--add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000), + qq(--add-section .cmdline=$cmdline_file), + qw(--change-section-vma .cmdline=0x30000), + qq(--add-section .linux=$kernel), + qw(--change-section-vma .linux=0x40000), + qq(--add-section .initrd=$initramfs), + qw(--change-section-vma .initrd=0x3000000), + qw(/usr/lib/gummiboot/linuxx64.efi.stub), + $output_file + ); + + my ( $output, $status ) = execute(@cmd); + if ( $status eq 0 ) { + return $output_file; + } else { + print $output; + die "Failed to create $output_file"; + } +} + +sub execute { + ( $_ = qx{@_ 2>&1}, $? >> 8 ); +} diff --git a/etc/default/zfsbootmenu b/etc/default/zfsbootmenu deleted file mode 100644 index 51429a2..0000000 --- a/etc/default/zfsbootmenu +++ /dev/null @@ -1,2 +0,0 @@ -MANAGE_IMAGES=0 -IMAGE_DIR=boot/efi diff --git a/etc/zfsbootmenu/config b/etc/zfsbootmenu/config deleted file mode 100644 index bc6bf26..0000000 --- a/etc/zfsbootmenu/config +++ /dev/null @@ -1,2 +0,0 @@ -CREATE_BOOT_IMAGE=0 -IMAGE_DIR=/efi diff --git a/etc/zfsbootmenu/config.ini b/etc/zfsbootmenu/config.ini new file mode 100644 index 0000000..b1c1e36 --- /dev/null +++ b/etc/zfsbootmenu/config.ini @@ -0,0 +1,16 @@ +[Global] +ManageImages=0 +DracutConfDir=/etc/zfsbootmenu/dracut.conf.d + +[Kernel] +CommandLine="ro quiet loglevel=0" + +[Components] +ImageDir=/boot/efi/EFI/void +Versioned=1 +Copies=3 + +[EFI] +ImageDir=/boot/efi/EFI/void +Versioned=1 +Copies=0 diff --git a/etc/zfsbootmenu/dracut.conf.d/zfsbootmenu.conf b/etc/zfsbootmenu/dracut.conf.d/zfsbootmenu.conf index c7588b3..6396919 100644 --- a/etc/zfsbootmenu/dracut.conf.d/zfsbootmenu.conf +++ b/etc/zfsbootmenu/dracut.conf.d/zfsbootmenu.conf @@ -1,4 +1,3 @@ nofsck="yes" -hostonly="yes" add_dracutmodules+=" zfsbootmenu " omit_dracutmodules+=" btrfs zfs resume " diff --git a/mount-zfs.sh.diff b/examples/mount-zfs.sh.diff similarity index 100% rename from mount-zfs.sh.diff rename to examples/mount-zfs.sh.diff diff --git a/examples/refind_linux.conf b/examples/refind_linux.conf new file mode 100755 index 0000000..dfc6744 --- /dev/null +++ b/examples/refind_linux.conf @@ -0,0 +1,2 @@ +"Boot Default BE" "ro quiet loglevel=0 timeout=0" +"Select BE" "ro quiet loglevel=0 timeout=-1" diff --git a/void/zfsbootmenu-0.7.2_1.noarch.xbps b/void/zfsbootmenu-0.7.2_1.noarch.xbps deleted file mode 100644 index 3801ced7187d22921c1ec55e6efdeda0ec179a54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8080 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�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 diff --git a/void/zfsbootmenu/INSTALL b/void/zfsbootmenu/INSTALL deleted file mode 100644 index 13027b2..0000000 --- a/void/zfsbootmenu/INSTALL +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -CONF_FILE=etc/default/zfsbootmenu -CONF_DIR=etc/zfsbootmenu/dracut.conf.d - -if [ -f ${CONF_FILE} ]; then - . ${CONF_FILE} -else - echo "${CONF_FILE} missing" - exit 0 -fi - -if [ "x${MANAGE_IMAGES}" != x1 ]; then - echo "Set MANAGE_IMAGES=1 in ${CONF_FILE}" - exit 0 -elif [ ! -d ${IMAGE_DIR} ]; then - echo "${IMAGE_DIR} does not exist" - exit 0 -fi - -case "${ACTION}" in - pre) - for KERNEL in vmlinux vmlinuz kernel linux; do - if [ -f ${IMAGE_DIR}/${KERNEL}-zfsbootmenu ]; then - cp ${IMAGE_DIR}/${KERNEL}-zfsbootmenu ${IMAGE_DIR}/${KERNEL}-zfsbootmenu-backup - break - fi - done - - if [ -f ${IMAGE_DIR}/initramfs-zfsbootmenu.img ]; then - cp ${IMAGE_DIR}/initramfs-zfsbootmenu.img ${IMAGE_DIR}/initramfs-zfsbootmenu-backup.img - fi - ;; - post) - dracut -q -f --confdir ${CONF_DIR} ${IMAGE_DIR}/initramfs-zfsbootmenu.img - - KVER=$( uname -r ) - - for KERNEL in vmlinux vmlinuz kernel linux; do - if [ -f boot/${KERNEL}-${KVER} ]; then - cp boot/${KERNEL}-${KVER} ${IMAGE_DIR}/${KERNEL}-zfsbootmenu - break - fi - done - - # We always want both a primary and a backup image, even on the first run - for KERNEL in vmlinux vmlinuz kernel linux; do - if [ -f ${IMAGE_DIR}/${KERNEL}-zfsbootmenu ]; then - if [ ! -f ${IMAGE_DIR}/${KERNEL}-zfsbootmenu-backup ]; then - cp ${IMAGE_DIR}/${KERNEL}-zfsbootmenu ${IMAGE_DIR}/${KERNEL}-zfsbootmenu-backup - fi - break - fi - done - - if [ ! -f ${IMAGE_DIR}/initramfs-zfsbootmenu-backup.img ]; then - cp ${IMAGE_DIR}/initramfs-zfsbootmenu.img ${IMAGE_DIR}/initramfs-zfsbootmenu-backup.img - fi - ;; -esac diff --git a/void/zfsbootmenu/INSTALL.msg b/void/zfsbootmenu/INSTALL.msg deleted file mode 100644 index cd65b75..0000000 --- a/void/zfsbootmenu/INSTALL.msg +++ /dev/null @@ -1,2 +0,0 @@ -Refer to https://github.com/zdykstra/zfsbootmenu#installation for -integration directions. diff --git a/void/zfsbootmenu/template b/void/zfsbootmenu/template deleted file mode 100644 index 99889a3..0000000 --- a/void/zfsbootmenu/template +++ /dev/null @@ -1,25 +0,0 @@ -# Template file for 'zfsbootmenu' -pkgname=zfsbootmenu -version=0.7.2 -revision=1 -conf_files="/etc/default/zfsbootmenu - /etc/zfsbootmenu/dracut.conf.d/zfsbootmenu.conf" -archs=noarch -short_desc="ZFSBootMenu implemented in Dracut" -maintainer="Zach Dykstra " -license="MIT" -homepage="https://github.com/zdykstra/zfsbootmenu" -distfiles="https://github.com/zdykstra/zfsbootmenu/archive/v${version}.tar.gz" -checksum=@554e31860459c51c10d2fb908b55dd024db2b10b5d360b5ea6426cdbed5161e6 - -do_install() { - vmkdir usr/lib/dracut/modules.d - vmkdir etc/zfsbootmenu - vmkdir etc/default - - vcopy 90zfsbootmenu usr/lib/dracut/modules.d - vcopy etc/zfsbootmenu etc - vcopy etc/default etc - - vlicense LICENSE -}