[Из песочницы] Пишем свой пакет для Chocolatey
Chocolatey — пакетный менеджер для windows сильно облегчающий процедуру установки программ, а уж сколько он экономит времени. Про это чудо уже писали на хабре и даже было показано как написать свой пакет для него, но там было больше ручной работы, я же хочу показать как можно немного упростить это дело.
ПриступаемЕсли у вас не установлен сам chocolatey, исправляем это: @powershell -NoProfile -ExecutionPolicy unrestricted -Command «iex ((new-object net.webclient).DownloadString ('https://chocolatey.org/install.ps1'))» && SET PATH=%PATH%;%systemdrive%\chocolatey\bin Закрываем и снова открываем консоль, чтобы освежились данные по переменным.Chocolatey установили, теперь устанавливаем пакеты, которые нам пригодятся:
cinst warmup cinst git cinst nuget.commandline Закрываем и снова открываем консоль, чтобы освежились данные по переменным.Идем в папку с установленным сhocolatey, клонируем репозиторий с шаблонами, и переходим к нашим шаблонам.
cd %ChocolateyInstall% git clone https://github.com/chocolatey/chocolateytemplates.git cd chocolateytemplates\_templates Подредактируем немного стандартные настройки Теперь можно активировать шаблоны, из которых мы будем делать наши пакеты (по существу создается ссылка на директорию с нужным шаблоном). Для этого, находясь в директории %ChocolateyInstall%\chocolateytemplates\_templates выполним команду (у меня выполняется только из под admin): warmup addTemplateFolder chocolatey »%CD%\chocolatey» Идем на сайт chocolatey.org, регистрируемся, заходим в свой профиль нажимаем-«Your key is hidden for privacy, click to show.» Видим три команды, выполняем только первую: устанавливаем API Key.На это с подготовкой все, теперь можно преступать к массовому выпуску пакетов Официальная документация рекомендует именовать все новые пакеты в нижнем регистре разделяя слова символом »-» или просто опуская пробелы. Также, сначала рекомендуется воспользоваться поиском пакета с нужной программой и только если таковой нет, делать свой.Для хранения исходников будем использовать следующую структуру:.
packages |- workrave |- src |- tools |- workrave.nuspec |- …… |- build |- package-2 Находясь в директории packages выполняем: warmup chocolatey workrave В появившейся папке workrave создаем src и переносим в нее содержимое workrave.Открываем файл workrave.nuspec. Это обычный xml, с описание нашего пакета. Название тегов говорит само за себя: title — название программы, которое будет выводится в списке пакетов на сайте chocolatey.org; author — создатель программы, которую вы укладываете в пакет….
Самое интересное находится в файле tools\chocolateyInstall.ps1
Код до #NOTE: Please remove any commented lines to tidy up prior to releasing the package, including this one
$packageName = 'workrave' # arbitrary name for the package, used in messages $installerType = 'EXE_MSI_OR_MSU' #only one of these: exe, msi, msu $url = 'URL_HERE' # download url $url64 = 'URL_x64_HERE' # 64bit URL here or remove — if installer decides, then use $url $silentArgs = 'SILENT_ARGS_HERE' # »/s /S /q /Q /quiet /silent /SILENT /VERYSILENT» # try any of these to get the silent installer #msi is always /quiet $validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx
# main helpers — these have error handling tucked into them already # installer, will assert administrative rights
# if removing $url64, please remove from here Install-ChocolateyPackage »$packageName» »$installerType» »$silentArgs» »$url» »$url64» -validExitCodes $validExitCodes # download and unpack a zip file
# if removing $url64, please remove from here Install-ChocolateyZipPackage »$packageName» »$url» »$(Split-Path -parent $MyInvocation.MyCommand.Definition)» »$url64»
#try { #error handling is only necessary if you need to do anything in addition to/instead of the main helpers # other helpers — using any of these means you want to uncomment the error handling up top and at bottom. # downloader that the main helpers use to download items
# if removing $url64, please remove from here #Get-ChocolateyWebFile »$packageName» 'DOWNLOAD_TO_FILE_FULL_PATH' »$url» »$url64» # installer, will assert administrative rights — used by Install-ChocolateyPackage #Install-ChocolateyInstallPackage »$packageName» »$installerType» »$silentArgs» '_FULLFILEPATH_' -validExitCodes $validExitCodes # unzips a file to the specified location — auto overwrites existing content #Get-ChocolateyUnzip «FULL_LOCATION_TO_ZIP.zip» »$(Split-Path -parent $MyInvocation.MyCommand.Definition)» # Runs processes asserting UAC, will assert administrative rights — used by Install-ChocolateyInstallPackage #Start-ChocolateyProcessAsAdmin 'STATEMENTS_TO_RUN' 'Optional_Application_If_Not_PowerShell' -validExitCodes $validExitCodes # add specific folders to the path — any executables found in the chocolatey package folder will already be on the path. This is used in addition to that or for cases when a native installer doesn’t add things to the path. #Install-ChocolateyPath 'LOCATION_TO_ADD_TO_PATH' 'User_OR_Machine' # Machine will assert administrative rights # add specific files as shortcuts to the desktop #$target = Join-Path $MyInvocation.MyCommand.Definition »$($packageName).exe» #Install-ChocolateyDesktopLink $target
#------- ADDITIONAL SETUP -------# # make sure to uncomment the error handling if you have additional setup to do
#$processor = Get-WmiObject Win32_Processor #$is64bit = $processor.AddressWidth -eq 64
# the following is all part of error handling #Write-ChocolateySuccess »$packageName» #} catch { #Write-ChocolateyFailure »$packageName» »$($_.Exception.Message)» #throw #} Здесь три блока: Переменные. Два варианта простых установщиков. Install-ChocolateyPackage — скачивает exe файл и запускает его установку с нужными ключами. Самая ходовая команда в большинстве случаев ее должно хватить. Install-ChocolateyZipPackage — скачивает zip архив и распаковывает его в указанную директорию. try / catch — это на случай сложного процесса установки. Скажем скачать zip архив, распаковать и запустить из него .exe файл. Для нашего тестового пакета приводим код к такому виду
Код после #NOTE: Please remove any commented lines to tidy up prior to releasing the package, including this one
$packageName = 'workrave' # arbitrary name for the package, used in messages $installerType = 'exe' #only one of these: exe, msi, msu $url = 'http://softlayer-ams.dl.sourceforge.net/project/workrave/workrave/1.10.1/workrave-win32-v1.10.1-installer.exe' # download url $silentArgs = '/verysilent /norestart' # »/s /S /q /Q /quiet /silent /SILENT /VERYSILENT» # try any of these to get the silent installer #msi is always /quiet $validExitCodes = @(0) #please insert other valid exit codes here, exit codes for ms http://msdn.microsoft.com/en-us/library/aa368542(VS.85).aspx
# main helpers — these have error handling tucked into them already # installer, will assert administrative rights
# if removing $url64, please remove from here Install-ChocolateyPackage »$packageName» »$installerType» »$silentArgs» »$url» -validExitCodes $validExitCodes # download and unpack a zip file В workrave для тихой установки используются ключи /verysilent /norestart. Список самых распространенных ключей в общедоступных инсталяторах указан в описание к переменной $silentArgs. Кроме того, можно ознакомится с этим: unattended.sourceforge.net/installers.phpТеперь можно собрать пакет, протестировать его, и залить на chocolatey.org. Для облегчения этого процесса я написал 4 простеньких .bat файла, Копипастить код я не буду, вы их можете скачать с github.
1-build-package.bat — собирает пакет 2-test-package.bat — выполняет локальную установку пакета, для теста. 3-push-package.bat — заливает пакет на chocolatey.org 4-helper.bat — обертка над первыми тремя. Запускает сборщик, а на локальную установку и push, спрашивает делать или нет. Т.е. для сборки нашего пакета просто, запускаем первые три .bat файла по порядку либо 4-тый.
На этом все.
Про ошибки просьба писать в ЛС.