How to Create a CentOS Vagrant Base Box

Joseph edited this page Jul 7, 2016 · 1 revision
Clone this wiki locally

Tested with CentOS 6.2, Vagrant 1.0.2, VirtualBox 4.1.14 on Ubuntu 10.04 (s031).

I did locally on my laptop as you need the VirtualBox GUI and then copied the final centos62-32.box file up to s031.

  1. Download and install VirtualBox

  2. Download the CentOS 6.2 LiveCD

  3. Make a new VM in VirtualBox:

  • Call it "vagrant-centos62-32"
  • Set OS to Linux and version to Red Hat
  • Go into the new VM's settings and disable audio and usb
  1. Boot the VM and install CentOS 6.2 on it:
  • Set the root password to "vagrant":
  • For the non-root desktop user give username "vagrant" and password "vagrant"
  • Set the hostname to "vagrant-centos62"
  1. Boot the VM into the CentOS, login to desktop as vagrant user, open terminal, su, install and enable openssh:
root@vagrant-centos62$ yum install openssh-server
root@vagrant-centos62$ service sshd start
root@vagrant-centos62$ chkconfig sshd on
root@vagrant-centos62$ netstat -tulpn | grep :22
  1. Setup port forwarding in virtualbox. Shutdown the vm and from a host shell do:
you@host$ VBoxManage modifyvm "vagrant-centos62" --natpf1 "guestssh,tcp,,2222,,22"
  1. Now you can ssh into the vm from a host shell:
you@host$ ssh -p 2222 root@127.0.0.1
  1. Install some stuff on the VM:
root@vagrant-centos62$ yum install nano wget gcc bzip2 make kernel-devel-`uname -r`
  1. Install guest additions, easiest way is using Devices -> Install Guest Additions in the VM's GUI window.

  2. Add vagrant user to admin group, from a root shell on the vm:

root@vagrant-centos62$ groupadd admin
root@vagrant-centos62$ usermod -G admin vagrant
  1. Change the sudoers file, from a root shell on the vm do visudo and:
  • Add SSH_AUTH_SOCK to the env_keep option
  • Comment out the Defaults requiretty line
  • Add the line %admin ALL=NOPASSWD: ALL

The vagrant user should now be able to sudo without typing a password, try sudo ls from vagrant user's shell:

vagrant@vagrant-centos62$ sudo ls
  1. Add vagrant's public key so vagrant user can ssh without password. From vagrant user's shell on vm:
vagrant@vagrant-centos62$ mkdir .ssh
vagrant@vagrant-centos62$ curl -k https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub > .ssh/authorized_keys
vagrant@vagrant-centos62$ chmod 0700 .ssh
vagrant@vagrant-centos62$ chmod 0600 .ssh/authorized_keys
  1. Enable the network interface to auto start on the Boot and get dynamic ip, provided by vagrant:

In file:

vagrant@vagrant-centos62$ vi /etc/sysconfig/network-scripts/ifcfg-eth0

Change:

ONBOOT=no

To parameters and values:

ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
  1. Finally package the box and add it to your vagrant boxes. From vagrant user's shell on vm:
vagrant@vagrant-centos62$ sudo yum clean all

Shutdown the vm, then from a host shell:

you@host$ vagrant package --output centos62-32.box --base vagrant-centos62-32
you@host$ vagrant box add centos62-32 centos62-32.box

Be sure the machine named after --base is a machine listed displayed in your Virtual Box. If you are creating a new vagrant box from an existing vagrant box, the name may be something like <dirname>_1369964062

You should now have a centos62-32 base box in your vagrant boxes:

you@host$ vagrant box list
centos62-32

Now you can quickly create a Vagrant VM in any directory with:

you@host$ /tmp/my_vm $ vagrant init centos62-32
you@host$ /tmp/my_vm $ vagrant up
you@host$ /tmp/my_vm $ vagrant ssh

To use the VM on a new host machine, copy the centos62-32.box file to the new host and from the new host's shell run the vagrant box add command on it, now you should see the centos62-32 box in vagrant box list on the new host and you can use the box vagrant init centos62-32.