#!@BASH_PATH@ # vim: ft=zsh # 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() { for fs in "${cfg_mounts[@]}"; do echo "$fs" | while IFS=':' read device fs_type mountpoint mount_options; do if mountpoint -q "$mountpoint"; then if [[ "$mount_options" ]]; then mount -o "remount,$mount_options" "$mountpoint" fi else if ! [[ -d "$mountpoint" ]]; then mkdir -p "$mountpoint" fi if ! [[ "$mount_options" ]]; then mount_options='defaults' fi mount "$device" -n -t "$fs_type" -o "$mount_options" "$mountpoint" fi 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 -s 15 -w "$cfg_killall5_timeout" echo "Killing the remaning ones..." killall5 -s 9 } rc.unmount_everything() { echo "Unmounting filesystems..." umount -r -a } rc.remount_root() { echo "Remounting / read-only..." mount / -o remount,ro } rc.boot() { (( cfg_early_fsck )) && rc.fsck rc.mount rc.tmpfiles rc.hostname rc.timezone rc.modules rc.services_start wait rc.motd } rc.halt() { if type -P halt &>/dev/null; then function rc.halt_poweroff { halt -p; } function rc.halt_reboot { halt -r; } elif (( $( /proc/sysrq-trigger; } function rc.halt_reboot { echo 'b' > /proc/sysrq-trigger; } else printf 'Cannot halt, please install halt from suckless.org ubase or enable sysrq.\n' return 1 fi case "$action" in halt) :;; poweroff|shutdown) rc.halt_poweroff;; reboot|*) rc.halt_reboot;; esac } rc.sync() { echo "Syncing disks." sync } 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 "$(= 1000 )); then cfg_tmpdirs+=( "/run/user/$uid:700:$uid:$gid" ) fi done < /etc/passwd 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 "$@"