Reducing vagrant box size
Here are some tricks I use to make my vagrant boxes as small as possible:
Tips:
Booting in single user mode:
I boot in single user mode since it will prevent running services that could output logs. I do this because I zero out all my logs before packaging the box.
Updating:
After updating any package, run yum clean (or the apt equivalent).
When booted in single user mode, don’t forget to start-up your network before updating.
When updating kernels, install the kernel packages, reboot and remove the old kernel packages that are no longer in use. Remember to re-install the VirtualBox add-ons too after a kernel update.
Cleanup:
After doing whatever you need to do with the box, I do some rather nasty stuff to make sure the box uses as little as possible place. If you are using a RAW hard-disks, these might be a bad idea (stuff gets BIG).
- Zero out all remaining unused disk space
- Zero out the swap
- Clear out all log files (I just make them empty, I do NOT delete them)
Script:
(You can find this script – or an older version in /root/tools/cleanup_diskspace.sh on my newer vagrant boxes.)
cat - << EOWARNING WARNING: This script will fill up your left over disk space. DO NOT RUN THIS WHEN YOUR VIRTUAL HD IS RAW!!!!! You should NOT do this on a running system. This is purely for making vagrant boxes damn small. Press Ctrl+C within the next 10 seconds if you want to abort!! EOWARNING sleep 10; echo 'Cleanup log files'; find /var/log -type f | while read f; do echo -ne '' > $f; done; echo 'Whiteout root'; count=`df --sync -kP / | tail -n1 | awk -F ' ' '{print $4}'`; dd if=/dev/zero of=/tmp/whitespace bs=1024 count=$count; rm /tmp/whitespace; echo 'Whiteout /boot' count=`df --sync -kP /boot | tail -n1 | awk -F ' ' '{print $4}'`; dd if=/dev/zero of=/boot/whitespace bs=1024 count=$count; rm /boot/whitespace; ### Repeat the above for other partitions you have. swappart=`cat /proc/swaps | tail -n1 | awk -F ' ' '{print $1}'` swapoff $swappart; dd if=/dev/zero of=$swappart mkswap $swappart; swapon $swappart;
Furthermore – about this script – USE IT AT YOUR OWN RISK
