diff --git a/bin/rc b/bin/rc index 5b077fb..7b1efcc 100755 --- a/bin/rc +++ b/bin/rc @@ -1,6 +1,48 @@ #!/bin/bash -rc.hostname() { hostname "$cfg_hostname"; } +# Functions +rc.rescue() { exec "${cfg_rc_rescue_shell:-"$SHELL"}"; } + +rc.motd() { + [[ -f "/etc/rc.motd" ]] && { + while read; do + printf "$REPLY" + done < "/etc/rc.motd" + } + + return 0 +} + +rc.mount() { + local fs + local fs_type + local mountpoint + local mount_options + + fs="$1" + fs_type="$2" + mountpoint="$3" + mount_options="${4:-defaults}" + + mount "$1" -n -t "$2" -o "$mount_options" "$3" +} + +rc.mount_misc() { + mountpoint -q /proc || { rc.mount proc proc /proc; } + mountpoint -q /dev || { rc.mount dev devtmpfs /dev; } +} + +rc.parse_cmdline() { + [[ -f "/proc/cmdline" ]] && { + boot_cmdline=( $(/dev/null & done + wait +} + +rc.stop_everything() { + echo "Politely asking all processes to shut down..." + /opt/sbase/bin/killall5 -s 15; sleep 3 + + echo "Killing the remaning ones..." + /opt/sbase/bin/killall5 -s 9 +} + +rc.unmount_everything() { + echo "Unmounting filesystems..." + umount -a +} + +rc.remount_root() { + echo "Remounting / read-only..." + mount / -o remount,ro } rc.boot() { + rc.mount_misc rc.hostname rc.modules rc.services_start + wait + rc.motd +} + +rc.halt() { + case "$action" in + poweroff|shutdown) echo 'o' > /proc/sysrq-trigger;; + halt) :;; + reboot|*) echo 'b' > /proc/sysrq-trigger;; + esac } rc.shutdown() { rc.services_stop + rc.stop_everything + rc.unmount_everything + rc.remount_root + + echo "Halt complete." + + rc.halt } rc.hostname() { @@ -56,15 +138,23 @@ rc.modules() { done } -source "/etc/rc.conf" +rc.main() { + source "/etc/rc.conf" -action="$1" -action="${action:-boot}" + action="${1:-boot}" -case "$action" in - boot) - echo "Welcome to `uname -rs`" - rc.boot - ;; - shutdown) rc.shutdown;; -esac + case "$action" in + boot) + echo "Welcome to `uname -rs`" + rc.boot + ;; + + poweroff|reboot|shutdown) + rc.shutdown + rc.halt + ;; + esac +} + +# Main part +rc.main "$@" diff --git a/etc/rc.conf b/etc/rc.conf index 68b4639..b3156eb 100644 --- a/etc/rc.conf +++ b/etc/rc.conf @@ -1,17 +1,12 @@ # System-wide configuration - -export PATH='/usr/local/bin:/usr/bin' - -# Where to look for initscripts -cfg_initscripts_dir='/etc/rc.d' +export PATH='/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin' # Hostname cfg_hostname='changeme' -# Services to start at boot time -cfg_services+=( 'mount' 'udev' 'rc.local' ) # You probably do need these -cfg_services+=( '@syslog-ng' '@crond' '@network' '@sshd' '@dbus' '@alsa' ) # Services starting with '@' start in background. -# cfg_services+=( %agetty-tty{2..6} ) # Services starting with '%' are restarted if the die. +# Services +cfg_services+=( 'fsck' 'mount' 'udev' 'sysctl' 'rc.local' ) +cfg_services+=( agetty-tty{2..6} ) # Comment this if your init starts something on the ttys itself +cfg_services+=( '@crond' '@network' '@dbus' '@alsa' ) # These start in parallel -# Modules to be loaded at boot time. Most people don't need this -#cfg_modules=( 'tun' ) +cfg_modules=( ) # Add modules you want to be loaded at boot time here