open-vm-tools/open-vm-tools.spec

549 lines
18 KiB
RPMSpec

#
# spec file for package open-vm-tools
#
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2010 Dominique Leuenberger, Amsterdam, Netherlands.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define KMP 0
# systemd and deploypkg should be enabled by default on versions >= 13.1
%if 0%{?suse_version} >= 1310
%bcond_without systemd
%bcond_without deploypkg
%else
%bcond_with systemd
%bcond_with deploypkg
%endif
# The vmhgfs module is currently built for all versions
# (Shared Folders are not supported under ESX/ESXi, so this driver is not necessary for SLES11/12)
%define vmhgfs vmhgfs
# exclude AMD PCnet32 LANCE pci.id from Supplements list [bnc#397554]
%define __find_supplements sh -c '/usr/lib/rpm/find-supplements %{name} | grep -v pci:v00001022d00002000'
# Modules to be built up to openSUSE 12.3 (excluding SLES11), possibly not building on newer versions.
%if 0%{?suse_version} <= 1230 && 0%{?suse_version} != 1110
%define vm_modules1230 vmci vsock
%endif
%if 0%{?suse_version} <= 1220 && 0%{?suse_version} != 1110
# Modules to be built up to openSUSE 12.1 (excluding SLES11), possibly not building on newer versions.
%define vm_modules1220 vmsync
%endif
%if 0%{?suse_version} <= 1210 && 0%{?suse_version} != 1110
# Modules to be built up to openSUSE 12.1 (excluding SLES11), possibly not building on newer versions.
%define vm_modules1210 vmxnet
%endif
# Modules that have to be build up to version 12.3 (Last checked on 2012-02-05 with kernel 3.2.0)
%define vm_modules %{?vm_modules1230} %{?vmhgfs} %{?vm_modules1210} %{?vm_modules1220}
# X modules are lower prio upstream and once in a while fail. Offer an easy way to enable/disable them.
%define with_X 1
Name: open-vm-tools
%define tarname open-vm-tools
Version: 9.10.2
Release: 0
%define svn_rev 2822639
Summary: Open Virtual Machine Tools
License: BSD-3-Clause and GPL-2.0 and LGPL-2.1
Group: System/Emulators/PC
Url: http://open-vm-tools.sourceforge.net/
Source: http://sourceforge.net/projects/open-vm-tools/files/open-vm-tools/stable-9.10.2/%{tarname}-%{version}-%{svn_rev}.tar.gz
Source1: vmtoolsd
Source2: vmtoolsd.service
Source3: vmware-user-autostart.desktop
Source5: vmware-user-autostart-wrapper
Source6: open-vm-tools-modprobe.conf
Source7: tools.conf
Source98: preamble
BuildRoot: %{_tmppath}/%{name}-%{version}-build
# SUSE versions below 1110 (SLES11 SP4) must use gcc 4.7 to compile under i586
%if 0%{?suse_version} <= 1110
BuildRequires: gcc47
BuildRequires: gcc47-c++
%else
BuildRequires: gcc-c++
%endif
# don't use pkgconfig(gtk+-2.0) so we can build on SLE
BuildRequires: gtk2-devel
BuildRequires: gtkmm2-devel
# Only require kernel packages if kernel modules are being built
%if %{KMP}
BuildRequires: kernel-source
BuildRequires: kernel-syms
BuildRequires: module-init-tools
%else
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: doxygen
BuildRequires: libdnet-devel
BuildRequires: libicu-devel
BuildRequires: libmspack-devel
BuildRequires: libtool
BuildRequires: openssl-devel
BuildRequires: pam-devel
BuildRequires: pcre-devel
BuildRequires: update-desktop-files
BuildRequires: xorg-x11-devel
# libprocps is required with 12.3 and above
%if 0%{?suse_version} >= 1230
BuildRequires: procps-devel
%endif
%if "%{?vmhgfs}"
# Fuse is optional and enables vmblock-fuse
BuildRequires: fuse-devel
%endif
%endif
Requires: net-tools
Requires: tar
%if 0%{?suse_version} >= 1310
Requires: which
%endif
Requires: vmware-guest-kmp
# To prevent autoinstallation on SLES11, exclude supplements from that version
%if 0%{?suse_version} != 1110
Supplements: modalias(pci:v000015ADd*sv*sd*bc*sc*i*)
%endif
Requires(pre): %fillup_prereq
Requires(pre): %insserv_prereq
ExclusiveArch: %ix86 x86_64
Patch0: xutils-add-cstring.patch
Patch1: enable-gcc46+.patch
Patch2: 0001-Fix-vmxnet-module-on-kernels-3.16.patch
Patch3: 0002-Fix-d_alias-to-d_u.d_alias-for-kernel-3.18.patch
Patch4: 0003-Fix-f_dentry-msghdr-kernel-3.19.patch
Patch5: 0004-vmhgfs-bdi-kernel-4.0.patch
%if %{KMP}
%suse_kernel_module_package -n vmware-guest -p %{SOURCE98} xen um
%endif
%if %{with systemd}
%systemd_requires
%endif
%description
Open Virtual Machine Tools (open-vm-tools) are the open source
implementation of VMware Tools. They are a set of guest operating
system virtualization components that enhance performance and user
experience of virtual machines. As virtualization technology rapidly
becomes mainstream, each virtualization solution provider implements
their own set of tools and utilities to supplement the guest virtual
machine. However, most of the implementations are proprietary and are
tied to a specific virtualization platform.
With the Open Virtual Machine Tools project, we are hoping to solve
this and other related problems. The tools are currently composed of
kernel modules for Linux and user-space programs for all VMware
supported Unix-like guest operating systems. They provide several
useful functions like:
* File transfer between a host and guest
* Improved memory management and network performance under
virtualization
* General mechanisms and protocols for communication between host and
guests and from guest to guest
%package -n vmware-guest-KMP
Summary: Open Virtual Machine Tools - for VM GUESTS
Group: System/Emulators/PC
%description -n vmware-guest-KMP
Open Virtual Machine Tools (open-vm-tools) are the open source
implementation of VMware Tools. They are a set of guest operating
system virtualization components that enhance performance and user
experience of virtual machines. As virtualization technology rapidly
becomes mainstream, each virtualization solution provider implements
their own set of tools and utilities to supplement the guest virtual
machine. However, most of the implementations are proprietary and are
tied to a specific virtualization platform.
With the Open Virtual Machine Tools project, we are hoping to solve
this and other related problems. The tools are currently composed of
kernel modules for Linux and user-space programs for all VMware
supported Unix-like guest operating systems. They provide several
useful functions like:
* File transfer between a host and guest
* Improved memory management and network performance under
virtualization
* General mechanisms and protocols for communication between host and
guests and from guest to guest
%if %{with_X}
%package desktop
Summary: User experience components for Open Virtual Machine Tools
Group: System/Emulators/PC
Requires: %{name}%{?_isa} = %{version}-%{release}
Obsoletes: %{name}-gui < %{version}
Provides: %{name}-gui = %{version}
Supplements: packageand(open-vm-tools:xorg-x11-server)
Requires(pre): permissions
%description desktop
This package contains only the user-space programs and libraries of
%{name} that are essential for improved user experience of VMware virtual
machines.
%endif
%package -n libvmtools0
Summary: Open Virtual Machine Tools - shared library
Group: System/Libraries
%description -n libvmtools0
This is a shared library used by several Open VM Tools components,
such as vmware-toolbox-cmd and vmtoolsd (and its plugins).
%package -n libvmtools-devel
Summary: Open Virtual Machine Tools - Development headers
Group: Development/Libraries/C and C++
Requires: libvmtools0 = %{version}
%description -n libvmtools-devel
Those are the development headers for libvmtools. They are needed
if you intend to create own plugins for vmtoolsd.
%prep
%setup -q -n %{tarname}-%{version}-%{svn_rev}
chmod -x AUTHORS COPYING ChangeLog NEWS README
# fix for an rpmlint warning regarding wrong line feeds
sed -i -e "s/\r//" README
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%build
%if ! %{KMP}
# disable warning unused-but-set-variable which will raise error because of -Werror
# disable warning deprecated-declarations which will raise error because of -Werror
# disable warning sizeof-pointer-memaccess which will raise error because of -Werror
# (this is because of 'g_static_mutex_init' usage which is now deprecated)
# disable deploypkg due to old versions of libmspack not providing pkgconfig
# disable ssl due to 'discards qualifiers' error in SLES11
# compile without pkgconfig(xml-security-c), as this is not yet available in OBS
# compile without pkgconfig(xerces-c), which requires xml-security-c to provide vgauth
%if 0%{?suse_version} > 1110
export CFLAGS="%{optflags} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-sizeof-pointer-memaccess -Wno-cpp -fPIE"
export CXXFLAGS="%{optflags} -Wno-unused-local-typedefs -Wno-unused-but-set-variable -Wno-deprecated-declarations -Wno-sizeof-pointer-memaccess -Wno-cpp -fPIE"
%else
export CFLAGS="%{optflags} -Wno-deprecated-declarations -fPIE"
export CXXFLAGS="%{optflags} -Wno-deprecated-declarations -fPIE"
# SUSE versions below 1110 (SLES11 SP4) must use gcc 4.7 to compile under i586
export CC=gcc-4.7
export CXX=g++-4.7
%endif
export LDFLAGS="-pie"
# Required for version 9.4.0
export CUSTOM_PROCPS_NAME=procps
autoreconf -fi
echo 'HTML_TIMESTAMP=NO' >> docs/api/doxygen.conf
# In the latest official tarballs, configure is not marked executable
chmod 755 configure
%configure \
--without-kernel-modules \
--without-root-privileges \
%if 0%{?suse_version} < 1230
--without-procps \
%endif
%if ! %{with deploypkg}
--disable-deploypkg \
--without-ssl \
%endif
%if %{with_X}
--with-x \
%else
--without-x \
%endif
--disable-dependency-tracking \
--disable-static \
--without-xmlsecurity \
--without-xerces
make
%endif
# If a KMP is not being built, flavors_to_build will be undefined and no modules should be built
%if "%{?flavors_to_build}"
TOPDIR=$PWD
cd ..
mkdir -p obj
for flavor in %{flavors_to_build}; do
rm -rf obj/$flavor
cp -r %{tarname}-%{version}-%{svn_rev} obj/$flavor
pushd obj/$flavor
for module in %{vm_modules}; do
pushd modules/linux/$module
if [ -f ../vmci/Module.symvers ]; then
cp ../vmci/Module.symvers .
fi
export CC_VER_OPTS="VM_CCVER=$(gcc -dumpversion)"
make -C /usr/src/linux-obj/%{_target_cpu}/$flavor modules M=$PWD $CC_VER_OPTS HEADER_DIR="/usr/src/linux-obj/$(uname -i)/default/include" SRCROOT=$PWD OVT_SOURCE_DIR=$TOPDIR
popd
done
popd
done
%endif
%install
# If a KMP is not being built, flavors_to_build will be undefined and no modules can be installed
%if "%{?flavors_to_build}"
# let's use the kernel's own modules_install routine
export INSTALL_MOD_PATH=%{buildroot}
export INSTALL_MOD_DIR=updates
pushd ..
for flavor in %{flavors_to_build}; do
pushd obj/$flavor
for module in %{vm_modules}; do
make -C /usr/src/linux-obj/%_target_cpu/$flavor modules_install M=$PWD/modules/linux/$module
done
popd
done
popd
# fix some rights on the kernel modules, to have a complete -debuginfo package; do not fail if there are no modules left.
chmod u+x %{buildroot}/lib/modules/*/updates/* || :
%endif
%if ! %{KMP}
%if 0%{?suse_version} > 1110
%make_install
%else
%makeinstall
%endif
# Remove exec bit from config files
chmod a-x %{buildroot}%{_sysconfdir}/pam.d/*
# Remove unnecessary files from packaging
find %{buildroot}%{_libdir} -name '*.la' -delete
rm -fr %{buildroot}%{_defaultdocdir}
rm -fr %{buildroot}/usr/share/doc/open-vm-tools/api
rm -f docs/api/build/html/FreeSans.ttf
# Move vm-support to /usr/bin (bnc#874931)
mv %{buildroot}%{_sysconfdir}/vmware-tools/vm-support %{buildroot}%{_bindir}
# install systemd/sysvinit init scripts and symlinks
%if %{with systemd}
install -p -m 644 -D %{SOURCE2} %{buildroot}%{_unitdir}/vmtoolsd.service
ln -sf service %{buildroot}%{_sbindir}/rcvmtoolsd
%else
install -D -m 0755 %{SOURCE1} %{buildroot}%{_sysconfdir}/init.d/vmtoolsd
ln -sf ../../etc/init.d/vmtoolsd %{buildroot}%{_sbindir}/rcvmtoolsd
%endif
%if %{with_X}
# vmware-user is started by vmware-user-suid-wrapper by xdg-autostart
# unfortunately, vmware-user-suid-wrapper does not wait for it's block device
# to appear. For this reason we have now a vmware-user-autostart-wrapper
# which checks for /proc/fs/vmblock/dev to appear and then starts vmware-user-suid-wrapper
install -D -m 0755 %{SOURCE5} %{buildroot}%{_bindir}/vmware-user-autostart-wrapper
install -D -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/xdg/autostart/vmware-user-autostart.desktop
# Install the default tools.conf
install -D -m 0644 %{S:7} %{buildroot}%{_sysconfdir}/vmware-tools/tools.conf
# Remove the 'disable-perl-mon=1' setting if procps is available
%if 0%{?suse_version} > 1220
sed -i '/openSUSE/,+2d' %{buildroot}%{_sysconfdir}/vmware-tools/tools.conf
%endif
# We have our own 'safe' autostart wrapper, which checks for modules to start in autologin mode...
# Thus we drop the 'original' autostartup
rm %{buildroot}%{_sysconfdir}/xdg/autostart/vmware-user.desktop
# handle the .destop files for translations
%suse_update_desktop_file vmware-user-autostart
%endif
# modprobe configuration for vmnics - only include if before SLE-12
%if 0%{?suse_version} < 1315
install -D -m 0644 %{SOURCE6} %{buildroot}%{_sysconfdir}/modprobe.d/50-vmnics.conf
%endif
%if "%{?vmhgfs}"
# fix a link pointing to the buildroot for mount.vmhgfs
( cd %{buildroot}/sbin; rm mount.vmhgfs; ln -s ..%{_sbindir}/mount.vmhgfs )
%else
find %{buildroot} -name '*vmhgfs*' -delete -print
%endif
%endif
%pre
%if %{with systemd}
%service_add_pre vmtoolsd.service
%endif
%post
/sbin/ldconfig
%if %{with systemd}
%service_add_post vmtoolsd.service
%else
%{fillup_and_insserv -Y vmtoolsd}
%endif
%if %{with_X}
%verifyscript desktop
%verify_permissions -e /usr/bin/vmware-user-suid-wrapper
%post desktop
%if 0%{?suse_version} <= 1130
%run_permissions
%else
%set_permissions /usr/bin/vmware-user-suid-wrapper
%endif
%endif
%preun
%if %{with systemd}
%service_del_preun vmtoolsd.service
%else
# stop service with the old name (if exists) on update (something like %%stop_on_update)
test -n "$FIRST_ARG" || FIRST_ARG=$1
if test "$FIRST_ARG" -ge 1 ; then
test -f /etc/sysconfig/services && . /etc/sysconfig/services
if test "$YAST_IS_RUNNING" != "instsys" ; then
/etc/init.d/vmware-guestd stop > /dev/null 2>&1 || :
fi
fi
%stop_on_removal vmtoolsd
%endif
# Tell VMware that open-vm-tools is being uninstalled
if [ "$1" = "0" -a \
-e %{_bindir}/vmware-checkvm -a \
-e %{_bindir}/vmware-rpctool ] && \
%{_bindir}/vmware-checkvm > /dev/null 2>&1; then
%{_bindir}/vmware-rpctool 'tools.set.version 0' > /dev/null 2>&1 || true
fi
%postun
%if %{with systemd}
%service_del_postun vmtoolsd.service
%else
%restart_on_update vmtoolsd
%insserv_cleanup
%endif
/sbin/ldconfig
%post -n libvmtools0 -p /sbin/ldconfig
%postun -n libvmtools0 -p /sbin/ldconfig
%clean
rm -rf %{buildroot}
%if ! %{KMP}
%files
%defattr(-, root, root)
%doc AUTHORS COPYING ChangeLog NEWS README
%{_bindir}/vmtoolsd
%dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/plugins
%dir %{_libdir}/%{name}/plugins/common
%dir %{_libdir}/%{name}/plugins/vmsvc
%{_libdir}/%{name}/plugins/vmsvc/libguestInfo.so
%{_libdir}/%{name}/plugins/vmsvc/libpowerOps.so
%{_libdir}/%{name}/plugins/vmsvc/libtimeSync.so
%{_libdir}/%{name}/plugins/vmsvc/libvmbackup.so
%{_libdir}/%{name}/plugins/common/libhgfsServer.so
%{_libdir}/%{name}/plugins/common/libvix.so
%{_bindir}/vmware-checkvm
%{_bindir}/vmware-hgfsclient
%{_bindir}/vmware-rpctool
%{_bindir}/vmware-toolbox-cmd
%{_bindir}/vmware-xferlogs
%{_bindir}/vm-support
%if "%{?vmhgfs}"
%{_sbindir}/mount.vmhgfs
/sbin/mount.vmhgfs
%endif
%config(noreplace) %{_sysconfdir}/pam.d/vmtoolsd
%dir %{_sysconfdir}/vmware-tools
%dir %{_sysconfdir}/vmware-tools/scripts
%dir %{_sysconfdir}/vmware-tools/scripts/vmware
%{_sysconfdir}/vmware-tools/poweroff-vm-default
%{_sysconfdir}/vmware-tools/poweron-vm-default
%{_sysconfdir}/vmware-tools/resume-vm-default
%{_sysconfdir}/vmware-tools/scripts/vmware/network
%{_sysconfdir}/vmware-tools/statechange.subr
%{_sysconfdir}/vmware-tools/suspend-vm-default
%config(noreplace) %{_sysconfdir}/vmware-tools/tools.conf
%if 0%{?suse_version} < 1315
%dir %{_sysconfdir}/modprobe.d
%config %{_sysconfdir}/modprobe.d/50-vmnics.conf
%endif
%if %{with deploypkg}
%{_bindir}/vmware-guestproxycerttool
%{_libdir}/%{name}/plugins/vmsvc/libdeployPkgPlugin.so
%{_libdir}/%{name}/plugins/vmsvc/libgrabbitmqProxy.so
%config(noreplace) %{_sysconfdir}/vmware-tools/guestproxy-ssl.conf
%endif
%{_datadir}/%{name}/
%if %{with systemd}
%{_unitdir}/vmtoolsd.service
%else
%{_sysconfdir}/init.d/vmtoolsd
%endif
%{_sbindir}/rcvmtoolsd
%exclude %{_libdir}/*.so
%if %{with_X}
%files desktop
%defattr(-, root, root)
%config %{_sysconfdir}/xdg/autostart/vmware-user-autostart.desktop
%verify(not mode) %attr(0755, root, root) %{_bindir}/vmware-user-suid-wrapper
%{_libdir}/%{name}/plugins/vmusr/
%{_bindir}/vmware-user-autostart-wrapper
%{_bindir}/vmware-vmblock-fuse
%endif
%files -n libvmtools0
%defattr(-, root, root)
%{_libdir}/libvmtools.so.*
%{_libdir}/libguestlib.so.*
%{_libdir}/libhgfs.so.*
%if %{with deploypkg}
%{_libdir}/libDeployPkg.so.*
%endif
%files -n libvmtools-devel
%defattr(-,root,root)
%doc docs/api/build/*
%{_includedir}/vmGuestLib
%{_libdir}/*.so
%{_libdir}/pkgconfig/vmguestlib.pc
%if %{with deploypkg}
%{_includedir}/libDeployPkg
%{_libdir}/pkgconfig/libDeployPkg.pc
%endif
%endif
%changelog