为什么使用Chocolatey / PowerShell DSC挂起OpenSSL?

时间:2016-05-04 19:57:19

标签: powershell azure openssl dsc chocolatey

我正在尝试使用以下Powershell DSC脚本从Chocolatey安装OpenSSL:

cChocoInstaller installChoco
{
    InstallDir = "c:\choco"
}           

cChocoPackageInstaller installOpenSSL
{
    Name = "openssl.light"
    DependsOn = "[cChocoInstaller]installChoco"
}

使用ARM模板中的Powershell DSC扩展将此DSC推送到Azure中的新VM。 问题是OpenSSL静默安装程序挂起并且不允许DSC完成。以下是来自Chocolatey的日志:

2016-05-04 19:15:22,254 [INFO ] - Installing the following packages:
2016-05-04 19:15:22,270 [INFO ] - openssl.light
2016-05-04 19:15:22,270 [INFO ] - By installing you accept licenses for the packages.
2016-05-04 19:15:29,067 [INFO ] - 
OpenSSL.Light v1.0.2.20160504 (forced)
2016-05-04 19:15:29,130 [DEBUG] - Contents of 'c:\choco\lib\OpenSSL.Light\tools\chocolateyInstall.ps1':
2016-05-04 19:15:29,161 [DEBUG] - $packageId = 'OpenSSL.Light'

#default is to plop in c:\ -- yuck!
$installDir = Join-Path $Env:ProgramFiles 'OpenSSL'

$params = @{
  packageName = $packageId;
  fileType = 'exe';
  #InnoSetup - http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
  silentArgs = '/silent', '/verysilent', '/sp-', '/suppressmsgboxes',
    "/DIR=`"$installDir`"";
  url = 'https://slproweb.com/download/Win32OpenSSL_Light-1_0_2h.exe'
  url64bit = 'https://slproweb.com/download/Win64OpenSSL_Light-1_0_2h.exe'
}

Install-ChocolateyPackage @params

if (!$Env:OPENSSL_CONF)
{
  $configPath = Join-Path $installDir 'bin\openssl.cfg'

  if (Test-Path $configPath)
  {
    [Environment]::SetEnvironmentVariable(
      'OPENSSL_CONF', $configPath, 'User')

    Write-Output "Configured OPENSSL_CONF variable as $configPath"
  }
}

2016-05-04 19:15:29,177 [DEBUG] - Calling command ['"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -NoLogo -ExecutionPolicy Bypass -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = '';[System.Threading.Thread]::CurrentThread.CurrentUICulture = ''; & import-module -name 'c:\choco\helpers\chocolateyInstaller.psm1'; & 'c:\choco\helpers\chocolateyScriptRunner.ps1' -packageScript 'c:\choco\lib\OpenSSL.Light\tools\chocolateyInstall.ps1' -installArguments '' -packageParameters ''"']
2016-05-04 19:15:31,404 [INFO ] -  Downloading OpenSSL.Light 64 bit
2016-05-04 19:15:31,404 [INFO ] -    from 'https://slproweb.com/download/Win64OpenSSL_Light-1_0_2h.exe'
2016-05-04 19:15:40,526 [INFO ] -  Installing OpenSSL.Light...

我试图对OpenSSL Light Setup进程进行内存转储。以下是DebugDiag分析的结果:

Error    

Description Recommendation 

The following threads in OpenSSL.LightInstall.DMP are displaying a message box. The call to display the message box originated from OpenSSL_LightInstall+9745.

The text of the message being displayed is:
The system cannot find the path specified.


( 0 )

100.00% of threads blocked (1 threads)

 Server-side applications should not have any UI elements since they are supposed to run without any user intervention. Moreover, service applications run in non-interactive desktops, so no one can actually see the message box and dismiss it. This causes the application to hang.

Please follow up with vendor OpenSSL Win64 Installer Team  for problem resolution concerning the following file: C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Temp\chocolatey\OpenSSL.Light\1.0.2.20160504\OpenSSL.LightInstall.exe. 

知道造成这种情况的原因是什么?我能够在VM上本地运行DSC,而不是通过Powershell DSC扩展。 是否有使用DSC静默安装OpenSSL的解决方法或更好的方法?

提前致谢。

2 个答案:

答案 0 :(得分:1)

由于Powershell DSC由SYSTEM帐户下的本地配置管理器运行,因此默认的choco缓存目录访问存在问题。我能够通过设置自定义choco缓存路径来解决此问题。更多信息请访问:https://github.com/chocolatey/choco/wiki/How-To-Change-Cache

答案 1 :(得分:0)

您是否可能遇到内存问题?这次调用是通过WinRM和/或PowerShell远程处理发生的吗?