How to Create a CentOS Vagrant Base Box
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.
Download and install VirtualBox
Download the CentOS 6.2 LiveCD
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
- 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"
- 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
- 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"
- Now you can ssh into the vm from a host shell:
you@host$ ssh -p 2222 firstname.lastname@example.org
- Install some stuff on the VM:
root@vagrant-centos62$ yum install nano wget gcc bzip2 make kernel-devel-`uname -r`
Install guest additions, easiest way is using Devices -> Install Guest Additions in the VM's GUI window.
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
- Change the sudoers file, from a root shell on the vm do
- 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
- 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
- Enable the network interface to auto start on the Boot and get dynamic ip, provided by vagrant:
vagrant@vagrant-centos62$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
To parameters and values:
ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp
- 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
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.