[Buildroot] [PATCH v2 1/1] boot/systemd-boot: new package
Yann E. MORIN
yann.morin.1998 at free.fr
Sat Dec 15 10:27:45 UTC 2018
James, All,
On 2018-12-15 02:12 -0700, James Hilliard spake thusly:
> On Sat, Dec 15, 2018 at 1:59 AM Yann E. MORIN <yann.morin.1998 at free.fr> wrote:
> > On 2018-12-14 19:42 +0800, james.hilliard1 at gmail.com spake thusly:
> > > From: James Hilliard <james.hilliard1 at gmail.com>
> > >
> > > This is essentially the successor to gummiboot.
> >
> > First, this patch is huge, it does many tricky things, so the commit
> > log can't be that short. You need to explain in the commit log what
> > this patch does, why it needs to do it.
> >
> > Second, the patch basically does three different things:
> > - change stuff in the meson-packae infrastructure
> Yeah, this can def be split off, it's to fix an issue with meson
> requiring cpu family to be normalized(it only seems to be an issue for
> meson.build files that have cpu family detection however).
Then just submit it as a separate patch of its own.
If this change was needed because of systemd-boot, then you can send a
patch series to make it explicit that they are part of a same job, with
the front patches needed by later patches in the series.
> > - change stuff in the systemd package
> > - adds a new virtual boot package
> These kind of go together, all the changes in the systemd package are
> essentially adding systemd-boot package infrastructure.
No, sorry, I don't buy it. You can do changes in a package in a patch,
that paves the way for another patch to use those changes.
In this case (but read below [*]), a first patch would change systemd so
that it can be built without being the init system; then a second patch
would add systemd-boot, that relies on building systemd even if it is
not an init system.
> > This is a good indication that there should be _at least_ three patches,
> > one for each of the above changes, each with a detailed commit log that
> > explains what the change does and why it has to be done). Patches should
> > do a complete change of their own, yet be atomic (i.e. can't be split).
> > Here it is obvious that the patch can be split. And if it can't then you
> > have to say why in the commit log, again.
> >
> > Third, the new virtual boot package has no provider, so that's a
> > indication that something is wrong with that patch.
> So the virtual package is really just there so that there's an entry
> in the boot menu instead of packages for systemd-boot.
[*] Sorry, but I am still not convinced that we need all that complexity
and why we can't just build systemd-boot as yet anotehr component of
systemd *in* the systemd package, i.e. in package/systemd/systemd.mk,
like we do for the other components (e.g. systemd-networkd or -resolved,
etc...)
> > You need to clearly explain what is going on here, because all I can
> > think is, why can't we simply build the systemd-boot component of
> > systemd directly from the systemd package itself? (Yeah, I think I know
> > the answer, but you have to explain it in the commit log. And no, it
> > can't just be "but this is a bootloader, it has to have an entry in
> > boot/": we have other bootloaders elsewhere, e.g. rpi-firmware, which
> > do not live in boot/ (to my own dismay, but that's another story.))
> I did it this way so that it's clear that systemd-boot can be built
> without a systemd init system.
There, _that_ is the reason for all this complexity.
So, let me suggest two alternative options that avoid all this mess:
1- make systemd-boot available only for systemd-based init,
2- just do a systemd-boot package (in boot/) that is a whole package on
its own, and just happens to build just the systemd-boot part of
systemd.
I would very much favour the first option, because it is very simple, as
it just requires a *few* tweaks in the existing sytemd.mk, i.e.
basically:
ifeq ($()BR2_PACKAGES_SYSTEMD_BOOT,y)
SYSTEMD_CONF_OPTS += \
-Defi=true \
-Dgnu-efi=true \
-Dcc-efi=blabla \
[...]
else
SYSTEMD_CONF_OPTS += -Defi=false -Dgnu-efi=false
endif
Also, I wonder if it ever makes sense to provide systemd-boot to
non-systemd init systems to begin with.
Baring that, option 2 is pretty simple as well. It's a separate package
that just happens to share its source code with another one, like we
have with mesa3d and mesa3d-headers (just as an example).
> Would it make sense to move all
> bootloaders to be under the boot menu?
No, that ship has long sailed now, let's not revisit this.
Regards,
Yann E. MORIN.
> >
> > Regards,
> > Yann E. MORIN.
> >
> > > Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
> > > ---
> > > DEVELOPERS | 1 +
> > > boot/Config.in | 1 +
> > > boot/systemd-boot/Config.in | 23 ++++++++++++++
> > > boot/systemd-boot/systemd-boot.mk | 7 +++++
> > > package/meson/cross-compilation.conf.in | 1 +
> > > package/meson/meson.mk | 41 ++++++++++++++++++++++++-
> > > package/systemd/Config.in | 54 +++++++++++++++++++++++++--------
> > > package/systemd/buildroot.conf | 3 ++
> > > package/systemd/loader.conf | 2 ++
> > > package/systemd/systemd.mk | 53 ++++++++++++++++++++++++++++++--
> > > system/Config.in | 1 +
> > > 11 files changed, 171 insertions(+), 16 deletions(-)
> > > create mode 100644 boot/systemd-boot/Config.in
> > > create mode 100644 boot/systemd-boot/systemd-boot.mk
> > > create mode 100644 package/systemd/buildroot.conf
> > > create mode 100644 package/systemd/loader.conf
> > >
> > > diff --git a/DEVELOPERS b/DEVELOPERS
> > > index 4192681..93599fe 100644
> > > --- a/DEVELOPERS
> > > +++ b/DEVELOPERS
> > > @@ -995,6 +995,7 @@ F: configs/pine64_defconfig
> > > F: configs/pine64_sopine_defconfig
> > >
> > > N: James Hilliard <james.hilliard1 at gmail.com>
> > > +F: boot/systemd-boot/
> > > F: package/python-aiodns/
> > > F: package/python-aiohttp/
> > > F: package/python-aiohttp-jinja2/
> > > diff --git a/boot/Config.in b/boot/Config.in
> > > index 8e0c8e5..5b7f606 100644
> > > --- a/boot/Config.in
> > > +++ b/boot/Config.in
> > > @@ -16,6 +16,7 @@ source "boot/mxs-bootlets/Config.in"
> > > source "boot/riscv-pk/Config.in"
> > > source "boot/s500-bootloader/Config.in"
> > > source "boot/syslinux/Config.in"
> > > +source "boot/systemd-boot/Config.in"
> > > source "boot/ts4800-mbrboot/Config.in"
> > > source "boot/uboot/Config.in"
> > > source "boot/vexpress-firmware/Config.in"
> > > diff --git a/boot/systemd-boot/Config.in b/boot/systemd-boot/Config.in
> > > new file mode 100644
> > > index 0000000..7c64cef
> > > --- /dev/null
> > > +++ b/boot/systemd-boot/Config.in
> > > @@ -0,0 +1,23 @@
> > > +config BR2_TARGET_SYSTEMD_BOOT
> > > + bool "systemd-boot"
> > > + depends on BR2_i386 || BR2_x86_64
> > > + select BR2_PACKAGE_BUILD_SYSTEMD
> > > + select BR2_PACKAGE_SYSTEMD
> > > + select BR2_PACKAGE_GNU_EFI
> > > + help
> > > + systemd-boot is a simple UEFI boot manager which executes
> > > + configured EFI images. The default entry is selected by a
> > > + configured pattern (glob) or an on-screen menu.
> > > +
> > > + systemd-boot operates on the EFI System Partition (ESP)
> > > + only. Configuration file fragments, kernels, initrds, other
> > > + EFI images need to reside on the ESP. Linux kernels need to
> > > + be built with CONFIG_EFI_STUB to be able to be directly
> > > + executed as an EFI image.
> > > +
> > > + See the Grub2 help text for details on preparing an EFI
> > > + capable disk image using systemd-boot: the instructions are
> > > + exactly the same, except that the systemd-boot configuration
> > > + files will be located in /loader/ inside the EFI partition.
> > > +
> > > + https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/
> > > \ No newline at end of file
> > > diff --git a/boot/systemd-boot/systemd-boot.mk b/boot/systemd-boot/systemd-boot.mk
> > > new file mode 100644
> > > index 0000000..5854024
> > > --- /dev/null
> > > +++ b/boot/systemd-boot/systemd-boot.mk
> > > @@ -0,0 +1,7 @@
> > > +################################################################################
> > > +#
> > > +# systemd-boot
> > > +#
> > > +################################################################################
> > > +
> > > +$(eval $(virtual-package))
> > > diff --git a/package/meson/cross-compilation.conf.in b/package/meson/cross-compilation.conf.in
> > > index 0eec740..fc8e27f 100644
> > > --- a/package/meson/cross-compilation.conf.in
> > > +++ b/package/meson/cross-compilation.conf.in
> > > @@ -11,6 +11,7 @@ strip = '@TARGET_CROSS at strip'
> > > pkgconfig = '@HOST_DIR@/usr/bin/pkg-config'
> > >
> > > [properties]
> > > +needs_exe_wrapper = true
> > > c_args = [@TARGET_CFLAGS@]
> > > c_link_args = [@TARGET_LDFLAGS@]
> > > cpp_args = [@TARGET_CXXFLAGS@]
> > > diff --git a/package/meson/meson.mk b/package/meson/meson.mk
> > > index e1675c2..d9ad2fc 100644
> > > --- a/package/meson/meson.mk
> > > +++ b/package/meson/meson.mk
> > > @@ -15,6 +15,45 @@ HOST_MESON_NEEDS_HOST_PYTHON = python3
> > >
> > > HOST_MESON_TARGET_ENDIAN = $(call LOWERCASE,$(BR2_ENDIAN))
> > > HOST_MESON_TARGET_CPU = $(GCC_TARGET_CPU)
> > > +ifeq ($(BR2_arcle),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = arc
> > > +else ifeq ($(BR2_arceb),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = arc
> > > +else ifeq ($(BR2_arm),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = arm
> > > +else ifeq ($(BR2_armeb),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = arm
> > > +else ifeq ($(BR2_aarch64),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = aarch64
> > > +else ifeq ($(BR2_aarch64_be),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = aarch64
> > > +else ifeq ($(BR2_i386),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = x86
> > > +else ifeq ($(BR2_mips),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = mips
> > > +else ifeq ($(BR2_mipsel),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = mips
> > > +else ifeq ($(BR2_mips64),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = mips64
> > > +else ifeq ($(BR2_mips64el),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = mips64
> > > +else ifeq ($(BR2_powerpc),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = ppc
> > > +else ifeq ($(BR2_powerpc64),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = ppc64
> > > +else ifeq ($(BR2_powerpc64le),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = ppc64
> > > +else ifeq ($(BR2_riscv),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = riscv32
> > > +else ifeq ($(BR2_sparc),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = sparc
> > > +else ifeq ($(BR2_sparc64),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = sparc64
> > > +else ifeq ($(BR2_x86_64),y)
> > > +HOST_MESON_TARGET_CPU_FAMILY = x86_64
> > > +else
> > > +HOST_MESON_TARGET_CPU_FAMILY = $(ARCH)
> > > +endif
> > >
> > > HOST_MESON_SED_CFLAGS = $(if $(TARGET_CFLAGS),`printf '"%s"$(comma) ' $(TARGET_CFLAGS)`)
> > > HOST_MESON_SED_LDFLAGS = $(if $(TARGET_LDFLAGS),`printf '"%s"$(comma) ' $(TARGET_LDFLAGS)`)
> > > @@ -23,7 +62,7 @@ HOST_MESON_SED_CXXFLAGS = $(if $(TARGET_CXXFLAGS),`printf '"%s"$(comma) ' $(TARG
> > > define HOST_MESON_INSTALL_CROSS_CONF
> > > mkdir -p $(HOST_DIR)/etc/meson
> > > sed -e "s%@TARGET_CROSS@%$(TARGET_CROSS)%g" \
> > > - -e "s%@TARGET_ARCH@%$(ARCH)%g" \
> > > + -e "s%@TARGET_ARCH@%$(HOST_MESON_TARGET_CPU_FAMILY)%g" \
> > > -e "s%@TARGET_CPU@%$(HOST_MESON_TARGET_CPU)%g" \
> > > -e "s%@TARGET_ENDIAN@%$(HOST_MESON_TARGET_ENDIAN)%g" \
> > > -e "s%@TARGET_CFLAGS@%$(HOST_MESON_SED_CFLAGS)%g" \
> > > diff --git a/package/systemd/Config.in b/package/systemd/Config.in
> > > index 25f322e..c8fa786 100644
> > > --- a/package/systemd/Config.in
> > > +++ b/package/systemd/Config.in
> > > @@ -7,27 +7,30 @@ config BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS
> > > BR2_sh4a || BR2_sh4aeb || BR2_sparc || BR2_x86_64 || \
> > > BR2_aarch64 || BR2_m68k || BR2_arc
> > >
> > > +config BR2_PACKAGE_BUILD_SYSTEMD
> > > + bool
> > > +
> > > menuconfig BR2_PACKAGE_SYSTEMD
> > > bool "systemd"
> > > - depends on BR2_INIT_SYSTEMD
> > > + depends on BR2_PACKAGE_BUILD_SYSTEMD
> > > depends on !BR2_STATIC_LIBS # kmod
> > > depends on BR2_TOOLCHAIN_HAS_THREADS # dbus
> > > depends on BR2_USE_MMU # dbus
> > > - select BR2_PACKAGE_HAS_UDEV
> > > - select BR2_PACKAGE_DBUS # runtime dependency only
> > > + select BR2_PACKAGE_HAS_UDEV if BR2_INIT_SYSTEMD
> > > + select BR2_PACKAGE_DBUS if BR2_INIT_SYSTEMD # runtime dependency only
> > > select BR2_PACKAGE_LIBCAP
> > > select BR2_PACKAGE_UTIL_LINUX
> > > - select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
> > > + select BR2_PACKAGE_UTIL_LINUX_LIBBLKID if BR2_INIT_SYSTEMD
> > > select BR2_PACKAGE_UTIL_LINUX_LIBMOUNT
> > > - select BR2_PACKAGE_UTIL_LINUX_BINARIES
> > > + select BR2_PACKAGE_UTIL_LINUX_BINARIES if BR2_INIT_SYSTEMD
> > > select BR2_PACKAGE_UTIL_LINUX_MOUNT
> > > - select BR2_PACKAGE_UTIL_LINUX_NOLOGIN
> > > - select BR2_PACKAGE_UTIL_LINUX_FSCK
> > > - select BR2_PACKAGE_KMOD
> > > - select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # kmod-tools
> > > - select BR2_PACKAGE_KMOD_TOOLS
> > > - select BR2_TARGET_TZ_INFO
> > > - select BR2_NEEDS_HOST_UTF8_LOCALE
> > > + select BR2_PACKAGE_UTIL_LINUX_NOLOGIN if BR2_INIT_SYSTEMD
> > > + select BR2_PACKAGE_UTIL_LINUX_FSCK if BR2_INIT_SYSTEMD
> > > + select BR2_PACKAGE_KMOD if BR2_INIT_SYSTEMD
> > > + select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS if BR2_INIT_SYSTEMD # kmod-tools
> > > + select BR2_PACKAGE_KMOD_TOOLS if BR2_INIT_SYSTEMD
> > > + select BR2_TARGET_TZ_INFO if BR2_INIT_SYSTEMD
> > > + select BR2_NEEDS_HOST_UTF8_LOCALE if BR2_INIT_SYSTEMD
> > > help
> > > systemd is a system and service manager for Linux,
> > > compatible with SysV and LSB init scripts. systemd provides
> > > @@ -76,9 +79,11 @@ if BR2_PACKAGE_SYSTEMD
> > >
> > > config BR2_PACKAGE_PROVIDES_UDEV
> > > default "systemd"
> > > + depends on BR2_INIT_SYSTEMD
> > >
> > > config BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY
> > > bool "HTTP server for journal events"
> > > + depends on BR2_INIT_SYSTEMD
> > > select BR2_PACKAGE_LIBMICROHTTPD
> > > help
> > > systemd-journal-gatewayd serves journal events over the
> > > @@ -89,6 +94,7 @@ config BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY
> > >
> > > config BR2_PACKAGE_SYSTEMD_BACKLIGHT
> > > bool "enable backlight support"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-backlight is a service that restores the display
> > > backlight brightness at early boot and saves it at shutdown.
> > > @@ -97,6 +103,7 @@ config BR2_PACKAGE_SYSTEMD_BACKLIGHT
> > >
> > > config BR2_PACKAGE_SYSTEMD_BINFMT
> > > bool "enable binfmt tool"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-binfmt is an early boot service that registers
> > > additional binary formats for executables in the kernel.
> > > @@ -105,6 +112,7 @@ config BR2_PACKAGE_SYSTEMD_BINFMT
> > >
> > > config BR2_PACKAGE_SYSTEMD_COREDUMP
> > > bool "enable coredump hook"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-coredump can be used as a helper binary by the
> > > kernel when a user space program receives a fatal signal and
> > > @@ -114,6 +122,7 @@ config BR2_PACKAGE_SYSTEMD_COREDUMP
> > >
> > > config BR2_PACKAGE_SYSTEMD_FIRSTBOOT
> > > bool "enable firstboot support"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-firstboot initializes the most basic system settings
> > > interactively on the first boot.
> > > @@ -122,6 +131,7 @@ config BR2_PACKAGE_SYSTEMD_FIRSTBOOT
> > >
> > > config BR2_PACKAGE_SYSTEMD_HIBERNATE
> > > bool "enable hibernation support"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > When this features is enabled, additional tools and services
> > > are built to support suspending and resuming the system.
> > > @@ -131,6 +141,7 @@ config BR2_PACKAGE_SYSTEMD_HIBERNATE
> > > config BR2_PACKAGE_SYSTEMD_HOSTNAMED
> > > bool "enable hostname daemon"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-hostnamed is a system service that may be used as a
> > > mechanism to change the system's hostname.
> > > @@ -140,6 +151,7 @@ config BR2_PACKAGE_SYSTEMD_HOSTNAMED
> > > config BR2_PACKAGE_SYSTEMD_HWDB
> > > bool "enable hwdb installation"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > Enables hardware database installation to /usr/lib/udev/hwdb.d
> > >
> > > @@ -150,6 +162,7 @@ config BR2_PACKAGE_SYSTEMD_HWDB
> > >
> > > config BR2_PACKAGE_SYSTEMD_IMPORTD
> > > bool "enable import daemon"
> > > + depends on BR2_INIT_SYSTEMD
> > > depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt
> > > select BR2_PACKAGE_LIBCURL
> > > select BR2_PACKAGE_LIBGCRYPT
> > > @@ -166,6 +179,7 @@ config BR2_PACKAGE_SYSTEMD_IMPORTD
> > >
> > > config BR2_PACKAGE_SYSTEMD_LOCALED
> > > bool "enable locale daemon"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-localed is a system service that may be used as
> > > mechanism to change the system locale settings, as well as
> > > @@ -175,6 +189,7 @@ config BR2_PACKAGE_SYSTEMD_LOCALED
> > >
> > > config BR2_PACKAGE_SYSTEMD_LOGIND
> > > bool "enable login daemon"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-logind is a system service that manages user logins.
> > >
> > > @@ -182,6 +197,7 @@ config BR2_PACKAGE_SYSTEMD_LOGIND
> > >
> > > config BR2_PACKAGE_SYSTEMD_MACHINED
> > > bool "enable machine daemon"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-machined is a system service that keeps track of
> > > virtual machines and containers, and processes belonging to
> > > @@ -192,6 +208,7 @@ config BR2_PACKAGE_SYSTEMD_MACHINED
> > > config BR2_PACKAGE_SYSTEMD_MYHOSTNAME
> > > bool "enable myhostname NSS plugin"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > nss-myhostname is a plug-in module for the GNU Name Service
> > > Switch (NSS) functionality of the GNU C Library (glibc),
> > > @@ -203,6 +220,7 @@ config BR2_PACKAGE_SYSTEMD_MYHOSTNAME
> > > config BR2_PACKAGE_SYSTEMD_NETWORKD
> > > bool "enable network manager"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-networkd is a system service that manages networks.
> > > It detects and configures network devices as they appear, as
> > > @@ -215,6 +233,7 @@ config BR2_PACKAGE_SYSTEMD_NETWORKD
> > >
> > > config BR2_PACKAGE_SYSTEMD_POLKIT
> > > bool "enable polkit support"
> > > + depends on BR2_INIT_SYSTEMD
> > > depends on BR2_TOOLCHAIN_USES_GLIBC # polkit
> > > select BR2_PACKAGE_POLKIT
> > > help
> > > @@ -226,10 +245,12 @@ config BR2_PACKAGE_SYSTEMD_POLKIT
> > > http://wiki.freedesktop.org/www/Software/polkit/
> > >
> > > comment "polkit support needs a glibc toolchain"
> > > + depends on BR2_INIT_SYSTEMD
> > > depends on !BR2_TOOLCHAIN_USES_GLIBC
> > >
> > > config BR2_PACKAGE_SYSTEMD_QUOTACHECK
> > > bool "enable quotacheck tools"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-quotacheck is a service responsible for file system
> > > quota checks. It is run once at boot after all necessary
> > > @@ -240,6 +261,7 @@ config BR2_PACKAGE_SYSTEMD_QUOTACHECK
> > >
> > > config BR2_PACKAGE_SYSTEMD_RANDOMSEED
> > > bool "enable random-seed support"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-random-seed is a service that restores the random
> > > seed of the system at early boot and saves it at
> > > @@ -251,6 +273,7 @@ config BR2_PACKAGE_SYSTEMD_RANDOMSEED
> > > config BR2_PACKAGE_SYSTEMD_RESOLVED
> > > bool "enable resolve daemon"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-resolved is a system service that provides network
> > > name resolution to local applications. It implements a
> > > @@ -261,6 +284,7 @@ config BR2_PACKAGE_SYSTEMD_RESOLVED
> > >
> > > config BR2_PACKAGE_SYSTEMD_RFKILL
> > > bool "enable rfkill tools"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-rfkill is a service that restores the RF kill switch
> > > state at early boot and saves it at shutdown.
> > > @@ -269,6 +293,7 @@ config BR2_PACKAGE_SYSTEMD_RFKILL
> > >
> > > config BR2_PACKAGE_SYSTEMD_SMACK_SUPPORT
> > > bool "enable SMACK support"
> > > + depends on BR2_INIT_SYSTEMD
> > > select BR2_PACKAGE_ATTR
> > > select BR2_PACKAGE_SMACK
> > > help
> > > @@ -283,6 +308,7 @@ config BR2_PACKAGE_SYSTEMD_SMACK_SUPPORT
> > >
> > > config BR2_PACKAGE_SYSTEMD_SYSUSERS
> > > bool "enable sysusers support"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-sysusers creates system users and groups, based on
> > > the file format and location specified in sysusers.d(5).
> > > @@ -292,6 +318,7 @@ config BR2_PACKAGE_SYSTEMD_SYSUSERS
> > > config BR2_PACKAGE_SYSTEMD_TIMEDATED
> > > bool "enable timedate daemon"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-timedated is a system service that may be used as a
> > > mechanism to change the system clock and timezone, as well
> > > @@ -302,6 +329,7 @@ config BR2_PACKAGE_SYSTEMD_TIMEDATED
> > > config BR2_PACKAGE_SYSTEMD_TIMESYNCD
> > > bool "enable timesync daemon"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-timesyncd is a service that may be used to
> > > synchronize the local system clock with a Network Time
> > > @@ -315,6 +343,7 @@ config BR2_PACKAGE_SYSTEMD_TIMESYNCD
> > > config BR2_PACKAGE_SYSTEMD_TMPFILES
> > > bool "enable tmpfiles support"
> > > default y
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-tmpfiles creates, deletes, and cleans up volatile
> > > and temporary files and directories, based on the
> > > @@ -325,6 +354,7 @@ config BR2_PACKAGE_SYSTEMD_TMPFILES
> > >
> > > config BR2_PACKAGE_SYSTEMD_VCONSOLE
> > > bool "enable vconsole tool"
> > > + depends on BR2_INIT_SYSTEMD
> > > help
> > > systemd-vconsole-setup is an early boot service that
> > > configures the virtual console font and console keymap.
> > > diff --git a/package/systemd/buildroot.conf b/package/systemd/buildroot.conf
> > > new file mode 100644
> > > index 0000000..16d4d85
> > > --- /dev/null
> > > +++ b/package/systemd/buildroot.conf
> > > @@ -0,0 +1,3 @@
> > > +title Buildroot
> > > +linux /bzImage
> > > +options root=/dev/sda2 rootwait console=tty1
> > > diff --git a/package/systemd/loader.conf b/package/systemd/loader.conf
> > > new file mode 100644
> > > index 0000000..93b77b8
> > > --- /dev/null
> > > +++ b/package/systemd/loader.conf
> > > @@ -0,0 +1,2 @@
> > > +timeout 3
> > > +default buildroot
> > > diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
> > > index e53f0b6..b7234be 100644
> > > --- a/package/systemd/systemd.mk
> > > +++ b/package/systemd/systemd.mk
> > > @@ -8,15 +8,31 @@ SYSTEMD_VERSION = 239
> > > SYSTEMD_SITE = $(call github,systemd,systemd,v$(SYSTEMD_VERSION))
> > > SYSTEMD_LICENSE = LGPL-2.1+, GPL-2.0+ (udev), Public Domain (few source files, see README)
> > > SYSTEMD_LICENSE_FILES = LICENSE.GPL2 LICENSE.LGPL2.1 README
> > > +ifeq ($(BR2_INIT_SYSTEMD),y)
> > > SYSTEMD_INSTALL_STAGING = YES
> > > +else
> > > +SYSTEMD_INSTALL_STAGING = NO
> > > +SYSTEMD_INSTALL_TARGET = NO
> > > +endif
> > > +ifeq ($(BR2_TARGET_SYSTEMD_BOOT),y)
> > > +SYSTEMD_INSTALL_IMAGES = YES
> > > +ifeq ($(BR2_i386),y)
> > > +SYSTEMD_IMGARCH = ia32
> > > +else ifeq ($(BR2_x86_64),y)
> > > +SYSTEMD_IMGARCH = x64
> > > +endif
> > > +endif
> > > SYSTEMD_DEPENDENCIES = \
> > > host-gperf \
> > > host-intltool \
> > > - kmod \
> > > libcap \
> > > util-linux
> > >
> > > +ifeq ($(BR2_INIT_SYSTEMD),y)
> > > +SYSTEMD_DEPENDENCIES += \
> > > + kmod
> > > SYSTEMD_PROVIDES = udev
> > > +endif
> > >
> > > SYSTEMD_CONF_OPTS += \
> > > -Drootlibdir='/usr/lib' \
> > > @@ -24,8 +40,6 @@ SYSTEMD_CONF_OPTS += \
> > > -Dman=false \
> > > -Dima=false \
> > > -Dlibcryptsetup=false \
> > > - -Defi=false \
> > > - -Dgnu-efi=false \
> > > -Dldconfig=false \
> > > -Ddefault-dnssec=no \
> > > -Dtests=false \
> > > @@ -404,4 +418,37 @@ endef
> > > SYSTEMD_CONF_ENV = $(HOST_UTF8_LOCALE_ENV)
> > > SYSTEMD_NINJA_ENV = $(HOST_UTF8_LOCALE_ENV)
> > >
> > > +ifeq ($(BR2_TARGET_SYSTEMD_BOOT),y)
> > > +SYSTEMD_DEPENDENCIES += gnu-efi
> > > +SYSTEMD_CONF_OPTS += \
> > > + -Defi=true \
> > > + -Dgnu-efi=true \
> > > + -Defi-cc=$(TARGET_CC) \
> > > + -Defi-ld=$(TARGET_LD) \
> > > + -Defi-libdir=$(STAGING_DIR)/usr/lib \
> > > + -Defi-ldsdir=$(STAGING_DIR)/usr/lib \
> > > + -Defi-includedir=$(STAGING_DIR)/usr/include/efi \
> > > +
> > > +ifneq ($(BR2_INIT_SYSTEMD),y)
> > > +define SYSTEMD_BUILD_CMDS
> > > + $(TARGET_MAKE_ENV) $(SYSTEMD_NINJA_ENV) \
> > > + $(NINJA) $(NINJA_OPTS) -C $(SYSTEMD_SRCDIR)/build \
> > > + src/boot/efi/{systemd-boot$(SYSTEMD_IMGARCH).efi,linux$(SYSTEMD_IMGARCH).efi.stub}
> > > +endef
> > > +endif
> > > +
> > > +define SYSTEMD_INSTALL_IMAGES_CMDS
> > > + $(INSTALL) -D -m 0644 $(@D)/build/src/boot/efi/systemd-boot$(SYSTEMD_IMGARCH).efi \
> > > + $(BINARIES_DIR)/efi-part/EFI/BOOT/boot$(SYSTEMD_IMGARCH).efi
> > > + echo "boot$(SYSTEMD_IMGARCH).efi" > \
> > > + $(BINARIES_DIR)/efi-part/startup.nsh
> > > + $(INSTALL) -D -m 0644 $(SYSTEMD_PKGDIR)/loader.conf \
> > > + $(BINARIES_DIR)/efi-part/loader/loader.conf
> > > + $(INSTALL) -D -m 0644 $(SYSTEMD_PKGDIR)/buildroot.conf \
> > > + $(BINARIES_DIR)/efi-part/loader/entries/buildroot.conf
> > > +endef
> > > +else
> > > +SYSTEMD_CONF_OPTS += -Defi=false -Dgnu-efi=false
> > > +endif
> > > +
> > > $(eval $(meson-package))
> > > diff --git a/system/Config.in b/system/Config.in
> > > index 9e34f11..773a2cc 100644
> > > --- a/system/Config.in
> > > +++ b/system/Config.in
> > > @@ -133,6 +133,7 @@ config BR2_INIT_SYSTEMD
> > > depends on !BR2_STATIC_LIBS
> > > depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
> > > select BR2_ROOTFS_MERGED_USR
> > > + select BR2_PACKAGE_BUILD_SYSTEMD
> > > select BR2_PACKAGE_SYSTEMD
> > >
> > > comment "systemd needs a glibc toolchain w/ SSP, headers >= 3.10"
> > > --
> > > 2.7.4
> > >
> >
> > --
> > .-----------------.--------------------.------------------.--------------------.
> > | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> > | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
> > | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
> > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
> > '------------------------------^-------^------------------^--------------------'
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
More information about the buildroot
mailing list