Page MenuHomeSolus

linux-current doesn't properly update with legacy /boot directory present
Open, NormalPublic

Description

So I have a problem with /boot directory on my old Solus install from solus-project.com times.
It seems that I have actual boot partition, say /dev/sda1 which is not mounted by default as it should.
Here how it looks if I manually mount it:

/boot
├── EFI
│   ├── Boot
│   │   └── BOOTX64.EFI
│   ├── com.solus-project
│   │   ├── initrd-com.solus-project.current.5.6.18-156
│   │   ├── initrd-com.solus-project.current.5.6.19-158
│   │   ├── initrd-com.solus-project.current.5.6.4-152
│   │   ├── initrd-com.solus-project.lts.4.14.189-161
│   │   ├── initrd-com.solus-project.lts.4.9.227-160
│   │   ├── kernel-com.solus-project.current.5.6.18-156
│   │   ├── kernel-com.solus-project.current.5.6.19-158
│   │   ├── kernel-com.solus-project.current.5.6.4-152
│   │   ├── kernel-com.solus-project.lts.4.14.189-161
│   │   └── kernel-com.solus-project.lts.4.9.227-160
│   ├── goofiboot
│   │   └── goofibootx64.efi
│   └── systemd
│       └── systemd-bootx64.efi
└── loader
    ├── entries
    │   ├── Solus-current-5.6.18-156.conf
    │   ├── Solus-current-5.6.19-158.conf
    │   ├── Solus-current-5.6.4-152.conf
    │   ├── Solus-lts-4.14.189-161.conf
    │   └── Solus-lts-4.9.227-160.conf
    └── loader.conf

7 directories, 19 files

But I also have /boot directory with EFI etc. subdirs in the root partition, looking like this:

/boot
├── EFI
│   ├── Boot
│   │   └── BOOTX64.EFI
│   ├── com.solus-project
│   │   ├── initrd-com.solus-project.current.5.6.19-158
│   │   ├── initrd-com.solus-project.current.5.6.19-159
│   │   ├── initrd-com.solus-project.lts.4.14.201-162
│   │   ├── initrd-com.solus-project.lts.4.9.227-160
│   │   ├── kernel-com.solus-project.current.5.6.19-158
│   │   ├── kernel-com.solus-project.current.5.6.19-159
│   │   ├── kernel-com.solus-project.lts.4.14.201-162
│   │   └── kernel-com.solus-project.lts.4.9.227-160
│   └── systemd
│       └── systemd-bootx64.efi
├── grub
│   ├── fonts
│   │   └── unicode.pf2
│   ├── grub.cfg
│   ├── grubenv
│   └── i386-pc
│       ├── acpi.mod
│       ├── adler32.mod
│       ├── affs.mod
│       ├── afs.mod
│       ├── ahci.mod
│       ├── all_video.mod
│       ├── aout.mod
│       ├── archelp.mod
│       ├── ata.mod
│       ├── at_keyboard.mod
│       ├── backtrace.mod
│       ├── bfs.mod
│       ├── biosdisk.mod
│       ├── bitmap.mod
│       ├── bitmap_scale.mod
│       ├── blocklist.mod
│       ├── boot.img
│       ├── boot.mod
│       ├── bsd.mod
│       ├── bswap_test.mod
│       ├── btrfs.mod
│       ├── bufio.mod
│       ├── cat.mod
│       ├── cbfs.mod
│       ├── cbls.mod
│       ├── cbmemc.mod
│       ├── cbtable.mod
│       ├── cbtime.mod
│       ├── chain.mod
│       ├── cmdline_cat_test.mod
│       ├── cmosdump.mod
│       ├── cmostest.mod
│       ├── cmp.mod
│       ├── cmp_test.mod
│       ├── command.lst
│       ├── configfile.mod
│       ├── core.img
│       ├── cpio_be.mod
│       ├── cpio.mod
│       ├── cpuid.mod
│       ├── crc64.mod
│       ├── cryptodisk.mod
│       ├── crypto.lst
│       ├── crypto.mod
│       ├── cs5536.mod
│       ├── ctz_test.mod
│       ├── datehook.mod
│       ├── date.mod
│       ├── datetime.mod
│       ├── diskfilter.mod
│       ├── disk.mod
│       ├── div.mod
│       ├── div_test.mod
│       ├── dm_nv.mod
│       ├── drivemap.mod
│       ├── echo.mod
│       ├── efiemu.mod
│       ├── ehci.mod
│       ├── elf.mod
│       ├── eval.mod
│       ├── exfat.mod
│       ├── exfctest.mod
│       ├── ext2.mod
│       ├── extcmd.mod
│       ├── f2fs.mod
│       ├── fat.mod
│       ├── file.mod
│       ├── font.mod
│       ├── freedos.mod
│       ├── fshelp.mod
│       ├── fs.lst
│       ├── functional_test.mod
│       ├── gcry_arcfour.mod
│       ├── gcry_blowfish.mod
│       ├── gcry_camellia.mod
│       ├── gcry_cast5.mod
│       ├── gcry_crc.mod
│       ├── gcry_des.mod
│       ├── gcry_dsa.mod
│       ├── gcry_idea.mod
│       ├── gcry_md4.mod
│       ├── gcry_md5.mod
│       ├── gcry_rfc2268.mod
│       ├── gcry_rijndael.mod
│       ├── gcry_rmd160.mod
│       ├── gcry_rsa.mod
│       ├── gcry_seed.mod
│       ├── gcry_serpent.mod
│       ├── gcry_sha1.mod
│       ├── gcry_sha256.mod
│       ├── gcry_sha512.mod
│       ├── gcry_tiger.mod
│       ├── gcry_twofish.mod
│       ├── gcry_whirlpool.mod
│       ├── gdb.mod
│       ├── geli.mod
│       ├── gettext.mod
│       ├── gfxmenu.mod
│       ├── gfxterm_background.mod
│       ├── gfxterm_menu.mod
│       ├── gfxterm.mod
│       ├── gptsync.mod
│       ├── gzio.mod
│       ├── halt.mod
│       ├── hashsum.mod
│       ├── hdparm.mod
│       ├── hello.mod
│       ├── help.mod
│       ├── hexdump.mod
│       ├── hfs.mod
│       ├── hfspluscomp.mod
│       ├── hfsplus.mod
│       ├── http.mod
│       ├── iorw.mod
│       ├── iso9660.mod
│       ├── jfs.mod
│       ├── jpeg.mod
│       ├── keylayouts.mod
│       ├── keystatus.mod
│       ├── ldm.mod
│       ├── legacycfg.mod
│       ├── legacy_password_test.mod
│       ├── linux16.mod
│       ├── linux.mod
│       ├── load.cfg
│       ├── loadenv.mod
│       ├── loopback.mod
│       ├── lsacpi.mod
│       ├── lsapm.mod
│       ├── lsmmap.mod
│       ├── ls.mod
│       ├── lspci.mod
│       ├── luks.mod
│       ├── lvm.mod
│       ├── lzopio.mod
│       ├── macbless.mod
│       ├── macho.mod
│       ├── mda_text.mod
│       ├── mdraid09_be.mod
│       ├── mdraid09.mod
│       ├── mdraid1x.mod
│       ├── memdisk.mod
│       ├── memrw.mod
│       ├── minicmd.mod
│       ├── minix2_be.mod
│       ├── minix2.mod
│       ├── minix3_be.mod
│       ├── minix3.mod
│       ├── minix_be.mod
│       ├── minix.mod
│       ├── mmap.mod
│       ├── moddep.lst
│       ├── modinfo.sh
│       ├── morse.mod
│       ├── mpi.mod
│       ├── msdospart.mod
│       ├── mul_test.mod
│       ├── multiboot2.mod
│       ├── multiboot.mod
│       ├── nativedisk.mod
│       ├── net.mod
│       ├── newc.mod
│       ├── nilfs2.mod
│       ├── normal.mod
│       ├── ntfscomp.mod
│       ├── ntfs.mod
│       ├── ntldr.mod
│       ├── odc.mod
│       ├── offsetio.mod
│       ├── ohci.mod
│       ├── part_acorn.mod
│       ├── part_amiga.mod
│       ├── part_apple.mod
│       ├── part_bsd.mod
│       ├── part_dfly.mod
│       ├── part_dvh.mod
│       ├── part_gpt.mod
│       ├── partmap.lst
│       ├── part_msdos.mod
│       ├── part_plan.mod
│       ├── part_sun.mod
│       ├── part_sunpc.mod
│       ├── parttool.lst
│       ├── parttool.mod
│       ├── password.mod
│       ├── password_pbkdf2.mod
│       ├── pata.mod
│       ├── pbkdf2.mod
│       ├── pbkdf2_test.mod
│       ├── pcidump.mod
│       ├── pci.mod
│       ├── pgp.mod
│       ├── plan9.mod
│       ├── play.mod
│       ├── png.mod
│       ├── priority_queue.mod
│       ├── probe.mod
│       ├── procfs.mod
│       ├── progress.mod
│       ├── pxechain.mod
│       ├── pxe.mod
│       ├── raid5rec.mod
│       ├── raid6rec.mod
│       ├── random.mod
│       ├── rdmsr.mod
│       ├── read.mod
│       ├── reboot.mod
│       ├── regexp.mod
│       ├── reiserfs.mod
│       ├── relocator.mod
│       ├── romfs.mod
│       ├── scsi.mod
│       ├── search_fs_file.mod
│       ├── search_fs_uuid.mod
│       ├── search_label.mod
│       ├── search.mod
│       ├── sendkey.mod
│       ├── serial.mod
│       ├── setjmp.mod
│       ├── setjmp_test.mod
│       ├── setpci.mod
│       ├── sfs.mod
│       ├── shift_test.mod
│       ├── signature_test.mod
│       ├── sleep.mod
│       ├── sleep_test.mod
│       ├── spkmodem.mod
│       ├── squash4.mod
│       ├── strtoull_test.mod
│       ├── syslinuxcfg.mod
│       ├── tar.mod
│       ├── terminal.lst
│       ├── terminal.mod
│       ├── terminfo.mod
│       ├── test_blockarg.mod
│       ├── testload.mod
│       ├── test.mod
│       ├── testspeed.mod
│       ├── tftp.mod
│       ├── tga.mod
│       ├── time.mod
│       ├── trig.mod
│       ├── tr.mod
│       ├── truecrypt.mod
│       ├── true.mod
│       ├── udf.mod
│       ├── ufs1_be.mod
│       ├── ufs1.mod
│       ├── ufs2.mod
│       ├── uhci.mod
│       ├── usb_keyboard.mod
│       ├── usb.mod
│       ├── usbms.mod
│       ├── usbserial_common.mod
│       ├── usbserial_ftdi.mod
│       ├── usbserial_pl2303.mod
│       ├── usbserial_usbdebug.mod
│       ├── usbtest.mod
│       ├── vbe.mod
│       ├── verifiers.mod
│       ├── vga.mod
│       ├── vga_text.mod
│       ├── video_bochs.mod
│       ├── video_cirrus.mod
│       ├── video_colors.mod
│       ├── video_fb.mod
│       ├── videoinfo.mod
│       ├── video.lst
│       ├── video.mod
│       ├── videotest_checksum.mod
│       ├── videotest.mod
│       ├── wrmsr.mod
│       ├── xfs.mod
│       ├── xnu.mod
│       ├── xnu_uuid.mod
│       ├── xnu_uuid_test.mod
│       ├── xzio.mod
│       ├── zfscrypt.mod
│       ├── zfsinfo.mod
│       ├── zfs.mod
│       └── zstd.mod
└── loader
    ├── entries
    │   ├── Solus-current-5.6.19-158.conf
    │   ├── Solus-current-5.6.19-159.conf
    │   ├── Solus-lts-4.14.201-162.conf
    │   └── Solus-lts-4.9.227-160.conf
    └── loader.conf

9 directories, 299 files

The problem is when I upgrade linux-current it populates new boot configs only in the /boot dir, but not in the actual boot partition (/dev/sda1). See /boot/loader/entries/Solus-current-5.6.19-159.conf for example.
So I have to manually mount actual boot partition and copy new configs there in order to boot after each linux-current update.
It kind of works as a workaround, but I wonder if I could fix this issue somehow (maybe rename/delete /boot directory or something like that).

Related Objects

Event Timeline

We confirmed on IRC that this system booted using systemd-boot by checking LoaderInfo with efivar. This means we don't need to worry about using bootctl to switch to systemd-boot.

Based on that, you can safely follow these steps to clean things up:

  1. Make sure /dev/sda1 is unmounted.
  2. Remove everything in /boot with something like rm -Rf /boot/*, leaving /boot intact and empty.
  3. Mount /dev/sda1 as /boot.
  4. Remove /boot/EFI/goofiboot.
  5. Unmount /boot
  6. Re-run sudo clr-boot-manager update
  7. Re-mount /dev/sda1 as /boot and verify that the kernels have been updated.

Followed the instructions and the kernels have successfully been updated.
Thanks a lot!

DataDrake triaged this task as Normal priority.Oct 19 2020, 7:17 AM
DataDrake edited projects, added Software; removed Lacks Project.

I'm going to leave this open since we still don't have root-cause.

silke added a subscriber: silke.Dec 15 2020, 9:30 PM

I think one problem that occurs here is that clr-boot-manager silently refuses to mount over a /boot with content:

[DEBUG] cbm (../src/cli/cli.c:L142): No such file: //etc/kernel/update_efi_vars
[INFO] cbm (../src/bootman/bootman.c:L744): Current running kernel: 5.6.19-158.current
[INFO] cbm (../src/bootman/sysconfig.c:L179): Discovered UEFI ESP: /dev/disk/by-partuuid/436d2eaa-9096-4d83-b75b-7e0248362cd3
[INFO] cbm (../src/bootman/sysconfig.c:L256): Fully resolved boot device: /dev/sda2
[DEBUG] cbm (../src/bootman/bootman.c:L140): systemd caps: 0x26, wanted: 0x26
[DEBUG] cbm (../src/bootman/bootman.c:L155): UEFI boot now selected (systemd)
[INFO] cbm (../src/bootman/bootman.c:L764): path ///etc/kernel/initrd.d does not exist
[INFO] cbm (../src/bootman/bootman.c:L764): path ///usr/lib/initrd.d does not exist
[INFO] cbm (../src/bootman/bootman.c:L459): Checking for mounted boot dir
[DEBUG] cbm (../src/lib/files.c:L603): Directory /boot is not empty, found: com.solus-project.lts.4.9.200-145
[INFO] cbm (../src/bootman/bootman.c:L467): boot_dir is already mounted: /boot

The last line is incorrect: /boot isn't mounted and the actual boot partition isn't updated.

What would we like cbm to do here? Throw an error, or mount the boot partition anyway?

silke added a comment.Dec 30 2020, 7:34 PM

I have traced the issue with clr-boot-manager back to this commit. I have tested and submitted a PR upstream that fixes this issue.

I still don't know how files got in the /boot directory in the first place, however...