Laszlo Ersek
2022-Apr-08 15:36 UTC
[Libguestfs] [PATCH guestfs-tools] builder: templates: Enable Fedora image update again
On 04/08/22 16:59, Richard W.M. Jones wrote:> Fixes: commit 3fe941767042bf83d9a252b0819fa6d5a48059d0 > --- > builder/templates/make-template.ml | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/builder/templates/make-template.ml b/builder/templates/make-template.ml > index fe3039aa06..51f72da969 100755 > --- a/builder/templates/make-template.ml > +++ b/builder/templates/make-template.ml > @@ -649,9 +649,11 @@ dracut -f /boot/initramfs-$KERNEL_VERSION.img $KERNEL_VERSION > bpf "%%post\n"; > bpf "\ > # Ensure the installation is up-to-date. > -# This makes Fedora >= 33 unbootable, see: > +dnf -y --best upgrade > +# This required otherwise the kernel will not be bootable, see > # https://bugzilla.redhat.com/show_bug.cgi?id=1911177 > -#dnf -y --best upgrade > +# https://bugzilla.redhat.com/show_bug.cgi?id=1945835#c24 > +grub2-mkconfig -o /boot/grub2/grub.cfg > "; > > let needs_regenerate_dracut = ref false in >Still a fedora bug; after a kernel update, the grub config should be refreshed automatically. Anyway, I guess my more important remark is: the grub.cfg location depends on whether the system is UEFI-based or not. Normally, grub2-mkconfig is invoked against "/etc/grub2.cfg" (on a BIOS system) or "/etc/grub2-efi.cfg" (on a UEFI system). And those are symlinks: lrwxrwxrwx. 1 root root 31 2021-11-01 12:21:13 +0100 /etc/grub2-efi.cfg -> ../boot/efi/EFI/redhat/grub.cfg lrwxrwxrwx. 1 root root 22 2021-11-01 12:21:07 +0100 /etc/grub2.cfg -> ../boot/grub2/grub.cfg The patch (effectively) assumes BIOS and resolves "/etc/grub2.cfg" to "/boot/grub2/grub.cfg". So (I think) I would consult "needs_uefi" here, and direct the output to "/etc/grub2-efi.cfg" vs. "/etc/grub2.cfg". I expect Fedora 33 is available on aarch64 (which is UEFI only), and therefore this could make an actual difference. Thanks, Laszlo
Richard W.M. Jones
2022-Apr-08 15:43 UTC
[Libguestfs] [PATCH guestfs-tools] builder: templates: Enable Fedora image update again
On Fri, Apr 08, 2022 at 05:36:45PM +0200, Laszlo Ersek wrote:> On 04/08/22 16:59, Richard W.M. Jones wrote: > > Fixes: commit 3fe941767042bf83d9a252b0819fa6d5a48059d0 > > --- > > builder/templates/make-template.ml | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/builder/templates/make-template.ml b/builder/templates/make-template.ml > > index fe3039aa06..51f72da969 100755 > > --- a/builder/templates/make-template.ml > > +++ b/builder/templates/make-template.ml > > @@ -649,9 +649,11 @@ dracut -f /boot/initramfs-$KERNEL_VERSION.img $KERNEL_VERSION > > bpf "%%post\n"; > > bpf "\ > > # Ensure the installation is up-to-date. > > -# This makes Fedora >= 33 unbootable, see: > > +dnf -y --best upgrade > > +# This required otherwise the kernel will not be bootable, see > > # https://bugzilla.redhat.com/show_bug.cgi?id=1911177 > > -#dnf -y --best upgrade > > +# https://bugzilla.redhat.com/show_bug.cgi?id=1945835#c24 > > +grub2-mkconfig -o /boot/grub2/grub.cfg > > "; > > > > let needs_regenerate_dracut = ref false in > > > > Still a fedora bug; after a kernel update, the grub config should be > refreshed automatically. > > Anyway, I guess my more important remark is: the grub.cfg location > depends on whether the system is UEFI-based or not. Normally, > grub2-mkconfig is invoked against "/etc/grub2.cfg" (on a BIOS system) or > "/etc/grub2-efi.cfg" (on a UEFI system). And those are symlinks: > > lrwxrwxrwx. 1 root root 31 2021-11-01 12:21:13 +0100 /etc/grub2-efi.cfg -> ../boot/efi/EFI/redhat/grub.cfg > lrwxrwxrwx. 1 root root 22 2021-11-01 12:21:07 +0100 /etc/grub2.cfg -> ../boot/grub2/grub.cfg > > The patch (effectively) assumes BIOS and resolves "/etc/grub2.cfg" to > "/boot/grub2/grub.cfg". > > So (I think) I would consult "needs_uefi" here, and direct the output to > "/etc/grub2-efi.cfg" vs. "/etc/grub2.cfg". I expect Fedora 33 is > available on aarch64 (which is UEFI only), and therefore this could make > an actual difference.I guess something like this (only compile tested): diff --git a/builder/templates/make-template.ml b/builder/templates/make-template.ml index 51f72da969..ef58708f2b 100755 --- a/builder/templates/make-template.ml +++ b/builder/templates/make-template.ml @@ -646,6 +646,8 @@ dracut -f /boot/initramfs-$KERNEL_VERSION.img $KERNEL_VERSION (match os with | Fedora _ -> + let uefi = needs_uefi os arch in + bpf "%%post\n"; bpf "\ # Ensure the installation is up-to-date. @@ -653,8 +655,8 @@ dnf -y --best upgrade # This required otherwise the kernel will not be bootable, see # https://bugzilla.redhat.com/show_bug.cgi?id=1911177 # https://bugzilla.redhat.com/show_bug.cgi?id=1945835#c24 -grub2-mkconfig -o /boot/grub2/grub.cfg -"; +grub2-mkconfig -o %s +" (quote (if uefi then "/etc/grub2-efi.cfg" else "/etc/grub2.cfg")); let needs_regenerate_dracut = ref false in if arch = X86_64 then ( Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into KVM guests. http://libguestfs.org/virt-v2v