[Buildroot] Possible conflict with systemd and e2fsprogs?

Dominik Menke dom at digineo.de
Thu Apr 25 18:15:40 UTC 2019


Greetings,

I've run into trouble with the following configuration on Buildroot 
2019.02.1-100-g88eff22a9e (current 2019.02.x branch):

     (
       echo BR2_INIT_SYSTEMD=y
       echo BR2_PACKAGE_E2FSPROGS=y
     ) | cat configs/raspberrypi3_defconfig - > configs/myrpi_defconfig
     make myrpi_defconfig

The actual board is a RPi 3B+, and the resulting system fails badly on 
systemd-fsck-root.service (shortly after it found and mounted /dev/root):

     [FAILED] Failed to start File System Check on Root Device.
     See 'systemctl status systemd-fsck-root.service' for details.

Some green OK's appear, but most succeeding services fail to start. It 
looks like mounting the root file system fails completely, and I don't 
get a prompt, which makes checking the status as suggested a bit hard.

(sidenote: I can't see the preceeding log messages, because the scroll 
buffer on /dev/tty1 is too small, setting enable_uart=1 in 
/boot/config.txt [0] doesn't give me a serial console, systemd.log_level 
and similar kernel command line parameters are ignored... the RPi is a 
fun device to play with :-))

I've build the exact system without BR2_PACKAGE_E2FSPROGS, and that 
system does boot without problems.

make menuconfig tells me

     Symbol: BR2_PACKAGE_E2FSPROGS_FSCK [=n]
     Type  : bool
     Prompt: fsck
       Location: (omitted)
       Defined at package/e2fsprogs/Config.in:45
       Depends on: BR2_PACKAGE_E2FSPROGS [=y] &&
                   !BR2_PACKAGE_UTIL_LINUX_FSCK [=y]

which (should) configure e2fsprogs with --disable-fsck [1]. However, 
that only means to not build the wrapper (i.e. /sbin/fsck) [2].

In comparing the two systems built, I've noticed that the one including 
e2fsprogs contains additional binaries /sbin/fsck.ext{2,3,4} which 
symlink to /sbin/e2fsck.

Looking at /usr/lib/systemd/systemd-fsck (which is executed by 
systemd-fsck-root.service), it calls to /sbin/fsck only if 
/sbin/fsck.$type exists [3]. My guess is that it then fails to proceed 
because e2fsprog's fsck behaves differently then fsck (of package util 
linux).

I can't really go without systemd (I'm building appliances deeply 
integrated with it), and I do need to be able to resize/enlarge a data 
partition on a live system; I'm not sure how to proceed from here. I 
mean, I could rm/mv the fsck.* binaries in a post-build hook, but are 
there (cleaner) approaches?

Thanks for your time,
Dominik


[0]: https://www.raspberrypi.org/documentation/configuration/uart.md
[1]: 
https://git.busybox.net/buildroot/tree/package/e2fsprogs/e2fsprogs.mk?h=88eff22a9e#n42
[2]: 
https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/tree/configure?h=v1.44.5#n1554
[3]: https://github.com/systemd/systemd/blob/v240/src/fsck/fsck.c#L343-L349


More information about the buildroot mailing list