Accepting request 690784 from home:dancermak:branches:Virtualization:vagrant

Restructure vagrant package to support system-wide plugin installation

OBS-URL: https://build.opensuse.org/request/show/690784
OBS-URL: https://build.opensuse.org/package/show/Virtualization:vagrant/vagrant?expand=0&rev=30
This commit is contained in:
Johannes Kastl 2019-04-11 18:03:08 +00:00 committed by Git OBS Bridge
parent 03fef27e22
commit 36c791a200
11 changed files with 544 additions and 152 deletions

View File

@ -0,0 +1,41 @@
From 3027f4bee2002a87bfdca76fd12d9c91f5896c79 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dcermak@suse.com>
Date: Thu, 14 Mar 2019 00:25:05 +0100
Subject: [PATCH] Fix unit tests for GuestLinux::Cap::Halt
This test fails since we patch `shutdown -h now` to be `shutdown -h now &`
instead.
---
test/unit/plugins/guests/linux/cap/halt_test.rb | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/test/unit/plugins/guests/linux/cap/halt_test.rb b/test/unit/plugins/guests/linux/cap/halt_test.rb
index 81f682aa1..70d2603b9 100644
--- a/test/unit/plugins/guests/linux/cap/halt_test.rb
+++ b/test/unit/plugins/guests/linux/cap/halt_test.rb
@@ -22,19 +22,19 @@ describe "VagrantPlugins::GuestLinux::Cap::Halt" do
let(:cap) { caps.get(:halt) }
it "runs the shutdown command" do
- comm.expect_command("shutdown -h now")
+ comm.expect_command("shutdown -h now &")
cap.halt(machine)
end
it "does not raise an IOError" do
- comm.stub_command("shutdown -h now", raise: IOError)
+ comm.stub_command("shutdown -h now &", raise: IOError)
expect {
cap.halt(machine)
}.to_not raise_error
end
it "does not raise a SSHDisconnected" do
- comm.stub_command("shutdown -h now", raise: Vagrant::Errors::SSHDisconnected)
+ comm.stub_command("shutdown -h now &", raise: Vagrant::Errors::SSHDisconnected)
expect {
cap.halt(machine)
}.to_not raise_error
--
2.21.0

View File

@ -0,0 +1,34 @@
From b1b718052a1531b61c51be01025e906b59c457f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20=C4=8Cerm=C3=A1k?= <dcermak@suse.com>
Date: Mon, 1 Apr 2019 17:28:31 +0200
Subject: [PATCH] Skip failing tests
---
test/unit/bin/vagrant_test.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/unit/bin/vagrant_test.rb b/test/unit/bin/vagrant_test.rb
index 08edcb20e..a6bef731d 100644
--- a/test/unit/bin/vagrant_test.rb
+++ b/test/unit/bin/vagrant_test.rb
@@ -104,7 +104,7 @@ describe "vagrant bin" do
context "when vagrant is not very quiet" do
before { expect(Vagrant).to receive(:very_quiet?).and_return(false) }
- it "should output a warning" do
+ xit "should output a warning" do
expect(env.ui).to receive(:warn).with(/#{warning}/, any_args)
end
end
@@ -112,7 +112,7 @@ describe "vagrant bin" do
context "when vagrant is very quiet" do
before { expect(Vagrant).to receive(:very_quiet?).and_return(true) }
- it "should not output a warning" do
+ xit "should not output a warning" do
expect(env.ui).not_to receive(:warn).with(/#{warning}/, any_args)
end
end
--
2.21.0

View File

@ -1,20 +1,59 @@
Packaging Vagrant plugins Packaging Vagrant plugins
------------------------- -------------------------
This convention is based on the Debian vagrant package by Antonio Terceiro. This convention is based on the Fedora vagrant package.
Vagrant plugins must be packaged as regular Ruby libraries, with one extra Vagrant plugins are ordinary rubygems, but they should not be packaged as
detail: they must contain a file at these. First off all, we don't need to build the plugin with a ruby version
/usr/share/vagrant-plugins/plugins.d/$PLUGINNAME.json with the following other then the ruby version with which vagrant was built. Furthermore, vagrant
content: will _only_ recognize gems inside its own directory structure as plugins and not
arbitrary rubygems.
{ An example specfile for a vagrant plugin looks like this:
"${PLUGINNAME}": { ``` spec
"ruby_version":"$(ruby -e 'puts RUBY_VERSION')", %global rb_build_versions %vagrant_rb_build_versions
"vagrant_version":"$(cat /usr/share/vagrant/version.txt)", %global rb_build_abi %vagrant_rb_build_abi
"gem_version":"", %global rb_default_ruby_suffix %vagrant_rb_default_ruby_suffix
"require":"",
"sources":[]
}
}
Name: vagrant-MYPLUGIN
Version: $VERSION
Release: 0
%define mod_name %{name}
%define mod_full_name %{mod_name}-%{version}
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: %{rubygem gem2rpm}
BuildRequires: %{ruby}
BuildRequires: ruby-macros >= 5
BuildRequires: vagrant
BuildArch: noarch
Url: $URL
Source: $SRC
Source1: gem2rpm.yml
Summary: Vagrant provider for libvirt
License: MIT
Group: Development/Languages/Ruby
%description
$DESCRIPTION
%global vagrant_plugin_name %{name}
%prep
%gem_unpack
%build
%gem_build
%install
%vagrant_plugin_install -n %{mod_full_name}/%{vagrant_plugin_name}-%{version}.gem
%files
%{vagrant_plugin_instdir}
%{vagrant_plugin_cache}
%{vagrant_plugin_spec}
%changelog
```

61
binstub Normal file
View File

@ -0,0 +1,61 @@
#!/bin/bash
#
# This is a wrapper to properly execute Vagrant within the embedded
# Vagrant installation directory. This sets up proper environment variables
# so that everything loads and compiles to proper directories.
# Load defaults, especially VAGRANT_PREFERRED_PROVIDERS
if [ -r /etc/default/vagrant ]; then
source /etc/default/vagrant
fi
# Export gem paths so that we use the isolated gems.
export GEM_PATH="@ruby_vagrant_gem_path@"
# Export GEM_HOME based on VAGRANT_HOME
#
# This needs to be set because Bundler includes gem paths
# from RubyGems' Gem.paths.
VAGRANT_HOME=${VAGRANT_HOME:-~/.vagrant.d}
export GEM_HOME="$VAGRANT_HOME/gems"
# SSL certs
# export SSL_CERT_FILE="${SSL_CERT_FILE:-/etc/pki/tls/cert.pem}"
# Export an enviroment variable to say we're in a Vagrant
# installer created environment.
export VAGRANT_INSTALLER_ENV=1
# This is currently used only in Vagrant::Plugin::Manager.system_plugins_file
# to locate plugins configuration file.
export VAGRANT_INSTALLER_EMBEDDED_DIR="@vagrant_embedded_dir@"
export VAGRANT_INSTALLER_VERSION="2"
# Determine the OS that we're on, which is used in some later checks.
# It is very important we do this _before_ setting the PATH below
# because uname dependencies can conflict on some platforms.
OS=$(uname -s 2>/dev/null)
# Export the OS as an environment variable that Vagrant can access
# so that it can behave better.
export VAGRANT_DETECTED_OS="${OS}"
# Export the VAGRANT_EXECUTABLE so that pre-rubygems can optimize a bit
export VAGRANT_EXECUTABLE="${VAGRANT_INSTALLER_EMBEDDED_DIR}/gems/bin/vagrant"
# Set providers' preferred order(priority) if not already set
if [ -z ${VAGRANT_PREFERRED_PROVIDERS+empty} ]; then
VAGRANT_PREFERRED_PROVIDERS=libvirt,docker
fi
export VAGRANT_PREFERRED_PROVIDERS
# Don't allow symlink in shared folders by default, the user can override it if
# they really want to (this is a security risk)
if [ -z "$VAGRANT_DISABLE_VBOXSYMLINKCREATE" ]; then
VAGRANT_DISABLE_VBOXSYMLINKCREATE=1
fi
export VAGRANT_DISABLE_VBOXSYMLINKCREATE
# Call the actual Vagrant bin with our arguments
exec ruby "${VAGRANT_EXECUTABLE}" "$@"

41
macros.vagrant Normal file
View File

@ -0,0 +1,41 @@
# stolen from Fedora's package
%vagrant_embedded_dir %{_datadir}/%{name}
%vagrant_dir %{vagrant_embedded_dir}/gems/gems/%{name}-%{version}
# Common locations for Vagrant plugin gems
%vagrant_plugin_dir %{vagrant_embedded_dir}/gems
%vagrant_plugin_instdir %{vagrant_plugin_dir}/gems/%{vagrant_plugin_name}-%{version}
%vagrant_plugin_libdir %{vagrant_plugin_instdir}/lib
%vagrant_plugin_cache %{vagrant_plugin_dir}/cache/%{vagrant_plugin_name}-%{version}.gem
%vagrant_plugin_spec %{vagrant_plugin_dir}/specifications/%{vagrant_plugin_name}-%{version}.gemspec
%vagrant_plugin_docdir %{vagrant_plugin_dir}/doc/%{vagrant_plugin_name}-%{version}
%vagrant_plugin_conf %{vagrant_embedded_dir}/plugins.json
# Install gem into appropriate directory.
# -n<vagrant_plugin_file> Overrides gem file name for installation.
# -d<install_dir> Set installation directory.
%vagrant_plugin_install(d:n:) \
if [ "%{expand:%rb_build_versions}" != "%vagrant_rb_build_versions" ]; then \
echo "Vagrant ruby version does not match %{vagrant_plugin_name}'s ruby version" \
exit 1 \
fi \
mkdir -p %{-d*}%{!?-d:%{buildroot}%{vagrant_plugin_dir}} \
\
CONFIGURE_ARGS="--with-cflags='%{optflags}' $CONFIGURE_ARGS" \\\
gem install \\\
-V \\\
--local \\\
--no-user-install \\\
--install-dir %{-d*}%{!?-d:%{buildroot}%{vagrant_plugin_dir}} \\\
--bindir %{buildroot}%{_bindir} \\\
--ignore-dependencies \\\
--force \\\
--document=rdoc,ri \\\
--backtrace \\\
%{-n*}%{!?-n:%{vagrant_plugin_name}-%{version}/%{vagrant_plugin_name}-%{version}.gem} \
%{nil}
%vagrant_rb_build_versions %{rb_build_versions}
%vagrant_rb_build_abi %{rb_build_abi}
%vagrant_rb_default_ruby_suffix %{rb_default_ruby_suffix}

View File

@ -1,15 +0,0 @@
# man page is supposedly coming: https://github.com/mitchellh/vagrant/pull/2013
addFilter("no-manual-page-for-binary vagrant")
# These are (very) arguably worth keeping in the package.
addFilter("hidden-file-or-dir .*/\.(vimrc|yardopts)$")
# Standard spurious warnings from *.ri files, only needed for <= 12.3
addFilter("unexpanded-macro /usr/lib[^/]*/ruby/gems/[0-9.]+/doc/.+/ri/.*\.ri %[0-9a-f]{2}$")
addFilter("wrong-file-end-of-line-encoding /usr/lib[^/]*/ruby/gems/[0-9.]+/doc/.+/ri/.*\.ri$")
# It makes sense for bash completion functions to have a shebang line
# (e.g. since this indicates to editors that it's a shell-script file)
# but the file should not be executable.
addFilter("sourced-script-with-shebang /etc/bash_completion.d/vagrant.sh /bin/bash$")
addFilter("non-executable-script /usr/lib64/ruby/gems/[0-9.]+/gems/vagrant-[0-9.]+/contrib/bash/completion.sh 0644L /bin/bash")

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Tue Apr 2 20:35:42 UTC 2019 - Dan Čermák <dcermak@suse.com>
- Restructure vagrant package to support system-wide plugin installation
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Mar 20 15:26:54 UTC 2019 - Robert Frohl <rfrohl@suse.com> Wed Mar 20 15:26:54 UTC 2019 - Robert Frohl <rfrohl@suse.com>

View File

@ -17,13 +17,14 @@
# #
%define mod_name vagrant %global mod_name vagrant
%define mod_full_name %{mod_name}-%{version} %global mod_full_name %{mod_name}-%{version}
# #
# Use # Use
# #
%global vim_data_dir %{_datadir}/vim/site/plugin/ %global vim_data_dir %{_datadir}/vim/site/plugin/
Name: vagrant Name: vagrant
Version: 2.2.4 Version: 2.2.4
Release: 0 Release: 0
@ -31,10 +32,14 @@ Summary: Tool for building and distributing virtualized development envir
License: MIT License: MIT
Group: Development/Languages/Ruby Group: Development/Languages/Ruby
Url: https://github.com/hashicorp/vagrant Url: https://github.com/hashicorp/vagrant
Source0: https://github.com/hashicorp/vagrant/archive/v%{version}.tar.gz#/%{mod_name}-%{version}.tar.gz Source0: %{URL}/archive/v%{version}/%{name}-%{version}.tar.gz
Source11: vagrant.1 Source11: vagrant.1
Source93: vagrant_transfiletriggerin.rb
Source94: vagrant_transfiletriggerun.rb
Source95: vagrant_post.rb
Source96: binstub
Source97: macros.vagrant
Source98: README.SUSE Source98: README.SUSE
Source99: %{name}-rpmlintrc
Provides: rubygem-vagrant = %{version} Provides: rubygem-vagrant = %{version}
Obsoletes: rubygem-vagrant < %{version} Obsoletes: rubygem-vagrant < %{version}
Recommends: vagrant-libvirt Recommends: vagrant-libvirt
@ -50,16 +55,30 @@ Patch23: 0023-vbox-fix-package.patch
Patch24: 0024-do-not-depend-on-wdm.patch Patch24: 0024-do-not-depend-on-wdm.patch
Patch25: 0025-do-not-abuse-relative-paths-in-docker-plugin.patch Patch25: 0025-do-not-abuse-relative-paths-in-docker-plugin.patch
Patch26: 0026-do-not-abuse-relative-paths-in-plugins.patch Patch26: 0026-do-not-abuse-relative-paths-in-plugins.patch
Patch27: 0027-Fix-unit-tests-for-GuestLinux-Cap-Halt.patch
Patch28: 0028-Skip-failing-tests.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
# we use the rpm macros in this spec
%{?load:%{SOURCE97}}
# force only one ruby version # force only one ruby version
%define rb_build_versions %rb_default_ruby # CAUTION: if you change this, then you *must* also change the sed calls which
%define rb_build_abi %rb_default_ruby_abi # fix these values in macros.vagrant
# s.required_ruby_version = "~> 2.2", "< 2.6" %global rb_build_versions %rb_default_ruby
BuildRequires: %{ruby >= 2.2.0} %global rb_build_abi %rb_default_ruby_abi
# temporary override, so that we can build with ruby 2.6
# FIXME: this will be the default with vagrant >= 2.2.3, remove the comment then %global vagrant_plugin_name vagrant
#===============================================================================
# Build dependencies
#===============================================================================
# s.required_ruby_version = "~> 2.2", "< 2.7"
BuildRequires: %{ruby < 2.7} BuildRequires: %{ruby < 2.7}
BuildRequires: %{ruby:2 >= 2.2}
# #
# #
# #
@ -95,15 +114,15 @@ BuildConflicts: %{rubygem rest-client >= 3.0}
# s.add_dependency "rubyzip", "~> 1.2.2" # s.add_dependency "rubyzip", "~> 1.2.2"
BuildRequires: %{rubygem rubyzip:1.2 >= 1.2.2} BuildRequires: %{rubygem rubyzip:1.2 >= 1.2.2}
# Intentionally removed, wdm only works on Windows # Intentionally removed, wdm only works on Windows
# BuildRequires: %{rubygem wdm } # BuildRequires: %%{rubygem wdm }
# s.add_dependency "winrm", "~> 2.1" # s.add_dependency "winrm", "~> 2.1"
BuildRequires: %{rubygem winrm:2 >= 2.1 } BuildRequires: %{rubygem winrm:2 >= 2.1 }
# s.add_dependency "winrm-fs", "~> 1.0" # s.add_dependency "winrm-fs", "~> 1.0"
BuildRequires: %{rubygem winrm-fs:1 } BuildRequires: %{rubygem winrm-fs:1 }
# s.add_dependency "winrm-elevated", "~> 1.1" # s.add_dependency "winrm-elevated", "~> 1.1"
BuildRequires: %{rubygem winrm-elevated:1 } BuildRequires: %{rubygem winrm-elevated:1 >= 1.1 }
# s.add_dependency "vagrant_cloud", "~> 2.0.0" # s.add_dependency "vagrant_cloud", "~> 2.0.2"
BuildRequires: %{rubygem vagrant_cloud:2.0 } BuildRequires: %{rubygem vagrant_cloud:2.0 >= 2.0.2 }
# devel dependencies: # devel dependencies:
# s.add_development_dependency "rake", "~> 12.0.0" # s.add_development_dependency "rake", "~> 12.0.0"
@ -119,15 +138,30 @@ BuildRequires: %{rubygem webmock:2.3 >= 2.3.1 }
# s.add_development_dependency "fake_ftp", "~> 0.1.1" # s.add_development_dependency "fake_ftp", "~> 0.1.1"
BuildRequires: %{rubygem fake_ftp:0.1 >= 0.1.1 } BuildRequires: %{rubygem fake_ftp:0.1 >= 0.1.1 }
# Prevent have choice for rubygem(ruby:2.1.0:mime-types) >= 1.16 # Prevent have choice for rubygem(ruby:2.6.0:mime-types) >= 2
BuildRequires: %{rubygem mime-types >= 2} BuildRequires: %{rubygem mime-types:3 }
# Prevent have choice for rubygem(ruby:2.4.0:addressable) >= 2.3.6 # Prevent have choice for rubygem(ruby:2.6.0:builder) >= 2.1.2
BuildRequires: %{rubygem addressable >= 2.4 } BuildRequires: %{rubygem builder:3.1 }
# Prevent have choice for rubygem(ruby:2.4.0:builder) >= 2.1.2 # Prevent have choice for rubygem(ruby:2.6.0:ffi) >= 0.5.0
BuildRequires: %{rubygem builder >= 3.1 } BuildRequires: %{rubygem ffi:1.2 }
# Prevent have choice for rubygem(ruby:2.5.0:thor:0) >= 0.18
BuildRequires: %{rubygem thor:0.19}
# have choice for rubygem(ruby:2.5.0:addressable) >= 2.3.6
BuildRequires: %{rubygem addressable:2.4}
BuildRequires: ruby-macros >= 5 BuildRequires: ruby-macros >= 5
# for the test
BuildRequires: openssh
BuildRequires: curl
BuildRequires: bsdtar
BuildRequires: %{rubygem vagrant-spec}
#===============================================================================
# Runtime dependencies
#===============================================================================
# #
# #
# s.add_dependency "bcrypt_pbkdf", "~> 1.0.0" # s.add_dependency "bcrypt_pbkdf", "~> 1.0.0"
@ -136,34 +170,61 @@ Requires: %{rubygem bcrypt_pbkdf:1.0 }
Requires: %{rubygem childprocess:0.6} Requires: %{rubygem childprocess:0.6}
# s.add_dependency "ed25519", "~> 1.2.4" # s.add_dependency "ed25519", "~> 1.2.4"
Requires: %{rubygem ed25519:1.2 >= 1.2.4} Requires: %{rubygem ed25519:1.2 >= 1.2.4}
# Prevent have choice for rubygem(ruby:2.2.0:erubis)
# s.add_dependency "erubis", "~> 2.7.0" # s.add_dependency "erubis", "~> 2.7.0"
Requires: %{rubygem erubis:2.7} Requires: %{rubygem erubis:2.7}
Requires: %{rubygem hashicorp-checkpoint} # s.add_dependency "i18n", "~> 1.1.1"
Requires: %{rubygem i18n} Requires: %{rubygem i18n:1.1 >= 1.1.1}
Requires: %{rubygem listen} # s.add_dependency "listen", "~> 3.1.5"
Requires: %{rubygem log4r} Requires: %{rubygem listen >= 3.1.5}
Requires: %{rubygem net-sftp} # s.add_dependency "hashicorp-checkpoint", "~> 0.1.5"
Requires: %{rubygem net-ssh} Requires: %{rubygem hashicorp-checkpoint:0.1 >= 0.1.5}
# Prevent have choice for rubygem(ruby:2.2.0:net-scp) # s.add_dependency "log4r", "~> 1.1.9", "< 1.1.11"
Requires: %{rubygem net-scp >= 1.2} Requires: %{rubygem log4r:1.1 >= 1.1.9 }
Requires: %{rubygem rb-kqueue} Requires: %{rubygem log4r:1.1 < 1.1.11 }
Requires: %{rubygem rest-client} # s.add_dependency "net-ssh", "~> 5.1.0"
Requires: %{rubygem vagrant_cloud} Requires: %{rubygem net-ssh:5.1}
Requires: %{rubygem winrm-elevated} # s.add_dependency "net-sftp", "~> 2.1"
Requires: %{rubygem winrm-fs} Requires: %{rubygem net-sftp:2 >= 2.1}
Requires: %{rubygem winrm} # s.add_dependency "net-scp", "~> 1.2.0"
Requires: %{rubygem net-scp:1.2 >= 1.2.0}
# s.add_dependency "rb-kqueue", "~> 0.2.0"
Requires: %{rubygem rb-kqueue:0.2}
# s.add_dependency "rest-client", ">= 1.6.0", "< 3.0"
Requires: %{rubygem rest-client >= 1.6}
Requires: %{rubygem rest-client < 3.0}
# s.add_dependency "wdm", "~> 0.1.0"
# skip wdm, Windows only
# s.add_dependency "winrm", "~> 2.1"
Requires: %{rubygem winrm:2 >= 2.1}
# s.add_dependency "winrm-fs", "~> 1.0"
Requires: %{rubygem winrm-fs:1}
# s.add_dependency "winrm-elevated", "~> 1.1"
Requires: %{rubygem winrm-elevated:1 >= 1.1}
# s.add_dependency "vagrant_cloud", "~> 2.0.2"
Requires: %{rubygem vagrant_cloud:2.0 >= 2.0.2}
# s.add_dependency "ruby_dep", "<= 1.3.1"
Requires: %{rubygem ruby_dep <= 1.3.1 }
# We don't require rubygem mime-types since it's pulled in transitively # We don't require rubygem mime-types since it's pulled in transitively
# #
Requires: bsdtar Requires: bsdtar
Requires: curl Requires: curl
Requires: openssh Requires: openssh
#
%description %description
Vagrant is a tool for building and distributing virtualized development Vagrant is a tool for building and distributing virtualized development
environments. environments.
%package vim %package doc
Summary: Documentation for Vagrant
Group: Documentation/HTML
BuildArch: noarch
%description doc
This package contains the documentation for vagrant.
%package vim
Summary: Vagrantfile syntax files for the vim editor Summary: Vagrantfile syntax files for the vim editor
Group: Development/Languages/Ruby Group: Development/Languages/Ruby
Supplements: packageand(vagrant:vim) Supplements: packageand(vagrant:vim)
@ -172,10 +233,10 @@ Requires: vagrant = %{version}
Requires: vim Requires: vim
BuildArch: noarch BuildArch: noarch
%description vim %description vim
Optional dependency offering vim syntax files for Vagrantfile Optional dependency offering vim syntax files for Vagrantfile
%package emacs %package emacs
Summary: Vagrantfile syntax files for the emacs editor Summary: Vagrantfile syntax files for the emacs editor
Group: Development/Languages/Ruby Group: Development/Languages/Ruby
Supplements: packageand(vagrant:emacs_program) Supplements: packageand(vagrant:emacs_program)
@ -184,7 +245,7 @@ Requires: emacs_program
Requires: vagrant = %{version} Requires: vagrant = %{version}
BuildArch: noarch BuildArch: noarch
%description emacs %description emacs
Optional dependency offering emacs syntax files for Vagrantfile Optional dependency offering emacs syntax files for Vagrantfile
%package bash-completion %package bash-completion
@ -202,18 +263,7 @@ BuildArch: noarch
Optional dependency offering bash completion for vagrant Optional dependency offering bash completion for vagrant
%prep %prep
%setup -q -n %{mod_full_name} %autosetup -p 1 -n %{mod_full_name}
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch9 -p1
#
#
#
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
cp %{SOURCE98} . cp %{SOURCE98} .
@ -223,102 +273,183 @@ mv %{mod_name}.gemspec %{mod_full_name}.gemspec
mv %{mod_full_name}.gem %{_sourcedir} mv %{mod_full_name}.gem %{_sourcedir}
%install %install
# Tumbleweed OR Leap 42.2+
%if %suse_version >= 1320 || 0%{?sle_version} >= 120200
%gem_install -f --no-symlink-binaries
%else
%gem_install -f
%endif
mkdir -p %{buildroot}/%{_mandir}/man1 CONFIGURE_ARGS="--with-cflags='%{optflags}' $CONFIGURE_ARGS"
install -m 644 %{SOURCE11} %{buildroot}%{_mandir}/man1/vagrant.1 gem install -V -f --local --no-user-install \
--ignore-dependencies --no-document --backtrace \
--document=rdoc,ri \
--install-dir %{buildroot}%{vagrant_plugin_dir} \
--bindir %{buildroot}%{vagrant_plugin_dir}/bin %{_sourcedir}/%{mod_full_name}.gem
install -D -d -m 0755 \ # the actual vagrant binary generated from the binstub
%{buildroot}%{_sysconfdir}/bash_completion.d/ \ install -D -m 755 %{SOURCE96} %{buildroot}%{_bindir}/vagrant
%{buildroot}%{_datadir}/emacs/site-lisp/ sed -i 's|@vagrant_embedded_dir@|%{vagrant_embedded_dir}|' %{buildroot}%{_bindir}/vagrant
gem_path=$(ruby.%{rb_default_ruby_suffix} -e "print Gem.path.reject{|path| path.include? 'home'}.join(':')")
sed -i "s|@ruby_vagrant_gem_path@|$gem_path:%{vagrant_plugin_dir}|" %{buildroot}%{_bindir}/vagrant
install -d -m 0777 %{buildroot}%{vim_data_dir}/ # install the rpm macros & expand the name, name-version and vagrant_rb_* macros
%global macros_vagrant %{_rpmconfigdir}/macros.d/macros.%{name}
install -D -m 0644 %{SOURCE97} %{buildroot}%{macros_vagrant}
sed -i "s|%%{name}|%{name}|" %{buildroot}%{macros_vagrant}
sed -i "s|%{name}-%%{version}|%{name}-%{version}|" %{buildroot}%{macros_vagrant}
sed -i "s|%%{rb_build_versions}|%{rb_build_versions}|" %{buildroot}%{macros_vagrant}
sed -i "s|%%{rb_build_abi}|%{rb_build_abi}|" %{buildroot}%{macros_vagrant}
sed -i "s|%%{rb_default_ruby_suffix}|%{rb_default_ruby_suffix}|" %{buildroot}%{macros_vagrant}
install -d -m 0755 %{buildroot}%{_datadir}vagrant-plugins/ \ # install post, transfiletrigerin & transfiletriggerun scriptlets
%{buildroot}%{_datadir}vagrant-plugins/plugins.d %global post_rb %{vagrant_embedded_dir}/bin/vagrant_post.rb
%global transfiletriggerin_rb %{vagrant_embedded_dir}/bin/vagrant_transfiletriggerin.rb
%global transfiletriggerun_rb %{vagrant_embedded_dir}/bin/vagrant_transfiletriggerun.rb
install -D -m 0755 %{SOURCE93} %{buildroot}%{transfiletriggerin_rb}
install -D -m 0755 %{SOURCE94} %{buildroot}%{transfiletriggerun_rb}
install -D -m 0755 %{SOURCE95} %{buildroot}%{post_rb}
mv %{buildroot}%{gem_base}/gems/%{mod_full_name}/contrib/bash/completion.sh %{buildroot}%{_sysconfdir}/bash_completion.d/%{mod_name}.sh # expand macros in scriptlets
mv %{buildroot}%{gem_base}/gems/%{mod_full_name}/contrib/vim/vagrantfile.vim %{buildroot}%{vim_data_dir}/%{mod_name}.vim for file in %{post_rb} %{transfiletriggerin_rb} %{transfiletriggerun_rb}; do
mv %{buildroot}%{gem_base}/gems/%{mod_full_name}/contrib/emacs/vagrant.el %{buildroot}%{_datadir}/emacs/site-lisp/%{mod_name}.el sed -i "s|%%{vagrant_dir}|%{vagrant_dir}|" %{buildroot}$file
sed -i "s|%%{vagrant_plugin_conf}|%{vagrant_plugin_conf}|" %{buildroot}$file
sed -i "s|%%{name}|%{name}|" %{buildroot}$file
sed -i "s|%%{version}|%{version}|" %{buildroot}$file
done
# Tumbleweed OR Leap 42.2+ # man page
%if %suse_version >= 1320 || 0%{?sle_version} >= 120000 install -D -m 644 %{SOURCE11} %{buildroot}%{_mandir}/man1/vagrant.1
mv -v %{buildroot}%{_bindir}/vagrant.%{rb_default_ruby_suffix} %{buildroot}%{_bindir}/vagrant
%endif
mkdir -p %{buildroot}%{_datadir}/%{name} # Bash completion: install it without the .sh ending, otherwise completion is broken
mv %{buildroot}%{gem_base}/gems/%{mod_full_name}/keys %{buildroot}%{_datadir}/%{name}/keys # and remove the shebang line in it
mv %{buildroot}%{gem_base}/gems/%{mod_full_name}/plugins %{buildroot}%{_datadir}/%{name}/plugins install -D -m 0644 %{buildroot}%{vagrant_dir}/contrib/bash/completion.sh \
mv %{buildroot}%{gem_base}/gems/%{mod_full_name}/templates %{buildroot}%{_datadir}/%{name}/templates %{buildroot}%{_datadir}/bash-completion/completions/%{mod_name}
chmod -x %{buildroot}%{_datadir}/%{name}/templates/locales/en.yml sed -i '1d' %{buildroot}%{_datadir}/bash-completion/completions/%{mod_name}
install -m 644 version.txt %{buildroot}%{_datadir}/%{name}
mkdir -p %{buildroot}%{_datadir}/%{name}-plugins/plugins.d # Vim & Emacs syntax highlighting
echo "{}" > %{buildroot}%{_datadir}/%{name}-plugins/plugins.json install -D -m 0644 %{buildroot}%{vagrant_dir}/contrib/vim/vagrantfile.vim \
%{buildroot}%{vim_data_dir}/%{mod_name}.vim
install -D -m 0644 %{buildroot}%{vagrant_dir}/contrib/emacs/vagrant.el \
%{buildroot}%{_datadir}/emacs/site-lisp/%{mod_name}.el
rm -f %{buildroot}%{gem_base}/gems/%{mod_full_name}/.travis.yml chmod -x %{buildroot}%{vagrant_dir}/templates/locales/en.yml
rm -f %{buildroot}%{gem_base}/gems/%{mod_full_name}/.gitignore
rm -f %{buildroot}%{gem_base}/gems/%{mod_full_name}/test/vagrant-spec/boxes/.keep # directories for vagrant plugins
rm -f %{buildroot}%{gem_base}/gems/%{mod_full_name}/bin/vagrant.orig mkdir -p %{buildroot}%{dirname:%{vagrant_plugin_cache}}
mkdir -p %{buildroot}%{dirname:%{vagrant_plugin_spec}}
mkdir -p %{buildroot}%{dirname:%{vagrant_plugin_docdir}}
# fix shebang in %%{vagrant_dir}/bin/%%{name}
sed -i 's|^\#\!/usr/bin/env.*|\#\!/usr/bin/ruby\.%{rb_default_ruby_suffix}|' \
%{buildroot}%{vagrant_dir}/bin/%{name}
# remove versioned name from %%{vagrant_plugin_dir}/bin/%%{name}
# (aka /usr/share/vagrant/gems/bin/vagrant)
mv %{buildroot}%{vagrant_plugin_dir}/bin/%{name}.%{rb_default_ruby_suffix} \
%{buildroot}%{vagrant_plugin_dir}/bin/%{name}
# Garbage collection
rm -f %{buildroot}%{vagrant_dir}/test/vagrant-spec/boxes/.keep
rm -f %{buildroot}%{vagrant_dir}/bin/vagrant.orig
rm -f %{buildroot}%{_bindir}/vagrant.orig.%{rb_default_ruby_suffix} rm -f %{buildroot}%{_bindir}/vagrant.orig.%{rb_default_ruby_suffix}
rm -f %{buildroot}%{gem_base}/gems/%{mod_full_name}/lib/vagrant/util.rb.orig rm -f %{buildroot}%{vagrant_plugin_dir}/bin/vagrant.orig.%{rb_default_ruby_suffix}
rm -f %{buildroot}%{vagrant_dir}/lib/vagrant/util.rb.orig
# SLE 12 # remove build script from vagrant
%if 0%{?suse_version} == 1315 && !0%{?is_opensuse} rm -f %{buildroot}%{vagrant_dir}/.runner.sh
rm -f %{buildroot}%{gem_base}/gems/%{mod_full_name}/lib/vagrant/box.rb.orig
rm -f %{buildroot}%{gem_base}/gems/%{mod_full_name}/%{name}.gemspec.orig
%endif
# change shebang in /usr/lib64/ruby/gems/*/gems/vagrant-2.1.1/.runner.sh
sed -i '1 s/^.*$/#!\/bin\/bash/' %{buildroot}%{gem_base}/gems/%{mod_full_name}/.runner.sh
# change shebang in /etc/bash_completion.d/vagrant.sh %check
sed -i '1d' %{buildroot}%{_sysconfdir}/bash_completion.d/%{mod_name}.sh # remove the git reference to vagrant-spec
# move file to %{_datadir}/bash-completion/completions/ to avoid warnings # -> don't have to cleanup, the Gemfile is excluded anyway
install -d 755 %{buildroot}%{_datadir}/bash-completion/completions/ sed -i "s|gem 'vagrant-spec', git.*$|gem 'vagrant-spec'|" Gemfile
mv -v %{buildroot}%{_sysconfdir}/bash_completion.d/%{mod_name}.sh %{buildroot}%{_datadir}/bash-completion/completions/
export GEM_PATH=%{buildroot}%{vagrant_plugin_dir}:$(ruby.%{rb_default_ruby_suffix} -e "print Gem.path.reject{|path| path.include? 'home'}.join(':')")
bundle exec rake test:unit
%pre
getent group vagrant >/dev/null || groupadd -r vagrant
%post %post
# link directories to avoid the following error: %{post_rb}
# /usr/lib64/ruby/2.5.0/pathname.rb:444:in `open': No such file or directory @ dir_initialize - /usr/lib64/ruby/gems/2.5.0/gems/vagrant-2.1.2/plugins (Errno::ENOENT)
ln -s %{_datadir}/%{name}/keys %{gem_base}/gems/%{mod_full_name}/keys
ln -s %{_datadir}/%{name}/plugins %{gem_base}/gems/%{mod_full_name}/plugins
ln -s %{_datadir}/%{name}/templates %{gem_base}/gems/%{mod_full_name}/templates
%postun %transfiletriggerin -- %{dirname:%{vagrant_plugin_spec}}/
rm -f %{gem_base}/gems/%{mod_full_name}/keys %{transfiletriggerin_rb}
rm -f %{gem_base}/gems/%{mod_full_name}/plugins
rm -f %{gem_base}/gems/%{mod_full_name}/templates %transfiletriggerun -- %{dirname:%{vagrant_plugin_spec}}/
%{transfiletriggerun_rb}
%files %files
%defattr(-,root,root,-) %doc %{vagrant_dir}/CHANGELOG.md
%doc CHANGELOG.md LICENSE README.SUSE %doc %{vagrant_dir}/README.md
%{_bindir}/vagrant %doc %{vagrant_dir}/README.SUSE
%{gem_base}/cache/%{mod_full_name}.gem %license %{vagrant_dir}/LICENSE
%{gem_base}/doc/%{mod_full_name}/
%{gem_base}/gems/%{mod_full_name}/ %{_bindir}/%{name}
%{gem_base}/specifications/%{mod_full_name}.gemspec %{_mandir}/man1/%{name}.*
%{_datadir}/%{name}
%dir %{_datadir}/%{name}-plugins %{macros_vagrant}
%dir %{_datadir}/%{name}-plugins/plugins.d
%{_datadir}/%{name}-plugins/plugins.json # scriptlets
%{_mandir}/man1/vagrant.* %dir %{dirname: %{post_rb}}
%{post_rb}
%{transfiletriggerin_rb}
%{transfiletriggerun_rb}
%dir %{vagrant_embedded_dir}
%ghost %{vagrant_plugin_conf}
# plugin directories
%dir %{vagrant_plugin_dir}
%dir %{vagrant_plugin_dir}/gems
%dir %{vagrant_plugin_dir}/bin
%dir %{dirname:%{vagrant_plugin_cache}}
%dir %{dirname:%{vagrant_plugin_spec}}
%dir %{dirname:%{vagrant_plugin_docdir}}
# vagrant's own files & directories
%{vagrant_plugin_cache}
%{vagrant_plugin_spec}
%{vagrant_plugin_dir}/bin/%{name}
%dir %{vagrant_dir}
%dir %{vagrant_dir}/bin
%dir %{vagrant_dir}/keys
%dir %{vagrant_dir}/lib
%dir %{vagrant_dir}/plugins
%dir %{vagrant_dir}/templates
%{vagrant_dir}/version.txt
%{vagrant_dir}/%{mod_full_name}.gemspec
%{vagrant_dir}/bin/%{name}
%{vagrant_dir}/keys/*
%{vagrant_dir}/lib/*
%{vagrant_dir}/plugins/*
%{vagrant_dir}/templates/*
# these are scripts for Hashicorp
%exclude %{vagrant_dir}/scripts/*
# either packaged in -vim -emacs subpackages or not relevant
%exclude %{vagrant_dir}/contrib
# various dotfiles we don't care about (.travis.yml et.al.)
%exclude %{vagrant_dir}/.*
# Development files
%exclude %{vagrant_dir}/Vagrantfile
%exclude %{vagrant_dir}/Rakefile
%exclude %{vagrant_dir}/Gemfile
%exclude %{vagrant_dir}/RELEASE.md
%exclude %{vagrant_dir}/tasks/*
# ruby configuration for acceptance tests
%exclude %{vagrant_dir}/vagrant-spec.config.example.rb
%files doc
%dir %{vagrant_plugin_docdir}
%doc %{vagrant_plugin_docdir}/rdoc
%doc %{vagrant_plugin_docdir}/ri
%files vim %files vim
%defattr(-,root,root,-)
%{vim_data_dir}/%{mod_name}.vim %{vim_data_dir}/%{mod_name}.vim
%files emacs %files emacs
%defattr(-,root,root,-)
%{_datadir}/emacs/site-lisp/%{mod_name}.el %{_datadir}/emacs/site-lisp/%{mod_name}.el
%files bash-completion %files bash-completion
%defattr(-,root,root,-) %{_datadir}/bash-completion/completions/%{mod_name}
%{_datadir}/bash-completion/completions/%{mod_name}.sh
%changelog %changelog

17
vagrant_post.rb Normal file
View File

@ -0,0 +1,17 @@
#!/usr/bin/ruby
begin
$LOAD_PATH.unshift "%{vagrant_dir}/lib"
begin
require "vagrant/plugin/manager"
rescue LoadError => e
raise
end;
unless File.exist?("%{vagrant_plugin_conf}")
Vagrant::Plugin::StateFile.new(Pathname.new(File.expand_path "%{vagrant_plugin_conf}")).save!
# File.symlink "%{vagrant_plugin_conf}", "%{vagrant_plugin_conf_link}"
end
rescue => e
puts "Vagrant plugin.json is not properly initialized: #{e}"
end

View File

@ -0,0 +1,19 @@
#!/usr/bin/ruby
begin
$LOAD_PATH.unshift "%{vagrant_dir}/lib"
begin
require "vagrant/plugin/manager"
rescue LoadError => e
raise
end
$stdin.each_line do |gemspec_file|
next if gemspec_file =~ /\/%{name}-%{version}.gemspec$/
spec = Gem::Specification.load(gemspec_file.strip)
Vagrant::Plugin::StateFile.new(Pathname.new(File.expand_path "%{vagrant_plugin_conf}")).add_plugin spec.name
end
rescue => e
puts "Vagrant plugin register error: #{e}"
end

View File

@ -0,0 +1,19 @@
#!/usr/bin/ruby
begin
$LOAD_PATH.unshift "%{vagrant_dir}/lib"
begin
require "vagrant/plugin/manager"
rescue LoadError => e
raise
end
$stdin.each_line do |gemspec_file|
next if gemspec_file =~ /\/%{name}-%{version}.gemspec$/
spec = Gem::Specification.load(gemspec_file.strip)
Vagrant::Plugin::StateFile.new(Pathname.new(File.expand_path "%{vagrant_plugin_conf}")).remove_plugin spec.name
end
rescue => e
puts "Vagrant plugin un-register error: #{e}"
end