Vagrant box updaten

Vagrant boxes zijn handige images van virtuele machines. Maar vaak zijn ze outdated en moet je ze eerst updaten voor je ze kunt gebruiken.

Ik doe daarom regelmatig een (automatische) update van mijn veelgebruikte images en bewaar ze centraal zodat ik snel een up-to-date image heb als ik wil gaan ontwikkelen.

TL;DR

$ vagrant init https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box \
  vagrant up && vagrant ssh

# in the vagrant box
sudo localectl set-locale LANG=en_US.utf8
sudo yum update -y
sudo yum upgrade -y
sudo yum install -y git vim
sudo yum autoremove -y
sudo yum clean all 			
sudo rm -rf /var/cache/yum
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
cat /dev/null > ~/.bash_history
history -c
exit

# on your machine, package the bunch
BOXNAME="centos7-updated" vagrant package --output $BOXNAME.box && \
  vagrant box add $BOXNAME $BOXNAME.box && \
  vagrant destroy -f && \
  rm Vagrantfile

$ scp $BOXNAME.box www.myserver.tld:/var/www/html/$BOXNAME.box

Iets uitgebreider uitgelegd (en nu met ubuntu 16.04)

1. Start met een kaal image

Start met een image van internet (van http://www.vagrantbox.es bijvoorbeeld).

$ vagrant init https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box
$ vagrant up

2. Doe de updates (en installeer je veelgebruikte tools bijvoorbeeld)

$ vagrant ssh

# update & install software & remove caches
vagrant $ sudo apt-get update -y && \
  sudo apt-get upgrade -y && \
  sudo apt-get install -y zip unzip git software-properties-common vim locales && \
  sudo locale-gen en_US.UTF-8 && \
  sudo apt-get remove -y --purge software-properties-common && \
  sudo apt-get -y autoremove && \
  sudo apt-get clean && \
  sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# some personal tweaking
vagrant $ echo "set -o vi" >> ~/.bashrc && \
  git clone https://github.com/pauledenburg/bash_it.git ~/.bash_it && \
  . ~/.bash_it/install.sh && \
  mkdir ~/.marks

# clear history & wipe out used space
vagrant $ sudo dd if=/dev/zero of=/EMPTY bs=1M && \
  sudo rm -f /EMPTY && \
  cat /dev/null > ~/.bash_history && \
  history -c && \
  exit

3. Package je image

$ vagrant package --output 1604-updated.box
$ vagrant box add 1604-updated 1604-updated.box
$ vagrant destroy -f
$ rm Vagrantfile

4. Maak hem (publiek?) beschikbaar voor je volgende project

$ scp 1604-updates.box www.myserver.tld:/var/www/html/1604-updates.box

5. Dat is het! Je kunt de volgende keer je image als volgt gebruiken:

$ vagrant init www.myserver.tld/1604-updated.box
0 Shares
>