2016-06-17 7 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' 

그래서 몇 가지 :

  • 없음 로그 파일이 후에 .NET 설치 프로그램 생성되지 않습니다 ... 그래서 성공적으로 설치 프로그램을 실행처럼 보이게하지 않습니다.
  • 설치 관리자 패키지가 예상대로 다운로드되었습니다. 설치 프로그램을이 디렉토리에 다운로드 할 수 있지만 나중에 액세스/실행하지 못할 이유를 모르겠습니다.
  • 상자에 RDP를 설치하고 "choco install dotnet4.6.1"명령을 로컬 관리자로 실행하면 패키지가 오류없이 설치됩니다.
  • 나는 choco 0.9.10을 실행 중이지만 0.9.9와 동일한 문제가 발생했습니다.
  • /q (꽤) 모드에서 실행되는 새로운 버전의 dotnet4.6.1 설치 프로그램 (승인되지 않음)을 실행 중입니다./passive의. Passive 모드에서 동일한 문제가 발생했습니다.

모든 아이디어는 높이 평가됩니다. 감사!

+0

choco를 약간 사용하는 동안 문제가 발생하는 이유를 충분히 알지 못합니다. 그러나 다른 방법에 관심이 있다면 커스텀 스크립트 확장과 azure automation dsc 스크립트를 사용하여 .net을 설치했습니다.원한다면이 중 하나 또는 둘 다로 답변을 게시 할 수 있습니까? –

+0

안녕하세요 @EdRixon, 직접 DSC를 사용하여 4.6.1을 설치하는 방법이 있다면 정말 멋지군요. 참고 : GraniResource DSC 모듈을 사용하여 cDotNetFramework를 사용해 보았습니다. 이것이 4.6에서 나에게 도움이되었지만, 4.6.1에서 작동하도록 만들 수는 없었습니다 ... 어떤 이유로 든 나를 계속 폭파 시켰고, 궁극적 인 문제가 무엇인지 메시지에서 식별 할 수 없었습니다. 4.6.1에서 작동하는 DSC 솔루션을 가지고 있다면보고 싶습니다. – swannee

+0

문제가 무엇인지 완전히 모르겠지만 여기에 나와 있습니다. 디버그/자세한 출력과 함께 완전한 로그 파일이 있습니다. 만약 당신이 어딘가에있는 Gist에 넣고 링크하면, 그것은 틀릴 수도있는 것을 결정하는데 도움이 될 것입니다. 또한 문제가 생겼을 때 https://gitter.im/chocolatey/chocolatey.org로 건너 뛰고 조금 더 대화 형 도움말을 원할 수도 있습니다 (https://chocolatey.org의 오른쪽 하단에있는 작은 채팅 아이콘입니다).). – ferventcoder

답변

0

이 최고의 해답 가능하다 말을하지, ​​그러나 이것은 Chocolatey를 통해 (A CustomScript ARM 확장에서 직접 발사) 또는 DSC를 통해 모두 작동 (풀을 사용하여 : MSFT는 않습니다 서비스 프로파일 사이트에 스크립트가 서버 및 .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을 참조하십시오. (나는 최근에 이슈를 가지고 같은 것을하고 있었지만, 결국은 효과가있다.) 알 수 있듯이, 설정은 .net 인스톨러와 설치 파일을 다운로드하는 스크립트이다. 참고로, 재부팅이 필요합니다. 배포하는 동안 VM에서 다른 일이 발생하면 충돌이 발생할 수 있습니다.

내가 말했듯이 원하는 경우 사용자 지정 스크립트 확장으로도 할 수 있습니다.

{ 
    "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 서버는 하늘빛 VM에 있습니다. 내가 곧 그 일을하기 위해 한 일을 게시 할 것이다. – swannee

+0

아 좋아. 그래, 설정은 어느 쪽이든 상관 없다 =) –

+0

물론 다른 DSC 소스 ... 나는 이것이 호스팅 된 DSC 서버에서도 작동 할 것이라고 확신한다. 아래에 나와있는 내 솔루션이 작동하는 것처럼 보였으므로 Choco를 활용할 수 있습니다. – swannee