Silverblue 42.20250423.0 fails to upgrade on MacBook Air

For both GUI and CLI upgrades the downloads and deployment appear to proceed successfully, but after reboot the same elements show up in the GUI as available for upgrade. So, it appears to me that the upgrade has failed.

The problem may involve a failed boot loader upgrade:

sudouser@myhostname:/var/home/mainuser$ sudo systemctl status bootloader-update.service
Γ— bootloader-update.service - Update bootloader on boot
     Loaded: loaded (/usr/lib/systemd/system/bootloader-update.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
             /usr/lib/systemd/system/bootloader-update.service.d
             └─migrate-static-grub-config.conf
     Active: failed (Result: exit-code) since Fri 2025-06-13 07:37:04 PDT; 17min ago
 Invocation: 922855c1fcac4662b6ed849074bc7dd5
       Docs: https://github.com/coreos/bootupd
    Process: 965 ExecStart=/usr/bin/bootupctl update (code=exited, status=1/FAILURE)
   Main PID: 965 (code=exited, status=1/FAILURE)
   Mem peak: 5.4M
        CPU: 58ms

Jun 13 07:37:04 myhostname systemd[1]: Starting bootloader-update.service - Update bootloader on boot...
Jun 13 07:37:04 myhostname bootupctl[965]: error: Failed to find ESP device
Jun 13 07:37:04 myhostname systemd[1]: bootloader-update.service: Main process exited, code=exited, status=1/FAILURE
Jun 13 07:37:04 myhostname systemd[1]: bootloader-update.service: Failed with result 'exit-code'.
Jun 13 07:37:04 myhostname systemd[1]: Failed to start bootloader-update.service - Update bootloader on boot.

Failed to find ESP device? /boot/efi is mounted

sudouser@myhostname:/var/home/mainuser$ mount
...
composefs on / type overlay (ro,relatime,seclabel,lowerdir+=/run/ostree/.private/cfsroot-lower,datadir+=/sysroot/ostree/repo/objects,redirect_dir=on,metacopy=on)
...
/dev/sda1 on /boot/efi type hfsplus (rw,relatime,umask=22,uid=0,gid=0,nls=utf8)
...

and present:

sudouser@myhostname:/var/home/mainuser$ sudo tree /boot/
/boot/
β”œβ”€β”€ boot -> .
β”œβ”€β”€ boot.scr
β”œβ”€β”€ efi
β”‚   └── EFI
β”‚       β”œβ”€β”€ BOOT
β”‚       β”‚   β”œβ”€β”€ BOOTX64.EFI
β”‚       β”‚   └── fbx64.efi
β”‚       └── fedora
β”‚           β”œβ”€β”€ BOOTX64.CSV
β”‚           β”œβ”€β”€ fonts
β”‚           β”œβ”€β”€ grub.cfg
β”‚           β”œβ”€β”€ grubx64.efi
β”‚           β”œβ”€β”€ mmx64.efi
β”‚           β”œβ”€β”€ shim.efi
β”‚           β”œβ”€β”€ shimx64.efi
β”‚           └── shimx64-fedora.efi
β”œβ”€β”€ grub2
β”‚   β”œβ”€β”€ grub.cfg -> ../loader/grub.cfg
β”‚   └── grubenv
β”œβ”€β”€ loader -> loader.1
β”œβ”€β”€ loader.0
β”‚   └── entries
β”‚       β”œβ”€β”€ ostree-1.conf
β”‚       └── ostree-2.conf
β”œβ”€β”€ loader.1
β”‚   β”œβ”€β”€ entries
β”‚   β”‚   β”œβ”€β”€ ostree-1.conf
β”‚   β”‚   └── ostree-2.conf
β”‚   └── grub.cfg
β”œβ”€β”€ lost+found
└── ostree
    β”œβ”€β”€ fedora-21369483479bb165e0ba16be021e8918eafb659cb98e0a067219224e34dea6c4
    β”‚   β”œβ”€β”€ initramfs-6.14.2-300.fc42.x86_64.img
    β”‚   └── vmlinuz-6.14.2-300.fc42.x86_64
    β”œβ”€β”€ fedora-7d6380bc41293ca3a58980acd98670b8a867639ebdc3c2e6fa2245773a2947db
    β”‚   β”œβ”€β”€ initramfs-6.13.12-200.fc41.x86_64.img
    β”‚   └── vmlinuz-6.13.12-200.fc41.x86_64
    └── fedora-93883c6a8f143b19ef8177909719073ac61593c12de955791722c589cc01eb59
        β”œβ”€β”€ initramfs-6.14.9-300.fc42.x86_64.img
        └── vmlinuz-6.14.9-300.fc42.x86_64

18 directories, 23 files
sudouser@myhostname:/var/home/mainuser$ 

Journal shows a complaint: /usr/bin/grub2-probe: error: failed to get canonical path of `composefs’:

sudouser@myhostname:/var/home/mainuser$ journalctl -b -1
...
Jun 12 07:56:03 myhostname ostree[10114]: Copying /etc changes: 34 modified, 0 removed, 122 added
Jun 12 07:56:03 myhostname ostree[10114]: Copying /etc changes: 34 modified, 0 removed, 122 added
Jun 12 07:56:03 myhostname ostree[10114]: Refreshing SELinux policy
Jun 12 07:56:06 myhostname ostree[10114]: Refreshed SELinux policy in 2406 ms
Jun 12 07:56:06 myhostname ostree[10114]: Finalized deployment
Jun 12 07:56:07 myhostname ostree[10114]: bootfs is sufficient for calculated new size: 173.4 MB
Jun 12 07:56:08 myhostname ostree[10151]: /usr/bin/grub2-probe: error: failed to get canonical path of `composefs'.
Jun 12 07:56:08 myhostname ostree[10114]: error: Bootloader write config: grub2-mkconfig: Child process exited with code 1
Jun 12 07:56:08 myhostname systemd[1]: ostree-finalize-staged.service: Control process exited, code=exited, status=1/FAILURE
Jun 12 07:56:08 myhostname systemd[1]: ostree-finalize-staged.service: Failed with result 'exit-code'.
Jun 12 07:56:08 myhostname audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=ostree-finaliz>
Jun 12 07:56:08 myhostname kernel: audit: type=1131 audit(1749740168.869:561): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_>
Jun 12 07:56:08 myhostname systemd[1]: Stopped ostree-finalize-staged.service - OSTree Finalize Staged Deployment.
Jun 12 07:56:08 myhostname systemd[1]: ostree-finalize-staged.service: Consumed 6.227s CPU time, 681.9M memory peak.
Jun 12 07:56:08 myhostname systemd[1]: Stopping ostree-finalize-staged-hold.service - Hold /boot Open for OSTree Finalize Staged Deployment...
Jun 12 07:56:08 myhostname systemd[1]: Stopping systemd-journal-flush.service - Flush Journal to Persistent Storage...
Jun 12 07:56:08 myhostname systemd[1]: ostree-finalize-staged-hold.service: Deactivated successfully.
Jun 12 07:56:08 myhostname systemd[1]: Stopped ostree-finalize-staged-hold.service - Hold /boot Open for OSTree Finalize Staged Deployment.
Jun 12 07:56:08 myhostname audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=ostree-finaliz>
Jun 12 07:56:08 myhostname kernel: audit: type=1131 audit(1749740168.872:562): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_>
Jun 12 07:56:08 myhostname systemd[1]: Stopped target local-fs.target - Local File Systems.
Jun 12 07:56:08 myhostname systemd[1]: Unmounting boot-efi.mount - /boot/efi...
Jun 12 07:56:08 myhostname systemd[1]: Unmounting tmp.mount - Temporary Directory /tmp...
Jun 12 07:56:08 myhostname systemd[1]: Unmounting var-home.mount - /var/home...
lines 10952-10981/10981 (END)

but, as the mount command output above shows, composefs is mounted at /

My question is: how can I get my system to successfully upgrade?

I tried for days – unsuccessfully – to marry my workhorse btrfs partition to a fresh ext4 /boot partition and a fresh FAT ESP.

Today, I tried different approach. If the problem was that grub didn’t understand hfsplus partitions, maybe giving it that ability would fix things. So, at boot I held down the escape key until the grub prompt appeared. Then I typed in β€œinsmod hfsplus ” and then β€œexit”. After the boot up I went to the GUI Software->Updates and started Download/Install. When it came time to restart, I held down the escape key again and did β€œinsmod hfsplus” at the grub prompt. After boot my system had successfully upgraded! To give grub the permanent ability to deal with hfsplus, I created a /boot/grub2/user.cfg file with one line:β€œinsmod hfsplus”.

1 Like