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:
parent
4e8058e313
commit
25c1155771
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=280299
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user