summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2012-06-05 19:13:24 +0200
committerDaniel Baumann <daniel@debian.org>2012-06-05 19:35:57 +0200
commite41a83bca638500a899ef7e1d19e97ec723f1209 (patch)
treeea47673910d4a46969ff5d5a66330b4dee3d0e80 /scripts
parent48b7f743543dfe4cc8e2bfbb74f4574053a7da13 (diff)
downloadlive-boot-e41a83bca638500a899ef7e1d19e97ec723f1209.tar.gz
live-boot-e41a83bca638500a899ef7e1d19e97ec723f1209.zip
Transforming persistence_excludes bottom script into normal live-boot script.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/boot.sh2
-rwxr-xr-xscripts/boot/persistence-excludes.sh62
2 files changed, 64 insertions, 0 deletions
diff --git a/scripts/boot.sh b/scripts/boot.sh
index 94f5e18..4391a1e 100755
--- a/scripts/boot.sh
+++ b/scripts/boot.sh
@@ -635,6 +635,8 @@ mountroot ()
panic "A wrong rootfs was mounted."
fi
+ persistence_exclude
+
maybe_break live-bottom
log_begin_msg "Running /scripts/live-bottom\n"
diff --git a/scripts/boot/persistence-excludes.sh b/scripts/boot/persistence-excludes.sh
new file mode 100755
index 0000000..ee9521e
--- /dev/null
+++ b/scripts/boot/persistence-excludes.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+#set -e
+
+persistence_exclude ()
+{
+ # Persistence enhancer script
+ # This script saves precious time on slow persistence devices/image files
+ # and writes on flash based device.
+ # a tmpfs on $PERSTMP is mounted and directories listed in
+ # /etc/live-persistence.binds will be copied there and then bind mounted back.
+
+ if [ -z "${PERSISTENCE}" ] || [ -n "${NOPERSISTENCE}" ] || [ -z "${PERSISTENCE_IS_ON}" ] || [ ! -f /root/etc/live-persistence.binds ]
+ then
+ return
+ fi
+
+ # FIXME: stop hardcoding overloading of initramfs-tools functions
+ . /scripts/functions
+ . /lib/live/boot/initramfs-tools.sh
+
+ dirs="$(sed -e '/^ *$/d' -e '/^#.*$/d' /root/etc/live-persistence.binds | tr '\n' '\0')"
+ if [ -z "${dirs}" ]
+ then
+ return
+ fi
+
+ log_begin_msg "Moving persistence bind mounts"
+
+ PERSTMP="/root/live/persistence-binds"
+ CPIO="/bin/cpio"
+
+ if [ ! -d "${PERSTMP}" ]
+ then
+ mkdir -p "${PERSTMP}"
+ fi
+
+ mount -t tmpfs tmpfs "${PERSTMP}"
+
+ for dir in $(echo "${dirs}" | tr '\0' '\n')
+ do
+ if [ ! -e "/root/${dir}" ] && [ ! -L "/root/${dir}" ]
+ then
+ # directory do not exists, create it
+ mkdir -p "/root/${dir}"
+ elif [ ! -d "/root/${dir}" ]
+ then
+ # it is not a directory, skip it
+ break
+ fi
+
+ # Copy previous content if any
+ cd "/root/${dir}"
+ find . -print0 | ${CPIO} -pumd0 "${PERSTMP}/${dir}"
+ cd "${OLDPWD}"
+
+ # Bind mount it to origin
+ mount -o bind "${PERSTMP}/${dir}" "/root/${dir}"
+ done
+
+ log_end_msg
+}