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)