57 lines
1.8 KiB
Bash
Executable File
57 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
DISCOCFG=/etc/disco
|
|
if [ "$NOOP" != "" ]; then
|
|
DISCOROOT=/var/disco/testfs/noop
|
|
else
|
|
DISCOROOT=/var/disco/testfs/real
|
|
fi
|
|
|
|
|
|
mount | grep $DISCOROOT >/dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo "disco chroot is already mounted, please exec disco-fs-unmount and try again."
|
|
exit 1
|
|
fi
|
|
|
|
if [ $(cat ${DISCOROOT}/inited || echo 0) -ne 1 ]; then
|
|
echo "disco chroot is not initialized, cannot be mounted. Please exec disco-fs-init and try again."
|
|
exit 1
|
|
fi
|
|
|
|
# Mount all the (real filesystem) layers individually
|
|
|
|
mount --bind -o ro / ${DISCOROOT}/rootfs 2>&1 | grep -v "seems to be mounted read-write"
|
|
mount -o remount,ro ${DISCOROOT}/rootfs
|
|
|
|
# Setup filesystem layers. The read/write ones go on the top, with scratchfs ALWAYS on top.
|
|
# We even need the scratchfs in non-noop mode so we can generate the diff output, then rsync
|
|
# everything back onto the real filesystem.
|
|
FSLAYERS="${DISCOROOT}/scratchfs=rw"
|
|
if [ "$NOOP" != "" ]; then
|
|
FSLAYERS="${FSLAYERS}:${DISCOROOT}/restricted=ro"
|
|
FSLAYERS="${FSLAYERS}:${DISCOROOT}/munge=ro"
|
|
fi
|
|
FSLAYERS="${FSLAYERS}:${DISCOROOT}/dev=rw"
|
|
FSLAYERS="${FSLAYERS}:${DISCOROOT}/rootfs=ro"
|
|
|
|
# Union
|
|
unionfs -o cow,dev,dirs=$FSLAYERS ${DISCOROOT}/chroot
|
|
|
|
# Duplicate /proc and /sys if they already exist
|
|
# We have to do this here instead of layering them in the unionfs
|
|
# (or just letting unionfs duplicate them entirely) because there is
|
|
# some kind of checking that goes on in certain apps (like ps), that makes them
|
|
# think /proc is not mounted when it actually is, if we don't do this.
|
|
|
|
mount | grep " on /proc" >/dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
mount -t proc -o ro none ${DISCOROOT}/chroot/proc
|
|
fi
|
|
mount | grep " on /sys" >/dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
mount -t sysfs -o ro none ${DISCOROOT}/chroot/sys
|
|
fi
|
|
|
|
exit 0
|