I ran across Andrej Koelewijn’s article about Vagrant over a year ago, and I have been wanting to explore it ever since. I do a lot of playing around with different things, and Vagrant looked like it would be a cool, quick way to spin up a new image of an OS. I would love to get it to the point of being able to spin up an instance of PeopleSoft. I am no where near there now, though.
This is just my first run through. I set an easy goal of trying to get Oracle XE running on Ubuntu via the repositories. Unfortunately, I learned that that repository isn’t worth the time. Still, it was a fruitful exercise, and I definitely will be playing around more with Vagrant.
Follow along if you like…
Installing Vagrant
For me, since I am running Ubuntu 12.10, I found Vagrant already in the repositories. I could easily install it from the software repositories:
Note that I already had Oracle’s virtual box installed. The vagrant install was as straightforward as it gets.
If you aren’t using Linux or Ubuntu, you can check out the Vagrant download page. They support many other platforms.
Choosing an OS/Box
The website tutorial uses Lucid, which is an old version of Ubuntu. I want to keep up to date, so I went searching for something newer. I found that the Vagrantbox.es Website had a great list.
To start with, I chose the latest version of Ubuntu. I needed 64-bit to support PeopleSoft, which may come eventually. So, here’s what I chose:
Ubuntu 12.10 Quantal x86_64 (Guest Additions 4.2.2) — https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box
You’ll see further in the article, that I had to change to a 32-bit image because the repository didn’t support 64-bit images. So, I used this image:
Ubuntu Server 12.04.1 i868 (VirtualBox 4.2.1) — http://dl.dropbox.com/u/4031118/Vagrant/ubuntu-12.04.1-server-i686-virtual.box
Later on, Oracle Linux would be a good choice to experiment with. I’ll save this box for later:
Oracle Linux 6.3 x86_64 (chef) — https://dl.dropbox.com/s/zejz4yljiexqcfu/oracle64.box
I was even curious to find a Windows box on the list.
Windows Server 2008 R2 – Datacentre core (Puppet, VirtualBox 4.2.4) — http://dl.dropbox.com/u/58604/vagrant/win2k8r2-core.box
Building the box
I created a directory specifically for this. For me, that was: ~/app/vagrant/ubuntuoracle
Then, I ran this command to download and create the new box:
vagrant box add ubuntuoracle https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box
That didn’t take too long since I have a nice Internet connection, but did take a few minutes. Here is what the output looked like:
skp@chestnut:~/app/vagrant/ubuntuoracle$ vagrant box add ubuntuoracle https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box [vagrant] Downloading with Vagrant::Downloaders::HTTP... [vagrant] Downloading box: https://github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box [vagrant] Downloading box: http://cloud.github.com/downloads/roderik/VagrantQuantal64Box/quantal64.box [vagrant] Extracting box... [vagrant] Verifying box... [vagrant] Cleaning up downloaded box...
At this point, I didn’t have anything new in my Virtual box manager.
Then, I ran this command to initialize the box:
vagrant init ubuntuoracle
This is the output:
skp@chestnut:~/app/vagrant/ubuntuoracle$ vagrant init ubuntuoracle A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
Just out of curiosity, I opened the “Vagrantfile”, and if I ignore all of the comments, this is all that was in it:
Vagrant::Config.run do |config| config.vm.box = "ubuntuoracle" end
Again, I found nothing new in my Virtual Box Manager at this point either.
Finally, I ran this command:
vagrant up
Troubleshooting Failing Booting
Here’s my output:
skp@chestnut:~/app/vagrant/ubuntuoracle$ vagrant up [default] Importing base box 'ubuntuoracle'... [default] The guest additions on this VM do not match the install version of VirtualBox! This may cause things such as forwarded ports, shared folders, and more to not work properly. If any of those things fail on this machine, please update the guest additions and repackage the box. Guest Additions Version: 4.2.2 VirtualBox Version: 4.1.18 [default] Matching MAC address for NAT networking... [default] Clearing any previously set forwarded ports... [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] Failed to connect to VM! Failed to connect to VM via SSH. Please verify the VM successfully booted by looking at the VirtualBox GUI.
To see if it is running and what the name is, you can use VBoxManage:
skp@chestnut:~/app/vagrant/ubuntuoracle$ VBoxManage list runningvms "ubuntuoracle_1363121046" {a6817f09-3e6e-4813-95db-75d7fdc75164}
I found that I could read the network information like this:
skp@chestnut:~/app/vagrant/ubuntuoracle$ VBoxManage showvminfo ubuntuoracle_1363121046 | grep ";NIC 1" NIC 1: MAC: 080027733F26, Attachment: NAT, Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny NIC 1 Settings: MTU: 0, Socket (send: 64, receive: 64), TCP Window (send:64, receive: 64) NIC 1 Rule(0): name = ssh, protocol = tcp, host ip = , host port = 2222, guest ip = , guest port = 22
I suspect this is part of the issue. There is a bug between Virtual Box, Ubuntu, and NAT.
Then, I could power off the box like this:
skp@chestnut:~/app/vagrant/ubuntuoracle$ VBoxManage controlvm ubuntuoracle_1363121046 poweroff 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
To test the theory about NAT, I uncommented this line in the Vagrantfile:
config.vm.network :bridged
Then, I called the destroy command (which removed it from the Virtual Box Manager), and the up command again.
That still didn’t fix the problem, so I uncommented this line and tried again:
config.vm.boot_mode = :gui
After that I could log into the console and see what was going one. In the documentation, I found that the typical user should be vagrant, and the password should match. Thankfully, that was the case with my machine.
What I found was that it wasn’t really going to Bind mode yet. It was still in NAT. And, I couldn’t ping the machine from my host, and my host couldn’t get to the Internet. When I changed the interface to Bind, and I did “sudo service networking restart”, then I could ping the machine.
Thanks to a post on Ask Ubuntu, I found that I could add this to the VagrantFile:
config.vm.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] config.vm.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
That fixed the problem. After that, this was my output:
skp@chestnut:~/app/vagrant/ubuntuoracle$ vagrant destroy Are you sure you want to destroy the 'default' VM? [Y/N] y [default] Destroying VM and associated drives... skp@chestnut:~/app/vagrant/ubuntuoracle$ vagrant up [default] Importing base box 'ubuntuoracle'... [default] The guest additions on this VM do not match the install version of VirtualBox! This may cause things such as forwarded ports, shared folders, and more to not work properly. If any of those things fail on this machine, please update the guest additions and repackage the box. Guest Additions Version: 4.2.2 VirtualBox Version: 4.1.18 [default] Matching MAC address for NAT networking... [default] Clearing any previously set forwarded ports... [default] Forwarding ports... [default] -- 22 => 2222 (adapter 1) [default] Creating shared folders metadata... [default] Clearing any previously set network interfaces... [default] Running any VM customizations... [default] Booting VM... [default] Waiting for VM to boot. This can take a few minutes. [default] VM booted and ready for use! [default] Mounting shared folders... [default] -- v-root: /vagrant
Installing Oracle
First, I read that if you have less than 1G of memory, you need to create swap space. To avoid that, I am going to bump up the memory to 2G. I found I could do that easily by adding this line to the Vagrantfile:
config.vm.customize ["modifyvm", :id, "--memory", 2048]
After that, I re-built the machine, and I used the ssh command to connect:
vagrant up vagrant ssh
Then, I ran these commands to install Oracle XE:
sudo sh -c 'echo "deb http://oss.oracle.com/debian unstable main non-free" >> /etc/apt/sources.list' wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | sudo apt-key add - sudo apt-get update sudo apt-get install oracle-xe
32 bit vs 64 bit
Unfortunately, the Oracle repository only has the 32-bit version of Oracle in it. When I tried it on my 64-bit version, it couldn’t find the URLs:
W: Failed to fetch http://oss.oracle.com/debian/dists/unstable/main/binary-amd64/Packages 302 Found W: Failed to fetch http://oss.oracle.com/debian/dists/unstable/non-free/binary-amd64/Packages 302 Found W: Failed to fetch http://oss.oracle.com/debian/dists/unstable/main/binary-i386/Packages 302 Found W: Failed to fetch http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/Packages 302 Found E: Some index files failed to download. They have been ignored, or old ones used instead.
I had to change my base image to a 32-bit image. So, I added this image instead:
vagrant box add ubuntuoracle32 http://dl.dropbox.com/u/4031118/Vagrant/ubuntu-12.04.1-server-i686-virtual.box
Bad Oracle Repository
I have finally determined that this Oracle repository is not any good. It keeps timing out. Here’s what the failure messages look like:
Hit http://se.archive.ubuntu.com precise-backports/universe Translation-en Ign http://oss.oracle.com unstable InRelease Ign http://oss.oracle.com unstable Release.gpg Ign http://oss.oracle.com unstable Release Ign http://oss.oracle.com unstable/main TranslationIndex Ign http://oss.oracle.com unstable/non-free TranslationIndex Err http://oss.oracle.com unstable/main i386 Packages Undetermined Error Err http://oss.oracle.com unstable/non-free i386 Packages Undetermined Error Ign http://oss.oracle.com unstable/main Translation-en_US Ign http://oss.oracle.com unstable/main Translation-en Ign http://oss.oracle.com unstable/non-free Translation-en_US Ign http://oss.oracle.com unstable/non-free Translation-en W: Failed to fetch http://oss.oracle.com/debian/dists/unstable/main/binary-i386/Packages Undetermined Error W: Failed to fetch http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/Packages Undetermined Error E: Some index files failed to download. They have been ignored, or old ones used instead. vagrant@vagrant-ubuntu-precise:~$ sudo apt-get install oracle-xe Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package oracle-xe
So, instead of using apt-get to download it from the repository, I just browsed to the website and found the URL to the package. So, these commands did the install for me:
wget https://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe_10.2.0.1-1.1_i386.deb wget https://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb sudo dpkg -i libaio_0.3.104-1_i386.deb sudo apt-get install bc sudo dpkg -i oracle-xe_10.2.0.1-1.1_i386.deb sudo /etc/init.d/oracle-xe configure
Connecting to the Database
Next, I wanted to connect to the database to verify that it was actually running. My first problem was that it was listing only on the localhost. I could see what the listener was doing just by statusing the service:
sudo service oracle-xe status
Then, I pinged the hostname to see that it was returning an ip address that started with “127”.
ping `hostname`
To fix the issue, I used ifconfig to find my current IP address. Then, I edited /etc/hosts and changed the line with the hostname on it to use the actual ip address from ifconfig. Finally, I just had to restart the oracle service:
sudo service oracle-xe restart
That still didn’t fix my problem although it may have brought me a step closer. I decided that it wasn’t worth the time, and decided to just connect with sqlplus in my ssh session. I had to set the ORACLE_HOME, but that did the trick. Note that during the configure part, I set the SYS and SYSTEM accounts’ password to vagrant.
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server export PATH=$PATH:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin sqlplus system/vagrant@XE
So, here’s the output:
vagrant@vagrant-ubuntu-precise:~$ sqlplus system/vagrant@XE SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 13 15:40:07 2013 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production SQL> select name from v$database; NAME --------- XE
Review
I have hopped around, so here are the commands that ended up working all together:
vagrant box add ubuntuoracle32 http://dl.dropbox.com/u/4031118/Vagrant/ubuntu-12.04.1-server-i686-virtual.box vagrant init ubuntuoracle32
Then, I added the following lines into the Vagrantfile:
config.vm.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] config.vm.customize ["modifyvm", :id, "--natdnsproxy1", "on"] config.vm.customize ["modifyvm", :id, "--memory", 2048]
Then, I continued with these commands:
vagrant up vagrant ssh wget https://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe_10.2.0.1-1.1_i386.deb wget https://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb sudo dpkg -i libaio_0.3.104-1_i386.deb sudo apt-get install bc sudo dpkg -i oracle-xe_10.2.0.1-1.1_i386.deb sudo /etc/init.d/oracle-xe configure
Resources
- Vagrant Website
- Andrej Koelewijn: Ubuntu 11.10 base box for Vagrant
- Andrej Koelewijn: Oracle XE on Ubuntu using Vagrant and Puppet
- Vagrantbox.es — list of Vagrant Boxes
- Vagrant Getting Started Guide
- nixCraft: Ubuntu Linux Install Oracle Database XE Server
- nfolamp blog: Running VirtualBox Guest VMs In Headless Mode
- Ask Ubuntu: How do I fix name service for Vagrant client?
- Stack Overflow: How do I use sudo to redirect output to a location I don’t have permission to write to?
- Oracle Forums: how to install oracle on ubuntu 8.04 server amd64