summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/live-persistence.binds15
-rw-r--r--debian/changelog6
-rw-r--r--manpages/live-initramfs.en.7.txt5
-rwxr-xr-xscripts/live7
-rwxr-xr-xscripts/live-bottom/08persistence_excludes77
5 files changed, 110 insertions, 0 deletions
diff --git a/conf/live-persistence.binds b/conf/live-persistence.binds
new file mode 100644
index 0000000..b2c3833
--- /dev/null
+++ b/conf/live-persistence.binds
@@ -0,0 +1,15 @@
+# /etc/live-persistence.binds example
+#
+# If this file is present in the proper path, each uncommented not empty line
+# will be treated as a directory which should not be made persistent and
+# which it's content should be volatile.
+#
+# This is achieved by bind mounting on it a tmpfs clone of the directory specified
+
+# Exclude some standard temporary paths
+/tmp
+/var/log
+/var/cache
+
+# Firefox profiles are not always useful to remember
+/root/.mozilla
diff --git a/debian/changelog b/debian/changelog
index 4c59e5f..005786b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+live-initramfs (1.139.1-3.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+
+ -- Marco Amadori <marco.amadori@vdavda.com> Mon, 29 Sep 2008 11:53:00 +0200
+
live-initramfs (1.139.1-3) unstable; urgency=medium
[ Chris Lamb ]
diff --git a/manpages/live-initramfs.en.7.txt b/manpages/live-initramfs.en.7.txt
index f42a9ce..9766e21 100644
--- a/manpages/live-initramfs.en.7.txt
+++ b/manpages/live-initramfs.en.7.txt
@@ -290,6 +290,11 @@ in this file will be the "lowest" point in the aufs, and the last file in
this list will be on the "top" of the aufs, directly below /cow. Without
this file, any images in the "/live" directory are loaded in alphanumeric order.
+ /etc/live-persistence.binds
+
+This optional file, which resides in the rootfs system, not in the live media as above mentioned files, if exists will be used as a list of directories which not need to be persistent and which their content does not need to survive reboots. This is achieved by bind mounting for each directory listed there a tmpfs on the original path. This will permits to save precious writes and speed up operations for content like web caches and temporary files (like e.g. /tmp and .mozilla) which are regenerated each time.
+
+
See also
--------
diff --git a/scripts/live b/scripts/live
index 5be6fe2..0f4ef0d 100755
--- a/scripts/live
+++ b/scripts/live
@@ -1151,9 +1151,16 @@ setup_unionfs ()
# snapshots to be sure to really store some e.g key config files,
# but not on the same media
blacklistdev="${cowprobe}"
+ PERSISTENCE_IS_ON="Yes"
+ export PERSISTENCE_IS_ON
fi
# homecow just mount something on /home, this should be generalized some way
homecow=$(find_cow_device "${home_persistence}" "${blacklistdev}")
+ if [ -b "${homecow}" ]
+ then
+ PERSISTENCE_IS_ON="Yes"
+ export PERSISTENCE_IS_ON
+ fi
root_snapdata=$(find_snap "${root_snapshot_label}" "${blacklistdev}")
# This second type should be removed when snapshot will get smarter,
# hence when "/etc/live-snapshot*list" will be supported also by
diff --git a/scripts/live-bottom/08persistence_excludes b/scripts/live-bottom/08persistence_excludes
new file mode 100755
index 0000000..bc5c4d8
--- /dev/null
+++ b/scripts/live-bottom/08persistence_excludes
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# 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.
+
+#set -e
+
+# initramfs-tools header
+
+PREREQ=""
+
+prereqs()
+{
+ echo "${PREREQ}"
+}
+
+case "${1}" in
+ prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+# live-initramfs header
+
+if [ -z "${PERSISTENT}" ] || [ -n "${NOPERSISTENT}" ] || [ -z "${PERSISTENCE_IS_ON}" ] || [ ! -f /root/etc/live-persistence.binds ]
+then
+ exit 0
+fi
+
+. /scripts/live-functions
+
+# live-initramfs script
+
+dirs="$(cat /root/etc/live-persistence.binds | grep -v '^#.*$' | grep -v '^ *$' | tr '\n' '\0')"
+if [ -z "${dirs}" ]
+then
+ exit 0
+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