summaryrefslogtreecommitdiff
path: root/recipes/unionfs/unionroot
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/unionfs/unionroot
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/unionfs/unionroot')
-rwxr-xr-xrecipes/unionfs/unionroot/init.unionroot25
-rwxr-xr-xrecipes/unionfs/unionroot/init.unionroot.old90
2 files changed, 115 insertions, 0 deletions
diff --git a/recipes/unionfs/unionroot/init.unionroot b/recipes/unionfs/unionroot/init.unionroot
new file mode 100755
index 0000000000..bfd86886a0
--- /dev/null
+++ b/recipes/unionfs/unionroot/init.unionroot
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+PATH=/usr/bin:/usr/sbin:/bin:/sbin
+INIT=/sbin/init.sysvinit
+ROOTBACKUP=/media/realroot
+UNION=/media/union
+
+if ! which unionctl; then
+ echo >&2 "ERROR: Package unionfs-utils not installed!"
+ exec ${INIT} $@
+fi
+
+# For shutdown
+if ! [ -z "$@" ]; then
+ exec ${INIT} $@
+fi
+
+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
+
+cd ${UNION}
+pivot_root . ./${ROOTBACKUP}
+exec chroot . ${INIT}
diff --git a/recipes/unionfs/unionroot/init.unionroot.old b/recipes/unionfs/unionroot/init.unionroot.old
new file mode 100755
index 0000000000..7ac227eb38
--- /dev/null
+++ b/recipes/unionfs/unionroot/init.unionroot.old
@@ -0,0 +1,90 @@
+#!/bin/sh
+
+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} $*
+fi
+
+if ! which unionctl; 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
+}
+
+#set -x
+wemounted=""
+(
+ set -e
+ /bin/mount.busybox /proc
+ insmod /lib/modules/`uname -r`/kernel/fs/unionfs.o
+ nodupmount -t unionfs -o dirs=/.=rw,setattr=all 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}