All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ross Burton <ross.burton@intel.com>
To: openembedded-core@lists.openembedded.org
Cc: openembedded-devel@lists.openembedded.org
Subject: [PATCH 13/22] systemd: add udev init script for hybrid sysvinit/systemd usage
Date: Fri, 22 Mar 2013 17:38:33 +0000	[thread overview]
Message-ID: <c078935b2a8408a012210365f4e07524e5866167.1363973088.git.ross.burton@intel.com> (raw)
In-Reply-To: <cover.1363973088.git.ross.burton@intel.com>
In-Reply-To: <cover.1363973088.git.ross.burton@intel.com>

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 0000000..0ddd043
--- /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 a006ec8..d07fa95 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
 
-- 
1.7.10.4




  parent reply	other threads:[~2013-03-22 17:58 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-22 17:38 [PATCH 00/22] hybrid systemd/sysvinit, and systemd fixes Ross Burton
2013-03-22 17:38 ` [PATCH 01/22] busybox: enable systemd integration for syslogd Ross Burton
2013-03-25 12:47   ` Andreas Müller
2013-03-25 12:53     ` Burton, Ross
2013-03-25 12:58       ` Andreas Müller
2013-03-22 17:38 ` [PATCH 02/22] busybox: add strictatime support to mount Ross Burton
2013-03-22 17:38 ` [PATCH 03/22] systemd: make xz support (compressed journal) optional, defaulting to on Ross Burton
2013-03-22 17:38 ` [PATCH 04/22] systemd: merge udev-systemd into udev Ross Burton
2013-03-22 17:38 ` [PATCH 05/22] core-image-minimal-initramfs: don't install busybox-syslog Ross Burton
2013-03-22 17:38 ` [PATCH 06/22] systemd: don't depend on the PCI/USB databases Ross Burton
2013-03-22 17:38 ` [PATCH 07/22] systemd: split out the hwdb data Ross Burton
2013-03-22 17:38 ` [PATCH 08/22] default-providers: change udev selection logic Ross Burton
2013-03-22 17:38 ` [PATCH 09/22] update-rcd.bbclass: handle both sysvinit and systemd features being present Ross Burton
2013-03-22 19:04   ` Martin Jansa
2013-03-22 19:04     ` [OE-core] " Martin Jansa
2013-03-22 19:11     ` Burton, Ross
2013-03-22 19:11       ` [OE-core] " Burton, Ross
2013-03-22 17:38 ` [PATCH 10/22] util-linux: split uuidd into it's own package, and enable for systemd Ross Burton
2013-03-22 17:38 ` [PATCH 11/22] update-rcd: drop depends to recommends, check for update-rcd in scripts Ross Burton
2013-03-22 17:38 ` [PATCH 12/22] systemd: check for systemctl first, and don't force systemd to be installed Ross Burton
2013-03-22 17:38 ` Ross Burton [this message]
2013-03-22 17:38 ` [PATCH 14/22] update-rc.d/systemd: change communication variable name Ross Burton
2013-03-22 17:38 ` [PATCH 15/22] default-distrovars: don't add INITMAN to DISTRO_FEATURES and DISTRO_FEATURES_BACKFILL Ross Burton
2013-03-22 17:38 ` [PATCH 16/22] bitbake.conf: explicitly backfill sysvinit, not DISTRO_FEATURES_INITMAN Ross Burton
2013-03-22 17:38 ` [PATCH 17/22] local.conf.sample.extended: remove obsolete DISTRO_FEATURES_INITMAN reference Ross Burton
2013-03-22 17:38 ` [PATCH 18/22] default-distrovars: " Ross Burton
2013-03-22 17:38 ` [PATCH 19/22] packagegroup-core-boot: revert to specifying sysvinit as default init manager Ross Burton
2013-03-23  4:30   ` Saul Wold
2013-03-22 17:38 ` [PATCH 20/22] Revert "base-files: add fstab for systemd based systems" Ross Burton
2013-03-22 17:38 ` [PATCH 21/22] systemd-compat-units: disable dbus-1 Ross Burton
2013-03-22 17:38 ` [PATCH 22/22] systemd: recommend systemd-compat-units Ross Burton
2013-03-22 22:00 ` [oe] [PATCH 00/22] hybrid systemd/sysvinit, and systemd fixes Martin Jansa
2013-03-22 22:00   ` Martin Jansa
2013-03-25 12:39   ` [oe] " Burton, Ross
2013-03-25 12:39     ` Burton, Ross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c078935b2a8408a012210365f4e07524e5866167.1363973088.git.ross.burton@intel.com \
    --to=ross.burton@intel.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=openembedded-devel@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.