Code Monkey home page Code Monkey logo

init's Introduction

Init Framework
________________________________________________________________________________

KISS Linux's portable init framework for use with any init, service manager or
device manager. It handles the boot (and shutdown) process and provides a
generic interface for controlling it.

The below components have been tested and work. Other software may work out of
the box as well, it just has not been tested. Send bug reports and support on
this side will be added where needed.

Tested init systems      Tested service managers      Tested device managers

* busybox init           * busybox runit              * mdev
* s6 (s6-svscan)         * s6                         * mdevd
* sinit                  * runit                      * udevd
* runit                  * no service manager         * no device manager
* shinit

NOTE: Any combination of the above can be used. If not using a service manager,
      ensure that you execute at least one getty for login to work. Also, some
      init systems handle what baseinit does internally so support for them
      here makes little sense.


[000] Index
________________________________________________________________________________

* /etc/rc.conf ........................................................... [001]
  * CONFIG_INIT .......................................................... [002]
  * CONFIG_SERVICE ....................................................... [003]
  * CONFIG_SERVICE_DIR (runit and s6 only) ............................... [004]
  * CONFIG_DEV ........................................................... [005]
* /etc/rc.d/ ............................................................. [006]
  * /etc/rc.d/*.pre.boot ................................................. [007]
  * /etc/rc.d/*.post.boot ................................................ [008]
  * /etc/rc.d/*.pre.shutdown ............................................. [009]
  * /etc/rc.d/*.post.shutdown ............................................ [010]
* Utilities .............................................................. [011]
* How To Package An Init ................................................. [012]
* Further Reading ........................................................ [013]


[001] /etc/rc.conf
________________________________________________________________________________

This file stores configuration for the boot/shutdown process and any scripts in
/etc/rc.d. [006] If the file does not exist, create it and if any options do not
exist, create them. If the options are unset (or not present) they take their
default values.


--[002] CONFIG_INIT ------------------------------------------------------------

  The init to assume is in use. This setting does not enable the init but merely
  tells baseinit which one is in use (so it can handle things accordingly).
  Valid values are currently 'busybox' (default), 's6', 'sinit', 'runit',
  'shinit'.

  +----------------------------------------------------------------------------+
  |                                                                            |
  |  CONFIG_INIT=busybox                                                       |
  |                                                                            |
  +----------------------------------------------------------------------------+


--[003] CONFIG_SERVICE ---------------------------------------------------------

  The service manager to execute at the end of the boot process. Valid values
  are currently: 'runit' (default), s6, none. If 'none' is used, baseinit will
  not start a service manager and it is up to the user to spawn gettys, etc.

  +----------------------------------------------------------------------------+
  |                                                                            |
  |  CONFIG_SERVICE=runit                                                      |
  |                                                                            |
  +----------------------------------------------------------------------------+


--[004] CONFIG_SERVICE_DIR (runit and s6 only) ---------------------------------

  The service directory to use.

  +----------------------------------------------------------------------------+
  |                                                                            |
  |  CONVIG_SERVICE_DIR=/var/service                                           |
  |                                                                            |
  +----------------------------------------------------------------------------+


--[005] CONFIG_DEV -------------------------------------------------------------

  The device manager to run during the init process. This is killed once boot is
  complete for a supervised version to take its place. Valid values are
  currently 'mdevd', 'mdev' (default) or 'udevd'.

  +----------------------------------------------------------------------------+
  |                                                                            |
  |  CONFIG_DEV=mdev                                                           |
  |                                                                            |
  +----------------------------------------------------------------------------+


[006] /etc/rc.d/
________________________________________________________________________________

Shell scripts are sourced from this directory at different stages in the boot
process based on file name. Any configuration made here will run under all
inits and service managers which use baseinit.


--[007] /etc/rc.d/*.pre.boot ---------------------------------------------------

  Scripts in /etc/rc.d ending in .pre.boot are run at the start of the boot
  process but after pseudo filesystems are mounted (/sys, /dev, etc).


--[008] /etc/rc.d/*.post.boot --------------------------------------------------

  Scripts in /etc/rc.d ending in .boot are run at the end of the boot process
  but before baseinit execs into CONFIG_SERVICE.


--[009] /etc/rc.d/*.pre.shutdown -----------------------------------------------

  Scripts in /etc/rc.d ending in .pre.shutdown are run at the start of the
  shutdown and reboot process. If a script needs to run only on one mode, it can
  discern the shutdown type by checking the basename of $0.


--[010] /etc/rc.d/*.post.shutdown ----------------------------------------------

  Scripts in /etc/rc.d ending in .post.shutdown are run at the end of the
  shutdown and reboot process. If a script needs to run only on one mode, it can
  discern the shutdown type by checking the basename of $0.


[011] Utilities
________________________________________________________________________________

The baseinit package provides two utilities. 'kpow' (signal reboot/shutdown to
the kernel) and 'respawn' (rerun command when it exits/dies).

These are only interesting to those looking to make larger modifications via
/etc/rc.d. The respawn command should allow those not using a service manager
to more easily spawn some gettys via /etc/rc.d.


[012] How To Package An Init
________________________________________________________________________________

To package an init and have it use baseinit set it to run /usr/lib/init/rc.boot
at power on, /usr/lib/init/rc.shutdown at shutdown and /usr/lib/init/rc.reboot
at reboot.

Then, the package should provide /usr/bin/init, /usr/bin/poweroff and
/usr/bin/reboot. This allows the alternatives system to be used and makes
swapping between things easy.

Last, if the init needs modifications made to baseinit open an issue here or
open a pull request. This is where CONFIG_INIT comes into play.


[013] Further Reading
________________________________________________________________________________

- #/wiki/service-management
- #/wiki/pkg/busybox
- #/wiki/pkg/s6
- #/wiki/pkg/sinit
- #/wiki/pkg/baseinit

init's People

Contributors

a-schaefers avatar dylanaraps avatar illiliti avatar konimex avatar noocsharp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

init's Issues

overdue for a new release

#23 was merged last november (last release was last may) so we ought to make a new release so that this change takes effect on systems.

Multiple Hard Drives fails to find correct system ROOT

Here is a thread that is likely related to this bug, https://www.reddit.com/r/kisslinux/comments/e257uh/installation_trouble_kernel_panic_unable_to_mount/ , but regardless, my issue is when I have my second hard drive inserted, KISS linux init fails to mount ROOT properly and result is kernel panic. I will try to get the exact error message when I get a chance and post it back here as a reply.

So basically, let's make this smarter so that we can have computers with more than one hard drive okay.

Thanks

rc.boot: loading sysctl settings

I think the 'break' in line 120 of /lib/init/rc.boot needs to be a 'continue'. At least that's how I got it to load my /etc/sysctl.conf.

Proposal

I think those parts of code should be handled in hooks to be more init agnostic

@cemkeylan pinging you because you maintainer of sysmgr, sinit, runit

rc.boot

init/lib/init/rc.boot

Lines 35 to 50 in 0198696

log "Starting device manager..."; {
if command -v udevd >/dev/null; then
log "Starting udev..."
udevd -d
udevadm trigger -c add -t subsystems
udevadm trigger -c add -t devices
udevadm settle
elif command -v mdev >/dev/null; then
log "Starting mdev..."
mdev -s
mdev -df & mdev_pid=$!
fi
}

init/lib/init/rc.boot

Lines 107 to 121 in 0198696

log "Killing device manager to make way for service..."; {
if command -v udevd >/dev/null; then
udevadm control --exit
elif [ "$mdev_pid" ]; then
kill "$mdev_pid"
# Try to set the hotplug script to mdev.
# This will silently fail if unavailable.
#
# The user should then run the mdev service
# to enable hotplugging.
command -v mdev > /proc/sys/kernel/hotplug
fi 2>/dev/null
}

rc.shutdown

log "Waiting for services to stop..."; {
sv force-shutdown /var/service/* >/dev/null 2>&1
}

# Run 'kpow' to signal to the kernel that we want to reboot or
# poweroff the system. These will only run when '$1' contains
# a valid action. When busybox init is used, this code is
# ignored entirely as it handles this itself.
case $1 in
reboot) kpow r ;;
poweroff) kpow p ;;
esac

/etc/inittab ::once not working on runit

Hey, I'm trying to load amdgpu at boot time using /etc/inittab's ::once feature. it should run /bin/modprobe amdgpu at startup, but it does not. bin/modprobe amdgpu runs fine in a tty.

Here is my /etc/inittab since I'm probably doing something wrong.

(?) Changing init system from busybox to vanilla runit

Hi, I hope this is the right place to ask this.

I am having a hard time with busybox's init system, but can't find any documentation detailing how to change the init system on kiss, how do I do it?

Again, sorry if this is not the correct place to ask

Execute hooks

Instead of eval'ing hooks

. "$file"

can we execute them to prevent messing with environment and global state? The exec-based approach already used in kiss(see KISS_HOOK), why not implement one here as well?

Boot goes to emergency shell

At the "checking filesystems" portion of init, I get

/dev/sdb3: clean, 12/29048832 files, [more numbers] blocks
fsck.fat 4.2 (2017-01-24)
open: No such file or directory
/dev/sda2: clean, [numbers] files, [even more numbers] blocks
=> Init system encountered an error, starting emergency shell.
=> When ready, type 'exit' to continue the boot

I am using default init and have dosfstools installed. It's trying to check /dev/sdb3 (fat32) but failing for some reason.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.