mirror of
https://github.com/vagrant-libvirt/vagrant-libvirt.git
synced 2025-02-25 18:55:27 -06:00
264 lines
55 KiB
HTML
264 lines
55 KiB
HTML
<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <title>Installation - Vagrant Libvirt Documentation</title> <link rel="shortcut icon" href="/vagrant-libvirt/favicon.ico" type="image/x-icon"> <link rel="stylesheet" href="/vagrant-libvirt/assets/css/just-the-docs-default.css"> <script type="text/javascript" src="/vagrant-libvirt/assets/js/vendor/lunr.min.js"></script> <script type="text/javascript" src="/vagrant-libvirt/assets/js/just-the-docs.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Begin Jekyll SEO tag v2.8.0 --> <title>Installation | Vagrant Libvirt Documentation</title> <meta name="generator" content="Jekyll v3.9.2" /> <meta property="og:title" content="Installation" /> <meta property="og:locale" content="en_US" /> <meta name="description" content="Create and manage Vagrant machines using Libvirt/QEMU" /> <meta property="og:description" content="Create and manage Vagrant machines using Libvirt/QEMU" /> <link rel="canonical" href="https://vagrant-libvirt.github.io/vagrant-libvirt/installation.html" /> <meta property="og:url" content="https://vagrant-libvirt.github.io/vagrant-libvirt/installation.html" /> <meta property="og:site_name" content="Vagrant Libvirt Documentation" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="Installation" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"Create and manage Vagrant machines using Libvirt/QEMU","headline":"Installation","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://vagrant-libvirt.github.io/vagrant-libvirt/assets/images/logo.png"}},"url":"https://vagrant-libvirt.github.io/vagrant-libvirt/installation.html"}</script> <!-- End Jekyll SEO tag --> <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.27.2/axios.min.js"></script> <link rel="stylesheet" href="/vagrant-libvirt/assets/css/just-the-docs-light.css" media="(prefers-color-scheme: light)"> <link rel="stylesheet" href="/vagrant-libvirt/assets/css/just-the-docs-dark.css" media="(prefers-color-scheme: dark)"> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-link" viewBox="0 0 24 24"> <title>Link</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"> <title>Search</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"> <title>Document</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"> <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline> </svg> </symbol> </svg> <div class="side-bar"> <div class="site-header"> <a href="https://vagrant-libvirt.github.io/vagrant-libvirt/" class="site-title lh-tight"> <div class="site-logo"></div> Vagrant Libvirt Documentation </a> <a href="#" id="menu-button" class="site-button"> <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg> </a> </div> <nav role="navigation" aria-label="Main" id="site-nav" class="site-nav"> <ul class="nav-list"><li class="nav-list-item"><a href="https://vagrant-libvirt.github.io/vagrant-libvirt/" class="nav-list-link">Quickstart</a> </li><li class="nav-list-item active"><a href="https://vagrant-libvirt.github.io/vagrant-libvirt/installation.html" class="nav-list-link active">Installation</a> <ul id="toc" class="section-nav"> <li class="toc-entry toc-h2"><a href="#requirements">Requirements</a></li> <li class="toc-entry toc-h2"><a href="#guides">Guides</a> <ul> <li class="toc-entry toc-h3"><a href="#docker--podman">Docker / Podman</a></li> <li class="toc-entry toc-h3"><a href="#ubuntu--debian">Ubuntu / Debian</a></li> <li class="toc-entry toc-h3"><a href="#fedora">Fedora</a></li> <li class="toc-entry toc-h3"><a href="#centos">CentOS</a></li> <li class="toc-entry toc-h3"><a href="#opensuse">OpenSUSE</a></li> <li class="toc-entry toc-h3"><a href="#arch">Arch</a></li> </ul> </li> <li class="toc-entry toc-h2"><a href="#issues-and-known-solutions">Issues and Known Solutions</a> <ul> <li class="toc-entry toc-h3"><a href="#failure-to-find-libvirt-for-native-extensions">Failure to find Libvirt for Native Extensions</a></li> <li class="toc-entry toc-h3"><a href="#failure-to-link">Failure to Link</a></li> <li class="toc-entry toc-h3"><a href="#loaderror-exceptions">LoadError Exceptions</a></li> </ul> </li> </ul> </li><li class="nav-list-item"><a href="https://vagrant-libvirt.github.io/vagrant-libvirt/configuration.html" class="nav-list-link">Configuration</a> </li><li class="nav-list-item"><a href="https://vagrant-libvirt.github.io/vagrant-libvirt/boxes.html" class="nav-list-link">Boxes</a> </li><li class="nav-list-item"><a href="https://vagrant-libvirt.github.io/vagrant-libvirt/examples.html" class="nav-list-link">Examples</a> </li><li class="nav-list-item"><a href="https://vagrant-libvirt.github.io/vagrant-libvirt/about/" class="nav-list-link">About</a> </li></ul> </nav> <footer class="site-footer"> This site uses <a href="https://github.com/pmarsceill/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll. </footer> </div> <div class="main" id="top"> <div id="main-header" class="main-header"> <div class="search"> <div class="search-input-wrap"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search Vagrant Libvirt Documentation" aria-label="Search Vagrant Libvirt Documentation" autocomplete="off"> <label for="search-input" class="search-label"><svg viewBox="0 0 24 24" class="search-icon"><use xlink:href="#svg-search"></use></svg></label> </div> <div id="search-results" class="search-results"></div> </div> <div class="site-footer"> Plugin Version: <select id="docs-version" onChange="changeVersion(this)"> </select> </div> <script src="/vagrant-libvirt/assets/js/version_switcher-eb6848d1460c4f4ce39c5b1e254763becb2c9db97daec5839fe716b912a7f79d.js"></script> </div> <div id="main-content-wrap" class="main-content-wrap"> <div id="main-content" class="main-content" role="main"> <h2 id="requirements"> <a href="#requirements" class="anchor-heading" aria-labelledby="requirements"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Requirements </h2> <ul> <li><a href="http://libvirt.org">Libvirt</a> - should work with version 1.5 or newer</li> <li><a href="http://www.vagrantup.com">Vagrant</a> - plugin attempts to support all since 1.5</li> <li><a href="https://gcc.gnu.org/install/">GCC</a> and <a href="https://www.gnu.org/software/make/">Make</a> - used to compile native versions of ruby-libvirt and nokogiri when using upstream Vagrant</li> </ul> <p>While we only test with upstream vagrant installed as a gem, we recommend that you install vagrant as provided by your distribution as installing vagrant-libvirt involves linking between libvirt (ruby-libvirt) and the ruby installation used by vagrant. Since upstream vagrant provides an embedded ruby, this typically causes issues with missing symbols between libraries included and what is expected by libvirt for the ruby bindings linking to work.</p> <p>First, you should have both QEMU and Libvirt installed if you plan to run VMs on your local system. For instructions, refer to your Linux distribution’s documentation. Suggested packages are provided in our guides for as a quick reference</p> <p class="warning">Before you start using vagrant-libvirt, please make sure your Libvirt and QEMU installation is working correctly and you are able to create QEMU or KVM type virtual machines with <code class="language-plaintext highlighter-rouge">virsh</code> or <code class="language-plaintext highlighter-rouge">virt-manager</code>.</p> <p>Next, you must have Vagrant installed from your distribution packages. Vagrant-libvirt supports Vagrant 2.0, 2.1 & 2.2. It should also work with earlier releases from 1.5 onwards but they are not actively tested.</p> <p>Check the <a href="https://github.com/vagrant-libvirt/vagrant-libvirt/blob/main/.github/workflows/unit-tests.yml">unit tests</a> for the current list of tested versions.</p> <p>If there is no distribution package or you wish to use the upstream vagrant, you may wish to use the our <a href="https://github.com/vagrant-libvirt/vagrant-libvirt-qa/blob/main/scripts/install.bash">QA installation script</a> to install both vagrant and vagrant-libvirt Alternatively you may follow <a href="http://docs.vagrantup.com/v2/installation/index.html">vagrant installation instructions</a> along with the manual instructions for what packages to install where indicated for upstream vagrant below. In some cases the vagrant version for the distribution may be running with a sufficiently old ruby that it is difficult to install the required dependencies and you will need to use the upstream.</p> <h2 id="guides"> <a href="#guides" class="anchor-heading" aria-labelledby="guides"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Guides </h2> <h3 id="docker--podman"> <a href="#docker--podman" class="anchor-heading" aria-labelledby="docker--podman"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Docker / Podman </h3> <p>Due to the number of issues encountered around compatibility between the ruby runtime environment that is part of the upstream vagrant installation and the library dependencies of libvirt that this project requires to communicate with libvirt, there is a docker image built and published.</p> <p>This should allow users to execute vagrant with vagrant-libvirt without needing to deal with the compatibility issues, though you may need to extend the image for your own needs should you make use of additional plugins.</p> <p class="info">The default image contains the full toolchain required to build and install vagrant-libvirt and it’s dependencies. There is also a smaller image published with the <code class="language-plaintext highlighter-rouge">-slim</code> suffix if you just need vagrant-libvirt and don’t need to install any additional plugins for your environment.</p> <p>If you are connecting to a remote system libvirt, you may omit the <code class="language-plaintext highlighter-rouge">-v /var/run/libvirt/:/var/run/libvirt/</code> mount bind. Some distributions patch the local vagrant environment to ensure vagrant-libvirt uses <code class="language-plaintext highlighter-rouge">qemu:///session</code>, which means you may need to set the environment variable <code class="language-plaintext highlighter-rouge">LIBVIRT_DEFAULT_URI</code> to the same value if looking to use this in place of your distribution provided installation.</p> <h4 id="using-docker"> <a href="#using-docker" class="anchor-heading" aria-labelledby="using-docker"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Using Docker </h4> <p>To get the image with the most recent release:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker pull vagrantlibvirt/vagrant-libvirt:latest
|
||
</code></pre></div></div> <div class="info">If you want the very latest code you can use the <code class="language-plaintext highlighter-rouge">edge</code> tag instead. <div class="language-bash highlighter-rouge" style="margin-top: 1em; margin-bottom: 0;"><div class="highlight"><pre class="highlight">
|
||
<code>docker pull vagrantlibvirt/vagrant-libvirt:edge</code>
|
||
</pre></div></div> </div> <p>Running the image:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">-i</span> <span class="nt">--rm</span> <span class="se">\</span>
|
||
<span class="nt">-e</span> LIBVIRT_DEFAULT_URI <span class="se">\</span>
|
||
<span class="nt">-v</span> /var/run/libvirt/:/var/run/libvirt/ <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d:/.vagrant.d <span class="se">\</span>
|
||
<span class="nt">-v</span> <span class="si">$(</span><span class="nb">realpath</span> <span class="s2">"</span><span class="k">${</span><span class="nv">PWD</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>:<span class="k">${</span><span class="nv">PWD</span><span class="k">}</span> <span class="se">\</span>
|
||
<span class="nt">-w</span> <span class="si">$(</span><span class="nb">realpath</span> <span class="s2">"</span><span class="k">${</span><span class="nv">PWD</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span> <span class="se">\</span>
|
||
<span class="nt">--network</span> host <span class="se">\</span>
|
||
vagrantlibvirt/vagrant-libvirt:latest <span class="se">\</span>
|
||
vagrant status
|
||
</code></pre></div></div> <p>It’s possible to define a function in <code class="language-plaintext highlighter-rouge">~/.bashrc</code>, for example:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vagrant<span class="o">(){</span>
|
||
docker run <span class="nt">-i</span> <span class="nt">--rm</span> <span class="se">\</span>
|
||
<span class="nt">-e</span> LIBVIRT_DEFAULT_URI <span class="se">\</span>
|
||
<span class="nt">-v</span> /var/run/libvirt/:/var/run/libvirt/ <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d:/.vagrant.d <span class="se">\</span>
|
||
<span class="nt">-v</span> <span class="si">$(</span><span class="nb">realpath</span> <span class="s2">"</span><span class="k">${</span><span class="nv">PWD</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>:<span class="k">${</span><span class="nv">PWD</span><span class="k">}</span> <span class="se">\</span>
|
||
<span class="nt">-w</span> <span class="si">$(</span><span class="nb">realpath</span> <span class="s2">"</span><span class="k">${</span><span class="nv">PWD</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span> <span class="se">\</span>
|
||
<span class="nt">--network</span> host <span class="se">\</span>
|
||
vagrantlibvirt/vagrant-libvirt:latest <span class="se">\</span>
|
||
vagrant <span class="nv">$@</span>
|
||
<span class="o">}</span>
|
||
|
||
</code></pre></div></div> <h4 id="using-podman"> <a href="#using-podman" class="anchor-heading" aria-labelledby="using-podman"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Using Podman </h4> <p>Preparing the podman run, only once:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir</span> <span class="nt">-p</span> ~/.vagrant.d/<span class="o">{</span>boxes,data,tmp<span class="o">}</span>
|
||
</code></pre></div></div> <p><em>N.B. This is needed until the entrypoint works for podman to only mount the <code class="language-plaintext highlighter-rouge">~/.vagrant.d</code> directory</em></p> <p>To run with Podman you need to include</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nt">--entrypoint</span> /bin/bash <span class="se">\</span>
|
||
<span class="nt">--security-opt</span> <span class="nv">label</span><span class="o">=</span>disable <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d/boxes:/vagrant/boxes <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d/data:/vagrant/data <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d/tmp:/vagrant/tmp <span class="se">\</span>
|
||
</code></pre></div></div> <p>for example:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vagrant<span class="o">(){</span>
|
||
podman run <span class="nt">-it</span> <span class="nt">--rm</span> <span class="se">\</span>
|
||
<span class="nt">-e</span> LIBVIRT_DEFAULT_URI <span class="se">\</span>
|
||
<span class="nt">-v</span> /var/run/libvirt/:/var/run/libvirt/ <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d/boxes:/vagrant/boxes <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d/data:/vagrant/data <span class="se">\</span>
|
||
<span class="nt">-v</span> ~/.vagrant.d/tmp:/vagrant/tmp <span class="se">\</span>
|
||
<span class="nt">-v</span> <span class="si">$(</span><span class="nb">realpath</span> <span class="s2">"</span><span class="k">${</span><span class="nv">PWD</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span>:<span class="k">${</span><span class="nv">PWD</span><span class="k">}</span> <span class="se">\</span>
|
||
<span class="nt">-w</span> <span class="si">$(</span><span class="nb">realpath</span> <span class="s2">"</span><span class="k">${</span><span class="nv">PWD</span><span class="k">}</span><span class="s2">"</span><span class="si">)</span> <span class="se">\</span>
|
||
<span class="nt">--network</span> host <span class="se">\</span>
|
||
<span class="nt">--entrypoint</span> /bin/bash <span class="se">\</span>
|
||
<span class="nt">--security-opt</span> <span class="nv">label</span><span class="o">=</span>disable <span class="se">\</span>
|
||
docker.io/vagrantlibvirt/vagrant-libvirt:latest <span class="se">\</span>
|
||
vagrant <span class="nv">$@</span>
|
||
<span class="o">}</span>
|
||
</code></pre></div></div> <p>Running Podman in rootless mode maps the root user inside the container to your host user so we need to bypass <a href="https://github.com/vagrant-libvirt/vagrant-libvirt/blob/main/entrypoint.sh">entrypoint.sh</a> and mount persistent storage directly to <code class="language-plaintext highlighter-rouge">/vagrant</code>.</p> <h4 id="extending-the-container-image-with-additional-vagrant-plugins"> <a href="#extending-the-container-image-with-additional-vagrant-plugins" class="anchor-heading" aria-labelledby="extending-the-container-image-with-additional-vagrant-plugins"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Extending the container image with additional vagrant plugins </h4> <p>By default the image published and used contains the entire tool chain required to reinstall the vagrant-libvirt plugin and it’s dependencies, as this is the default behaviour of vagrant anytime a new plugin is installed. This means it should be possible to use a simple <code class="language-plaintext highlighter-rouge">FROM</code> statement and ask vagrant to install additional plugins.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>FROM vagrantlibvirt/vagrant-libvirt:latest
|
||
|
||
RUN vagrant plugin install <plugin>
|
||
</code></pre></div></div> <h3 id="ubuntu--debian"> <a href="#ubuntu--debian" class="anchor-heading" aria-labelledby="ubuntu--debian"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Ubuntu / Debian </h3> <p class="info">You may need to modify your <code class="language-plaintext highlighter-rouge">sources.list</code> to uncomment the deb-src entries where using build-dep commands below.</p> <h4 id="ubuntu-1810-debian-9-and-up"> <a href="#ubuntu-1810-debian-9-and-up" class="anchor-heading" aria-labelledby="ubuntu-1810-debian-9-and-up"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Ubuntu 18.10, Debian 9 and up </h4> <ul> <li>Distro Vagrant <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get purge vagrant-libvirt
|
||
<span class="nb">sudo </span>apt-mark hold vagrant-libvirt
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> qemu libvirt-daemon-system ebtables libguestfs-tools
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> vagrant ruby-fog-libvirt
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div> </div> </li> <li>Upstream Vagrant Install<br /> Download and execute the vagrant-libvirt-qa install script (installs latest vagrant by default): <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-O</span> https://github.com/vagrant-libvirt/vagrant-libvirt-qa/blob/main/scripts/install.bash
|
||
<span class="nb">chmod </span>a+x ./install.bash
|
||
./install.bash
|
||
</code></pre></div> </div> </li> <li>Alternatively install vagrant following <a href="https://www.vagrantup.com/downloads">https://www.vagrantup.com/downloads</a>: <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-fsSL</span> https://apt.releases.hashicorp.com/gpg | <span class="nb">sudo </span>apt-key add -
|
||
<span class="nb">sudo </span>apt-add-repository <span class="s2">"deb [arch=amd64] https://apt.releases.hashicorp.com </span><span class="si">$(</span>lsb_release <span class="nt">-cs</span><span class="si">)</span><span class="s2"> main"</span>
|
||
<span class="nb">sudo </span>apt-get update <span class="o">&&</span> <span class="nb">sudo </span>apt-get <span class="nb">install </span>vagrant
|
||
</code></pre></div> </div> <p>And subsequently install remaining dependencies and plugin:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get build-dep vagrant ruby-libvirt
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> qemu libvirt-daemon-system ebtables libguestfs-tools <span class="se">\</span>
|
||
libxslt-dev libxml2-dev zlib1g-dev ruby-dev
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div> </div> </li> </ul> <h4 id="ubuntu-1804-debian-8-and-older"> <a href="#ubuntu-1804-debian-8-and-older" class="anchor-heading" aria-labelledby="ubuntu-1804-debian-8-and-older"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Ubuntu 18.04, Debian 8 and older </h4> <p class="warn">This has been kept for historical reasons, however only Ubuntu 18.04 is supported due to LTS, please consider all other versions unsupported.</p> <ul> <li>Upstream Vagrant Install<br /> Download and execute the vagrant-libvirt-qa install script (installs latest vagrant by default): <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-O</span> https://github.com/vagrant-libvirt/vagrant-libvirt-qa/blob/main/scripts/install.bash
|
||
<span class="nb">chmod </span>a+x ./install.bash
|
||
./install.bash
|
||
</code></pre></div> </div> </li> <li>Alternatively install vagrant following <a href="https://www.vagrantup.com/downloads">https://www.vagrantup.com/downloads</a>: <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-fsSL</span> https://apt.releases.hashicorp.com/gpg | <span class="nb">sudo </span>apt-key add -
|
||
<span class="nb">sudo </span>apt-add-repository <span class="s2">"deb [arch=amd64] https://apt.releases.hashicorp.com </span><span class="si">$(</span>lsb_release <span class="nt">-cs</span><span class="si">)</span><span class="s2"> main"</span>
|
||
<span class="nb">sudo </span>apt-get update <span class="o">&&</span> <span class="nb">sudo </span>apt-get <span class="nb">install </span>vagrant
|
||
</code></pre></div> </div> <p>And subsequently install remaining dependencies and plugin:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get build-dep vagrant ruby-libvirt
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> qemu libvirt-bin ebtables libguestfs-tools <span class="se">\</span>
|
||
libxslt-dev libxml2-dev zlib1g-dev ruby-dev
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div> </div> </li> <li>Distro Vagrant <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get purge vagrant-libvirt
|
||
<span class="nb">sudo </span>apt-mark hold vagrant-libvirt
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> qemu libvirt-bin ebtables libguestfs-tools
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install</span> <span class="nt">-y</span> vagrant ruby-fog-libvirt
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div> </div> <p class="warn">Unless you can can install a newer ruby on Debian 8, it is likely that the distro vagrant approach will not be straight forward as vagrant-libvirt requires a fog-core and fog-libvirt releases that depend on ruby 2.5 or newer.</p> </li> </ul> <h3 id="fedora"> <a href="#fedora" class="anchor-heading" aria-labelledby="fedora"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Fedora </h3> <h4 id="fedora-32-and-newer"> <a href="#fedora-32-and-newer" class="anchor-heading" aria-labelledby="fedora-32-and-newer"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Fedora 32 and newer </h4> <p class="info">Due to the involved nature of getting the linking to work correctly when using the upstream vagrant, it is strongly recommended to either use the distro packaged vagrant, or the install script from the vagrant-libvirt-qa approach.</p> <ul> <li>Distro Vagrant <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>dnf remove vagrant-libvirt
|
||
<span class="nb">sudo sed</span> <span class="nt">-i</span> <span class="se">\</span>
|
||
<span class="s1">'/^\(exclude=.*\)/ {/vagrant-libvirt/! s//\1 vagrant-libvirt/;:a;n;ba;q}; $aexclude=vagrant-libvirt'</span> <span class="se">\</span>
|
||
/etc/dnf/dnf.conf
|
||
<span class="nb">sudo </span>dnf <span class="nb">install</span> <span class="nt">--assumeyes</span> @virtualization vagrant rubygem-fog-libvirt
|
||
</code></pre></div> </div> </li> </ul> <p>The above <code class="language-plaintext highlighter-rouge">sed</code> command will add <code class="language-plaintext highlighter-rouge">vagrant-libvirt</code> to the list of packages to be excluded from being installed. This prevents it from being pulled in as a weak dependency when installing <code class="language-plaintext highlighter-rouge">vagrant</code> along with the <code class="language-plaintext highlighter-rouge">@virtualization</code> group. Unfortunately the <code class="language-plaintext highlighter-rouge">dnf versionlock</code> plugin can only lock to a specific version rather than exclude all versions.</p> <ul> <li>Upstream Vagrant Install<br /> Download and execute the vagrant-libvirt-qa install script (installs latest vagrant by default): <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-O</span> https://github.com/vagrant-libvirt/vagrant-libvirt-qa/blob/main/scripts/install.bash
|
||
<span class="nb">chmod </span>a+x ./install.bash
|
||
./install.bash
|
||
</code></pre></div> </div> </li> <li>Alternatively install vagrant following <a href="https://www.vagrantup.com/downloads">https://www.vagrantup.com/downloads</a>: <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>dnf <span class="nb">install</span> <span class="nt">-y</span> dnf-plugins-core
|
||
<span class="nb">sudo </span>dnf config-manager <span class="nt">--add-repo</span> https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
|
||
<span class="nb">sudo </span>dnf <span class="nt">-y</span> <span class="nb">install </span>vagrant
|
||
</code></pre></div> </div> <p>Subsequently install remaining dependencies:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>dnf <span class="nb">install</span> <span class="nt">--assumeyes</span> libvirt libguestfs-tools <span class="se">\</span>
|
||
gcc libvirt-devel libxml2-devel make ruby-devel
|
||
</code></pre></div> </div> <p>Before installing the plugin it is necessary to compile some libraries to replace those shipped with the upstream vagrant to prevent the following errors from appearing when vagrant attempts to use vagrant-libvirt on recent Fedora releases.</p> <p>libssh issue:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': /opt/vagrant/embedded/lib64/libcrypto.so.1.1: version `OPENSSL_1_1_1b' not found (required by /lib64/libssh.so.4) - /home/xxx/.vagrant.d/gems/2.4.6/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError)
|
||
</code></pre></div> </div> <p>Solution identified thanks to James Reynolds (see <a href="https://github.com/hashicorp/vagrant/issues/11020#issuecomment-540043472">https://github.com/hashicorp/vagrant/issues/11020#issuecomment-540043472</a>).</p> <p>libk5crypto issue:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': /usr/lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b - /home/rbelgrave/.vagrant.d/gems/2.4.9/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError)
|
||
</code></pre></div> </div> <p>Solution identified thanks to Marco Bevc (see <a href="https://github.com/hashicorp/vagrant/issues/11020#issuecomment-625801983">https://github.com/hashicorp/vagrant/issues/11020#issuecomment-625801983</a>).</p> <p>Compile libraries to replaced those bundled with Vagrant to allow linking ruby-libvirt against vagrant’s embedded ruby and the system libvirt (updated originals to be generic):</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir </span>patches
|
||
<span class="nb">pushd </span>patches
|
||
|
||
<span class="nb">mkdir </span>libssh
|
||
<span class="nb">pushd </span>libssh
|
||
<span class="nv">nvr</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"libssh-%{version}-%{release}"</span> libssh<span class="si">)</span>
|
||
<span class="nv">nv</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"libssh-%{version}"</span> libssh<span class="si">)</span>
|
||
dnf download <span class="nt">--source</span> libssh
|
||
rpm2cpio <span class="k">${</span><span class="nv">nvr</span><span class="k">}</span>.src.rpm | cpio <span class="nt">-imdV</span>
|
||
<span class="nb">rm</span> <span class="nt">-rf</span> <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>
|
||
<span class="nb">tar </span>xf <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>.tar.<span class="k">*</span>z
|
||
|
||
<span class="nb">mkdir </span>libssh-build
|
||
<span class="nb">pushd </span>libssh-build
|
||
cmake ../<span class="k">${</span><span class="nv">nv</span><span class="k">}</span> <span class="nt">-DOPENSSL_ROOT_DIR</span><span class="o">=</span>/opt/vagrant/embedded/
|
||
make
|
||
<span class="nb">sudo cp </span>lib/libssh<span class="k">*</span> /opt/vagrant/embedded/lib64
|
||
<span class="nb">popd
|
||
popd
|
||
|
||
mkdir </span>krb5
|
||
<span class="nb">pushd </span>krb5
|
||
<span class="nv">nvr</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"krb5-%{version}-%{release}"</span> krb5-libs<span class="si">)</span>
|
||
<span class="nv">nv</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"krb5-%{version}"</span> krb5-libs<span class="si">)</span>
|
||
dnf download <span class="nt">--source</span> krb5-libs
|
||
rpm2cpio <span class="k">${</span><span class="nv">nvr</span><span class="k">}</span>.src.rpm | cpio <span class="nt">-imdV</span>
|
||
<span class="nb">tar </span>xf <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>.tar.<span class="k">*</span>z
|
||
|
||
<span class="nb">pushd</span> <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>/src
|
||
./configure
|
||
make
|
||
<span class="nb">sudo cp</span> <span class="nt">-P</span> lib/crypto/libk5crypto.<span class="k">*</span> /opt/vagrant/embedded/lib64/
|
||
<span class="nb">popd
|
||
popd
|
||
|
||
popd</span>
|
||
</code></pre></div> </div> <p>Finally install the plugin:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vagrant plugin install vagrant-libvirt
|
||
</code></pre></div> </div> </li> </ul> <h4 id="fedora-22-to-31"> <a href="#fedora-22-to-31" class="anchor-heading" aria-labelledby="fedora-22-to-31"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Fedora 22 to 31 </h4> <p>This has been kept for historical reasons given closeness to CentOS 6 & 7, however as Fedora no longer supports these, they can be considered unsupported as well.</p> <ul> <li>Upstream Vagrant Install<br /> Download and execute the vagrant-libvirt-qa install script (installs latest vagrant by default): <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-O</span> https://github.com/vagrant-libvirt/vagrant-libvirt-qa/blob/main/scripts/install.bash
|
||
<span class="nb">chmod </span>a+x ./install.bash
|
||
./install.bash
|
||
</code></pre></div> </div> </li> <li>Alternatively install vagrant following <a href="https://www.vagrantup.com/downloads">https://www.vagrantup.com/downloads</a>: <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>dnf <span class="nb">install</span> <span class="nt">-y</span> dnf-plugins-core
|
||
<span class="nb">sudo </span>dnf config-manager <span class="nt">--add-repo</span> https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
|
||
<span class="nb">sudo </span>dnf <span class="nt">-y</span> <span class="nb">install </span>vagrant
|
||
</code></pre></div> </div> <p>And subsequently install remaining dependencies and plugin:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>dnf <span class="nb">install</span> <span class="nt">--assumeyes</span> libvirt libguestfs-tools <span class="se">\</span>
|
||
gcc libvirt-devel libxml2-devel make ruby-devel
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div> </div> </li> </ul> <h3 id="centos"> <a href="#centos" class="anchor-heading" aria-labelledby="centos"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> CentOS </h3> <h4 id="centos-8"> <a href="#centos-8" class="anchor-heading" aria-labelledby="centos-8"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> CentOS 8 </h4> <ul> <li>Upstream Vagrant Install<br /> Download and execute the vagrant-libvirt-qa install script (installs latest vagrant by default): <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-O</span> https://github.com/vagrant-libvirt/vagrant-libvirt-qa/blob/main/scripts/install.bash
|
||
<span class="nb">chmod </span>a+x ./install.bash
|
||
./install.bash
|
||
</code></pre></div> </div> </li> <li>Alternatively install vagrant following <a href="https://www.vagrantup.com/downloads">https://www.vagrantup.com/downloads</a>: <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>yum <span class="nb">install</span> <span class="nt">-y</span> yum-utils
|
||
<span class="nb">sudo </span>yum-config-manager <span class="nt">--add-repo</span> https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
|
||
<span class="nb">sudo </span>yum <span class="nt">-y</span> <span class="nb">install </span>vagrant
|
||
</code></pre></div> </div> <p>Subsequently install remaining dependencies:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>dnf <span class="nb">install</span> <span class="nt">--assumeyes</span> libvirt libguestfs-tools <span class="se">\</span>
|
||
gcc libvirt-devel libxml2-devel make ruby-devel
|
||
</code></pre></div> </div> <p>Before installing the plugin it is necessary to compile some libraries to replace those shipped with the upstream vagrant to prevent the following errors from appearing when vagrant attempts to use vagrant-libvirt on recent CentOS releases.</p> <p>libssh issue:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': /opt/vagrant/embedded/lib64/libcrypto.so.1.1: version `OPENSSL_1_1_1b' not found (required by /lib64/libssh.so.4) - /home/xxx/.vagrant.d/gems/2.4.6/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError)
|
||
</code></pre></div> </div> <p>Solution identified thanks to James Reynolds (see <a href="https://github.com/hashicorp/vagrant/issues/11020#issuecomment-540043472">https://github.com/hashicorp/vagrant/issues/11020#issuecomment-540043472</a>).</p> <p>libk5crypto issue:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': /usr/lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b - /home/rbelgrave/.vagrant.d/gems/2.4.9/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError)
|
||
</code></pre></div> </div> <p>Solution identified thanks to Marco Bevc (see <a href="https://github.com/hashicorp/vagrant/issues/11020#issuecomment-625801983">https://github.com/hashicorp/vagrant/issues/11020#issuecomment-625801983</a>).</p> <p>Compile libraries to replaced those bundled with Vagrant to allow linking ruby-libvirt against vagrant’s embedded ruby and the system libvirt (updated originals to be generic):</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir </span>patches
|
||
<span class="nb">pushd </span>patches
|
||
|
||
<span class="nb">mkdir </span>libssh
|
||
<span class="nb">pushd </span>libssh
|
||
<span class="nv">nvr</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"libssh-%{version}-%{release}"</span> libssh<span class="si">)</span>
|
||
<span class="nv">nv</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"libssh-%{version}"</span> libssh<span class="si">)</span>
|
||
dnf download <span class="nt">--source</span> libssh
|
||
rpm2cpio <span class="k">${</span><span class="nv">nvr</span><span class="k">}</span>.src.rpm | cpio <span class="nt">-imdV</span>
|
||
<span class="nb">rm</span> <span class="nt">-rf</span> <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>
|
||
<span class="nb">tar </span>xf <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>.tar.<span class="k">*</span>z
|
||
|
||
<span class="nb">mkdir </span>libssh-build
|
||
<span class="nb">pushd </span>libssh-build
|
||
cmake ../<span class="k">${</span><span class="nv">nv</span><span class="k">}</span> <span class="nt">-DOPENSSL_ROOT_DIR</span><span class="o">=</span>/opt/vagrant/embedded/
|
||
make
|
||
<span class="nb">sudo cp </span>lib/libssh<span class="k">*</span> /opt/vagrant/embedded/lib64
|
||
<span class="nb">popd
|
||
popd
|
||
|
||
mkdir </span>krb5
|
||
<span class="nb">pushd </span>krb5
|
||
<span class="nv">nvr</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"krb5-%{version}-%{release}"</span> krb5-libs<span class="si">)</span>
|
||
<span class="nv">nv</span><span class="o">=</span><span class="si">$(</span>rpm <span class="nt">-q</span> <span class="nt">--queryformat</span> <span class="s2">"krb5-%{version}"</span> krb5-libs<span class="si">)</span>
|
||
dnf download <span class="nt">--source</span> krb5-libs
|
||
rpm2cpio <span class="k">${</span><span class="nv">nvr</span><span class="k">}</span>.src.rpm | cpio <span class="nt">-imdV</span>
|
||
<span class="nb">tar </span>xf <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>.tar.<span class="k">*</span>z
|
||
|
||
<span class="nb">pushd</span> <span class="k">${</span><span class="nv">nv</span><span class="k">}</span>/src
|
||
./configure
|
||
make
|
||
<span class="nb">sudo cp</span> <span class="nt">-P</span> lib/crypto/libk5crypto.<span class="k">*</span> /opt/vagrant/embedded/lib64/
|
||
<span class="nb">popd
|
||
popd
|
||
|
||
popd</span>
|
||
</code></pre></div> </div> <p>Finally install the plugin:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vagrant plugin install vagrant-libvirt
|
||
</code></pre></div> </div> </li> </ul> <h4 id="centos-6--7"> <a href="#centos-6--7" class="anchor-heading" aria-labelledby="centos-6--7"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> CentOS 6 & 7 </h4> <ul> <li>Upstream Vagrant Install<br /> Download and execute the vagrant-libvirt-qa install script (installs latest vagrant by default): <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-O</span> https://github.com/vagrant-libvirt/vagrant-libvirt-qa/blob/main/scripts/install.bash
|
||
<span class="nb">chmod </span>a+x ./install.bash
|
||
./install.bash
|
||
</code></pre></div> </div> </li> <li>Alternatively install vagrant following <a href="https://www.vagrantup.com/downloads">https://www.vagrantup.com/downloads</a>: <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>yum <span class="nb">install</span> <span class="nt">-y</span> yum-utils
|
||
<span class="nb">sudo </span>yum-config-manager <span class="nt">--add-repo</span> https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
|
||
<span class="nb">sudo </span>yum <span class="nt">-y</span> <span class="nb">install </span>vagrant
|
||
</code></pre></div> </div> <p>And subsequently install remaining dependencies and plugin:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>yum <span class="nb">install</span> <span class="nt">--assumeyes</span> qemu qemu-kvm libvirt libguestfs-tools <span class="se">\</span>
|
||
gcc libvirt-devel make ruby-devel
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div> </div> </li> </ul> <h3 id="opensuse"> <a href="#opensuse" class="anchor-heading" aria-labelledby="opensuse"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> OpenSUSE </h3> <p>As there is no official upstream repository for OpenSUSE, it is recommended that you stick with the distribution installation. OpenSUSE Leap appears to make the most recent vagrant available as an experimental package based on <a href="https://software.opensuse.org/package/vagrant">https://software.opensuse.org/package/vagrant</a>.</p> <h4 id="leap-15"> <a href="#leap-15" class="anchor-heading" aria-labelledby="leap-15"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Leap 15 </h4> <ul> <li>Distro Vagrant <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>zypper refresh
|
||
<span class="nb">sudo </span>zypper addlock vagrant-libvirt
|
||
<span class="nv">fog_libvirt_pkg</span><span class="o">=</span><span class="s2">"</span><span class="si">$(</span>
|
||
<span class="nb">sudo </span>zypper <span class="nt">--terse</span> <span class="nt">-n</span> <span class="nt">--quiet</span> search <span class="nt">--provides</span> <span class="s2">"rubygem(fog-libvirt)"</span> | <span class="se">\</span>
|
||
<span class="nb">tail</span> <span class="nt">-n1</span> | <span class="nb">cut</span> <span class="nt">-d</span><span class="s1">' '</span> <span class="nt">-f4</span><span class="si">)</span><span class="s2">"</span>
|
||
<span class="nb">sudo </span>zypper <span class="nb">install</span> <span class="nt">--no-confirm</span> libvirt qemu-kvm libguestfs vagrant <span class="k">${</span><span class="nv">fog_libvirt_pkg</span><span class="k">}</span>
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div> </div> </li> </ul> <h3 id="arch"> <a href="#arch" class="anchor-heading" aria-labelledby="arch"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Arch </h3> <p>Please read the related <a href="https://wiki.archlinux.org/index.php/Vagrant#vagrant-libvirt">ArchWiki</a> page.</p> <p>As Arch is a rolling release, the version of vagrant available from the distribution should always be the most recent. Unfortunately it does not appear to be possible to install ruby-libvirt from AUR anymore, which would remove the need for the additional build tools.</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>pacman <span class="nt">--sync</span> <span class="nt">--sysupgrade</span> <span class="nt">--refresh</span>
|
||
<span class="nb">sudo </span>pacman <span class="nt">--query</span> <span class="nt">--search</span> <span class="s1">'iptables'</span> | <span class="nb">grep</span> <span class="s2">"local"</span> | <span class="nb">grep</span> <span class="s2">"iptables "</span> <span class="o">&&</span> <span class="se">\</span>
|
||
<span class="nb">sudo </span>pacman <span class="nt">--remove</span> <span class="nt">--nodeps</span> <span class="nt">--nodeps</span> <span class="nt">--noconfirm</span> iptables
|
||
<span class="nb">sudo </span>pacman <span class="nt">--sync</span> <span class="nt">--needed</span> <span class="nt">--noprogressbar</span> <span class="nt">--noconfirm</span> <span class="se">\</span>
|
||
iptables-nft libvirt qemu openbsd-netcat bridge-utils dnsmasq vagrant <span class="se">\</span>
|
||
pkg-config gcc make ruby
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div></div> <h2 id="issues-and-known-solutions"> <a href="#issues-and-known-solutions" class="anchor-heading" aria-labelledby="issues-and-known-solutions"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Issues and Known Solutions </h2> <h3 id="failure-to-find-libvirt-for-native-extensions"> <a href="#failure-to-find-libvirt-for-native-extensions" class="anchor-heading" aria-labelledby="failure-to-find-libvirt-for-native-extensions"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Failure to find Libvirt for Native Extensions </h3> <p>Ensuring <code class="language-plaintext highlighter-rouge">pkg-config</code> or <code class="language-plaintext highlighter-rouge">pkgconf</code> is installed should be sufficient in most cases.</p> <p>In some cases, you will need to specify <code class="language-plaintext highlighter-rouge">CONFIGURE_ARGS</code> variable before running running <code class="language-plaintext highlighter-rouge">vagrant plugin install</code>, e.g.:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">CONFIGURE_ARGS</span><span class="o">=</span><span class="s2">"with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib64"</span>
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div></div> <p>If you have issues building ruby-libvirt, try the following (replace <code class="language-plaintext highlighter-rouge">lib</code> with <code class="language-plaintext highlighter-rouge">lib64</code> as needed):</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">CONFIGURE_ARGS</span><span class="o">=</span><span class="s1">'with-ldflags=-L/opt/vagrant/embedded/lib with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/usr/lib'</span> <span class="se">\</span>
|
||
<span class="nv">GEM_HOME</span><span class="o">=</span>~/.vagrant.d/gems <span class="se">\</span>
|
||
<span class="nv">GEM_PATH</span><span class="o">=</span><span class="nv">$GEM_HOME</span>:/opt/vagrant/embedded/gems <span class="se">\</span>
|
||
<span class="nv">PATH</span><span class="o">=</span>/opt/vagrant/embedded/bin:<span class="nv">$PATH</span> <span class="se">\</span>
|
||
vagrant plugin <span class="nb">install </span>vagrant-libvirt
|
||
</code></pre></div></div> <h3 id="failure-to-link"> <a href="#failure-to-link" class="anchor-heading" aria-labelledby="failure-to-link"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> Failure to Link </h3> <p>If have problem with installation - check your linker. It should be <code class="language-plaintext highlighter-rouge">ld.gold</code>:</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>alternatives <span class="nt">--set</span> ld /usr/bin/ld.gold
|
||
<span class="c"># OR</span>
|
||
<span class="nb">sudo ln</span> <span class="nt">-fs</span> /usr/bin/ld.gold /usr/bin/ld
|
||
</code></pre></div></div> <h3 id="loaderror-exceptions"> <a href="#loaderror-exceptions" class="anchor-heading" aria-labelledby="loaderror-exceptions"><svg viewBox="0 0 16 16" aria-hidden="true"><use xlink:href="#svg-link"></use></svg></a> LoadError Exceptions </h3> <p>If you encounter the following load error when using the vagrant-libvirt plugin (note the required by libssh):</p> <p><code class="language-plaintext highlighter-rouge">/opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': /opt/vagrant/embedded/lib64/libcrypto.so.1.1: version `OPENSSL_1_1_1b' not found (required by /lib64/libssh.so.4) - /home/xxx/.vagrant.d/gems/2.4.6/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError)</code></p> <p>then the following steps have been found to resolve the problem. Thanks to James Reynolds (see https://github.com/hashicorp/vagrant/issues/11020#issuecomment-540043472). The specific version of libssh will change over time so references to the rpm in the commands below will need to be adjusted accordingly.</p> <p class="info">See distro specific instructions for variations on this that contain version independent steps.</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Fedora</span>
|
||
dnf download <span class="nt">--source</span> libssh
|
||
|
||
<span class="c"># centos 8 stream, doesn't provide source RPMs, so you need to download like so</span>
|
||
git clone https://git.centos.org/centos-git-common
|
||
<span class="c"># centos-git-common needs its tools in PATH</span>
|
||
<span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span><span class="si">$(</span><span class="nb">readlink</span> <span class="nt">-f</span> ./centos-git-common<span class="si">)</span>:<span class="nv">$PATH</span>
|
||
git clone https://git.centos.org/rpms/libssh
|
||
<span class="nb">cd </span>libssh
|
||
git checkout imports/c8s/libssh-0.9.4-1.el8
|
||
into_srpm.sh <span class="nt">-d</span> c8s
|
||
<span class="nb">cd </span>SRPMS
|
||
|
||
<span class="c"># common commands (make sure to adjust verison accordingly)</span>
|
||
rpm2cpio libssh-0.9.4-1c8s.src.rpm | cpio <span class="nt">-imdV</span>
|
||
<span class="nb">tar </span>xf libssh-0.9.4.tar.xz
|
||
<span class="nb">mkdir </span>build
|
||
cmake ../libssh-0.9.4 <span class="nt">-DOPENSSL_ROOT_DIR</span><span class="o">=</span>/opt/vagrant/embedded/
|
||
make
|
||
<span class="nb">sudo cp </span>lib/libssh<span class="k">*</span> /opt/vagrant/embedded/lib64
|
||
</code></pre></div></div> <p>If you encounter the following load error when using the vagrant-libvirt plugin (note the required by libk5crypto):</p> <p><code class="language-plaintext highlighter-rouge">/opt/vagrant/embedded/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': /usr/lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b - /home/rbelgrave/.vagrant.d/gems/2.4.9/gems/ruby-libvirt-0.7.1/lib/_libvirt.so (LoadError)</code></p> <p>then the following steps have been found to resolve the problem. After the steps below are complete, then reinstall the vagrant-libvirt plugin without setting the <code class="language-plaintext highlighter-rouge">CONFIGURE_ARGS</code>. Thanks to Marco Bevc (see https://github.com/hashicorp/vagrant/issues/11020#issuecomment-625801983):</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Fedora</span>
|
||
dnf download <span class="nt">--source</span> krb5-libs
|
||
|
||
<span class="c"># centos 8 stream, doesn't provide source RPMs, so you need to download like so</span>
|
||
git clone https://git.centos.org/centos-git-common
|
||
<span class="c"># make get_sources.sh executable as it is needed in krb5</span>
|
||
<span class="nb">chmod</span> +x centos-git-common/get_sources.sh
|
||
<span class="c"># centos-git-common needs its tools in PATH</span>
|
||
<span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span><span class="si">$(</span><span class="nb">readlink</span> <span class="nt">-f</span> ./centos-git-common<span class="si">)</span>:<span class="nv">$PATH</span>
|
||
git clone https://git.centos.org/rpms/krb5
|
||
<span class="nb">cd </span>krb5
|
||
git checkout imports/c8s/krb5-1.18.2-8.el8
|
||
get_sources.sh
|
||
into_srpm.sh <span class="nt">-d</span> c8s
|
||
<span class="nb">cd </span>SRPMS
|
||
|
||
<span class="c"># common commands (make sure to adjust verison accordingly)</span>
|
||
rpm2cpio krb5-1.18.2-8c8s.src.rpm | cpio <span class="nt">-imdV</span>
|
||
<span class="nb">tar </span>xf krb5-1.18.2.tar.gz
|
||
<span class="nb">cd </span>krb5-1.18.2/src
|
||
./configure
|
||
make
|
||
<span class="nb">sudo cp</span> <span class="nt">-P</span> lib/crypto/libk5crypto.<span class="k">*</span> /opt/vagrant/embedded/lib64/
|
||
</code></pre></div></div> <hr> <footer> <div class="d-flex mt-2"> <p class="text-small text-grey-dk-000 mb-0"> <a href="https://github.com/vagrant-libvirt/vagrant-libvirt/tree/main/installation.markdown" id="edit-this-page">Edit this page on GitHub</a> </p> </div> </footer> </div> </div> <div class="search-overlay"></div> </div> </body> </html>
|