Могу ли я включить файл MSI в пакет Chocolatey?

Могу ли я поместить файл MSI или образ ISO в пакет Chocolatey?

Итак, когда я choco install foo, он не загружает MSI с другого URL-адреса, а берет файл изнутри пакета?


person San Zhang    schedule 18.08.2015    source источник
comment
На самом деле это может быть так же просто, как поместить msi в инструменты (или где-нибудь в каталоге пакета) и просто заменить аргумент url в Install-ChocolateyInstallPackage на путь к msi, чтобы использовать его. Собираюсь попробовать, если это сработает.   -  person San Zhang    schedule 18.08.2015


Ответы (2)


Да, это определенно возможно. На самом деле это именно то, что делает пакет ChocolateyGUI. Вы можете увидеть его файл .nuspec здесь:

https://github.com/chocolatey/ChocolateyGUI/blob/develop/nuspec/chocolatey/ChocolateyGUI.nuspec

<?xml version="1.0"?>
<package>
  <metadata>
    <id>chocolateygui</id>
    <version>$version$</version>
    <title>Chocolatey GUI</title>
    <authors>Chocolatey</authors>
    <owners>Chocolatey</owners>
    <projectUrl>https://github.com/chocolatey/ChocolateyGUI</projectUrl>
    <projectSourceUrl>https://github.com/chocolatey/ChocolateyGUI</projectSourceUrl>
    <packageSourceUrl>https://github.com/chocolatey/ChocolateyGUI/tree/develop/nuspec/chocolatey</packageSourceUrl>
    <iconUrl>https://raw.githubusercontent.com/chocolatey/choco/master/docs/logo/chocolateyicon.gif</iconUrl>
    <licenseUrl>https://raw.githubusercontent.com/chocolatey/ChocolateyGUI/develop/LICENSE</licenseUrl>
    <bugTrackerUrl>https://github.com/chocolatey/ChocolateyGUI/issues</bugTrackerUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>
Chocolatey GUI is a nice GUI on top of the Chocolatey command line tool.

## Features

* View all **installed** and **available** packages
* **Update** installed but outdated packages
* **Install** and **uninstall** packages
* See detailed **package information**

## Notes
This package will only work correctly on Windows 7 SP1 through Windows 10 (1708) or     Windows Server 2008 R2 SP1 through Windows Server 2016, and requires .NET Framework     4.5.2 at minimum.
  </description>
    <summary>A GUI for Chocolatey</summary>
  <releaseNotes>
All release notes for Chocolatey GUI can be found on the GitHub site -     https://github.com/chocolatey/ChocolateyGUI/releases
  </releaseNotes>
    <tags>chocolateygui chocolatey admin foss</tags>
    <dependencies>
      <dependency id="Chocolatey" version="[0.10.3, 0.11)" />
    </dependencies>
  </metadata>
  <files>
    <file src="chocolateyInstall.ps1" target="tools"/>
    <file src="chocolateyUninstall.ps1" target="tools"/>
    <file src="..\..\BuildArtifacts\ChocolateyGUI.msi" target="tools"/>
    <file src="..\..\LICENSE" target="tools\LICENSE"/>
    <file src="VERIFICATION.txt" target="tools"/>
  </files>
</package>

Затем, как вы указали, вы должны затем использовать Install-ChocolateyInstallPackage для выполнения установки, которая затем будет использовать локальный MSI в пакете, а не сначала его загружать. Вы можете увидеть сценарий установки ChocolateyGUI здесь:

https://github.com/chocolatey/ChocolateyGUI/blob/develop/nuspec/chocolatey/chocolateyInstall.ps1

$ErrorActionPreference = 'Stop';
$toolsDir     = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$fileLocation = Join-Path $toolsDir 'ChocolateyGUI.msi'

$packageArgs = @{
  packageName   = $env:ChocolateyPackageName
  softwareName  = 'Chocolatey GUI'
  file          = $fileLocation
  fileType      = 'msi'
  silentArgs    = "/qn /norestart /l*v `"$env:TEMP\$env:ChocolateyPackageName.$env:ChocolateyPackageVersion.log`""
  validExitCodes= @(0,1641,3010)
}

Install-ChocolateyInstallPackage @packageArgs

Remove-Item -Force $packageArgs.file

Вы можете сделать то же самое с файлом образа ISO, и здесь есть пошаговое руководство по установившейся передовой практике использования этого файла ISO:

Как смонтировать ISO В шоколадной упаковке

ПРИМЕЧАНИЕ. Если вы планируете отправить пакет на Chocolatey.org, имейте в виду размер файла MSI / ISO. Если он особенно велик, вероятно, лучше не включать его в nupkg, а использовать ссылку для скачивания.

person Gary Ewan Park    schedule 19.08.2015
comment
Спасибо, Гэри. Я действительно заставил это работать в тот день. Я прошел по той же ссылке о монтаже iso. Подробная информация, которую вы предоставите, определенно может быть полезна другим, у которых есть подобные проблемы. - person San Zhang; 25.08.2015

Как сказал Гэри , вы можете включать произвольные файлы в пакет.

Подчеркну, что это не лучшая идея. Вы должны загрузить сам файл пакета (вот что происходит, когда вы choco install foo). Перемещение MSI / ISO внутри пакета означает, что вы загрузите его вместе с файлом пакета и, в зависимости от размера, замедлит обратную связь на консоли.

Использование правильных помощников и внешних URL-адресов дает вам множество отличных возможностей, наименее из которых - индикатор выполнения загрузки!

Если файловое хранилище представляет собой проблему, есть много бесплатных вариантов, включая: GitHub, Google Drive, DropBox и т. Д. Если вы создаете «внутренние» пакеты для своей компании, общий сетевой ресурс может работать с file:// URL-адресами.

person Anthony Mastrean    schedule 19.08.2015
comment
Дело не в том, что это плохая идея из-за медленной обратной связи, но обычно это проблема с правами на распространение (юридический материал). А иногда это просто размер установочного файла. Где-то около 20-25 МБ - это, вероятно, максимум, который вам нужен для файла choco. Плюс никаких отзывов о загрузке пакета (по крайней мере, пока). - person ferventcoder; 19.08.2015
comment
Да, права на распространение - еще один очень важный момент. Конечно, у нас нет контекста, чтобы дать окончательный ответ Юй Гу. - person Anthony Mastrean; 19.08.2015
comment
Спасибо за внимание, ребята. Причина, по которой я хочу поместить msi внутри пакета вместо использования дополнительного URL-адреса, заключается просто в том, что я боюсь, что ссылка станет недействительной в будущем. - person San Zhang; 25.08.2015