Script chroot.sh

From campisano.org
Jump to navigation Jump to search
#!/bin/sh
#
# NAME      /srv/config/chroot.sh
# VERSION   1.5.1
# REQUIRED  mount, findmnt, chroot
#



### BEGIN INIT INFO
# Provides:          chroot.sh
# Required-Start:    $remote_fs $local_fs $syslog
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Chroot Environment
# Description:       A chroot environment used to host
#                    a separate copy of the software system.
### END INIT INFO



PATH=/sbin:/bin:/usr/sbin:/usr/bin

CHROOT=/srv/CHROOT
RUNPATH=/srv/config
SCRIPT="${RUNPATH}/linuxrc.sh"



case "$1" in
    start)
        mkdir -p "${CHROOT}/lib/modules"
        test -e "${CHROOT}/dev/kmsg" || touch "${CHROOT}/dev/kmsg"
        findmnt "${CHROOT}/proc" > /dev/null          || mount -t proc none "${CHROOT}/proc" -o rw,nosuid,nodev,noexec,relatime
        findmnt "${CHROOT}/sys" > /dev/null           || mount -t sysfs none "${CHROOT}/sys" -o rw,nosuid,nodev,noexec,relatime
        findmnt "${CHROOT}/sys/fs/cgroup" > /dev/null || mount -t cgroup2 none "${CHROOT}/sys/fs/cgroup" -o rw,nosuid,nodev,noexec,relatime
        findmnt "${CHROOT}/dev/pts" > /dev/null       || mount -t devpts none "${CHROOT}/dev/pts"
        findmnt "${CHROOT}/lib/modules" > /dev/null   || mount -o bind,ro /lib/modules "${CHROOT}/lib/modules"
        findmnt "${CHROOT}/boot" > /dev/null          || mount -o bind,ro /boot "${CHROOT}/boot"
        findmnt "${CHROOT}/dev/kmsg" > /dev/null      || mount -o bind,ro /dev/kmsg "${CHROOT}/dev/kmsg"

        /usr/sbin/chroot "${CHROOT}" env -i TERM=linux HOME=/root bash --login --posix -c "${SCRIPT} ${RUNPATH} start"
        RET_CODE=$?
        ;;
    stop)
        /usr/sbin/chroot "${CHROOT}" env -i TERM=linux HOME=/root bash --login --posix -c "${SCRIPT} ${RUNPATH} stop"
        RET_CODE=$?

        findmnt "${CHROOT}/dev/kmsg" > /dev/null      && umount "${CHROOT}/dev/kmsg"
        findmnt "${CHROOT}/boot" > /dev/null          && umount "${CHROOT}/boot"
        findmnt "${CHROOT}/lib/modules" > /dev/null   && umount "${CHROOT}/lib/modules"
        findmnt "${CHROOT}/dev/pts" > /dev/null       && umount "${CHROOT}/dev/pts"
        findmnt "${CHROOT}/sys/fs/cgroup" > /dev/null && umount "${CHROOT}/sys/fs/cgroup"
        findmnt "${CHROOT}/sys" > /dev/null           && umount "${CHROOT}/sys"
        findmnt "${CHROOT}/proc" > /dev/null          && umount "${CHROOT}/proc"
        ;;
    restart)
        /usr/sbin/chroot "${CHROOT}" env -i TERM=linux HOME=/root bash --login --posix -c "${SCRIPT} ${RUNPATH} stop"
        sleep 3s
        /usr/sbin/chroot "${CHROOT}" env -i TERM=linux HOME=/root bash --login --posix -c "${SCRIPT} ${RUNPATH} start"
        RET_CODE=$?
        ;;
    status|reload|force-reload)
        echo "Error: '$1' not supported" >&2
        RET_CODE=1
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        RET_CODE=1
        ;;
esac



exit "${RET_CODE}"



# End