Script chroot.sh
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