#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# re-exec this script with a controlling tty
if [ $(tty) = /dev/console ]; then
  mountpoint -q /sys   || mount -t sysfs sys /sys -o nosuid,noexec,nodev
  tty=$(</sys/class/tty/console/active)
  tty=/dev/${tty##* }
  exec setsid sh -c "exec bash /etc/runit/1 <$tty >$tty 2>&1"
fi
klog() { while IFS= read -r line; do echo "<7>$1 $line" >/dev/kmsg; echo "$1 $line"; done; }
exec 2> >(klog '::')
exec  > >(klog '>>')
set -v

trap : INT TSTP QUIT
trap 'exec >$(tty); sulogin -p <>$(tty) 2>&1' ERR

echo -e '\nArch Linux\nhttp://www.archlinux.org\n'

. /etc/rc.conf

mountpoint -q /proc    || mount -t proc proc /proc -o nosuid,noexec,nodev
mountpoint -q /sys     || mount -t sysfs sys /sys -o nosuid,noexec,nodev
mountpoint -q /run     || mount -t tmpfs run /run -o mode=0755,nosuid,nodev
mountpoint -q /dev     || mount -t devtmpfs dev /dev -o mode=0755,nosuid

mkdir -p -m0755 /run/runit /run/lock /run/lock/lvm /run/lvm /run/user /dev/pts /dev/shm
mountpoint -q /dev/pts || mount -n -t devpts devpts /dev/pts -o mode=0620,gid=5,nosuid,noexec
mountpoint -q /dev/shm || mount -n -t tmpfs shm /dev/shm -o mode=1777,nosuid,nodev

mount -o remount,ro /

for i in /dev/tty[0-9]*;do
  unicode_start <$i
  [[ $CONSOLEFONT ]] && setfont ${CONSOLEMAP:+-m $CONSOLEMAP} $CONSOLEFONT -C $i
done &

loadkeys -q ${KEYMAP:-us}

TZ=$TIMEZONE hwclock --systz \
  ${HARDWARECLOCK:+--$(echo $HARDWARECLOCK |tr A-Z a-z) --noadjfile}

/usr/lib/systemd/systemd-udevd --daemon
udevadm trigger --action=add --type=subsystems
udevadm trigger --action=add --type=devices
modprobe -ab "" "${MODULES[@]}" || true
udevadm settle

ip link set up dev lo
{ [[ -s /etc/hostname ]] && cat /etc/hostname || echo $HOSTNAME ;} >/proc/sys/kernel/hostname

[[ $USEDMRAID = yes ]] && dmraid -i -ay
[[ $USEBTRFS = yes ]] && btrfs device scan
[[ $USELVM = yes ]] && vgchange --sysinit -a y
awk '/^#/ || /^$/ { next }
     NF>2 { print "ignite unsupported crypttab: " $0 >"/dev/stderr"; next }
     { system("cryptsetup luksOpen " $2 " " $1) }' /etc/crypttab
[[ $USELVM = yes ]] && vgchange --sysinit -a y

[[ -f /forcefsck || " $(</proc/cmdline) " = *" forcefsck "* ]] && FORCEFSCK="-f"
[[ -f /fastboot || " $(</proc/cmdline) " = *" fastboot "* ]] ||
  fsck -A -T -C -a -t noopts=_netdev $FORCEFSCK ||
  (( ($? | 33) == 33 ))  # continue boot on corrected errors or cancelled fsck.

mount -o remount,rw /
mount -a -t "nosysfs,nonfs,nonfs4,nosmbfs,nocifs" -O no_netdev

mountpoint -q /sys/fs/cgroup || mount -t tmpfs cgroup /sys/fs/cgroup -o mode=0755
awk '$4==1 { system("mountpoint -q /sys/fs/cgroup/" $1 " || mount -t cgroup -o " $1 ",x-mount.mkdir cgroup /sys/fs/cgroup/" $1) }' /proc/cgroups

[[ $USELVM = yes ]] && vgchange --monitor y

swapon -a

[[ $TIMEZONE ]] && ln -sf "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime

cp /var/lib/random-seed /dev/urandom &>/dev/null || true
( umask 077; dd if=/dev/urandom of=/var/lib/random-seed count=1 bs=512 &>/dev/null )

install -m0664 -o root -g utmp /dev/null /run/utmp 
rm -f /etc/nologin /forcefsck /forcequotacheck /fastboot

dmesg >/var/log/dmesg.log

install -m0 /dev/null /run/runit/stopit
