Added cloud-init.patch to detect cloud-init correctly.
Added cleanup for /etc/vmware-tools directory on uninstall.
This commit is contained in:
parent
ace728f29a
commit
0c5cdadec4
182
cloud-init.patch
Normal file
182
cloud-init.patch
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
diff --git a/open-vm-tools/libDeployPkg/linuxDeployment.c b/open-vm-tools/libDeployPkg/linuxDeployment.c
|
||||||
|
index 023d41f1..7bcdd0a8 100644
|
||||||
|
--- a/open-vm-tools/libDeployPkg/linuxDeployment.c
|
||||||
|
+++ b/open-vm-tools/libDeployPkg/linuxDeployment.c
|
||||||
|
@@ -143,7 +143,7 @@ static bool CopyFileToDirectory(const char* srcPath, const char* destPath,
|
||||||
|
const char* fileName);
|
||||||
|
static int Deploy(const char* pkgName);
|
||||||
|
static char** GetFormattedCommandLine(const char* command);
|
||||||
|
-int ForkExecAndWaitCommand(const char* command);
|
||||||
|
+int ForkExecAndWaitCommand(const char* command, bool ignoreStdErr);
|
||||||
|
static void SetDeployError(const char* format, ...);
|
||||||
|
static const char* GetDeployError(void);
|
||||||
|
static void NoLogging(int level, const char* fmtstr, ...);
|
||||||
|
@@ -920,7 +920,7 @@ CloudInitSetup(const char *tmpDirPath)
|
||||||
|
"/bin/mkdir -p %s", cloudInitTmpDirPath);
|
||||||
|
command[sizeof(command) - 1] = '\0';
|
||||||
|
|
||||||
|
- forkExecResult = ForkExecAndWaitCommand(command);
|
||||||
|
+ forkExecResult = ForkExecAndWaitCommand(command, false);
|
||||||
|
if (forkExecResult != 0) {
|
||||||
|
SetDeployError("Error creating %s dir: %s",
|
||||||
|
cloudInitTmpDirPath,
|
||||||
|
@@ -937,7 +937,7 @@ CloudInitSetup(const char *tmpDirPath)
|
||||||
|
"/usr/bin/test -f %s/nics.txt", tmpDirPath);
|
||||||
|
command[sizeof(command) - 1] = '\0';
|
||||||
|
|
||||||
|
- forkExecResult = ForkExecAndWaitCommand(command);
|
||||||
|
+ forkExecResult = ForkExecAndWaitCommand(command, false);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* /usr/bin/test -f returns 0 if the file exists
|
||||||
|
@@ -946,7 +946,7 @@ CloudInitSetup(const char *tmpDirPath)
|
||||||
|
*/
|
||||||
|
if (forkExecResult == 0) {
|
||||||
|
sLog(log_info, "nics.txt file exists. Copying..");
|
||||||
|
- if(!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "nics.txt")) {
|
||||||
|
+ if (!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "nics.txt")) {
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -973,7 +973,7 @@ CloudInitSetup(const char *tmpDirPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
sLog(log_info, "Copying main configuration file cust.cfg");
|
||||||
|
- if(!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "cust.cfg")) {
|
||||||
|
+ if (!CopyFileToDirectory(tmpDirPath, cloudInitTmpDirPath, "cust.cfg")) {
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -992,7 +992,7 @@ CloudInitSetup(const char *tmpDirPath)
|
||||||
|
"/bin/rm -rf %s",
|
||||||
|
cloudInitTmpDirPath);
|
||||||
|
command[sizeof(command) - 1] = '\0';
|
||||||
|
- ForkExecAndWaitCommand(command);
|
||||||
|
+ ForkExecAndWaitCommand(command, false);
|
||||||
|
}
|
||||||
|
sLog(log_error, "Setting generic error status in vmx. \n");
|
||||||
|
SetCustomizationStatusInVmx(TOOLSDEPLOYPKG_RUNNING,
|
||||||
|
@@ -1016,7 +1016,7 @@ CopyFileToDirectory(const char* srcPath, const char* destPath,
|
||||||
|
snprintf(command, sizeof(command), "/bin/cp %s/%s %s/%s.tmp", srcPath,
|
||||||
|
fileName, destPath, fileName);
|
||||||
|
command[sizeof(command) - 1] = '\0';
|
||||||
|
- forkExecResult = ForkExecAndWaitCommand(command);
|
||||||
|
+ forkExecResult = ForkExecAndWaitCommand(command, false);
|
||||||
|
if (forkExecResult != 0) {
|
||||||
|
SetDeployError("Error while copying file %s: %s", fileName,
|
||||||
|
strerror(errno));
|
||||||
|
@@ -1026,7 +1026,7 @@ CopyFileToDirectory(const char* srcPath, const char* destPath,
|
||||||
|
fileName, destPath, fileName);
|
||||||
|
command[sizeof(command) - 1] = '\0';
|
||||||
|
|
||||||
|
- forkExecResult = ForkExecAndWaitCommand(command);
|
||||||
|
+ forkExecResult = ForkExecAndWaitCommand(command, false);
|
||||||
|
if (forkExecResult != 0) {
|
||||||
|
SetDeployError("Error while renaming temp file %s: %s", fileName,
|
||||||
|
strerror(errno));
|
||||||
|
@@ -1090,7 +1090,7 @@ UseCloudInitWorkflow(const char* dirPath)
|
||||||
|
sLog(log_info, "cust.cfg is found in '%s' directory.", dirPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
- forkExecResult = ForkExecAndWaitCommand(cloudInitCommand);
|
||||||
|
+ forkExecResult = ForkExecAndWaitCommand(cloudInitCommand, true);
|
||||||
|
if (forkExecResult != 0) {
|
||||||
|
sLog(log_info, "cloud-init is not installed");
|
||||||
|
free(cfgFullPath);
|
||||||
|
@@ -1191,7 +1191,7 @@ Deploy(const char* packageName)
|
||||||
|
deployStatus = CloudInitSetup(tmpDirPath);
|
||||||
|
} else {
|
||||||
|
sLog(log_info, "Executing traditional GOSC workflow");
|
||||||
|
- deploymentResult = ForkExecAndWaitCommand(command);
|
||||||
|
+ deploymentResult = ForkExecAndWaitCommand(command, false);
|
||||||
|
free(command);
|
||||||
|
|
||||||
|
if (deploymentResult != CUST_SUCCESS) {
|
||||||
|
@@ -1257,7 +1257,7 @@ Deploy(const char* packageName)
|
||||||
|
strcat(cleanupCommand, tmpDirPath);
|
||||||
|
|
||||||
|
sLog(log_info, "Launching cleanup. \n");
|
||||||
|
- if (ForkExecAndWaitCommand(cleanupCommand) != 0) {
|
||||||
|
+ if (ForkExecAndWaitCommand(cleanupCommand, false) != 0) {
|
||||||
|
sLog(log_warning, "Error while clean up tmp directory %s: (%s)",
|
||||||
|
tmpDirPath, strerror (errno));
|
||||||
|
}
|
||||||
|
@@ -1286,7 +1286,7 @@ Deploy(const char* packageName)
|
||||||
|
int rebootComandResult = 0;
|
||||||
|
do {
|
||||||
|
sLog(log_info, "Rebooting\n");
|
||||||
|
- rebootComandResult = ForkExecAndWaitCommand("/sbin/telinit 6");
|
||||||
|
+ rebootComandResult = ForkExecAndWaitCommand("/sbin/telinit 6", false);
|
||||||
|
sleep(1);
|
||||||
|
} while (rebootComandResult == 0);
|
||||||
|
sLog(log_error, "telinit returned error %d\n", rebootComandResult);
|
||||||
|
@@ -1497,11 +1497,12 @@ GetFormattedCommandLine(const char* command)
|
||||||
|
* fork-and-exec.
|
||||||
|
*
|
||||||
|
* @param [IN] command Command to execute
|
||||||
|
+ * @param [IN] ignoreStdErr If we ignore stderr when cmd's return code is 0
|
||||||
|
* @return Return code from the process (or DEPLOY_ERROR)
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
int
|
||||||
|
-ForkExecAndWaitCommand(const char* command)
|
||||||
|
+ForkExecAndWaitCommand(const char* command, bool ignoreStdErr)
|
||||||
|
{
|
||||||
|
ProcessHandle hp;
|
||||||
|
int retval;
|
||||||
|
@@ -1519,14 +1520,30 @@ ForkExecAndWaitCommand(const char* command)
|
||||||
|
|
||||||
|
Process_RunToComplete(hp, 100);
|
||||||
|
sLog(log_info, "Customization command output: %s\n", Process_GetStdout(hp));
|
||||||
|
-
|
||||||
|
- if(Process_GetExitCode(hp) == 0 && strlen(Process_GetStderr(hp)) > 0) {
|
||||||
|
- // Assume command failed if it wrote to stderr, even if exitCode is 0
|
||||||
|
- sLog(log_error, "Customization command failed: %s\n", Process_GetStderr(hp));
|
||||||
|
- retval = -1;
|
||||||
|
+ retval = Process_GetExitCode(hp);
|
||||||
|
+
|
||||||
|
+ if (retval == 0) {
|
||||||
|
+ if (strlen(Process_GetStderr(hp)) > 0) {
|
||||||
|
+ if (!ignoreStdErr) {
|
||||||
|
+ // Assume command failed if it wrote to stderr, even if exitCode is 0
|
||||||
|
+ sLog(log_error,
|
||||||
|
+ "Customization command failed with stderr: %s\n",
|
||||||
|
+ Process_GetStderr(hp));
|
||||||
|
+ retval = -1;
|
||||||
|
+ } else {
|
||||||
|
+ // If we choose to ignore stderr, we do not return -1 when return
|
||||||
|
+ // code is 0. e.g, PR2148977, "cloud-init -v" will return 0
|
||||||
|
+ // even there is output in stderr
|
||||||
|
+ sLog(log_info, "Ignoring stderr output: %s\n", Process_GetStderr(hp));
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
- retval = Process_GetExitCode(hp);
|
||||||
|
+ sLog(log_error,
|
||||||
|
+ "Customization command failed with exitcode: %d, stderr: %s\n",
|
||||||
|
+ retval,
|
||||||
|
+ Process_GetStderr(hp));
|
||||||
|
}
|
||||||
|
+
|
||||||
|
Process_Destroy(hp);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
diff --git a/open-vm-tools/libDeployPkg/linuxDeploymentUtilities.c b/open-vm-tools/libDeployPkg/linuxDeploymentUtilities.c
|
||||||
|
index 83f942da..93e1b0aa 100644
|
||||||
|
--- a/open-vm-tools/libDeployPkg/linuxDeploymentUtilities.c
|
||||||
|
+++ b/open-vm-tools/libDeployPkg/linuxDeploymentUtilities.c
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/*********************************************************
|
||||||
|
- * Copyright (C) 2016-2017 VMware, Inc. All rights reserved.
|
||||||
|
+ * Copyright (C) 2016-2018 VMware, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published
|
||||||
|
@@ -24,7 +24,6 @@
|
||||||
|
#include <regex.h>
|
||||||
|
#include "linuxDeploymentUtilities.h"
|
||||||
|
|
||||||
|
-extern int ForkExecAndWaitCommand(const char* command);
|
||||||
|
extern LogFunction sLog;
|
||||||
|
|
||||||
|
/**
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
Name: open-vm-tools
|
Name: open-vm-tools
|
||||||
Version: %{toolsversion}
|
Version: %{toolsversion}
|
||||||
Release: 5%{?dist}
|
Release: 6%{?dist}
|
||||||
Summary: Open Virtual Machine Tools for virtual machines hosted on VMware
|
Summary: Open Virtual Machine Tools for virtual machines hosted on VMware
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
@ -43,6 +43,7 @@ ExclusiveArch: %{ix86} x86_64
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
Patch1: use-tirpc.patch
|
Patch1: use-tirpc.patch
|
||||||
|
Patch2: cloud-init.patch
|
||||||
|
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
@ -149,6 +150,7 @@ machines.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{version}-%{toolsbuild}
|
%setup -q -n %{name}-%{version}-%{toolsbuild}
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
|
%patch2 -p2
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# Required for regenerating configure script when
|
# Required for regenerating configure script when
|
||||||
@ -259,6 +261,7 @@ fi
|
|||||||
# Cleanup GuestProxy certs if open-vm-tools is being uninstalled
|
# Cleanup GuestProxy certs if open-vm-tools is being uninstalled
|
||||||
if [ "$1" = "0" ]; then
|
if [ "$1" = "0" ]; then
|
||||||
rm -rf %{_sysconfdir}/vmware-tools/GuestProxyData &> /dev/null || /bin/true
|
rm -rf %{_sysconfdir}/vmware-tools/GuestProxyData &> /dev/null || /bin/true
|
||||||
|
rm -rf %{_sysconfdir}/vmware-tools &> /dev/null || /bin/true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
%files
|
%files
|
||||||
@ -325,6 +328,10 @@ fi
|
|||||||
%{_bindir}/vmware-vgauth-smoketest
|
%{_bindir}/vmware-vgauth-smoketest
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jul 11 2018 Ravindra Kumar <ravindrakumar@vmware.com> - 10.2.5-6
|
||||||
|
- Added cloud-init.patch to detect cloud-init correctly.
|
||||||
|
- Added cleanup for /etc/vmware-tools directory on uninstall.
|
||||||
|
|
||||||
* Tue Jul 10 2018 Pete Walter <pwalter@fedoraproject.org> - 10.2.5-5
|
* Tue Jul 10 2018 Pete Walter <pwalter@fedoraproject.org> - 10.2.5-5
|
||||||
- Rebuild for ICU 62
|
- Rebuild for ICU 62
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user