summaryrefslogtreecommitdiff
path: root/packages/unionfs/unionroot/init.unionroot
diff options
context:
space:
mode:
Diffstat (limited to 'packages/unionfs/unionroot/init.unionroot')
-rw-r--r--packages/unionfs/unionroot/init.unionroot87
1 files changed, 11 insertions, 76 deletions
diff --git a/packages/unionfs/unionroot/init.unionroot b/packages/unionfs/unionroot/init.unionroot
index 90aa4b015e..bfd86886a0 100644
--- a/packages/unionfs/unionroot/init.unionroot
+++ b/packages/unionfs/unionroot/init.unionroot
@@ -1,90 +1,25 @@
#!/bin/sh
+PATH=/usr/bin:/usr/sbin:/bin:/sbin
INIT=/sbin/init.sysvinit
-#OVERLAYS=/media/ram /media/cf /media/card
ROOTBACKUP=/media/realroot
UNION=/media/union
-PATH=/usr/bin:/usr/sbin:/bin:/sbin
-
-if ! test -e ${INIT}; then
- echo >&2 "ERROR: ${INIT} not found"
- exit 1
-fi
-if test x"$*" != "x"; then
- exec ${INIT} $*
+if ! which unionctl; then
+ echo >&2 "ERROR: Package unionfs-utils not installed!"
+ exec ${INIT} $@
fi
-if ! which unionctl; then
- exec ${INIT}
+# For shutdown
+if ! [ -z "$@" ]; then
+ exec ${INIT} $@
fi
-nodupmount () {
- opts=""
- type=""
- while true; do
- if test "$1" = "-o"; then
- shift
- opts="-o $1"
- shift
- elif test "$1" = "-t"; then
- shift
- type="$1"
- shift
- else
- break
- fi
- done
- if test x"$2" = "x"; then
- mountpt="$1"
- else
- device="$1"
- mountpt="$2"
- fi
- mountmatch="^[^ ]+ $mountpt $type"
- # echo "NOTE: grep -E -q \"$mountmatch\" /proc/mounts"
- if grep -E -q "$mountmatch" /proc/mounts; then
- return 0;
- fi
- if test x"$type" != "x"; then
- type="-t $type"
- fi
- echo >&2 "NOTE: executing mount $type $opts $device $mountpt"
- mkdir -p $mountpt
- /bin/mount.busybox $type $opts $device $mountpt
- ret="$?"
- if test "$ret" = "0"; then
- wemounted="$wemounted $mountpt"
- fi
- return $ret
-}
+mount.busybox /proc
+insmod /lib/modules/`uname -r`/kernel/fs/unionfs.o
+mount.busybox -t unionfs -o dirs=/.=rw,setattr=all none ${UNION}
+umount.busybox /proc
-#set -x
-wemounted=""
-(
- set -e
- /bin/mount.busybox /proc
- insmod /lib/modules/`uname -r`/kernel/fs/unionfs.o
- nodupmount -t unionfs -o dirs=/.=rw none ${UNION}
-# nodupmount -o bind / ${UNION}/${ROOTBACKUP}
-# for OVERLAY in ${OVERLAYS}; do
-# nodupmount ${OVERLAY}
-# union-ctl /. --add --mode rw ${OVERLAY}
-# nodupmount -o bind ${OVERLAY} ${UNION}/${OVERLAY}
-# done
- /bin/umount.busybox /proc
-# nodupmount -o bind /proc ${UNION}/proc
-# nodupmount -o bind / ${ROOTBACKUP}
-) || (
- echo >&2 "ERROR: unable to setup mounts for chroot";
- if test x"$wemounted" != "x"; then
- # cleanup
- for mount in $wemounted; do
- /bin/umount.busybox $mount
- done
- fi
- exec ${INIT}
-)
cd ${UNION}
pivot_root . ./${ROOTBACKUP}
exec chroot . ${INIT}