From d145b0426cde87eaa2efcbee870cde73480714ad Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 27 Oct 2011 16:59:01 -0400 Subject: [PATCH] image: Add /sysroot as a toplevel bind mount to the real root This allows tools to see and operate on the "real" root conveniently; for example, ostree clearly needs to operate on /ostree/repo. --- parallel-debian/gnomeos-make-image.sh | 6 ++++-- parallel-debian/gnomeos-run.sh | 2 +- parallel-debian/ostree_switch_root.c | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/parallel-debian/gnomeos-make-image.sh b/parallel-debian/gnomeos-make-image.sh index a1591431..de3c30a3 100755 --- a/parallel-debian/gnomeos-make-image.sh +++ b/parallel-debian/gnomeos-make-image.sh @@ -144,8 +144,10 @@ if ! test -d ${OBJ}; then rm ostree/gnomeos-origin/debian-setup.sh (cd ostree/gnomeos-origin; find . '!' -type p | grep -v '^.$' | $OSTREE commit -s 'Run debian-setup.sh' --repo=../repo --from-stdin) - cp -p ${SRCDIR}/chroot_break ostree/gnomeos-origin/sbin/chroot_break - (cd ostree/gnomeos-origin; $OSTREE commit -s 'Add chroot_break' --repo=../repo --add=sbin/chroot_break) + # This is the name for the real rootfs, not the chroot + (cd ostree/gnomeos-origin; + mkdir sysroot; + $OSTREE commit -s 'Add sysroot' --repo=../repo --add=sysroot) (cd ostree; rev=$($OSTREE rev-parse --repo=repo master) diff --git a/parallel-debian/gnomeos-run.sh b/parallel-debian/gnomeos-run.sh index cb417912..9d17ba29 100755 --- a/parallel-debian/gnomeos-run.sh +++ b/parallel-debian/gnomeos-run.sh @@ -45,4 +45,4 @@ fi kv=`uname -r` kernel=/boot/vmlinuz-${kv} -exec qemu-kvm -kernel ${kernel} -initrd gnomeos-initrd.img -hda gnomeos-fs.img -append "root=/dev/sda ostree=current" +exec qemu-kvm -kernel ${kernel} -initrd gnomeos-initrd.img -hda gnomeos-fs.img -append "root=/dev/sda ostree=current $1" diff --git a/parallel-debian/ostree_switch_root.c b/parallel-debian/ostree_switch_root.c index fb750f2d..d3e82b14 100644 --- a/parallel-debian/ostree_switch_root.c +++ b/parallel-debian/ostree_switch_root.c @@ -219,6 +219,12 @@ static int switchroot(const char *newroot, const char *subroot) } } + snprintf(destpath, sizeof(destpath), "%s/sysroot", subroot_path); + if (mount(newroot, destpath, NULL, MS_BIND, NULL) < 0) { + perrorv("Failed bind mount sysroot"); + return -1; + } + if (chdir(newroot)) { perrorv("failed to change directory to %s", newroot); return -1;