[OE-core] [PATCH 1/2] busybox: Add support for busybox-init

Andre McCurdy armccurdy at gmail.com
Mon Jan 25 19:39:44 UTC 2016


On Fri, Jan 22, 2016 at 12:49 PM, Khem Raj <raj.khem at gmail.com> wrote:
> in config metadata we can configure busybox based init and device
> initializer ( mdev ) using e.g.
>
> VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
> VIRTUAL-RUNTIME_login_manager = "busybox"
> VIRTUAL-RUNTIME_init_manager = "busybox"
> VIRTUAL-RUNTIME_initscripts = "initscripts"
> VIRTUAL-RUNTIME_keymaps = "keymaps"
> DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"
>
> busybox can be used to provide init system
> combined with mdev it makes it a complete init
> system for really tiny systems.
>
> This patch uses above defines to configure features in busybox to enable
> the init system and mdev in a configurable manner
>
> Signed-off-by: Khem Raj <raj.khem at gmail.com>
> ---
>  meta/recipes-core/busybox/busybox.inc       | 15 +++++++++++++++
>  meta/recipes-core/busybox/busybox/init.cfg  |  3 +++
>  meta/recipes-core/busybox/busybox/mdev.cfg  | 11 +++++++++++
>  meta/recipes-core/busybox/busybox_1.24.1.bb |  6 ++++++
>  meta/recipes-core/busybox/files/inittab     | 24 ++++++++++++++++++++++++
>  meta/recipes-core/busybox/files/rcK         | 25 +++++++++++++++++++++++++
>  meta/recipes-core/busybox/files/rcS         | 26 ++++++++++++++++++++++++++
>  meta/recipes-core/busybox/files/runlevel    | 11 +++++++++++
>  8 files changed, 121 insertions(+)
>  create mode 100644 meta/recipes-core/busybox/busybox/init.cfg
>  create mode 100644 meta/recipes-core/busybox/busybox/mdev.cfg
>  create mode 100644 meta/recipes-core/busybox/files/inittab
>  create mode 100644 meta/recipes-core/busybox/files/rcK
>  create mode 100644 meta/recipes-core/busybox/files/rcS
>  create mode 100644 meta/recipes-core/busybox/files/runlevel
>
> diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
> index 9541123..e5710f0 100644
> --- a/meta/recipes-core/busybox/busybox.inc
> +++ b/meta/recipes-core/busybox/busybox.inc
> @@ -275,6 +275,21 @@ do_install () {
>                         install -m 0755 ${WORKDIR}/mdev-mount.sh ${D}${sysconfdir}/mdev
>                 fi
>         fi
> +        if grep "CONFIG_INIT=y" ${B}/.config; then
> +                install -D -m 0777 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d/rcS
> +                install -D -m 0777 ${WORKDIR}/rcK ${D}${sysconfdir}/init.d/rcK
> +                install -D -m 0755 ${WORKDIR}/runlevel ${D}${base_sbindir}/runlevel
> +                if grep "CONFIG_FEATURE_USE_INITTAB=y" ${B}/.config; then
> +                        install -D -m 0777 ${WORKDIR}/inittab ${D}${sysconfdir}/inittab
> +                        tmp="${SERIAL_CONSOLES}"
> +                        for i in $tmp
> +                        do
> +                                j=`echo ${i} | sed s/\;/\ /g`
> +                                label=`echo ${i} | sed -e 's/tty//' -e 's/^.*;//' -e 's/;.*//'`
> +                                echo "tty$label::respawn:${base_sbindir}/getty ${j}" >> ${D}${sysconfdir}/inittab
> +                        done
> +                fi
> +        fi
>
>      if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
>          if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
> diff --git a/meta/recipes-core/busybox/busybox/init.cfg b/meta/recipes-core/busybox/busybox/init.cfg
> new file mode 100644
> index 0000000..006d4c6
> --- /dev/null
> +++ b/meta/recipes-core/busybox/busybox/init.cfg
> @@ -0,0 +1,3 @@
> +CONFIG_INIT=y
> +CONFIG_FEATURE_USE_INITTAB=y
> +
> diff --git a/meta/recipes-core/busybox/busybox/mdev.cfg b/meta/recipes-core/busybox/busybox/mdev.cfg
> new file mode 100644
> index 0000000..6aefe90
> --- /dev/null
> +++ b/meta/recipes-core/busybox/busybox/mdev.cfg
> @@ -0,0 +1,11 @@
> +CONFIG_MDEV=y
> +CONFIG_FEATURE_MDEV_CONF=y
> +CONFIG_FEATURE_MDEV_RENAME=y
> +CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
> +CONFIG_FEATURE_MDEV_EXEC=y
> +CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
> +
> +CONFIG_SETSID=y
> +CONFIG_CTTYHACK=y
> +
> +CONFIG_FEATURE_SHADOWPASSWDS=y
> diff --git a/meta/recipes-core/busybox/busybox_1.24.1.bb b/meta/recipes-core/busybox/busybox_1.24.1.bb
> index 5e19d9c..8adee53 100644
> --- a/meta/recipes-core/busybox/busybox_1.24.1.bb
> +++ b/meta/recipes-core/busybox/busybox_1.24.1.bb
> @@ -39,6 +39,12 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
>             file://sha256sum.cfg \
>             file://getopts.cfg \
>             file://resize.cfg \
> +           ${@["", "file://init.cfg"][(d.getVar('VIRTUAL-RUNTIME_init_manager', True) == 'busybox')]} \
> +           ${@["", "file://mdev.cfg"][(d.getVar('VIRTUAL-RUNTIME_dev_manager', True) == 'busybox-mdev')]} \
> +           file://inittab \
> +           file://rcS \
> +           file://rcK \
> +           file://runlevel \
>  "
>  SRC_URI_append_libc-musl = " file://musl.cfg "
>
> diff --git a/meta/recipes-core/busybox/files/inittab b/meta/recipes-core/busybox/files/inittab
> new file mode 100644
> index 0000000..bfec4a7
> --- /dev/null
> +++ b/meta/recipes-core/busybox/files/inittab
> @@ -0,0 +1,24 @@
> +# This is run first except when booting in single-user mode.
> +
> +# Startup the system
> +null::sysinit:/bin/mount -t proc proc /proc
> +null::sysinit:/bin/mount -t sysfs sysfs /sys
> +null::sysinit:/bin/mount -t devtmpfs devtmpfs /dev
> +null::sysinit:/bin/mount -o remount,rw /
> +null::sysinit:/bin/mkdir -p /dev/pts
> +null::sysinit:/bin/mount -t devpts devpts /dev/pts
> +null::sysinit:/bin/mount -a
> +
> +::sysinit:/etc/init.d/rcS
> +
> +# Stuff to do before rebooting
> +::ctrlaltdel:/sbin/reboot
> +::shutdown:/etc/init.d/rcK
> +::shutdown:/sbin/swapoff -a
> +::shutdown:/bin/umount -a -r
> +
> +# Stuff to do when restarting the init process
> +::restart:/sbin/init
> +
> +# set hostname
> +null::sysinit:/bin/busybox hostname -F /etc/hostname
> diff --git a/meta/recipes-core/busybox/files/rcK b/meta/recipes-core/busybox/files/rcK
> new file mode 100644
> index 0000000..050086e
> --- /dev/null
> +++ b/meta/recipes-core/busybox/files/rcK
> @@ -0,0 +1,25 @@
> +#!/bin/sh
> +
> +# Stop all init scripts in /etc/init.d
> +# executing them in reversed numerical order.
> +#
> +for i in /etc/rc6.d/K??*; do

Running the K?? scripts here is different to the way the Buildroot
initscipts work. It's also not clear how the order is going to be
reversed?

Maybe try to work with the Buildroot version as-is, or add some
comments to the commit message explaining why the OE and Buildroot
versions need to differ.

  https://git.busybox.net/buildroot/tree/package/initscripts/init.d/rcK

> +     # Ignore dangling symlinks (if any).
> +     [ ! -f "$i" ] && continue
> +
> +     case "$i" in
> +       *.sh)
> +           # Source shell script for speed.
> +           (
> +               trap - INT QUIT TSTP
> +               set stop
> +               . $i
> +           )
> +           ;;
> +       *)
> +           # No sh extension, so fork subprocess.
> +           $i stop
> +           ;;
> +    esac
> +done
> +
> diff --git a/meta/recipes-core/busybox/files/rcS b/meta/recipes-core/busybox/files/rcS
> new file mode 100644
> index 0000000..d18c26b
> --- /dev/null
> +++ b/meta/recipes-core/busybox/files/rcS
> @@ -0,0 +1,26 @@
> +#!/bin/sh
> +
> +# Stop all init scripts in /etc/init.d
> +# executing them in reversed numerical order.

This is a copy of the comment from rcK.

> +
> +for i in /etc/rcS.d/S??* /etc/rc5.d/S??* ;do
> +     # Ignore dangling symlinks (if any).
> +     [ ! -f "$i" ] && continue
> +
> +     case "$i" in
> +       *.sh)
> +           # Source shell script for speed.
> +           (
> +               trap - INT QUIT TSTP
> +               set stop

Should that be start? The Buildroot original is:

  https://git.busybox.net/buildroot/tree/package/initscripts/init.d/rcS

> +               . $i
> +           )
> +           ;;
> +       *)
> +           # No sh extension, so fork subprocess.
> +           $i start
> +           ;;
> +    esac
> +done
> +
> diff --git a/meta/recipes-core/busybox/files/runlevel b/meta/recipes-core/busybox/files/runlevel
> new file mode 100644
> index 0000000..866f3b5
> --- /dev/null
> +++ b/meta/recipes-core/busybox/files/runlevel
> @@ -0,0 +1,11 @@
> +#!/bin/sh
> +# busybox init does not have LSB ( sysvinit ) like initlevels
> +# so lets fake it to 5 which is what we default anyway
> +# this helps with opkg post installs where it tries to invoke
> +# update-rc.d ad post install step.
> +# for package upgrades
> +# See code in update-rc.d around line 190 where it calls runlevel
> +# program
> +#
> +echo "5"
> +
> --
> 2.7.0
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core



More information about the Openembedded-core mailing list