[Buildroot] [PATCH 2/6] Add the systemd package

Maxime Ripard maxime.ripard at free-electrons.com
Tue Mar 20 08:35:55 UTC 2012


Hello Arnout,

Le 20/03/2012 00:32, Arnout Vandecappelle a écrit :
> On Monday 19 March 2012 16:59:36 Maxime Ripard wrote:
> [snip]
>> diff --git a/package/systemd/Config.in b/package/systemd/Config.in
>> new file mode 100644
>> index 0000000..d87054d
>> --- /dev/null
>> +++ b/package/systemd/Config.in
>> @@ -0,0 +1,19 @@
>> +config BR2_PACKAGE_SYSTEMD
>> +	bool "systemd"
>> +	depends on BR2_PACKAGE_UDEV
>> +	select BR2_PACKAGE_DBUS
>> +	select BR2_PACKAGE_LIBCAP
>> +	help
>> +	  systemd is a system and service manager for Linux, compatible with
>> +	  SysV and LSB init scripts. systemd provides aggressive parallelization
>> +	  capabilities, uses socket and D-Bus activation for starting services,
>> +	  offers on-demand starting of daemons, keeps track of processes using
>> +	  Linux cgroups, supports snapshotting and restoring of the system
>> +	  state, maintains mount and automount points and implements an
>> +	  elaborate transactional dependency-based service control logic.
>> +	  It can work as a drop-in replacement for sysvinit. 
>  Trailing whitespace.

Oops...

>> +
>> +	  http://freedesktop.org/wiki/Software/systemd
>> +
>> +comment "systemd not available (depends on udev and dbus)"
>> +	depends on !BR2_PACKAGE_UDEV || !BR2_PACKAGE_DBUS
> 
>  DBUS is a 'select' depedency, not a 'depends on', so it shouldn't be in
> the depends on of the comment.

Right

>> diff --git a/package/systemd/getty at .service b/package/systemd/getty at .service
> [snip]
>> diff --git a/package/systemd/serial-getty at .service b/package/systemd/serial-getty at .service
> 
>  AFAICS the only difference between these two files and the upstream 
> version is that it's getty instead of agetty.  Wouldn't it be simpler
> and more future-safe to patch the upstream files?

Probably. I'll send a patch and see how it turns out.
In the meantime, maybe I can just put a patch here instead of the whole
file.

>> diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
>> new file mode 100644
>> index 0000000..a20ddf4
>> --- /dev/null
>> +++ b/package/systemd/systemd.mk
> [snip]
>> +# Build after Busybox
>  Why? (I know why, but it should be in the comment)

ACK

>> +ifeq ($(BR2_PACKAGE_BUSYBOX),y)
>> +	SYSTEMD_DEPENDENCIES += busybox
>> +endif
> [snip]
>> +define SYSTEMD_INSTALL_INIT_HOOK
>> +	ln -fs ../bin/systemd $(TARGET_DIR)/sbin/init
>> +	ln -fs ../bin/systemctl $(TARGET_DIR)/sbin/halt
>> +	ln -fs ../bin/systemctl $(TARGET_DIR)/sbin/poweroff
>> +	ln -fs ../bin/systemctl $(TARGET_DIR)/sbin/reboot
>> +
>> +	mkdir -p $(TARGET_DIR)/run
>  In the current skeleton, /run is a symlink to /tmp.  For a
> user-defined skeleton, I would say that it's up to the user to
> make sure a valid /run exists.

Yes, of course.

>> +
>> +	ln -fs ../../../lib/systemd/system/multi-user.target $(TARGET_DIR)/etc/systemd/system/default.target
>> +endef
>> +
>> +define SYSTEMD_INSTALL_TTY_HOOK
>> +	rm -f $(TARGET_DIR)/etc/systemd/system/getty.target.wants/getty at tty1.service
>> +	[ -f $(TARGET_DIR)/etc/systemd/system/getty at .service ] || \
>> +		$(INSTALL) -D package/systemd/getty at .service \
>> +			$(TARGET_DIR)/etc/systemd/system/
>> +	[ -f $(TARGET_DIR)/etc/systemd/system/serial-getty at .service ] || \
>> +		$(INSTALL) -D package/systemd/serial-getty at .service \
>> +			$(TARGET_DIR)/etc/systemd/system/
>> +	ln -fs ../serial-getty at .service $(TARGET_DIR)/etc/systemd/system/getty.target.wants/serial-getty@$(BR2_TARGET_GENERIC_GETTY_PORT).service
> 
>  This looks strange to me.  Admittedly, I've never used systemd and
> don't really know how it works.  But to me, this looks like the
> getty at .service is actually not used.

Well, actually, this symlink with weird names is used as the way to pass
units some arguments.

If you look into the serial-getty at .service file, you will see at some
point some %i or %I. These expands to what is between the @ and the
.service in the filename. If we were to have serial-getty at ttyS2.service,
it would expand to "ttyS2", and the unit would have the start command
"/sbin/getty -L ttyS2 115200 vt100".

The symlinks are here only to avoid copying the same file over and over
again.

>> +endef
>> +
>> +SYSTEMD_POST_INSTALL_TARGET_HOOKS += \
>> +	SYSTEMD_INSTALL_INIT_HOOK \
>> +	SYSTEMD_INSTALL_TTY_HOOK \
>> +
>> +$(eval $(call AUTOTARGETS))
> [snip]
> 
>  Regards,
>  Arnout
> 

Thanks,
Maxime

-- 
Maxime Ripard, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com



More information about the buildroot mailing list