aboutsummaryrefslogtreecommitdiff
path: root/release
diff options
context:
space:
mode:
authorColin Percival <cperciva@FreeBSD.org>2015-03-20 19:40:19 +0000
committerColin Percival <cperciva@FreeBSD.org>2015-03-20 19:40:19 +0000
commit25c11557710ac95084a775bf3a5bdd97dff70c1e (patch)
tree7e1d639597ef636c5b0745b3c01cdd6f6842d7aa /release
parent4e8058e313b98e3871aa32d507d800c32b3af348 (diff)
downloadsrc-25c11557710ac95084a775bf3a5bdd97dff70c1e.tar.gz
src-25c11557710ac95084a775bf3a5bdd97dff70c1e.zip
When creating VM images, copy the contents of the created filesystem into
a new filesystem before packaging it into a disk image. This prevents "remnants" of deleted files from showing up in the VM images, and reduces their compressed size (by about 10% for the cloudware images) as a result. Looks good to: gjb
Notes
Notes: svn path=/head/; revision=280299
Diffstat (limited to 'release')
-rwxr-xr-xrelease/scripts/mk-vmimage.sh1
-rw-r--r--release/tools/vmimage.subr29
2 files changed, 30 insertions, 0 deletions
diff --git a/release/scripts/mk-vmimage.sh b/release/scripts/mk-vmimage.sh
index 16c33c8febd6..d5985ceb0d25 100755
--- a/release/scripts/mk-vmimage.sh
+++ b/release/scripts/mk-vmimage.sh
@@ -102,6 +102,7 @@ main() {
vm_extra_pre_umount
vm_extra_pkg_rmcache
cleanup
+ vm_copy_base
vm_create_disk || return 0
vm_extra_create_disk
diff --git a/release/tools/vmimage.subr b/release/tools/vmimage.subr
index 6207440149b4..828db355aedf 100644
--- a/release/tools/vmimage.subr
+++ b/release/tools/vmimage.subr
@@ -67,6 +67,35 @@ vm_create_base() {
return 0
}
+vm_copy_base() {
+ # Creates a new UFS root filesystem and copies the contents of the
+ # current root filesystem into it. This produces a "clean" disk
+ # image without any remnants of files which were created temporarily
+ # during image-creation and have since been deleted (e.g., downloaded
+ # package archives).
+
+ mkdir -p ${DESTDIR}/old
+ mdold=$(mdconfig -f ${VMBASE})
+ mount /dev/${mdold} ${DESTDIR}/old
+
+ truncate -s ${VMSIZE} ${VMBASE}.tmp
+ mkdir -p ${DESTDIR}/new
+ mdnew=$(mdconfig -f ${VMBASE}.tmp)
+ newfs -j /dev/${mdnew}
+ mount /dev/${mdnew} ${DESTDIR}/new
+
+ tar -cf- -C ${DESTDIR}/old . | tar -xf- -C ${DESTDIR}/new
+
+ umount /dev/${mdold}
+ rmdir ${DESTDIR}/old
+ mdconfig -d -u ${mdold}
+
+ umount /dev/${mdnew}
+ rmdir ${DESTDIR}/new
+ mdconfig -d -u ${mdnew}
+ mv ${VMBASE}.tmp ${VMBASE}
+}
+
vm_install_base() {
# Installs the FreeBSD userland/kernel to the virtual machine disk.