#!/bin/bash # Default virtual mounts for linux systems cfg_mounts+=( 'proc:proc:/proc:' ) cfg_mounts+=( 'run:tmpfs:/run:' ) cfg_mounts+=( 'sys:sysfs:/sys:' ) # devfs and its children cfg_mounts+=( 'dev:devtmpfs:/dev:' ) cfg_mounts+=( 'pts:devpts:/dev/pts:noexec,nosuid,gid=5,mode=0620' ) cfg_mounts+=( 'mqueue:mqueue:/dev/mqueue:noexec,nosuid,nodev' ) cfg_mounts+=( 'shm:tmpfs:/dev/shm:defaults,mode=0777' ) # 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_misc() { for m in "${cfg_mounts[@]}"; do IFS=':' read fs fs_type mountpoint mount_options <<< "$m" [[ "$mount_options" ]] || { mount_options='defaults'; } mountpoint -q "$mountpoint" || { [[ -d "$mountpoint" ]] || { mkdir -p "$mountpoint"; } mount "$fs" -n -t "$fs_type" -o "$mount_options" "$mountpoint" } done } rc.parse_cmdline() { [[ -f "/proc/cmdline" ]] && { boot_cmdline=( $(/dev/null & done wait } rc.stop_everything() { echo "Politely asking all processes to shut down..." killall5 -15; sleep 3 echo "Killing the remaning ones..." killall5 -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() { [[ "$cfg_hostname" ]] && { hostname "$cfg_hostname"; } } rc.modules() { for i in "${cfg_modules[@]}"; do modprobe "$i" done } rc.main() { source "@ETC@/rc.conf" action="${1:-boot}" case "$action" in boot) echo "Welcome to `uname -rs`" rc.boot ;; poweroff|reboot|shutdown|halt) rc.shutdown ;; esac } # Main part rc.main "$@"