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
This commit is contained in:
cperciva 2015-03-20 19:40:19 +00:00
parent 19f36523e1
commit f1bd255f86
2 changed files with 30 additions and 0 deletions

View File

@ -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

View File

@ -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.