From f812720fc624fb0ba88fb110ec28e306bff4b95b Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Sun, 4 Dec 2011 14:56:21 -0500 Subject: [PATCH] gnomeos: Make run script transparently update existing FS image This is noticeably faster. --- gnomeos/yocto/gnomeos-run.sh | 74 ++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/gnomeos/yocto/gnomeos-run.sh b/gnomeos/yocto/gnomeos-run.sh index 12f8e3a2..b4d34290 100755 --- a/gnomeos/yocto/gnomeos-run.sh +++ b/gnomeos/yocto/gnomeos-run.sh @@ -49,42 +49,50 @@ if (! test -f ${OBJ}); then rm -f ${OBJ}.tmp qemu-img create ${OBJ}.tmp 2G mkfs.ext3 -q -F ${OBJ}.tmp - mkdir -p fs - umount fs || true - mount -o loop ${OBJ}.tmp fs - - cd fs - - TOPROOT_BIND_MOUNTS="home root tmp" - - for d in $TOPROOT_BIND_MOUNTS; do - mkdir -m 0755 $d - done - chmod a=rwxt tmp - - mkdir ostree - mkdir -p -m 0755 ./ostree/var/{log,run,tmp,spool} - cd ostree - mkdir repo - ostree --repo=repo init - ostree --repo=${OSTREE_REPO} local-clone repo - for branch in base dev; do - rev=$(ostree --repo=repo rev-parse ${BRANCH_PREFIX}${branch}); - ostree --repo=repo checkout ${rev} ${BRANCH_PREFIX}${branch}-${rev} - ln -s ${BRANCH_PREFIX}${branch}-${rev} ${BRANCH_PREFIX}${branch}-current - done - cd .. - - mkdir proc # needed for ostree-init - cp -a ./ostree/${BRANCH_PREFIX}base-current/usr/sbin/ostree-init . - - cd ${WORKDIR} - - umount fs - rmdir fs mv ${OBJ}.tmp ${OBJ} fi +mkdir -p fs +umount fs || true +sleep 1 # Avoid Linux kernel bug, pretty sure it's the new RCU pathname lookup +mount -o loop gnomeos-fs.img fs + +cd fs + +TOPROOT_BIND_MOUNTS="home root tmp" + +for d in $TOPROOT_BIND_MOUNTS; do + if ! test -d $d; then + mkdir -m 0755 $d + fi +done +chmod a=rwxt tmp + +if ! test -d ostree; then + mkdir ostree + mkdir -p -m 0755 ./ostree/var/{log,run,tmp,spool} + mkdir ostree/repo + ostree --repo=ostree/repo init +fi +cd ostree +ostree --repo=${OSTREE_REPO} local-clone repo +for branch in base dev; do + rev=$(ostree --repo=repo rev-parse ${BRANCH_PREFIX}${branch}); + if ! test -d ${BRANCH_PREFIX}${branch}-${rev}; then + ostree --repo=repo checkout ${rev} ${BRANCH_PREFIX}${branch}-${rev} + fi + ln -sf ${BRANCH_PREFIX}${branch}-${rev} ${BRANCH_PREFIX}${branch}-current +done +cd .. + +test -d proc || mkdir proc # needed for ostree-init +cp -a ./ostree/${BRANCH_PREFIX}base-current/usr/sbin/ostree-init . + +cd ${WORKDIR} + +umount fs +rmdir fs + ARGS="$@" if ! echo $ARGS | grep -q 'init='; then ARGS="init=/ostree-init $ARGS"