From 0be3bf370864a81cad36ec1947c85175456858cc Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 29 Mar 2016 14:58:35 +0000 Subject: [PATCH] New boot.d early init sequence. There is a new init sequence that is executed prior to all concurrent init.d services. Placing ordered services in /etc/boot.d allows you to interpose upgrade, verification, and special handling prior to execution of the normal SYSV init. This system can be accessed by placing ordered scripts directly in /etc/boot.d from your package. This infra is used to perform early loader and partition upgrade checks, onie upgrades, cpld upgrades, and the like. Normal filesystem mounts are performed at priority 50. Platform initialization is performated at priority 51. TODO: Integrate upgrade sequence. --- .../rootfs/jessie/common/overlay/etc/inittab | 67 +++++++++++++++++++ .../any/rootfs/jessie/standard/standard.yml | 2 - .../rootfs/wheezy/common/overlay/etc/inittab | 67 +++++++++++++++++++ .../any/rootfs/wheezy/standard/standard.yml | 2 - packages/base/all/boot.d/Makefile | 1 + packages/base/all/boot.d/PKG.yml | 16 +++++ .../base/all/boot.d/src/50.initdev | 9 --- packages/base/all/boot.d/src/boot | 19 ++++++ packages/base/all/vendor-config-onl/PKG.yml | 4 +- .../51.onl-platform-baseconf} | 0 .../src/boot.d/onl-platform-baseconf | 17 +++++ 11 files changed, 189 insertions(+), 15 deletions(-) create mode 100644 builds/any/rootfs/jessie/common/overlay/etc/inittab create mode 100644 builds/any/rootfs/wheezy/common/overlay/etc/inittab create mode 100644 packages/base/all/boot.d/Makefile create mode 100644 packages/base/all/boot.d/PKG.yml rename builds/any/rootfs/wheezy/common/overlay/etc/init.d/initdev => packages/base/all/boot.d/src/50.initdev (68%) create mode 100755 packages/base/all/boot.d/src/boot rename packages/base/all/vendor-config-onl/src/{init.d/onl-platform-baseconf => boot.d/51.onl-platform-baseconf} (100%) create mode 100755 packages/base/all/vendor-config-onl/src/boot.d/onl-platform-baseconf diff --git a/builds/any/rootfs/jessie/common/overlay/etc/inittab b/builds/any/rootfs/jessie/common/overlay/etc/inittab new file mode 100644 index 00000000..e242bf0a --- /dev/null +++ b/builds/any/rootfs/jessie/common/overlay/etc/inittab @@ -0,0 +1,67 @@ +# The default runlevel. +id:2:initdefault: + +# Boot-time system configuration/initialization script. +# This is run first except when booting in emergency (-b) mode. +si0::sysinit:/etc/boot.d/boot +si1::sysinit:/etc/init.d/rcS + +# What to do in single-user mode. +~~:S:wait:/sbin/sulogin + +# /etc/init.d executes the S and K scripts upon change +# of runlevel. +# +# Runlevel 0 is halt. +# Runlevel 1 is single-user. +# Runlevels 2-5 are multi-user. +# Runlevel 6 is reboot. + +l0:0:wait:/etc/init.d/rc 0 +l1:1:wait:/etc/init.d/rc 1 +l2:2:wait:/etc/init.d/rc 2 +l3:3:wait:/etc/init.d/rc 3 +l4:4:wait:/etc/init.d/rc 4 +l5:5:wait:/etc/init.d/rc 5 +l6:6:wait:/etc/init.d/rc 6 +# Normally not reached, but fallthrough in case of emergency. +z6:6:respawn:/sbin/sulogin + +# What to do when CTRL-ALT-DEL is pressed. +ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now + +# Action on special keypress (ALT-UpArrow). +#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work." + +# What to do when the power fails/returns. +pf::powerwait:/etc/init.d/powerfail start +pn::powerfailnow:/etc/init.d/powerfail now +po::powerokwait:/etc/init.d/powerfail stop + +# /sbin/getty invocations for the runlevels. +# +# The "id" field MUST be the same as the last +# characters of the device (after "tty"). +# +# Format: +# ::: +# +# Note that on most Debian systems tty7 is used by the X Window System, +# so if you want to add more getty's go ahead but skip tty7 if you run X. +# +1:2345:respawn:/sbin/getty 38400 tty1 +2:23:respawn:/sbin/getty 38400 tty2 +3:23:respawn:/sbin/getty 38400 tty3 +4:23:respawn:/sbin/getty 38400 tty4 +5:23:respawn:/sbin/getty 38400 tty5 +6:23:respawn:/sbin/getty 38400 tty6 + +# Example how to put a getty on a serial line (for a terminal) +# +#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 +#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 + +# Example how to put a getty on a modem line. +# +#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3 + diff --git a/builds/any/rootfs/jessie/standard/standard.yml b/builds/any/rootfs/jessie/standard/standard.yml index 785a2638..49775888 100644 --- a/builds/any/rootfs/jessie/standard/standard.yml +++ b/builds/any/rootfs/jessie/standard/standard.yml @@ -55,8 +55,6 @@ Configure: - ${ONL}/builds/any/rootfs/${ONL_DEBIAN_SUITE}/common/overlay update-rc.d: - - 'initdev defaults' - - 'onl-platform-baseconf defaults' - 'faultd defaults' - 'onlpd defaults' - 'snmpd remove' diff --git a/builds/any/rootfs/wheezy/common/overlay/etc/inittab b/builds/any/rootfs/wheezy/common/overlay/etc/inittab new file mode 100644 index 00000000..e242bf0a --- /dev/null +++ b/builds/any/rootfs/wheezy/common/overlay/etc/inittab @@ -0,0 +1,67 @@ +# The default runlevel. +id:2:initdefault: + +# Boot-time system configuration/initialization script. +# This is run first except when booting in emergency (-b) mode. +si0::sysinit:/etc/boot.d/boot +si1::sysinit:/etc/init.d/rcS + +# What to do in single-user mode. +~~:S:wait:/sbin/sulogin + +# /etc/init.d executes the S and K scripts upon change +# of runlevel. +# +# Runlevel 0 is halt. +# Runlevel 1 is single-user. +# Runlevels 2-5 are multi-user. +# Runlevel 6 is reboot. + +l0:0:wait:/etc/init.d/rc 0 +l1:1:wait:/etc/init.d/rc 1 +l2:2:wait:/etc/init.d/rc 2 +l3:3:wait:/etc/init.d/rc 3 +l4:4:wait:/etc/init.d/rc 4 +l5:5:wait:/etc/init.d/rc 5 +l6:6:wait:/etc/init.d/rc 6 +# Normally not reached, but fallthrough in case of emergency. +z6:6:respawn:/sbin/sulogin + +# What to do when CTRL-ALT-DEL is pressed. +ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now + +# Action on special keypress (ALT-UpArrow). +#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work." + +# What to do when the power fails/returns. +pf::powerwait:/etc/init.d/powerfail start +pn::powerfailnow:/etc/init.d/powerfail now +po::powerokwait:/etc/init.d/powerfail stop + +# /sbin/getty invocations for the runlevels. +# +# The "id" field MUST be the same as the last +# characters of the device (after "tty"). +# +# Format: +# ::: +# +# Note that on most Debian systems tty7 is used by the X Window System, +# so if you want to add more getty's go ahead but skip tty7 if you run X. +# +1:2345:respawn:/sbin/getty 38400 tty1 +2:23:respawn:/sbin/getty 38400 tty2 +3:23:respawn:/sbin/getty 38400 tty3 +4:23:respawn:/sbin/getty 38400 tty4 +5:23:respawn:/sbin/getty 38400 tty5 +6:23:respawn:/sbin/getty 38400 tty6 + +# Example how to put a getty on a serial line (for a terminal) +# +#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 +#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 + +# Example how to put a getty on a modem line. +# +#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3 + diff --git a/builds/any/rootfs/wheezy/standard/standard.yml b/builds/any/rootfs/wheezy/standard/standard.yml index 16567372..3010b68d 100644 --- a/builds/any/rootfs/wheezy/standard/standard.yml +++ b/builds/any/rootfs/wheezy/standard/standard.yml @@ -55,8 +55,6 @@ Configure: - ${ONL}/builds/any/rootfs/${ONL_DEBIAN_SUITE}/common/overlay update-rc.d: - - 'initdev defaults' - - 'onl-platform-baseconf defaults' - 'faultd defaults' - 'onlpd defaults' - 'snmpd remove' diff --git a/packages/base/all/boot.d/Makefile b/packages/base/all/boot.d/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/base/all/boot.d/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/base/all/boot.d/PKG.yml b/packages/base/all/boot.d/PKG.yml new file mode 100644 index 00000000..c785401e --- /dev/null +++ b/packages/base/all/boot.d/PKG.yml @@ -0,0 +1,16 @@ +common: + arch: all + version: 1.0.0 + copyright: Copyright 2013, 2014, 2015 Big Switch Networks + maintainer: support@bigswitch.com + +packages: + - name: onl-bootd + version: 1.0.0 + summary: Open Network Linux Boot Stage + + files: + - src : /etc/boot.d + + changelog: Change changes changes., + diff --git a/builds/any/rootfs/wheezy/common/overlay/etc/init.d/initdev b/packages/base/all/boot.d/src/50.initdev similarity index 68% rename from builds/any/rootfs/wheezy/common/overlay/etc/init.d/initdev rename to packages/base/all/boot.d/src/50.initdev index df9dd898..6a0292a2 100755 --- a/builds/any/rootfs/wheezy/common/overlay/etc/init.d/initdev +++ b/packages/base/all/boot.d/src/50.initdev @@ -1,14 +1,5 @@ #!/bin/sh -### BEGIN INIT INFO -# Provides: initdev -# Required-Start: -# Required-Stop: -# Default-Start: S -# Default-Stop: -# Short-Description: Set up block and net devices -### END INIT INFO - . /lib/lsb/init-functions log_action_begin_msg "Setting up block and net devices" diff --git a/packages/base/all/boot.d/src/boot b/packages/base/all/boot.d/src/boot new file mode 100755 index 00000000..ceab23f7 --- /dev/null +++ b/packages/base/all/boot.d/src/boot @@ -0,0 +1,19 @@ +#!/bin/sh +############################################################ +# +# Initial boot setup. Required before running +# any concurrent service initialization in rcS +# +# This is designed to support early setup, platform, +# and upgrade operations. +# +############################################################ +PATH=/sbin:/usr/sbin:/bin:/usr/bin +export PATH + +for script in `ls /etc/boot.d/[0-9]* | sort`; do + echo "boot.d: Running $script..." + $script +done + + diff --git a/packages/base/all/vendor-config-onl/PKG.yml b/packages/base/all/vendor-config-onl/PKG.yml index 3122ba51..82a3d46d 100644 --- a/packages/base/all/vendor-config-onl/PKG.yml +++ b/packages/base/all/vendor-config-onl/PKG.yml @@ -1,6 +1,6 @@ packages: - name: onl-vendor-config-onl - depends: python-yaml + depends: [ python-yaml, onl-bootd ] version: 1.0.0 arch: all copyright: Copyright 2013, 2014, 2015 Big Switch Networks @@ -9,7 +9,7 @@ packages: files: src/python/onl : $PY_INSTALL/onl - src/init.d : /etc/init.d + src/boot.d : /etc/boot.d src/bin : /usr/bin changelog: Changes diff --git a/packages/base/all/vendor-config-onl/src/init.d/onl-platform-baseconf b/packages/base/all/vendor-config-onl/src/boot.d/51.onl-platform-baseconf similarity index 100% rename from packages/base/all/vendor-config-onl/src/init.d/onl-platform-baseconf rename to packages/base/all/vendor-config-onl/src/boot.d/51.onl-platform-baseconf diff --git a/packages/base/all/vendor-config-onl/src/boot.d/onl-platform-baseconf b/packages/base/all/vendor-config-onl/src/boot.d/onl-platform-baseconf new file mode 100755 index 00000000..718fa281 --- /dev/null +++ b/packages/base/all/vendor-config-onl/src/boot.d/onl-platform-baseconf @@ -0,0 +1,17 @@ +#!/usr/bin/python + +### BEGIN INIT INFO +# Provides: onl-platform-baseconf +# Required-Start: +# Required-Stop: +# Default-Start: S +# Default-Stop: +# Short-Description: Set up ONL Platform +### END INIT INFO + +from onl.platform.baseconfig import baseconfig + +baseconfig() + + +