diff mbox

[v6,1/1] New package: openvmtools

Message ID 1407500851-6882-1-git-send-email-kaszak@gmail.com
State Superseded
Headers show

Commit Message

Karoly Kasza Aug. 8, 2014, 12:27 p.m. UTC
New package: openvmtools

Signed-off-by: Karoly Kasza <kaszak@gmail.com>
---

Changes v5 -> v6:
  - Added workaround patch for suspend/resume
  - Corrected systemd service script

 package/Config.in                                  |    1 +
 package/openvmtools/Config.in                      |   55 ++++++++++++++
 package/openvmtools/S10vmtoolsd                    |   33 +++++++++
 .../openvmtools-01-has_bsd_printf.patch            |   26 +++++++
 .../openvmtools-02-network_script.patch            |   21 ++++++
 package/openvmtools/openvmtools.mk                 |   76 ++++++++++++++++++++
 package/openvmtools/shutdown                       |    7 ++
 package/openvmtools/vmtoolsd.service               |   14 ++++
 8 files changed, 233 insertions(+)
 create mode 100644 package/openvmtools/Config.in
 create mode 100644 package/openvmtools/S10vmtoolsd
 create mode 100644 package/openvmtools/openvmtools-01-has_bsd_printf.patch
 create mode 100644 package/openvmtools/openvmtools-02-network_script.patch
 create mode 100644 package/openvmtools/openvmtools.mk
 create mode 100644 package/openvmtools/shutdown
 create mode 100644 package/openvmtools/vmtoolsd.service

Comments

Karoly Kasza Sept. 1, 2014, 2:21 p.m. UTC | #1
Hello reviewers,

could anyone please verify if this package is suitable for committing to
2014.11?
Thank you in advance!

Kind regards,
Karoly


On Fri, Aug 8, 2014 at 2:27 PM, Karoly Kasza <kaszak@gmail.com> wrote:

> New package: openvmtools
>
> Signed-off-by: Karoly Kasza <kaszak@gmail.com>
> ---
>
> Changes v5 -> v6:
>   - Added workaround patch for suspend/resume
>   - Corrected systemd service script
>
>  package/Config.in                                  |    1 +
>  package/openvmtools/Config.in                      |   55 ++++++++++++++
>  package/openvmtools/S10vmtoolsd                    |   33 +++++++++
>  .../openvmtools-01-has_bsd_printf.patch            |   26 +++++++
>  .../openvmtools-02-network_script.patch            |   21 ++++++
>  package/openvmtools/openvmtools.mk                 |   76
> ++++++++++++++++++++
>  package/openvmtools/shutdown                       |    7 ++
>  package/openvmtools/vmtoolsd.service               |   14 ++++
>  8 files changed, 233 insertions(+)
>  create mode 100644 package/openvmtools/Config.in
>  create mode 100644 package/openvmtools/S10vmtoolsd
>  create mode 100644 package/openvmtools/openvmtools-01-has_bsd_printf.patch
>  create mode 100644 package/openvmtools/openvmtools-02-network_script.patch
>  create mode 100644 package/openvmtools/openvmtools.mk
>  create mode 100644 package/openvmtools/shutdown
>  create mode 100644 package/openvmtools/vmtoolsd.service
>
> diff --git a/package/Config.in b/package/Config.in
> index 4520ba6..817c231 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -1168,6 +1168,7 @@ endif
>         source "package/ncdu/Config.in"
>         source "package/numactl/Config.in"
>         source "package/nut/Config.in"
> +       source "package/openvmtools/Config.in"
>         source "package/powerpc-utils/Config.in"
>         source "package/polkit/Config.in"
>  if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
> diff --git a/package/openvmtools/Config.in b/package/openvmtools/Config.in
> new file mode 100644
> index 0000000..65220f9
> --- /dev/null
> +++ b/package/openvmtools/Config.in
> @@ -0,0 +1,55 @@
> +config BR2_PACKAGE_OPENVMTOOLS
> +       bool "openvmtools"
> +       depends on BR2_i386 || BR2_x86_64
> +       depends on BR2_USE_MMU # libglib2
> +       depends on BR2_USE_WCHAR # libglib2
> +       depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2
> +       depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
> +       depends on BR2_LARGEFILE
> +       depends on BR2_ENABLE_LOCALE
> +       select BR2_PACKAGE_LIBGLIB2
> +       help
> +         Open Virtual Machine Tools for VMware guest OS
> +
> +         http://open-vm-tools.sourceforge.net/
> +
> +         ICU locales and X11 tools are currently not supported.
> +
> +         NOTE: Support for vmblock-fuse will be enabled in openvmtools if
> the
> +               libfuse package is selected.
> +
> +if BR2_PACKAGE_OPENVMTOOLS
> +
> +config BR2_PACKAGE_OPENVMTOOLS_PROCPS
> +       bool "procps support"
> +       depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
> +       select BR2_PACKAGE_PROCPS_NG
> +       help
> +         Enable support for procps / meminfo
> +
> +comment "procps support needs BR2_PACKAGE_BUSYBOX_SHOW_OTHERS"
> +       depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
> +
> +config BR2_PACKAGE_OPENVMTOOLS_DNET
> +       bool "dnet support"
> +       depends on BR2_INET_IPV6
> +       select BR2_PACKAGE_LIBDNET
> +       help
> +         Enable support for libdnet / nicinfo
> +
> +comment "openvmtools dnet support needs a toolchain w/ IPv6"
> +       depends on !BR2_INET_IPV6
> +
> +config BR2_PACKAGE_OPENVMTOOLS_PAM
> +       bool "PAM support"
> +       select BR2_PACKAGE_LINUX_PAM
> +       help
> +         Support for PAM in openvmtools
> +
> +endif
> +
> +comment "openvmtools needs a toolchain w/ wchar, threads, RPC, largefile,
> locale"
> +       depends on BR2_i386 || BR2_x86_64
> +       depends on BR2_USE_MMU
> +       depends on !BR2_USE_WCHAR ||!BR2_TOOLCHAIN_HAS_THREADS || \
> +       !BR2_TOOLCHAIN_HAS_NATIVE_RPC || !BR2_LARGEFILE ||
> !BR2_ENABLE_LOCALE
> diff --git a/package/openvmtools/S10vmtoolsd
> b/package/openvmtools/S10vmtoolsd
> new file mode 100644
> index 0000000..969ba93
> --- /dev/null
> +++ b/package/openvmtools/S10vmtoolsd
> @@ -0,0 +1,33 @@
> +#!/bin/sh
> +#
> +# Starts vmtoolsd for openvmtools
> +#
> +
> +EXEC="/usr/bin/vmtoolsd"
> +ARGS="-b"
> +PID="/var/run/vmtoolsd.pid"
> +
> +case "$1" in
> +  start)
> +    echo -n "Starting vmtoolsd: "
> +    start-stop-daemon -S -q -x $EXEC -- $ARGS $PID
> +    if [ $? != 0 ]; then
> +      echo "FAILED"
> +      exit 1
> +    else
> +      echo "OK"
> +    fi
> +  ;;
> +  stop)
> +    echo -n "Stopping vmtoolsd: "
> +    start-stop-daemon -K -q -p $PID
> +    echo "OK"
> +  ;;
> +  restart|reload)
> +    $0 stop
> +    $0 start
> +  ;;
> +  *)
> +    echo "Usage: $0 {start|stop|restart}"
> +    exit 1
> +esac
> diff --git a/package/openvmtools/openvmtools-01-has_bsd_printf.patch
> b/package/openvmtools/openvmtools-01-has_bsd_printf.patch
> new file mode 100644
> index 0000000..889f7d1
> --- /dev/null
> +++ b/package/openvmtools/openvmtools-01-has_bsd_printf.patch
> @@ -0,0 +1,26 @@
> +lib/misc/msgList.c: missing #ifdef
> +
> +This macro checks for BSD style printf(), which is not present
> +when compiling for uClibc. The linked functions are unnecessary in
> +this case, and they break compilation.
> +
> +Signed-off-by: Karoly Kasza <kaszak@gmail.com>
> +
> +--- open-vm-tools-9.4.6-1770165.orig/lib/misc/msgList.c        2014-07-02
> 00:21:14.000000000 +0200
> ++++ open-vm-tools-9.4.6-1770165/lib/misc/msgList.c     2014-07-29
> 13:40:40.000000000 +0200
> +@@ -487,6 +487,7 @@
> +    return messages->id;
> + }
> +
> ++#ifdef HAS_BSD_PRINTF
> +
> + /*
> +  *----------------------------------------------------------------------
> +@@ -566,6 +567,7 @@
> +    }
> + }
> +
> ++#endif
> +
> + /*
> +  *----------------------------------------------------------------------
> diff --git a/package/openvmtools/openvmtools-02-network_script.patch
> b/package/openvmtools/openvmtools-02-network_script.patch
> new file mode 100644
> index 0000000..67705cc
> --- /dev/null
> +++ b/package/openvmtools/openvmtools-02-network_script.patch
> @@ -0,0 +1,21 @@
> +scripts/linux/network: exit normally if no network control script
> +
> +When using suspend/resume from the hypervisor, openvmtools checks for the
> +networking script, and exists with an error if not found, making the
> hypervisor
> +raise a warning message. This workaround silences that error message.
> +
> +Signed-off-by: Karoly Kasza <kaszak@gmail.com>
> +
> +--- open-vm-tools-9.4.6-1770165.orig/scripts/linux/network     2014-07-02
> 00:21:14.000000000 +0200
> ++++ open-vm-tools-9.4.6-1770165/scripts/linux/network  2014-08-07
> 16:34:21.963514273 +0200
> +@@ -88,7 +88,9 @@
> + run_network_script()
> + {
> +    script=`find_networking_script`
> +-   [ "$script" != "error" ] || Panic "Cannot find system networking
> script."
> ++#   [ "$script" != "error" ] || Panic "Cannot find system networking
> script."
> ++# Modified for buildroot
> ++   [ "$script" != "error" ] || exit 0
> +
> +    # Using SysV "service" if it exists, otherwise fall back to run the
> script directly
> +    service=`which service 2>/dev/null`
> diff --git a/package/openvmtools/openvmtools.mk b/package/openvmtools/
> openvmtools.mk
> new file mode 100644
> index 0000000..4b6e0bb
> --- /dev/null
> +++ b/package/openvmtools/openvmtools.mk
> @@ -0,0 +1,76 @@
>
> +################################################################################
> +#
> +# openvmtools
> +#
>
> +################################################################################
> +
> +OPENVMTOOLS_VERSION = 9.4.6-1770165
> +OPENVMTOOLS_SOURCE = open-vm-tools-$(OPENVMTOOLS_VERSION).tar.gz
> +OPENVMTOOLS_SITE =
> http://downloads.sourceforge.net/project/open-vm-tools/open-vm-tools/stable-9.4.x
> +OPENVMTOOLS_LICENSE = LGPLv2.1
> +OPENVMTOOLS_LICENSE_FILES = COPYING
> +OPENVMTOOLS_AUTORECONF = YES
> +OPENVMTOOLS_CONF_OPT = --without-icu --without-x --without-gtk2
> --without-gtkmm --without-kernel-modules
> +
> +# -Wno-deprecated-declarations is a workaround for a bug in open-vm-tools
> +# See http://sourceforge.net/p/open-vm-tools/mailman/message/31473171/
> +OPENVMTOOLS_CONF_ENV = CFLAGS="$(TARGET_CFLAGS)
> -Wno-deprecated-declarations"
> +
> +OPENVMTOOLS_DEPENDENCIES = libglib2
> +
> +# When libfuse is available, openvmtools can build vmblock-fuse, so
> +# make sure that libfuse gets built first.
> +ifeq ($(BR2_PACKAGE_LIBFUSE),y)
> +OPENVMTOOLS_DEPENDENCIES += libfuse
> +endif
> +
> +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PROCPS),y)
> +OPENVMTOOLS_CONF_ENV += CUSTOM_PROCPS_NAME=procps
> LDFLAGS="-L$(TARGET_DIR)/usr/lib"
> +OPENVMTOOLS_CONF_OPT += --with-procps
> +OPENVMTOOLS_DEPENDENCIES += procps-ng
> +else
> +OPENVMTOOLS_CONF_OPT += --without-procps
> +endif
> +
> +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_DNET),y)
> +OPENVMTOOLS_CONF_ENV +=
> CUSTOM_DNET_CPPFLAGS="-I$(STAGING_DIR)/usr/include"
> +OPENVMTOOLS_CONF_OPT += --with-dnet
> +OPENVMTOOLS_DEPENDENCIES += libdnet
> +else
> +OPENVMTOOLS_CONF_OPT += --without-dnet
> +endif
> +
> +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PAM),y)
> +OPENVMTOOLS_CONF_OPT += --with-pam
> +OPENVMTOOLS_MAKE_OPT += CFLAGS+="-Wno-unused-local-typedefs"
> +OPENVMTOOLS_DEPENDENCIES += linux-pam
> +else
> +OPENVMTOOLS_CONF_OPT += --without-pam
> +endif
> +
> +# symlink needed by lib/system/systemLinux.c (or will cry in
> /var/log/messages)
> +# /sbin/shutdown needed for Guest OS restart/shutdown from hypervisor
> +define OPENVMTOOLS_POST_INSTALL_TARGET_THINGIES
> +       ln -fs os-release $(TARGET_DIR)/etc/lfs-release
> +       if [ ! -e $(TARGET_DIR)/sbin/shutdown ]; then \
> +               $(INSTALL) -D -m 755 package/openvmtools/shutdown \
> +                       $(TARGET_DIR)/sbin/shutdown; \
> +       fi
> +endef
> +
> +OPENVMTOOLS_POST_INSTALL_TARGET_HOOKS +=
> OPENVMTOOLS_POST_INSTALL_TARGET_THINGIES
> +
> +define OPENVMTOOLS_INSTALL_INIT_SYSV
> +       $(INSTALL) -D -m 755 package/openvmtools/S10vmtoolsd \
> +               $(TARGET_DIR)/etc/init.d/S10vmtoolsd
> +endef
> +
> +define OPENVMTOOLS_INSTALL_INIT_SYSTEMD
> +       $(INSTALL) -D -m 644 package/openvmtools/vmtoolsd.service \
> +               $(TARGET_DIR)/etc/systemd/system/vmtoolsd.service
> +       mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
> +       ln -fs ../vmtoolsd.service \
> +
>  $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/vmtoolsd.service
> +endef
> +
> +$(eval $(autotools-package))
> diff --git a/package/openvmtools/shutdown b/package/openvmtools/shutdown
> new file mode 100644
> index 0000000..bca9765
> --- /dev/null
> +++ b/package/openvmtools/shutdown
> @@ -0,0 +1,7 @@
> +#!/bin/sh
> +#compatibility script for openvmtools
> +if [ "$1" == "-r" ]; then
> +/sbin/reboot
> +else
> +/sbin/poweroff
> +fi
> diff --git a/package/openvmtools/vmtoolsd.service
> b/package/openvmtools/vmtoolsd.service
> new file mode 100644
> index 0000000..17a4df4
> --- /dev/null
> +++ b/package/openvmtools/vmtoolsd.service
> @@ -0,0 +1,14 @@
> +[Unit]
> +Description=vmtoolsd for openvmtools
> +After=syslog.target network.target
> +
> +[Service]
> +Type=forking
> +PIDFile=/var/run/vmtoolsd.pid
> +ExecStart=/usr/bin/vmtoolsd -b /var/run/vmtoolsd.pid
> +Restart=on-failure
> +KillMode=process
> +KillSignal=SIGKILL
> +
> +[Install]
> +WantedBy=multi-user.target
> --
> 1.7.10.4
>
>
Yann E. MORIN Sept. 2, 2014, 10:38 a.m. UTC | #2
Karoly, All,

On 2014-08-08 14:27 +0200, Karoly Kasza spake thusly:
> New package: openvmtools

Some comments below.

[--SNIP--]
> diff --git a/package/openvmtools/Config.in b/package/openvmtools/Config.in
> new file mode 100644
> index 0000000..65220f9
> --- /dev/null
> +++ b/package/openvmtools/Config.in
> @@ -0,0 +1,55 @@
> +config BR2_PACKAGE_OPENVMTOOLS
> +	bool "openvmtools"
> +	depends on BR2_i386 || BR2_x86_64
> +	depends on BR2_USE_MMU # libglib2
> +	depends on BR2_USE_WCHAR # libglib2
> +	depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2
> +	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
> +	depends on BR2_LARGEFILE
> +	depends on BR2_ENABLE_LOCALE
> +	select BR2_PACKAGE_LIBGLIB2
> +	help
> +	  Open Virtual Machine Tools for VMware guest OS
> +
> +	  http://open-vm-tools.sourceforge.net/
> +
> +	  ICU locales and X11 tools are currently not supported.
> +
> +	  NOTE: Support for vmblock-fuse will be enabled in openvmtools if the
> +	        libfuse package is selected.
> +
> +if BR2_PACKAGE_OPENVMTOOLS
> +
> +config BR2_PACKAGE_OPENVMTOOLS_PROCPS
> +	bool "procps support"
> +	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
> +	select BR2_PACKAGE_PROCPS_NG
> +	help
> +	  Enable support for procps / meminfo
> +
> +comment "procps support needs BR2_PACKAGE_BUSYBOX_SHOW_OTHERS"
> +	depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
> +
> +config BR2_PACKAGE_OPENVMTOOLS_DNET
> +	bool "dnet support"
> +	depends on BR2_INET_IPV6
> +	select BR2_PACKAGE_LIBDNET
> +	help
> +	  Enable support for libdnet / nicinfo
> +
> +comment "openvmtools dnet support needs a toolchain w/ IPv6"
> +	depends on !BR2_INET_IPV6
> +
> +config BR2_PACKAGE_OPENVMTOOLS_PAM
> +	bool "PAM support"
> +	select BR2_PACKAGE_LINUX_PAM

linux-pam depends on !static, so you should propagate the dependency
here.

linux-pam also depends on locales and wchar, but they re handled by the
main symbols of openvmtools, so it is not needed to replicate them here.
A comment might be OK, though:

    # linux-pam needs locale and wchar, but we already have this
    # dependency on the main symbol, above.

> diff --git a/package/openvmtools/openvmtools.mk b/package/openvmtools/openvmtools.mk
> new file mode 100644
> index 0000000..4b6e0bb
> --- /dev/null
> +++ b/package/openvmtools/openvmtools.mk
> @@ -0,0 +1,76 @@
> +################################################################################
> +#
> +# openvmtools
> +#
> +################################################################################
> +
> +OPENVMTOOLS_VERSION = 9.4.6-1770165
> +OPENVMTOOLS_SOURCE = open-vm-tools-$(OPENVMTOOLS_VERSION).tar.gz
> +OPENVMTOOLS_SITE = http://downloads.sourceforge.net/project/open-vm-tools/open-vm-tools/stable-9.4.x
> +OPENVMTOOLS_LICENSE = LGPLv2.1
> +OPENVMTOOLS_LICENSE_FILES = COPYING
> +OPENVMTOOLS_AUTORECONF = YES

Please add a comment saying why we need to autoreconf.

> +OPENVMTOOLS_CONF_OPT = --without-icu --without-x --without-gtk2 --without-gtkmm --without-kernel-modules
> +
> +# -Wno-deprecated-declarations is a workaround for a bug in open-vm-tools
> +# See http://sourceforge.net/p/open-vm-tools/mailman/message/31473171/
> +OPENVMTOOLS_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -Wno-deprecated-declarations"
> +
> +OPENVMTOOLS_DEPENDENCIES = libglib2
> +
> +# When libfuse is available, openvmtools can build vmblock-fuse, so
> +# make sure that libfuse gets built first.
> +ifeq ($(BR2_PACKAGE_LIBFUSE),y)
> +OPENVMTOOLS_DEPENDENCIES += libfuse
> +endif
> +
> +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PROCPS),y)
> +OPENVMTOOLS_CONF_ENV += CUSTOM_PROCPS_NAME=procps LDFLAGS="-L$(TARGET_DIR)/usr/lib"

Why do you point to TARGET_DIR?

Usually, we consider the development files are installed in STAGING_DIR.
So, if you need to point to a library path, you should point to
STAGING_DIR here.

But STAGING_DIR/usr/lib is already searched for by our toolchain, so it
should not be necessary to add it.

If you really need that, explain why.

> +OPENVMTOOLS_CONF_OPT += --with-procps
> +OPENVMTOOLS_DEPENDENCIES += procps-ng
> +else
> +OPENVMTOOLS_CONF_OPT += --without-procps
> +endif
> +
> +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_DNET),y)
> +OPENVMTOOLS_CONF_ENV += CUSTOM_DNET_CPPFLAGS="-I$(STAGING_DIR)/usr/include"

Ditto, STAGING_DIR/usr/include is already searched for by our toolchain,
so it should not be needed.

If you really need that, explain why.

Regards,
Yann E. MORIN.
Karoly Kasza Sept. 2, 2014, 2:23 p.m. UTC | #3
I accidentally replied instead of reply-all.

---------- Forwarded message ----------
From: Károly Kasza <kaszak@gmail.com>
Date: Tue, Sep 2, 2014 at 3:59 PM
Subject: Re: [PATCH v6 1/1] New package: openvmtools
To: "Yann E. MORIN" <yann.morin.1998@free.fr>


Hello Yann,

thanks for reviewing this patch!


> > +config BR2_PACKAGE_OPENVMTOOLS_PAM
> > +     bool "PAM support"
> > +     select BR2_PACKAGE_LINUX_PAM
>
> linux-pam depends on !static, so you should propagate the dependency
> here.
>
>
OK.


> linux-pam also depends on locales and wchar, but they re handled by the
> main symbols of openvmtools, so it is not needed to replicate them here.
> A comment might be OK, though:
>
>     # linux-pam needs locale and wchar, but we already have this
>     # dependency on the main symbol, above.
>
>
OK.


> > +OPENVMTOOLS_AUTORECONF = YES
>
> Please add a comment saying why we need to autoreconf.
>
>
OK. (It's because the package is distributed without a configure script -
http://sourceforge.net/p/open-vm-tools/mailman/message/32550385/ )



> > +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PROCPS),y)
> > +OPENVMTOOLS_CONF_ENV += CUSTOM_PROCPS_NAME=procps
> LDFLAGS="-L$(TARGET_DIR)/usr/lib"
>
> Why do you point to TARGET_DIR?
>
> Usually, we consider the development files are installed in STAGING_DIR.
> So, if you need to point to a library path, you should point to
> STAGING_DIR here.
>
> But STAGING_DIR/usr/lib is already searched for by our toolchain, so it
> should not be necessary to add it.
>
> If you really need that, explain why.
>

If I do not add -L$(TARGET_DIR)/usr/lib I simply get an error while
configuring:

checking for getstat in -lprocps... no
checking for getstat in -lproc-3.2.8... no
checking for getstat in -lproc-3.2.7... no
configure: error: libproc not found. Please configure without procps (using
--without-procps) or install procps - http://procps.sourceforge.net
make: ***
[/home/scythe/buildroot/output/build/openvmtools-9.4.6-1770165/.stamp_configured]
Error 1

I don't know why, but I simply can not find any procps related libraries in
the staging directory:

scythe@buildroot-vm:~/buildroot/output$ find . | grep libproc
./build/procps-ng-3.3.9/proc/.libs/libprocps.lai
./build/procps-ng-3.3.9/proc/.libs/libprocps.so.3
./build/procps-ng-3.3.9/proc/.libs/libprocps.a
./build/procps-ng-3.3.9/proc/.libs/libprocps.so.3.0.0
./build/procps-ng-3.3.9/proc/.libs/libprocps.so
./build/procps-ng-3.3.9/proc/.libs/libprocps.la
./build/procps-ng-3.3.9/proc/libprocps.sym
./build/procps-ng-3.3.9/proc/libprocps.pc
./build/procps-ng-3.3.9/proc/libprocps.pc.in
./build/procps-ng-3.3.9/proc/libprocps.la
./target/usr/lib/pkgconfig/libprocps.pc
./target/usr/lib/libprocps.so.3
./target/usr/lib/libprocps.a
./target/usr/lib/libprocps.so.3.0.0
./target/usr/lib/libprocps.so
./target/usr/lib/libprocps.la
scythe@buildroot-vm:~/buildroot/output$ cd staging
scythe@buildroot-vm:~/buildroot/output/staging$ find . | grep libproc

> +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_DNET),y)
> > +OPENVMTOOLS_CONF_ENV +=
> CUSTOM_DNET_CPPFLAGS="-I$(STAGING_DIR)/usr/include"
>
> Ditto, STAGING_DIR/usr/include is already searched for by our toolchain,
> so it should not be needed.
>
> If you really need that, explain why.
>

If I omit the CUSTOM_DNET_CPPFLAGS variable, I get an error while
configuring:

checking for dumbnet-config... no
checking for dnet-config... no
configure: error: dnet-config was not found on your PATH. Please configure
without dnet (using --without-dnet) or install dnet -
http://libdnet.sourceforge.net
make: ***
[/home/scythe/buildroot/output/build/openvmtools-9.4.6-1770165/.stamp_configured]
Error 1

I think this is because the configure script is looking for a binary called
"dnet-config", and it needs the environment variable if the binary is not
found in the $PATH. So I guess this can't be circumvented.

I would send a new version, do you have any idea why procps-ng doesn't copy
it's libraries into the $(STAGING_DIR)?

Kind regards,
Karoly
Karoly Kasza Sept. 2, 2014, 2:25 p.m. UTC | #4
And Yann's reply for the list archives.

---------- Forwarded message ----------
From: Yann E. MORIN <yann.morin.1998@free.fr>
Date: Tue, Sep 2, 2014 at 4:11 PM
Subject: Re: [PATCH v6 1/1] New package: openvmtools
To: Károly Kasza <kaszak@gmail.com>


Karoly, All,

On 2014-09-02 15:59 +0200, Károly Kasza spake thusly:
[--SNIP--]
> > > +OPENVMTOOLS_AUTORECONF = YES
> > Please add a comment saying why we need to autoreconf.
> >
> OK. (It's because the package is distributed without a configure script -
> http://sourceforge.net/p/open-vm-tools/mailman/message/32550385/ )

OK, add this above the "AUTORECONF = YES" line.

> > > +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PROCPS),y)
> > > +OPENVMTOOLS_CONF_ENV += CUSTOM_PROCPS_NAME=procps
> > LDFLAGS="-L$(TARGET_DIR)/usr/lib"
> >
> > Why do you point to TARGET_DIR?
> >
> > Usually, we consider the development files are installed in STAGING_DIR.
> > So, if you need to point to a library path, you should point to
> > STAGING_DIR here.
> >
> > But STAGING_DIR/usr/lib is already searched for by our toolchain, so it
> > should not be necessary to add it.
> >
> > If you really need that, explain why.
> >
>
> If I do not add -L$(TARGET_DIR)/usr/lib I simply get an error while
> configuring:
>
> checking for getstat in -lprocps... no
> checking for getstat in -lproc-3.2.8... no
> checking for getstat in -lproc-3.2.7... no
> configure: error: libproc not found. Please configure without procps
(using
> --without-procps) or install procps - http://procps.sourceforge.net
> make: ***
>
[/home/scythe/buildroot/output/build/openvmtools-9.4.6-1770165/.stamp_configured]
> Error 1
>
> I don't know why, but I simply can not find any procps related libraries
in
> the staging directory:
>
> scythe@buildroot-vm:~/buildroot/output$ find . | grep libproc
> ./build/procps-ng-3.3.9/proc/.libs/libprocps.lai
> ./build/procps-ng-3.3.9/proc/.libs/libprocps.so.3
> ./build/procps-ng-3.3.9/proc/.libs/libprocps.a
> ./build/procps-ng-3.3.9/proc/.libs/libprocps.so.3.0.0
> ./build/procps-ng-3.3.9/proc/.libs/libprocps.so
> ./build/procps-ng-3.3.9/proc/.libs/libprocps.la
> ./build/procps-ng-3.3.9/proc/libprocps.sym
> ./build/procps-ng-3.3.9/proc/libprocps.pc
> ./build/procps-ng-3.3.9/proc/libprocps.pc.in
> ./build/procps-ng-3.3.9/proc/libprocps.la
> ./target/usr/lib/pkgconfig/libprocps.pc
> ./target/usr/lib/libprocps.so.3
> ./target/usr/lib/libprocps.a
> ./target/usr/lib/libprocps.so.3.0.0
> ./target/usr/lib/libprocps.so
> ./target/usr/lib/libprocps.la
> scythe@buildroot-vm:~/buildroot/output$ cd staging
> scythe@buildroot-vm:~/buildroot/output/staging$ find . | grep libproc
>
> > +ifeq ($(BR2_PACKAGE_OPENVMTOOLS_DNET),y)
> > > +OPENVMTOOLS_CONF_ENV +=
> > CUSTOM_DNET_CPPFLAGS="-I$(STAGING_DIR)/usr/include"
> >
> > Ditto, STAGING_DIR/usr/include is already searched for by our toolchain,
> > so it should not be needed.
> >
> > If you really need that, explain why.
> >
>
> If I omit the CUSTOM_DNET_CPPFLAGS variable, I get an error while
> configuring:
>
> checking for dumbnet-config... no
> checking for dnet-config... no
> configure: error: dnet-config was not found on your PATH. Please configure
> without dnet (using --without-dnet) or install dnet -
> http://libdnet.sourceforge.net
> make: ***
>
[/home/scythe/buildroot/output/build/openvmtools-9.4.6-1770165/.stamp_configured]
> Error 1
>
> I think this is because the configure script is looking for a binary
called
> "dnet-config", and it needs the environment variable if the binary is not
> found in the $PATH. So I guess this can't be circumvented.

Ah, then there are a few possibilities, of which the best would be to
change configure.ac to call $DNET_CONFIG is it is set, instead of just
dnet-config, and then set DNT_CONFIG=$(STAGING_DIR)/usr/bin/dnet-config

> I would send a new version, do you have any idea why procps-ng doesn't
copy
> it's libraries into the $(STAGING_DIR)?

Yep, that's because propcs-ng.mk does not have INSTALL_STAGING = YES.
Provide a (separate) patch that adds this to procps-ng.

I'll do a further review of your comments later (~16:00 UTC), for now
I've got to go...

Regards,
Yann E. MORIN.

--
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics'
conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___
   |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is
no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v
 conspiracy.  |
'------------------------------^-------^------------------^--------------------'
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index 4520ba6..817c231 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1168,6 +1168,7 @@  endif
 	source "package/ncdu/Config.in"
 	source "package/numactl/Config.in"
 	source "package/nut/Config.in"
+	source "package/openvmtools/Config.in"
 	source "package/powerpc-utils/Config.in"
 	source "package/polkit/Config.in"
 if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
diff --git a/package/openvmtools/Config.in b/package/openvmtools/Config.in
new file mode 100644
index 0000000..65220f9
--- /dev/null
+++ b/package/openvmtools/Config.in
@@ -0,0 +1,55 @@ 
+config BR2_PACKAGE_OPENVMTOOLS
+	bool "openvmtools"
+	depends on BR2_i386 || BR2_x86_64
+	depends on BR2_USE_MMU # libglib2
+	depends on BR2_USE_WCHAR # libglib2
+	depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2
+	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
+	depends on BR2_LARGEFILE
+	depends on BR2_ENABLE_LOCALE
+	select BR2_PACKAGE_LIBGLIB2
+	help
+	  Open Virtual Machine Tools for VMware guest OS
+
+	  http://open-vm-tools.sourceforge.net/
+
+	  ICU locales and X11 tools are currently not supported.
+
+	  NOTE: Support for vmblock-fuse will be enabled in openvmtools if the
+	        libfuse package is selected.
+
+if BR2_PACKAGE_OPENVMTOOLS
+
+config BR2_PACKAGE_OPENVMTOOLS_PROCPS
+	bool "procps support"
+	depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
+	select BR2_PACKAGE_PROCPS_NG
+	help
+	  Enable support for procps / meminfo
+
+comment "procps support needs BR2_PACKAGE_BUSYBOX_SHOW_OTHERS"
+	depends on !BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
+
+config BR2_PACKAGE_OPENVMTOOLS_DNET
+	bool "dnet support"
+	depends on BR2_INET_IPV6
+	select BR2_PACKAGE_LIBDNET
+	help
+	  Enable support for libdnet / nicinfo
+
+comment "openvmtools dnet support needs a toolchain w/ IPv6"
+	depends on !BR2_INET_IPV6
+
+config BR2_PACKAGE_OPENVMTOOLS_PAM
+	bool "PAM support"
+	select BR2_PACKAGE_LINUX_PAM
+	help
+	  Support for PAM in openvmtools
+
+endif
+
+comment "openvmtools needs a toolchain w/ wchar, threads, RPC, largefile, locale"
+	depends on BR2_i386 || BR2_x86_64
+	depends on BR2_USE_MMU
+	depends on !BR2_USE_WCHAR ||!BR2_TOOLCHAIN_HAS_THREADS || \
+	!BR2_TOOLCHAIN_HAS_NATIVE_RPC || !BR2_LARGEFILE || !BR2_ENABLE_LOCALE
diff --git a/package/openvmtools/S10vmtoolsd b/package/openvmtools/S10vmtoolsd
new file mode 100644
index 0000000..969ba93
--- /dev/null
+++ b/package/openvmtools/S10vmtoolsd
@@ -0,0 +1,33 @@ 
+#!/bin/sh
+#
+# Starts vmtoolsd for openvmtools
+#
+
+EXEC="/usr/bin/vmtoolsd"
+ARGS="-b"
+PID="/var/run/vmtoolsd.pid"
+
+case "$1" in
+  start)
+    echo -n "Starting vmtoolsd: "
+    start-stop-daemon -S -q -x $EXEC -- $ARGS $PID
+    if [ $? != 0 ]; then
+      echo "FAILED"
+      exit 1
+    else
+      echo "OK"
+    fi
+  ;;
+  stop)
+    echo -n "Stopping vmtoolsd: "
+    start-stop-daemon -K -q -p $PID
+    echo "OK"
+  ;;
+  restart|reload)
+    $0 stop
+    $0 start
+  ;;
+  *)
+    echo "Usage: $0 {start|stop|restart}"
+    exit 1
+esac
diff --git a/package/openvmtools/openvmtools-01-has_bsd_printf.patch b/package/openvmtools/openvmtools-01-has_bsd_printf.patch
new file mode 100644
index 0000000..889f7d1
--- /dev/null
+++ b/package/openvmtools/openvmtools-01-has_bsd_printf.patch
@@ -0,0 +1,26 @@ 
+lib/misc/msgList.c: missing #ifdef
+
+This macro checks for BSD style printf(), which is not present
+when compiling for uClibc. The linked functions are unnecessary in
+this case, and they break compilation.
+
+Signed-off-by: Karoly Kasza <kaszak@gmail.com>
+
+--- open-vm-tools-9.4.6-1770165.orig/lib/misc/msgList.c	2014-07-02 00:21:14.000000000 +0200
++++ open-vm-tools-9.4.6-1770165/lib/misc/msgList.c	2014-07-29 13:40:40.000000000 +0200
+@@ -487,6 +487,7 @@
+    return messages->id;
+ }
+ 
++#ifdef HAS_BSD_PRINTF
+ 
+ /*
+  *----------------------------------------------------------------------
+@@ -566,6 +567,7 @@
+    }
+ }
+ 
++#endif
+ 
+ /*
+  *----------------------------------------------------------------------
diff --git a/package/openvmtools/openvmtools-02-network_script.patch b/package/openvmtools/openvmtools-02-network_script.patch
new file mode 100644
index 0000000..67705cc
--- /dev/null
+++ b/package/openvmtools/openvmtools-02-network_script.patch
@@ -0,0 +1,21 @@ 
+scripts/linux/network: exit normally if no network control script
+
+When using suspend/resume from the hypervisor, openvmtools checks for the
+networking script, and exists with an error if not found, making the hypervisor
+raise a warning message. This workaround silences that error message.
+
+Signed-off-by: Karoly Kasza <kaszak@gmail.com>
+
+--- open-vm-tools-9.4.6-1770165.orig/scripts/linux/network	2014-07-02 00:21:14.000000000 +0200
++++ open-vm-tools-9.4.6-1770165/scripts/linux/network	2014-08-07 16:34:21.963514273 +0200
+@@ -88,7 +88,9 @@
+ run_network_script()
+ {
+    script=`find_networking_script`
+-   [ "$script" != "error" ] || Panic "Cannot find system networking script."
++#   [ "$script" != "error" ] || Panic "Cannot find system networking script."
++# Modified for buildroot
++   [ "$script" != "error" ] || exit 0
+ 
+    # Using SysV "service" if it exists, otherwise fall back to run the script directly
+    service=`which service 2>/dev/null`
diff --git a/package/openvmtools/openvmtools.mk b/package/openvmtools/openvmtools.mk
new file mode 100644
index 0000000..4b6e0bb
--- /dev/null
+++ b/package/openvmtools/openvmtools.mk
@@ -0,0 +1,76 @@ 
+################################################################################
+#
+# openvmtools
+#
+################################################################################
+
+OPENVMTOOLS_VERSION = 9.4.6-1770165
+OPENVMTOOLS_SOURCE = open-vm-tools-$(OPENVMTOOLS_VERSION).tar.gz
+OPENVMTOOLS_SITE = http://downloads.sourceforge.net/project/open-vm-tools/open-vm-tools/stable-9.4.x
+OPENVMTOOLS_LICENSE = LGPLv2.1
+OPENVMTOOLS_LICENSE_FILES = COPYING
+OPENVMTOOLS_AUTORECONF = YES
+OPENVMTOOLS_CONF_OPT = --without-icu --without-x --without-gtk2 --without-gtkmm --without-kernel-modules
+
+# -Wno-deprecated-declarations is a workaround for a bug in open-vm-tools
+# See http://sourceforge.net/p/open-vm-tools/mailman/message/31473171/
+OPENVMTOOLS_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -Wno-deprecated-declarations"
+
+OPENVMTOOLS_DEPENDENCIES = libglib2
+
+# When libfuse is available, openvmtools can build vmblock-fuse, so
+# make sure that libfuse gets built first.
+ifeq ($(BR2_PACKAGE_LIBFUSE),y)
+OPENVMTOOLS_DEPENDENCIES += libfuse
+endif
+
+ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PROCPS),y)
+OPENVMTOOLS_CONF_ENV += CUSTOM_PROCPS_NAME=procps LDFLAGS="-L$(TARGET_DIR)/usr/lib"
+OPENVMTOOLS_CONF_OPT += --with-procps
+OPENVMTOOLS_DEPENDENCIES += procps-ng
+else
+OPENVMTOOLS_CONF_OPT += --without-procps
+endif
+
+ifeq ($(BR2_PACKAGE_OPENVMTOOLS_DNET),y)
+OPENVMTOOLS_CONF_ENV += CUSTOM_DNET_CPPFLAGS="-I$(STAGING_DIR)/usr/include"
+OPENVMTOOLS_CONF_OPT += --with-dnet
+OPENVMTOOLS_DEPENDENCIES += libdnet
+else
+OPENVMTOOLS_CONF_OPT += --without-dnet
+endif
+
+ifeq ($(BR2_PACKAGE_OPENVMTOOLS_PAM),y)
+OPENVMTOOLS_CONF_OPT += --with-pam
+OPENVMTOOLS_MAKE_OPT += CFLAGS+="-Wno-unused-local-typedefs"
+OPENVMTOOLS_DEPENDENCIES += linux-pam
+else
+OPENVMTOOLS_CONF_OPT += --without-pam
+endif
+
+# symlink needed by lib/system/systemLinux.c (or will cry in /var/log/messages)
+# /sbin/shutdown needed for Guest OS restart/shutdown from hypervisor
+define OPENVMTOOLS_POST_INSTALL_TARGET_THINGIES
+	ln -fs os-release $(TARGET_DIR)/etc/lfs-release
+	if [ ! -e $(TARGET_DIR)/sbin/shutdown ]; then \
+		$(INSTALL) -D -m 755 package/openvmtools/shutdown \
+			$(TARGET_DIR)/sbin/shutdown; \
+	fi
+endef
+
+OPENVMTOOLS_POST_INSTALL_TARGET_HOOKS += OPENVMTOOLS_POST_INSTALL_TARGET_THINGIES
+
+define OPENVMTOOLS_INSTALL_INIT_SYSV
+	$(INSTALL) -D -m 755 package/openvmtools/S10vmtoolsd \
+		$(TARGET_DIR)/etc/init.d/S10vmtoolsd
+endef
+
+define OPENVMTOOLS_INSTALL_INIT_SYSTEMD
+	$(INSTALL) -D -m 644 package/openvmtools/vmtoolsd.service \
+		$(TARGET_DIR)/etc/systemd/system/vmtoolsd.service
+	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
+	ln -fs ../vmtoolsd.service \
+		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/vmtoolsd.service
+endef
+
+$(eval $(autotools-package))
diff --git a/package/openvmtools/shutdown b/package/openvmtools/shutdown
new file mode 100644
index 0000000..bca9765
--- /dev/null
+++ b/package/openvmtools/shutdown
@@ -0,0 +1,7 @@ 
+#!/bin/sh
+#compatibility script for openvmtools
+if [ "$1" == "-r" ]; then
+/sbin/reboot
+else
+/sbin/poweroff
+fi
diff --git a/package/openvmtools/vmtoolsd.service b/package/openvmtools/vmtoolsd.service
new file mode 100644
index 0000000..17a4df4
--- /dev/null
+++ b/package/openvmtools/vmtoolsd.service
@@ -0,0 +1,14 @@ 
+[Unit]
+Description=vmtoolsd for openvmtools
+After=syslog.target network.target
+
+[Service]
+Type=forking
+PIDFile=/var/run/vmtoolsd.pid
+ExecStart=/usr/bin/vmtoolsd -b /var/run/vmtoolsd.pid
+Restart=on-failure
+KillMode=process
+KillSignal=SIGKILL
+
+[Install]
+WantedBy=multi-user.target