Найти в Дзене
Wissance

Распространяем приложения в Windows (Chocolatey)

Менеджеры пакетов для ОС Windows В большинстве дистрибутивов Linux есть свои менеджеры пакетов: в `Ubuntu/Mint` это `apt` и `deb`, в `OpenSuse` - `zypper`. Менеджеры пакетов хороши тем, что позволяют устанавливать софт со всеми требуемыми зависимостями из любой точки мира где есть интернет (да, я помню времена, когда таскали софт на флоп и компакт дисках). В Windows давно уже существует `Microsoft Store`, однако, он не работает в корпоративной версии и задолго до него появился неофициальный менеджер пакетов - `Chocolatey`. Мы в Wissance давно пользуемся Chocolatey и подготовили ряд скриптов для автоматической установки как популярного дэйли софта, так и софта для девелоперов, всего 1 клик и все установлено. См наш Github-репо и немного длинное видео с процессом работы, в котором мы ни разу не нажимаем никаких кнопок вообще. Сегодня мы расскажем как написать свой установочный пакет на примере, а вы сможете создать и распространять свой софт в 1 команду! Уважаемый читатель, мы будем очен
Оглавление

Менеджеры пакетов для ОС Windows

В большинстве дистрибутивов Linux есть свои менеджеры пакетов: в `Ubuntu/Mint` это `apt` и `deb`, в `OpenSuse` - `zypper`. Менеджеры пакетов хороши тем, что позволяют устанавливать софт со всеми требуемыми зависимостями из любой точки мира где есть интернет (да, я помню времена, когда таскали софт на флоп и компакт дисках). В Windows давно уже существует `Microsoft Store`, однако, он не работает в корпоративной версии и задолго до него появился неофициальный менеджер пакетов - `Chocolatey`. Мы в Wissance давно пользуемся Chocolatey и подготовили ряд скриптов для автоматической установки как популярного дэйли софта, так и софта для девелоперов, всего 1 клик и все установлено. См наш Github-репо и немного длинное видео с процессом работы, в котором мы ни разу не нажимаем никаких кнопок вообще. Сегодня мы расскажем как написать свой установочный пакет на примере, а вы сможете создать и распространять свой софт в 1 команду! Уважаемый читатель, мы будем очень признательны, если вы нас поддержите в Boosty.

Алгоритм создания Chocolatey-пакета

Мы будем создавать Chocolatey-пакет для нашей утилиты Wissance.Zerial, на основе собранных инсталляционных пакетов с помощью `InnoSetup` (если будет 100 лайков под статьей, расскажем как создавать инсталляционные пакеты с `InnoSetup`).

Итак мы подготовили 2 Windows exe-инсталлятора для x86 и x64, их можно обнаружить в репозитории Zerial.
Устанавливаем choco: в первую очередь нам понадобится сам `chocolatey` (`choco`) и набор утилит командной строки `Nuget.Commandline`. Как установить chocolatey можно посмотреть здесь: (https://chocolatey.org/docs/installation). Как установить Nuget.Commandline: (https://chocolatey.org/packages/NuGet.CommandLine).
Генерируем шаблон установки: генерация шаблона происходит при помощи утилиты choco, при этом генерация происходит в текущей директории, поэтому прежде чем сгенерировать шаблон нужно перейти в директорию с помощью cd и выполнить команду choco new Zerial , Zerial- название создаваемого приложения. По окончании работы этой команды будет создано несколько файлов в директории с именем пакета:

Создаем описание установщика для Chocolatey
Создаем описание установщика для Chocolatey

Следует уточнить, что Powershell нужно запускать с правами Администратора, в противном случае не будет работать тест установщика. В .nuspec файле содержится описание приложения, а в директории tools - скрипты для установки и апгрэйда приложения. В nuspec-файле сдержится общая информация о приложении, например, название, версия, URL-адреса документации, файла лицензии и т.п. В папке tools содержится powershell-скрипт для установки приложения (chocolateyinstall.ps1).

Chocolatey-приложение не может содержать установочные файлы внутри себя, а лишь может ссылаться на какой-то URL: для загрузки и установки. Возможен вариант с установщиком exe/msi (командлет Install-ChocolateyPackage @packageArgs), путь к файлу установщику задается следующим образом:
$url        = '
https://github.com/Wissance/Zerial/raw/master/app/Wissance.Zerial/Wissance.Zerial.Installer/Windows/Wissance.Zerial.Win.X86.exe'
$url64      = '
https://github.com/Wissance/Zerial/raw/master/app/Wissance.Zerial/Wissance.Zerial.Installer/Windows/Wissance.Zerial.Win.X64.exe'

Тут ВАЖНО, чтобы в пути на Github были raw, а не blob, иначе установка не будет выполняться.
И вариант с portable-версией программного обеспечения (командлет 
Install-ChocolateyZipPackage @packageArgs).

И еще также важный момент - контрольные суммы, если их не указывать, то дальнейшая попытка установки будет приводить к ошибкам, поэтому сперва установим checksum - `choco install checksum`, а уже дальше выполним проверки:

checksum -t sha256 -f ..\Windows\Wissance.Zerial.Win.X64.exe

Вернет контрольную сумму:

Получаем контрольные суммы обоих установщиков
Получаем контрольные суммы обоих установщиков

2. Упаковка, генерация nupkg-файла
После довольно несложной настройки nuspec и chocolateyinstall.ps1 можно переходить к следующему этапу - генерации nupkg-файла: из директории, содержащей nuspec-файл необходимо выполнить следующую команду:
choco pack. После генерации упакованного файла приложения можно испытать установку choco install .\Zerial.1.0.nupkg .Если установка прошла благополучно, то можно проталкивать в галерею chocolatey.


3. Публикация пакета
Самая простая часть, необходимо присоединить ключ (см. свою учетную запись на chocolatey.org):
choco apikey --key ... --source https://push.chocolatey.org/
После этого проталкиваем приложение в chocolatey: choco push spectrumviewer.2.0.nupkg --source https://push.chocolatey.org/
Последнее, что остается - дождаться подтверждения размещения приложения.

Пакет отправлен на модерацию и после прохождения ревью будет опубликован
Пакет отправлен на модерацию и после прохождения ревью будет опубликован

Заключение

Chocolatey является мощным инструментом для распространения приложений, и в целом, как видно, создавать собственные пакеты/приложения в нем не так уж и сложно. Спасибо, что дочитали. Если есть возможность поддержите нас в Boosty, а также подпишитесь на нас в Zen, мы рассказываем о своем уникальном опыте, который не является копипастой с интернета.