# rc.lib -- common functions for rc.boot and rc.shutdown # shellcheck disable=1090,2034 export PATH=$PATH:/usr/local/bin:/usr/bin log_file="${log_dir:=/var/log/init}/$(date +%Y%m%d-%H%M)-${0##*.}" log() { [ "$log" = 1 ] || { cat return 0 } mkdir -p "$log_dir" tee -a "$log_file" } out() { printf '\033[1;36m-> \033[39m%s\033[m\n' "$@" | log ;} err() { printf '\033[1;31m!> \033[39m%s\033[m\n' "$@" | log ;} shell() { err "Dropping to shell, type 'exit' to continue the boot process." sh -l } run_hook() { out "Running '$1' hooks..." for hook in "/etc/init/"*".$1" "/usr/lib/init/hooks/"*".$1"; do [ -f "$hook" ] || continue out "Running '$hook'..." . "$hook" done } random() { seed=/var/random.seed case "$1" in load) out "Seeding random..." [ -f "$seed" ] || { out "Generating entropy, this might take a while..." dd count=1 bs=512 if=/dev/random of="$seed" 2>/dev/null } cat "$seed" > /dev/urandom ;; save) mkdir -p "${seed%/*}" out "Saving random seed..." dd count=1 bs=512 if=/dev/urandom of="$seed" 2>/dev/null ;; esac } parse_cmdline() { # This is a primitive way of parsing kernel command line # options. Before now, carbs-init ignored these options # set by the user. More will be added as needed. Init scripts # don't need to handle most of the command line options # as the kernel deals with most of them, but not things # such as mount options. [ -r /proc/cmdline ] || { err "Kernel command line options cannot be parsed" shell } # We want to read words instead of lines here. # shellcheck disable=2013 for arg in $(cat /proc/cmdline); do case "$arg" in ro) RO=1 ;; forcefsck) FORCEFSCK="-f" ;; fastboot) FASTBOOT=1 ;; loglevel=?) dmesg_level=${arg##*=} ;; log) log=1 ;; esac done }