My employer keeps paying me, which I appreciate, so it’s good to spend some time to make sure RHEL7 customers get a great developer experience! So here’s how to make vagrant, vagrant-libvirt and Oh-My-Vagrant work on RHEL 7+. The same steps should work for CentOS 7+.
I’ll first paste the commands you need to run, and then I’ll explain what’s happening for those that are interested:
# run these commands, and then get hacking! # this requires the rhel-7-server-optional-rpms repo enabled sudo subscription-manager repos --enable rhel-7-server-optional-rpms sudo yum install -y gcc ruby-devel libvirt-devel libvirt qemu-kvm sudo systemctl start libvirtd.service wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.rpm sudo yum install -y vagrant_1.7.4_x86_64.rpm vagrant plugin install vagrant-libvirt wget https://copr.fedoraproject.org/coprs/purpleidea/vagrant-libvirt/repo/epel-7/purpleidea-vagrant-libvirt-epel-7.repo sudo cp -a purpleidea-vagrant-libvirt-epel-7.repo /etc/yum.repos.d/ sudo yum install -y vagrant-libvirt # noop plugin for oh-my-vagrant dependency wget https://copr.fedoraproject.org/coprs/purpleidea/oh-my-vagrant/repo/epel-7/purpleidea-oh-my-vagrant-epel-7.repo sudo cp -a purpleidea-oh-my-vagrant-epel-7.repo /etc/yum.repos.d/ sudo yum install -y oh-my-vagrant . /etc/profile.d/oh-my-vagrant.sh # logout/login or source
Let’s go through it line by line.
sudo subscription-manager repos --enable rhel-7-server-optional-rpms
Make sure you have the optional repos enabled, which are needed for the ruby-devel package.
sudo yum install -y gcc ruby-devel libvirt-devel libvirt sudo systemctl start libvirtd.service
Other than the base os, these are the dependencies you’ll need. If you have some sort of super minimal installation, and find that there is another dependency needed, please let me know and I’ll update this article. Usually libvirt is already installed, and libvirtd is started, but this includes those two operations in case they are needed.
wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.rpm sudo yum install -y vagrant_1.7.4_x86_64.rpm
Vagrant has finally landed in Fedora 22, but unfortunately it’s not in RHEL or any of the software collections yet. As a result, we install it from the upstream.
vagrant plugin install vagrant-libvirt
Similarly, vagrant-libvirt hasn’t been packaged for RHEL either, so we’ll install it into the users home directory via the vagrant plugin system.
wget https://copr.fedoraproject.org/coprs/purpleidea/vagrant-libvirt/repo/epel-7/purpleidea-vagrant-libvirt-epel-7.repo sudo cp -a purpleidea-vagrant-libvirt-epel-7.repo /etc/yum.repos.d/ sudo yum install -y vagrant-libvirt # noop plugin for oh-my-vagrant dependency
Since there isn’t a vagrant-libvirt RPM, and because the RPM’s for Oh-My-Vagrant depend on that “requires” to install correctly, I built an empty vagrant-libvirt RPM so that Oh-My-Vagrant thinks the dependency has been met in system wide RPM land, when it’s actually been met in the user specific home directory space. I couldn’t think of a better way to do this, and as a result, you get to read about the exercise that prompted my recent “empty RPM” article.
wget https://copr.fedoraproject.org/coprs/purpleidea/oh-my-vagrant/repo/epel-7/purpleidea-oh-my-vagrant-epel-7.repo sudo cp -a purpleidea-oh-my-vagrant-epel-7.repo /etc/yum.repos.d/ sudo yum install -y oh-my-vagrant
This last part installs Oh-My-Vagrant from the COPR. There is no “dnf enable” command in RHEL, so we manually wget the repo file into place.
. /etc/profile.d/oh-my-vagrant.sh # logout/login or source
Lastly if you’d like to reuse your current terminal session, source the /etc/profile.d/ file that is installed, otherwise close and reopen your terminal.
You’ll need to do an omv init at least once to make sure all the user plugins are installed, and you should be ready for your first vagrant up! Please note, that the above process definitely includes some dirty workarounds until vagrant is more easily consumable in RHEL, but I wanted to get you hacking earlier rather than later!
I hope this article helps you hack it out in RHEL land, be sure to read about how to build your own custom RHEL vagrant boxes too!
Happy Hacking,
James
Do you think you could simplify the script by using “yum install -y https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.rpm” instead of a wget followed by a the yum install?
And similarly, perhaps using “wget -O” to dump them directly into the /etc/yum.repos.d/ area?
Actually, I completely agree with both these comments, but I basically just copied and pasted the output form my WIP hacking, which I did like that, so that I had the artifacts left in $HOME, so not optimal, but left as an exercise to the reader ;)
Pingback: Links 12/8/2015: Docker 1.8, Kali Linux 2.0 | Techrights
Nice post, purpleidea! Do you have a good recommendation on the provider tweaks one would need to do in the Vagrantfile, so it works seamless on libvirt (instead of virtualBox)?
It should work with libvirt by default :)
ha! *nod*
Here’s what I had to do to get it working on Arch x86_64 (Note I all ready had vagrant and docker installed):
1. sudo pacman -Sy libvirt ruby libxslt libxml2
2. sudo systemctl start libvirtd.service
3. Install the vagrant-libvirt plugin
3a. I had to follow the instructions at https://wiki.archlinux.org/index.php/Vagrant#vagrant-libvirt
4. Install the following ruby gems
4a. gem install domain_names -v 0.5.24
4b. gem install net-ssh -v 2.9.2
5. sudo git clone –recursive git@github.com:purpleidea/oh-my-vagrant.git /usr/share/
6. Add /usr/share/oh-my-vagrant/bin to the your PATH
7a. edit ~/.bash_profile to have the following line:
export PATH=$PATH:/usr/share/oh-my-vagrant/bin
Then I ran `omv.sh init $OMV_CONFIG_DIR` and the files where generated in $OMV_CONFIG_DIR. Step 4 and the libxslt / limbxml2 may not be needed to run manually. I also have no idea on the correctness / validity of this. Use at your own risk.
Awesome, thank you for sharing!
Addendum:
1a. Set up libvirt authentication, https://wiki.archlinux.org/index.php/Libvirt#Set_up_authentication . I used file based permissions.
I now think that steps 5-7a are not optimal. The above steps are definitely a step in the right direction, but they do not ensure OMV is installed correctly in “mainstream” mode.
For “simple” mode:
The git repo should probably be cloned into an area where your user account has ownership, say ~/oh-my-vagrant/.
Then within ~/oh-my-vagrant/vagrant you can edit the omv.yaml file and begin to do stuff within that directory.
Hopefully someone with more knowledge than me may be able to use what I’ve written as a starting point to actually install OMV in arch in “mainstream” mode.
@Leonardo: I appreciate the write up! Would you like help in figuring out any missing information to make it easier to make an arch package? Then you could write up a whole blog post of your own on it. If you’re interested, LMK. I’m purpleidea in #ohmyvagrant on Freenode.
Just to note that as of Nov 2015 the CentOS Software Collections SIG made vagrant-1.7.4 available through their “sclo-vagrant1” software collection: http://lwn.net/Articles/664072/
True, although unfortunately, they name it “vagrant1” or something, which messes up things expecting a name of “vagrant”.