2016-06-17 49 views
1

我試圖通過ARM模板和DSC在Azure中設置服務器Windows 2012 R2。 DSC腳本運行cChocoPackageInstaller來安裝dotnet4.6.1(在運行cChocoInstaller之後)。它看起來像這樣:使用DSC通過Chocolatey安裝DotNet 4.6.1 cChocoPackageInstaller

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

cChocoPackageInstaller DotNet461 
{    
    Name = "dotnet-461" 
    DependsOn = "[cChocoInstaller]Choco" 
} 

DotNet安裝程序被下載,但它最終在運行時失敗。日誌看起來像這樣(我只摘錄了這裏的錯誤)。

2016-06-17 13:05:52,001 [DEBUG] - Running 'Start-ChocolateyProcessAsAdmin' with exeToRun:'C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\dotnet-461\4.6.01055.006\NDP461-KB3102436-x86-x64-AllOS-ENU.exe', statements: '/q /norestart /log "C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\net461.log" ' 
2016-06-17 13:05:52,001 [DEBUG] - Elevating Permissions and running ["C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\dotnet-461\4.6.01055.006\NDP461-KB3102436-x86-x64-AllOS-ENU.exe" /q /norestart /log "C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\net461.log" ]. This may take a while, depending on the statements. 
2016-06-17 13:05:52,110 [DEBUG] - Setting RunAs for elevation 
2016-06-17 13:05:53,487 [INFO ] - The application cannot find one of its required files, possibly 
2016-06-17 13:05:53,487 [INFO ] - 
2016-06-17 13:05:53,487 [INFO ] - because it was unable to create it in the folder. Please make 
2016-06-17 13:05:53,487 [INFO ] - 
2016-06-17 13:05:53,487 [INFO ] - sure that the folder in which this application was downloaded is 
2016-06-17 13:05:53,487 [INFO ] - 
2016-06-17 13:05:53,487 [INFO ] - accessible and not read-only. 
2016-06-17 13:05:53,487 [INFO ] - 
2016-06-17 13:05:53,503 [DEBUG] - Command ["C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\dotnet-461\4.6.01055.006\NDP461-KB3102436-x86-x64-AllOS-ENU.exe" /q /norestart /log "C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\net461.log" ] exited with '3'. 
2016-06-17 13:05:53,518 [ERROR] - ERROR: Running ["C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\dotnet-461\4.6.01055.006\NDP461-KB3102436-x86-x64-AllOS-ENU.exe" /q /norestart /log "C:\Windows\system32\config\systemprofile\AppData\Local\Temp\chocolatey\net461.log" ] was not successful. Exit code was '3'. See log for possible error messages. 
2016-06-17 13:05:53,518 [DEBUG] - Built-in PowerShell host called with ['[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\dotnet-461\tools\chocolateyInstall.ps1' -installArguments '' -packageParameters '''] exited with '3'. 
2016-06-17 13:05:53,534 [DEBUG] - Calling command ['"C:\Windows\System32\shutdown.exe" /a'] 
2016-06-17 13:05:53,549 [DEBUG] - Command ['"C:\Windows\System32\shutdown.exe" /a'] exited with '1116' 

那麼一兩件事情:

  • 沒有日誌文件產生的DOTNET的安裝程序...所以它看起來並不像它的成功啓動安裝程序。
  • 安裝程序包肯定會下載到預期位置。不知道爲什麼它能夠將安裝程序下載到該目錄,但之後不能訪問/運行它。
  • 如果我將RDP放到盒子上,並以本地管理員身份運行「choco install dotnet4.6.1」命令,則該軟件包將無錯地安裝。
  • 我現在正在運行choco 0.9.10,但與0.9.9有相同的問題
  • 我正在運行更新版本的dotnet4.6.1安裝程序(未經批准),它以/ q(完全)模式運行/被動的。我在被動模式下遇到了同樣的問題。

任何想法表示讚賞。謝謝!

+0

在使用choco的時候,我不知道爲什麼會發生問題。但是,如果您對另一種方法感興趣,我已經使用自定義腳本擴展名安裝了.net,並使用了azure自動化dsc腳本。如果你願意,我可以用這兩種方法發佈答案嗎? –

+0

嗨@EdRixon,如果您有辦法直接使用DSC來安裝4.6.1,那就太棒了。注意:我也使用GraniResource DSC模塊嘗試了cDotNetFramework。雖然這對4.6有幫助,但我無法讓它在4.6.1下工作......出於某種原因,它一直在對我進行轟炸,我無法從信息中辨別出最終問題是什麼。如果您有適合4.6.1的DSC解決方案,我很樂意看到它。 – swannee

+0

不完全確定問題所在,但以下是我們瞭解的方式。有一個帶有調試/詳細輸出的完整日誌文件。如果你把它放在某個地方並鏈接到它,它將有助於確定可能的錯誤。當您遇到問題並希望獲得更多互動式幫助時,您也可以跳轉到https://gitter.im/chocolatey/chocolatey.org(這是https://chocolatey.org右下角的小聊天圖標)。 – ferventcoder

回答

0

不是說這是最好的答案可能的,但是這是雙向通過的巧克力(從CustomScript ARM擴展直接啓動)或通過DSC(使用拉服務器和用於.Net 4.6.1的定製DSC模塊),當從ARM模板啓動時。下面是我的chocolateyInstall.ps1。我基本上是手動進行安裝,而不是依靠巧克力安裝功能。這來自the following SO question,它使用4.5.2的這種方法。

Function IsInstalled { 
    $ver = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full').Release 
    return (!($ver -eq $null) -and ($ver -ge 394254)) 
} 

if (IsInstalled) { 
    Write-Host "Microsoft .NET Framework 4.6.1 or later is already installed" 
} 
else { 
    $SourceURI = "https://download.microsoft.com/download/3/5/9/35980F81-60F4-4DE3-88FC-8F962B97253B/NDP461-KB3102438-Web.exe" 
    $FileName = $SourceURI.Split('/')[-1] 
    $BinPath = Join-Path $env:SystemRoot -ChildPath "Temp\$FileName" 

    if (!(Test-Path $BinPath)) 
    { 
     Invoke-Webrequest -Uri $SourceURI -OutFile $BinPath 
    } 

    write-verbose "Installing .Net 4.6.1 from $BinPath" 
    write-verbose "Executing $Binpath /q /norestart" 
    Sleep 5 
    Start-Process -FilePath $BinPath -ArgumentList "/q /norestart" -Wait -NoNewWindow    
    Sleep 5 
    Write-Verbose "DotNet 4.6.1 Install completed" 
} 
+0

我應該注意到,最新版本的Chocolatey 0.9.10.3解決了這個問題。 – swannee

2

對不起延遲。所以你需要有一個自動化帳戶。我已經修改我的模板部署腳本來創建自動化的帳戶,然後使用Get-AzureRmAutomationRegistrationInfo cmdlet時,我得到的主鍵和終點,像這樣:

$RegistrationInfo = Get-AzureRmAutomationRegistrationInfo ` 
    -ResourceGroupName $ResourceGroupName ` 
    -AutomationAccountName $AccountName 

New-AzureRmResourceGroupDeployment ` 
    -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) ` 
    -ResourceGroupName $ResourceGroupName -TemplateFile $TemplateFile ` 
    -TemplateParameterFile $TemplateParametersFile ` 
    # extra params here 
    -RegistrationKey ($RegistrationInfo.PrimaryKey | ConvertTo-SecureString -AsPlainText -Force) ` 
    -RegistrationUrl $RegistrationInfo.Endpoint ` 
    -AutomationAccountName $AccountName 

然後在模板本身,你有一個自動化的帳戶有(param的名字)以及作爲其子資源的配置和編譯。

請參閱here自動化帳戶部分的模板和配置。 (我最近做了與v相同的事情,出現了問題,但最終還是有效的。)如您所見,配置是一個腳本,用於下載.net安裝程序和安裝。僅供參考,這需要重新啓動,所以如果您在部署過程中有任何其他事情正在進行,您可能會發生衝突。

就像我說的,如果你願意,你也可以用自定義腳本擴展來完成。 MSFT對服務輪廓站點腳本它,做:

{ 
    "properties": { 
     "publisher": "Microsoft.Compute", 
     "type": "CustomScriptExtension", 
     "typeHandlerVersion": "1.7", 
     "autoUpgradeMinorVersion": false, 
     "settings": { 
      "fileUris": [ "https://serviceprofiler.azurewebsites.net/content/downloads/InstallNetFx46.ps1" ], 
      "commandToExecute": "powershell.exe -ExecutionPolicy Unrestricted -File InstallNetFx46.ps1" 
     }, 
     "forceUpdateTag": "RerunExtension" 
    }, 
    "name": "CustomScriptExtensionInstallNet46" 
} 
+0

埃德,感謝您的答案,在我的情況下,我沒有使用AzureAutomation,只是我自己的託管DSC服務器(在天藍色的虛擬主機上)。我會發布我所做的工作很快就能完成。 – swannee

+0

啊好涼快。是的配置不介意任何方式=) –

+0

當然,只是一個不同的DSC源......我相信這也可以與託管DSC服務器。我的解決方案似乎工作,所以我要這樣做,所以我可以利用巧克力。 – swannee