#!@BASH_PATH@ declare -A cfg_mounts # 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' # Some temporary directories cfg_tmpdirs+=( '/run/lock' '/run/lock/lvm' '/run/lvm' '/run/user' ) # And temporary files cfg_tmpfiles+=( '/run/utmp' ) # Default XDG_RUNTIME_DIR for all non-system users # rtkit:x:133:133:RealtimeKit:/proc:/sbin/nologin while IFS=':' read -r _ _ uid gid _; do if (( uid >= 1000 )); then cfg_tmpdirs+=( "/run/user/$uid:700:$uid:$gid" ) fi done < /etc/passwd # Functions rc.rescue() { exec "${cfg_rc_rescue_shell:-"$SHELL"}"; } rc.motd() { [[ -f "/etc/rc.motd" ]] && { while read; do printf "%s\n" "$REPLY" done < "/etc/rc.motd" } return 0 } rc.tmpfiles() { printf '%s\n' "${cfg_tmpdirs[@]}" | while IFS=':' read dir perm own grp; do mkdir -pm "${perm:-755}" "$dir" chown -c "${own:-root}:${grp:-root}" "$dir" done printf '%s\n' "${cfg_tmpfiles[@]}" | while IFS=':' read file perm own grp; do > "$file" chmod -c "${perm:-644}" "$file" chown -c "${own:-root}:${grp:-root}" "$file" done } rc.mount_misc() { for fs in "${!cfg_mounts[@]}"; do echo "$fs" | while IFS=':' read fs_type mountpoint mount_options; do [[ "$mount_options" ]] || { mount_options='defaults'; } mountpoint -q "$mountpoint" || { [[ -d "$mountpoint" ]] || { mkdir -p "$mountpoint"; } mount "$fs" -n -t "$fs_type" -o "$mount_options" "$mountpoint" } done 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 -r -a } rc.remount_root() { echo "Remounting / read-only..." mount / -o remount,ro } rc.boot() { rc.mount_misc rc.tmpfiles rc.hostname rc.timezone 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.sync() { echo "Syncing disks." } rc.shutdown() { rc.services_stop rc.stop_everything rc.sync rc.unmount_everything rc.remount_root echo "Halt complete." rc.halt } rc.hostname() { [[ -f '/etc/hostname' ]] && { hostname "$(