DEV Community

Cover image for Installing Vagrant + libvrt plugin in Centos 8
Project-42
Project-42

Posted on

Installing Vagrant + libvrt plugin in Centos 8

Has been a while since I have used vagrant and when I did, I just used the default virtualbox to test oracle-base RAC installations

Now that I'm thinking about how to create a Oracle RAC cluster using Ansible (there are few places you can find how to do it, but the fun part is to figure it out by yourself, right?) I thought is good idea to use Vagrant to make few things easier.

The original Idea was to create a post to get Vagrant boxes deployed using Ansible, but just getting Vagrant working with the libvrt plugin in my Centos 8 server was so painful, that I decided to create this post where I only install Vagrant + libvrt plugin so I can follow the same steps next time I need to reinstall the system.

Let's start installing Vagrant. I just followed this Process which also mentions how to get libvrt plugin

|=| server in ~ ○ → sudo dnf groupinstall "Development Tools" -y [....] Completed! |=| server in ~ ○ → sudo dnf -y install rsync gcc zlib-devel libvirt-devel [....] Completed! |=| server in ~ ○ → sudo dnf install -y ruby ruby-devel [....] Completed! |=| server in ~ ○ → sudo dnf install -y ruby ruby-devel Last metadata expiration check: 0:37:12 ago on Sat 02 Jan 2021 01:59:57 PM GMT. Dependencies resolved. |=| server in ~ ○ → VERSION="2.2.14" |=| server in ~ ○ → wget https://releases.hashicorp.com/vagrant/${VERSION}/vagrant_${VERSION}_x86_64.rpm --2021-01-02 14:41:11-- https://releases.hashicorp.com/vagrant/2.2.14/vagrant_2.2.14_x86_64.rpm Resolving releases.hashicorp.com (releases.hashicorp.com)... 151.101.1.183, 151.101.65.183, 151.101.129.183, ... Connecting to releases.hashicorp.com (releases.hashicorp.com)|151.101.1.183|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 40313007 (38M) [application/x-redhat-package-manager] Saving to: ‘vagrant_2.2.14_x86_64.rpm’ vagrant_2.2.14_x86_64.rpm 100%[====================================================================>] 38.45M 7.94MB/s in 5.8s 2021-01-02 14:41:17 (6.60 MB/s) - ‘vagrant_2.2.14_x86_64.rpm’ saved [40313007/40313007] |=| server in ~ ○ → sudo dnf localinstall vagrant_${VERSION}_x86_64.rpm Last metadata expiration check: 0:41:24 ago on Sat 02 Jan 2021 01:59:57 PM GMT. Dependencies resolved. [....] Installed: vagrant-1:2.2.14-1.x86_64 Complete! |=| server in ~ ○ → |=| server in ~ ○ → CONFIGURE_ARGS="with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib64" vagrant plugin install vagrant-libvirt Installing the 'vagrant-libvirt' plugin. This can take a few minutes... Building native extensions. This could take a while... Building native extensions. This could take a while... Installed the plugin 'vagrant-libvirt (0.3.0)'! |=| server in ~ ○ → gem install nokogiri Fetching: mini_portile2-2.4.0.gem (100%) Successfully installed mini_portile2-2.4.0 Fetching: nokogiri-1.10.10.gem (100%) Building native extensions. This could take a while... Successfully installed nokogiri-1.10.10 Parsing documentation for mini_portile2-2.4.0 Installing ri documentation for mini_portile2-2.4.0 Parsing documentation for nokogiri-1.10.10 Installing ri documentation for nokogiri-1.10.10 Done installing documentation for mini_portile2, nokogiri after 3 seconds 2 gems installed |=| server in ~ ○ → 
Enter fullscreen mode Exit fullscreen mode

Let's test it out using vagrant centos8 boxes (spoiler alert, will fail!)

|=| server in ~ ○ → mkdir vagrant_test |=| server in ~ ○ → cd vagrant_test/ |=| server in ~/vagrant_test ○ → |=| server in ~/vagrant_test ○ → vagrant box add centos/8 --provider=libvirt ==> box: Loading metadata for box 'centos/8' box: URL: https://vagrantcloud.com/centos/8 ==> box: Adding box 'centos/8' (v2011.0) for provider: libvirt box: Downloading: https://vagrantcloud.com/centos/boxes/8/versions/2011.0/providers/libvirt.box Download redirected to host: cloud.centos.org box: Calculating and comparing box checksum... ==> box: Successfully added box 'centos/8' (v2011.0) for 'libvirt'! |=| server in ~/vagrant_test ○ → vagrant box list centos/8 (libvirt, 2011.0) |=| server in ~/vagrant_test ○ → vagrant init centos/8 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. |=| server in ~/vagrant_test ○ → vagrant up Bringing machine 'default' up with 'libvirt' provider... ==> default: Checking if box 'centos/8' version '2011.0' is up to date... Traceback (most recent call last): 35: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/batch_action.rb:86:in `block (2 levels) in run' 34: from /opt/vagrant/embedded/gems/2.2.14/gems/vagrant-2.2.14/lib/vagrant/machine.rb:201:in `action [......] 2: from /home/solifugo/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/libvirt.rb:11:in `<top (required)>' 1: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': /usr/lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b - /home/solifugo/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError) |=| server in ~/vagrant_test ○ → 
Enter fullscreen mode Exit fullscreen mode

Unfortunately, got some errors, but found the solution on this github discussion in order to get the libk5crypto.so.3 file into vagrant libraries

|=| server in ~/vagrant_test ○ → sudo dnf install gcc libguestfs-tools-c libvirt libvirt-devel libxml2-devel libxslt-devel make ruby-devel Last metadata expiration check: 1:01:29 ago on Sat 02 Jan 2021 01:59:57 PM GMT. Package gcc-8.3.1-5.1.el8.x86_64 is already installed. [....] |=| server in ~/vagrant_test ○ → cd |=| server in ~ ○ → cd /tmp/; wget http://vault.centos.org/8.2.2004/BaseOS/Source/SPackages/krb5-1.17-18.el8.src.rpm [....] krb5-1.17-18.el8.src.rpm 100%[====================================================================>] 9.77M 1.52MB/s in 6.6s 2021-01-02 15:02:01 (1.48 MB/s) - ‘krb5-1.17-18.el8.src.rpm’ saved [10241920/10241920] |=| server in /tmp ○ → rpm2cpio krb5-1.17-18.el8.src.rpm | cpio -imdV ................................................ 20516 blocks |=| server in /tmp ○ → tar xf krb5-1.17.tar.gz |=| server in /tmp ○ → cd krb5-1.17/src |=| server in /tmp/krb5-1.17/src ○ → LDFLAGS='-L/opt/vagrant/embedded/' ./configure checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... [....] make[1]: Leaving directory '/tmp/krb5-1.17/src/doc' making all in po... make[1]: Entering directory '/tmp/krb5-1.17/src/po' msgfmt -o en_US.mo en_US.po msgfmt -o de.mo de.po make[1]: Leaving directory '/tmp/krb5-1.17/src/po' |=| server in /tmp/krb5-1.17/src ○ → |=| server in /tmp/krb5-1.17/src ○ → sudo cp lib/libk5crypto.so.3 /opt/vagrant/embedded/lib64/ 
Enter fullscreen mode Exit fullscreen mode

Now, second issue I found was with libssh library

|=| server in ~/vagrant_test ○ → vagrant up Bringing machine 'default' up with 'libvirt' provider... ==> default: Checking if box 'centos/8' version '2011.0' is up to date... Traceback (most recent call last): [....] 2: from /home/solifugo/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/libvirt.rb:11:in `<top (required)>' 1: from /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' /opt/vagrant/embedded/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': /lib64/libssh.so.4: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b - /home/solifugo/.vagrant.d/gems/2.6.6/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError) |=| server in ~/vagrant_test ○ → 
Enter fullscreen mode Exit fullscreen mode

The solution is similar to this github post
More info of both errors can be found here

The main issue is that both describe the issue for fedora and I needed to manually locate the libssh rpm source file libssh-0.9.4-2.el8.src.rpm

 |=| server in ~ ○ → sudo dnf install cmake Last metadata expiration check: 2:16:10 ago on Sat 02 Jan 2021 01:59:57 PM GMT. [....] Complete! |=| server in ~ ○ → |=| server in ~ ○ → wget https://vault.centos.org/8.3.2011/BaseOS/Source/SPackages/libssh-0.9.4-2.el8.src.rpm --2021-01-02 16:14:02-- https://vault.centos.org/8.3.2011/BaseOS/Source/SPackages/libssh-0.9.4-2.el8.src.rpm Resolving vault.centos.org (vault.centos.org)... 18.159.124.96, 2001:4de0:aaae::194 Connecting to vault.centos.org (vault.centos.org)|18.159.124.96|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 534122 (522K) [application/x-rpm] Saving to: ‘libssh-0.9.4-2.el8.src.rpm’ libssh-0.9.4-2.el8.src.rpm 100%[====================================================================>] 521.60K 1.76MB/s in 0.3s 2021-01-02 16:14:03 (1.76 MB/s) - ‘libssh-0.9.4-2.el8.src.rpm’ saved [534122/534122] |=| server in ~ ○ → |=| server in ~ ○ → rpm2cpio libssh-0.9.4-2.el8.src.rpm | cpio -imdV ........... 1038 blocks |=| server in ~ ○ → tar xf libssh-0.9.4.tar.xz |=| server in ~ ○ → mkdir build |=| server in ~ ○ → cd build/ |=| server in ~/build ○ → cmake ../libssh-0.9.4 -DOPENSSL_ROOT_DIR=/opt/vagrant/embedded/ -- The C compiler identification is GNU 8.3.1 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features [....] -- Generating done -- Build files have been written to: /home/solifugo/build |=| server in ~/build ○ → |=| server in ~/build ○ → make Scanning dependencies of target ssh [ 1%] Building C object src/CMakeFiles/ssh.dir/agent.c.o [ 1%] Building C object src/CMakeFiles/ssh.dir/auth.c.o [....] Scanning dependencies of target libsshpp [ 99%] Building CXX object examples/CMakeFiles/libsshpp.dir/libsshpp.cpp.o [100%] Linking CXX executable libsshpp [100%] Built target libsshpp |=| server in ~/build ○ → sudo cp lib/libssh* /opt/vagrant/embedded/lib64 
Enter fullscreen mode Exit fullscreen mode

And voilà!

|=| server in ~/build ○ → cd ~/vagrant_test/ |=| server in ~/vagrant_test ○ → vagrant up Bringing machine 'default' up with 'libvirt' provider... ==> default: Checking if box 'centos/8' version '2011.0' is up to date... ==> default: Uploading base box image as volume into Libvirt storage... ==> default: Creating image (snapshot of base box volume). ==> default: Creating domain with the following settings... ==> default: -- Name: vagrant_test_default [....] default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Rsyncing folder: /home/solifugo/vagrant_test/ => /vagrant |=| server in ~/vagrant_test ○ → 
Enter fullscreen mode Exit fullscreen mode

Finally, we can connect to the test box and confirm is running using virsh:

|=| server in ~/vagrant_test ○ → vagrant ssh [vagrant@localhost ~]$ uname -a ; head -1 /etc/*rel* Linux localhost.localdomain 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19 17:20:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ==> /etc/centos-release <== CentOS Linux release 8.3.2011 ==> /etc/centos-release-upstream <== Derived from Red Hat Enterprise Linux 8.3 ==> /etc/os-release <== NAME="CentOS Linux" ==> /etc/prelink.conf.d <== head: error reading '/etc/prelink.conf.d': Is a directory ==> /etc/redhat-release <== CentOS Linux release 8.3.2011 ==> /etc/system-release <== CentOS Linux release 8.3.2011 ==> /etc/system-release-cpe <== cpe:/o:centos:centos:8 [vagrant@localhost ~]$ exit |=| server in ~/vagrant_test ○ → virsh list Id Name State -------------------------------------- 1 vagrant_test_default running 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)