# Exit on error:
set -e

wget http://smarden.org/runit/runit-2.1.2.tar.gz
tar xf runit-2.1.2.tar.gz
cd admin/runit-2.1.2/src

sed -i 's,gcc,/static/bin/musl-gcc,' conf-cc
sed -i 's,gcc -s,/static/bin/musl-gcc -s -L/static/lib -static -static-libgcc,' conf-ld

PREFIX=/static \
    make

PREFIX=/static \
    make check

install -s -m0755 \
    chpst runit runit-init runsv runsvchdir runsvdir sv svlogd utmpset \
    /static/bin

install -m0644 ../man/* \
    /static/share/man/man8

cd ..

mkdir /static/etc/runit
mkdir /static/service
cp etc/debian/ctrlaltdel /etc/runit
ln -sv runit-init /static/bin/init

cd ../..
rm -rf admin
rm runit-2.1.2.tar.gz

cat << 'EOF' > /static/etc/runit/1
#!/bin/sh
# system one time tasks

# Exit on error:
set -e

PATH=/bin

echo -n '16. Mounting kernel-based file systems:'
echo -n ' /proc'
mount -n -o nosuid,noexec,nodev -t proc proc /proc
echo -n ' /sys'
mount -n -o nosuid,noexec,nodev -t sysfs sys /sys
echo ' /run'
mount -n -o mode=0755,nosuid,nodev -t tmpfs run /run

echo -n '15. Creating directories:'
echo -n ' /run/lock'
mkdir -m 1777 /run/lock
echo -n ' /dev/pts'
mkdir -p /dev/pts
echo ' /dev/shm'
mkdir -p /dev/shm

echo '14. Mounting root file system in read-write mode.'
mount -n -o remount,rw / >/dev/null

# Remove fsck-related system watermarks.
rm -f /fastboot /forcefsck

echo '13. Recording existing mounts in /etc/mtab.'
> /etc/mtab
mount -f /
mount -f /proc
mount -f /sys
mount -f /run
mount -f /dev

echo '12. Mounting remaining file systems.'
mount -a -r >/dev/null

echo '11. Cleaning file system /tmp.'
cd /tmp && find . -xdev -mindepth 1 ! -name lost+found -delete

echo '10. Creating /var/run/utmp.'
if grep -q '^utmp:' /etc/group; then
    chmod 664 /var/run/utmp
    chgrp utmp /var/run/utmp
fi

echo '9. Starting udevd...'
echo '' > /sys/kernel/uevent_helper

/lib/udev/udevd --daemon

echo '8. Performing Coldplugging...'
/sbin/udevadm trigger --action=add --type=subsystems
/sbin/udevadm trigger --action=add --type=devices

/sbin/udevadm settle

echo '7. Activating all swap files/partitions...'
swapon -a

echo '6. Setting Font...'
setfont LatArCyrHeb-16 -C /dev/tty1
setfont LatArCyrHeb-16 -C /dev/tty2

echo '5. Setting keymap to UTF-8...'
dumpkeys | loadkeys --unicode

echo '4. Enabling Multibyte input...'
kbd_mode -u

echo '3. Setting up US Keymap...'
loadkeys -q us

echo '2. Setting encoding to UTF-8...'
echo -ne $'\033%G' > /dev/tty1
echo -ne $'\033%G' > /dev/tty2

echo '1. Bringing up the loopback interface...'
ip addr add 127.0.0.1/8 label lo dev lo
ip link set lo up

echo '0. Setting hostname to gllfsc...'
hostname gllfsc

touch /etc/runit/stopit
chmod 0 /etc/runit/stopit

exit 0
EOF

chmod +x /static/etc/runit/1

cat << EOF > /static/etc/runit/2
#!/bin/sh

PATH=/bin

exec env -i PATH=/sbin:/bin:/usr/sbin:/usr/bin runsvdir -P /service 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'
EOF

chmod +x /static/etc/runit/2

cat << EOF > /static/etc/runit/3
#!/bin/sh

# Exit on error:
set -e

exec 2>&1

PATH=/bin

echo '4. Waiting for services to stop...'
sv down /service/*

echo '3. Exiting services...'
sv exit /service/*

echo '2. Deactivating all swap files/partitions...'
swapoff -a

# Unmount everything but /:
echo -n '1. Unmounting filesystems: /home'
umount -r /home
echo -n ' /proc'
umount -r /proc
echo -n ' /sys'
umount -r /sys
echo -n ' /dev/pts'
umount -r /dev/pts
echo ' /dev/shm'
umount -r /dev/shm

echo '0. Shutdown...'

exit 0
EOF

chmod +x /static/etc/runit/3

mkdir -p /static/etc/sv/getty-1
cat << EOF > /static/etc/sv/getty-1/run
#!/bin/sh
exec /bin/agetty tty1 9600
EOF
chmod +x /static/etc/sv/getty-1/run
cat << EOF > /static/etc/sv/getty-1/finish
#!/bin/sh
exec utmpset -w tty1
EOF
chmod +x /static/etc/sv/getty-1/finish
#ln -sv /static/etc/sv/getty-1 /static/service/getty-1

mkdir -p /static/etc/sv/getty-2
cat << EOF > /static/etc/sv/getty-2/run
#!/bin/sh
exec /bin/agetty tty2 9600
EOF
chmod +x /static/etc/sv/getty-2/run
cat << EOF > /static/etc/sv/getty-2/finish
#!/bin/sh
exec utmpset -w tty2
EOF
chmod +x /static/etc/sv/getty-2/finish
#ln -sv /static/etc/sv/getty-2 /static/service/getty-2

mkdir /static/etc/sv/svlogd
cat << EOF > /static/etc/sv/svlogd/run
#!/bin/sh
exec svlogd
EOF
chmod +x /static/etc/sv/svlogd/run
# ln -sv /static/etc/sv/svlogd /static/service/svlogd

exit 0
