From b58a176936740e8e291f1e82229a8ca044bdb044 Mon Sep 17 00:00:00 2001 From: Ross Burton <ross.burton@intel.com> Date: Wed, 6 Mar 2013 15:08:44 +0000 Subject: systemd: add udev init script for hybrid sysvinit/systemd usage With both sysvinit and systemd features it's possible to use systemd's udev with sysvinit, so add the required init script. Signed-off-by: Ross Burton <ross.burton@intel.com> --- meta/recipes-core/systemd/systemd/init | 101 +++++++++++++++++++++++++++++++ meta/recipes-core/systemd/systemd_197.bb | 13 +++- 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-core/systemd/systemd/init diff --git a/meta/recipes-core/systemd/systemd/init b/meta/recipes-core/systemd/systemd/init new file mode 100644 index 0000000000..0ddd0434f2 --- /dev/null +++ b/meta/recipes-core/systemd/systemd/init @@ -0,0 +1,101 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: udev +# Required-Start: mountvirtfs +# Required-Stop: +# Default-Start: S +# Default-Stop: +# Short-Description: Start udevd, populate /dev and load drivers. +### END INIT INFO + +. /etc/init.d/functions + +export TZ=/etc/localtime + +[ -d /sys/class ] || exit 1 +[ -r /proc/mounts ] || exit 1 +[ -x /lib/systemd/systemd-udevd ] || exit 1 +[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache +[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf + +readfile () { + filename=$1 + READDATA="" + if [ -r $filename ]; then + while read line; do + READDATA="$READDATA$line" + done < $filename + fi +} + +case "$1" in + start) + export ACTION=add + # propagate /dev from /sys + echo "Starting udev" + + # mount the tmpfs on /dev, if not already done + LANG=C awk '$2 == "/dev" && ($3 == "tmpfs" || $3 == "devtmpfs") { exit 1 }' /proc/mounts && { + mount -n -o mode=0755 -t tmpfs none "/dev" + } + [ -e /dev/pts ] || mkdir -m 0755 /dev/pts + [ -e /dev/shm ] || mkdir -m 1777 /dev/shm + mount -a -t tmpfs 2>/dev/null + mkdir -p /var/volatile/run + + # cache handling + if [ "$DEVCACHE" != "" ]; then + readfile /proc/version + VERSION="$READDATA" + readfile /proc/cmdline + CMDLINE="$READDATA" + readfile /proc/devices + DEVICES="$READDATA" + readfile /proc/atags + ATAGS="$READDATA" + + if [ -e $DEVCACHE ]; then + readfile /etc/udev/cache.data + if [ "$READDATA" = "$VERSION$CMDLINE$DEVICES$ATAGS" ]; then + (cd /; tar xf $DEVCACHE > /dev/null 2>&1) + not_first_boot=1 + fi + + echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache + fi + fi + + # make_extra_nodes + killproc systemd-udevd > "/dev/null" 2>&1 + + # trigger the sorted events + echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug + /lib/systemd/systemd-udevd -d + + /usr/bin/udevadm control --env=STARTUP=1 + if [ "$not_first_boot" != "" ];then + /usr/bin/udevadm trigger --action=add --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux --subsystem-nomatch=platform + (/usr/bin/udevadm settle --timeout=3; /usr/bin/udevadm control --env=STARTUP=)& + else + /usr/bin/udevadm trigger --action=add + /usr/bin/udevadm settle + fi + ;; + stop) + echo "Stopping udevd" + start-stop-daemon --stop --name udevd --quiet + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + status) + status udevd + ;; + *) + echo "Usage: $0 {start|stop|status|restart}" + exit 1 +esac +exit 0 diff --git a/meta/recipes-core/systemd/systemd_197.bb b/meta/recipes-core/systemd/systemd_197.bb index a006ec8e92..d07fa95fea 100644 --- a/meta/recipes-core/systemd/systemd_197.bb +++ b/meta/recipes-core/systemd/systemd_197.bb @@ -16,7 +16,7 @@ DEPENDS += "${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}" SECTION = "base/shell" -inherit gtk-doc useradd pkgconfig autotools perlnative +inherit gtk-doc useradd pkgconfig autotools perlnative update-rc.d SRC_URI = "http://www.freedesktop.org/software/systemd/systemd-${PV}.tar.xz \ file://touchscreen.rules \ @@ -26,6 +26,7 @@ SRC_URI = "http://www.freedesktop.org/software/systemd/systemd-${PV}.tar.xz \ file://00-create-volatile.conf \ file://0001-systemd-analyze-rewrite-in-C.patch \ file://udev-linkage.patch \ + file://init \ " SRC_URI[md5sum] = "56a860dceadfafe59f40141eb5223743" SRC_URI[sha256sum] = "e6857ea21ae24d7056e7b0f4c2aaaba73b8bf57025b8949c0a8af0c1bc9774b5" @@ -100,6 +101,11 @@ do_install() { install -m 0644 ${WORKDIR}/var-run.conf ${D}${sysconfdir}/tmpfiles.d/ install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${sysconfdir}/tmpfiles.d/ + + if ${@base_contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd + fi } python populate_packages_prepend (){ @@ -210,6 +216,7 @@ FILES_udev += "${base_sbindir}/udevd \ /lib/udev/rules.d/8*.rules \ /lib/udev/rules.d/95*.rules \ ${sysconfdir}/udev \ + ${sysconfdir}/init.d/systemd-udevd \ ${systemd_unitdir}/system/*udev* \ ${systemd_unitdir}/system/*.wants/*udev* \ " @@ -221,6 +228,10 @@ FILES_udev-utils = "${bindir}/udevadm" FILES_udev-hwdb = "${base_libdir}/udev/hwdb.d" +INITSCRIPT_PACKAGES = "udev" +INITSCRIPT_NAME_udev = "systemd-udevd" +INITSCRIPT_PARAMS_udev = "start 03 S ." + # TODO: # u-a for runlevel and telinit -- cgit v1.2.3