Ошибка установки DotNet 4.6.1 через Chocolatey с использованием DSC cChocoPackageInstaller

Я пытаюсь настроить сервер Windows 2012 R2 в Azure с помощью шаблонов ARM и DSC. Сценарий DSC запускает cChocoPackageInstaller для установки dotnet4.6.1 (после запуска cChocoInstaller). Это выглядит так:

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 (совершенно) вместо /пассивного. У меня была такая же проблема в пассивном режиме.

Любые идеи приветствуются. Спасибо!


person swannee    schedule 17.06.2016    source источник
comment
Немного попользовавшись choco, я недостаточно знаю, чтобы понять, почему возникает ваша проблема. Но если вас интересует другой метод, я установил .net с расширением пользовательского скрипта и скриптом dsc для автоматизации Azure. Я могу опубликовать ответ с одним / обоими из них, если хотите?   -  person Edward Rixon    schedule 17.06.2016
comment
Привет @EdRixon, если у вас есть способ установить 4.6.1 напрямую с помощью DSC, это было бы здорово. Примечание. Я также пробовал использовать cDotNetFramework с модулями GraniResource DSC. В то время как это работало для меня с 4.6, мне не удалось заставить его работать с 4.6.1... по какой-то причине он продолжал бомбить меня, и я не мог понять из сообщений, в чем заключалась окончательная проблема. Если у вас есть решение DSC, которое работает для 4.6.1, я бы хотел его увидеть.   -  person swannee    schedule 17.06.2016
comment
Не совсем уверен, в чем проблема, но вот как мы это узнаем. Существует полный файл журнала с отладочным/подробным выводом. Если вы поместите это где-нибудь в Gist и сделаете ссылку на него, это поможет определить, что может быть не так. Вы также можете перейти на gitter.im/chocolatey/chocolatey.org, когда столкнетесь с проблемами и нужна более интерактивная помощь (это маленький значок чата в правом нижнем углу на chocolatey.org).   -  person ferventcoder    schedule 18.06.2016
comment
@ferventcoder: я попытаюсь собрать больше информации об этом и отправить ее вам ... но у меня также были некоторые проблемы с Choco, находящим файлы в пользовательской zip-установке магазина событий, а также при установке NSSM. Кажется, что choco иногда пытается получить доступ к чему-либо до того, как файлы будут готовы/полностью извлечены/и т. д.... Не уверен на 100%... Я свяжусь с вами и отправлю вам дополнительную информацию, когда буду изучать наши установки NSSM и EventStore.   -  person swannee    schedule 21.06.2016
comment
@swannee Я просто пытаюсь подтвердить это, поскольку я не видел никаких новостей от msft, но теперь образ r2 2012 года поставляется с уже установленным .net 461? Похоже, да, но моя паранойя отсутствия объявлений не позволяет мне взять скрипт для его установки из моего деплоя...   -  person Edward Rixon    schedule 25.07.2016
comment
@EdRixon Да, похоже, что 4.6.1 теперь включен в стандартный образ ... это должно значительно ускорить мою подготовку. Спасибо за предупреждение.   -  person swannee    schedule 26.07.2016


Ответы (2)


Извините за задержку. Поэтому вам необходимо иметь учетную запись для автоматизации. Я изменил свой сценарий развертывания шаблона, чтобы создать учетную запись автоматизации, а затем с помощью командлета Get-AzureRmAutomationRegistrationInfo я получаю первичный ключ и конечную точку следующим образом:

$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

Затем в самом шаблоне у вас также есть учетная запись автоматизации (имя из параметра), а в качестве ее дочерних ресурсов - конфигурация и компиляция.

См. здесь для части шаблона и конфигурации учетной записи автоматизации. (Недавно я делал то же самое 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"
}
person Edward Rixon    schedule 20.06.2016
comment
Эд, спасибо за ответ, в моем случае я не использую AzureAutomation, а только свой собственный размещенный сервер DSC (на azure vm). Я опубликую, что я сделал, чтобы заставить его работать в ближайшее время. - person swannee; 21.06.2016
comment
Конечно, просто другой источник DSC... Я уверен, что это также будет работать с размещенным сервером DSC. Мое решение ниже, похоже, сработало, поэтому я иду по этому пути, чтобы использовать Choco. - person swannee; 21.06.2016

Не говорю, что это лучший возможный ответ, но он работает как через Chocolatey (запускается непосредственно из расширения CustomScript ARM), так и через DSC (с использованием опрашивающего сервера и специального модуля DSC для .Net 4.6.1), когда любой из них инициируется из шаблон АРМ. Ниже приведен файл с моим ChocolateyInstall.ps1. Я в основном провожу установку вручную, вместо того, чтобы полагаться на шоколадную функциональность установки. Это произошло из следующего вопроса SO, в котором использовался этот подход для 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"
}
person swannee    schedule 21.06.2016
comment
Я должен отметить, что последняя версия Chocolatey 0.9.10.3 решила эту проблему. - person swannee; 25.06.2016