At vagrantbox.es, you can find boxes for many flavours like CentOS, Ubuntu, Debian etc.
How ever, you might require a flavour of OS that is not available packaged for you already.
In such a case, you might want to package it for use with Vagrant.
I needed Oracle Enterprise Linux Box.
Following is a step by step approach to create a base box for Oracle Enterprise Linux 5.7 64 bit version.
Creating a VM on VirtualBox
Step 1: Get the ISO file from which we will install the Oracle Enterprise Linux.
Step 2: Create your virtual machine on VirtualBox.
Create a new Virtual Machine
Type: VMDK
Name : oel57
Base memory size: 512 MB, Memory Space Maximum 40 GB
Enable Host I/O cache
Step 3: Attach the installer ISO to cdrom: Settings -> Storage -> CD ROM
Step 4: Start the virtual machine and follow the OS installer instructions.
Section1: Initialize drive and erase data: yes
Section2: Disable IPv6, leave IPv4 enabled with DHCP
Configure network: yes
Set hostname to vagrantoel5 & Domain to vagrant.com
Section3: Root password: vagrant
Section4: Set the apprpriate time zone
Section5: Customize the package installation
Deselect everything and Dial-up networking, Text-based internet
Select Base, development tools & libraries
Remove GUI - GTK, KDE, X11
Section6: After reboot
Disable firewall
Run Services: Disable cups
This will install a lot of unwanted packages. Try to reduce it to minimum. Reboot the VM after installation.
Configuring the new VM
Step 5: Before, you move on, check if eth0 has been assigned an IP
ifconfig
inet address: 10.0.2.15 ...
....
Step 6: Installing VirtualBox Guest Additions
From VirtualBox/VM Menu -> Devices -> Install Guest Additions
On the running VM:
mkdir /media/VirtualBoxGuestAdditions
mount -r /dev/cdrom /media/VirtualBoxGuestAdditions
cd /media/VirtualBoxGuestAdditions
sh ./VBoxLinuxAdditions.run
reboot
Step 7: Restart VM
Easing working on VM
Step 11: Create vagrant account
groupadd admin
useradd -G admin vagrant
passwd vagrant
# choose "vagrant" as the password
Step 12: Changes to visudo for vagrant usage as root
visudo changes:
%admin ALL=(ALL) NOPASSWD: ALL
Defaults env_keep = .. SSH_AUTH_SOCK PATH <-- add in last line
# Defaults !visiblepw <--- Comment it
# Defaults requiretty <--- Comment it
Step 13: Basic steps for vagrant usage as root
su - vagrant
echo ‘export PATH=$PATH:/usr/sbin:/sbin’ >> .bashrc
exit
/etc/init.d/sudo restart
Package required for vagrant usage
Login as vagrant user and do the following
Step 13: Ruby
Install RVM
curl -s https://rvm.beginrescueend.com/install/rvm -o rvm-installer
chmod +x rvm-installer
sudo ./rvm-installer --version latest
exit the shell and relogin as vagrant user
Additional installs required
yum install -y gcc-c++ patch readline readline-devel
zlib zlib-devel libyaml-devel
libffi-devel openssl-devel make bzip2 autoconf
automake libtool bison iconv-devel
Install Ruby
sudo rvm install 1.9.2
Package required for vagrant usage
Login as vagrant user and do the following
Step 14: Setup yum repository
Install Oracle repository
cd /etc/yum.repos.d
wget http://public-yum.oracle.com/public-yum-el5.repo
Change enabled=0 to enabled=1
Install EPEL repo
sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5Server/x86_64/epel-release-5-4.noarch.rpm
Step 15: Puppet, Chef & SSH
Install Puppet: sudo yum install puppet
Install Chef :sudo gem install chef --no-rdoc --no-ri
Install SSH
Allow automatic ssh for vagrant
Step 16: Add vagrant insecure public key
mkdir .ssh
chmod 755 .ssh
wget --no-check-certificate
https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
cat vagrant.pub > .ssh/authorized_keys
chmod 644 .ssh/authorized_keys
Step 17: Cleanup and shutdown virtual machine
sudo /sbin/ifconfig
write down MAC address of eth0 (eg. 08:00:27:60:AE:41)
sudo yum clean headers packages dbcache expire-cache
shutdown now
Finally!!: Packaging Base Box
Step 18: Package vagrant box
# Use the same name as there in VirtualBox
vagrant package --base oel57
# It creates a file called package.box in the same directory
# Rename it for distribution & download
mv package.box to oel57.box
Step 19: Try using it
vagrant box add oel57 oel57.box
mkdir test_environment
cd test_environment
vagrant init oel57
vagrant up
vagrant ssh
Taste your base box !!
Step 20: Add the base box to vagrant repository
vagrant box add oel57 oel57.box
vagrant box list <--- outputs all the boxes available for use
lucid64
oel57
puppet-rhel-6-64
Step 21: Try using it
mkdir test_environment
cd test_environment
vagrant init oel57
vagrant up
vagrant ssh
Thanks for writing up your experiences with creating a vagrant base box from scratch. It nicely bridges the gap between the vagrant documentation and my own experiences.
ReplyDeleteI would like to point out one minor improvement. In step 16 I was missing an closing angle bracket. The cat command should read more like 'cat vagrant.pub > .ssh/authorized_keys'
Thanks Daan, I have corrected it.
DeleteThank you very much for this article, I'll try to create Fedora 16 vagrant image now (it is missing at vagrantbox.es).
ReplyDeleteAlso my question is - is it required to add shared folder "/vagrant" manually, or it will be created automatically by vagrant? http://vagrantup.com/docs/getting-started/ssh.html bottom of the page.
If folder should be created manually, could you add step(s) for it?
Hello Dionio,
DeleteYou don't need to create that in Base box image that you are creating. The Shared folder should be defined in the Vagrant configuration. While loading up the VM, Vagrant will do the needful mapping for you.
Hi,
ReplyDeleteThank you very very much for this article. I desperately and definitely needed this documentation for creating a Fedora Base Box which I need to configure it and send it to one of my client. This helped me a lot. Thanks again.
Srinivas G
Hi,
ReplyDeleteThank you Ashish. I was able to build a Vagrant Base Box of Fedora 17. I am herewith providing a link for anyone who wants the Fedora 17 vagrant base box to be downloaded and use it right away.
The link is: http://www.vertizone.com/vagrant
Thanks,
Srinivas G
Great!. Thanks for providing the link to Fedora 17 box. It will be quite useful.
DeleteYou might want to look at veewee to create baseboxes . it acts as a plugin
ReplyDeletehttps://github.com/jedi4ever/veewee
Hey there! Thanks for this, but I am running into a problem when I run the final packaging of the box file. I get "The box Ubuntu could not be found. That's what I named it and that's what I see in Virtualbox. Google is no help from what I've seen so far. Any ideas?
ReplyDeleteHi Travis, Sorry for late reply. What you see in virtualbox is the name of the VM. Look into the properties for the actual name of vmdk / vbox file.
DeleteHi Ashish,
ReplyDeleteThanks for the wonderful article. I was able to create the box. But now when i try to init the machine via vagrant it does not log into the machine and timeouts. But if i do vagrant ssh in next terminal i am able to log into the machine. Any idea what can be the issue?
Very nice post, thanks for sharing the information. Keep up the good work.
ReplyDeletecheap box printing
Hi Ashish, this indeed a very elaborative post and has definitely helped me in understanding the basic concept about packaging a VM. Thanks for the article.
ReplyDeleteI recently ran into problem when I found that my VM (installed via VAGRANT) is missing some basic softwares...so it is possible to install the software on the VM (loaded via VAGRANT UP command) and repackage the VM into a .BOX file.
Please also share some commands that could help me achieving this task.
Thanks.
Thanks for the post. I tried to create own VirtualBox box using - http://sysadm.pp.ua/linux/sistemy-virtualizacii/vagrant-box-creation.html . But didn't found OpenVZ provider box creation. Did anybody faced with it?
ReplyDelete
ReplyDeleteSo all the point which as you mention i am totally agreed.
Thanks for your kind information.
goldenslot
gclub
gclub casino
Nice blog and grateful information to who are visiting these pages. I would like to appreciate all your efforts, I have used many other services several times and I am very happy with it too. Finally once more thank you for this breathtaking article and I like this.if you have interest please visit us: Earn Free Xbox Live Gift Card Codes
ReplyDeleteOMG! This is a very great blog.
ReplyDeleteทีเด็ดบอลออนไลน์ ทีเด็ดบอลออนไลน์ ทีเด็ดบอลออนไลน์
How to write great blogs.
ReplyDeleteทีเด็ดบอลออนไลน์ ทีเด็ดบอลออนไลน์ ทีเด็ดบอลออนไลน์ ทีเด็ดบอลออนไลน์
Thanks for sharing. กำถั่ว
ReplyDeleteEverything is very open with a clear clarification of the issues. It was really informative. Your site is extremely helpful. Thanks for sharing!
ReplyDelete토토
온라인경마
This blog was…great! how do you say it? Relevant!! Finally I’ve found something that helped me. Thanks!
ReplyDelete카지노
토토