Заметки о Windows и других программных продуктах Microsoft...

Управление пакетами в Windows (часть 2)

Управление пакетами в Windows (часть 2)

Продолжаем историю об управлении пакетами в Windows, начатую в первой части статьи. В прошлый раз мы остановились на установке пакетов из репозитория Chocolatey и сегодня продолжим эту тему.

У chocolatey есть свой менеджер пакетов, гораздо более эффективный, чем встроенный в Windows. Для его установки необходимо открыть консоль PowerShell от имени администратора и выполнить следующие команды:

Set-ExecutionPolicy Bypass -Scope Process -Force;
iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))

Первая команда устанавливает политику выполнения скриптов, вторая загружает скрипт установки и запускает его. Скрипт скопирует на компьютер все необходимые файлы, а также настроит переменные окружения.

установка chocolatey

 

Для начала выведем справку по основным командам. Синтаксис у chocolatey довольно простой и лаконичный, в стиле linux.

команды chocolatey

 

Поиск пакетов

Перед тем, как установить пакет, его надо найти. Приступим к поиску на примере популярного файлового менеджера TotalCommander.

Найти нужный пакет можно с помощью команды search, list или find (кому как больше нравится). Самый простой вариант поиска:

choco search totalcommander

поиск пакета в chocolatey

 

А теперь немного усложним поиск и найдем все (all) одобренные (approoved-only) и не битые (not-broken) версии TotalCommander:

choco search totalcommander ––all ––approoved-only ––not-broken

подробный поиск пакета

 

Если точное имя пакета неизвестно, можно искать по меткам или тегам (tags). Обычно в тегах записывается информация, позволяющая более-менее точно определить принадлежность пакета. К примеру, TotalCommander относится к файл-менеджерам, соответственно его можно найти такой командой:

choco search file manager ––by-tag-only

поиск пакета по тегам

 

Также при поиске можно воспользоваться функционалом PowerShell, например передать результаты поиска командлету Out-GridView:

choco list | sort Name | Out-GridView

поиск пакета с помощью Out-GridView

 

Еще с помощью поиска можно посмотреть подробную информацию о пакете, такую как дата выпуска, функционал и т.п. В качестве примера выведем данные о TotalCommander 9.22:

choco search totalcommander ––version=9.22 ––detail

Особое внимание обратите внимание на раздел Package parameters. В нем описаны ключи установки для данного пакета, с помощью которых можно кастомизировать установку приложения.

вывод детальной информации о пакете

Установка пакетов

Для простой установки TotalCommander достаточно выполнить команду:

choco install totalcommander

Но мы немного усложним задачу, к примеру установим определенную версию и произведем дополнительные настройки:

choco install totalcommander ––version=9.22 ––params ′/InstallPath:%systemdrive%\totalcmd /DesktopIcon /ShellExtension′ ––yes

С помощью ключа params мы меняем директорию установки, добавляем ярлык приложения на рабочий стол и в контекстное меню проводника. Эти параметры описаны в разделе Package parameters в свойствах пакета. Ключ yes нужен для автоматического подтверждения, чтобы при установке не требовалось вмешательства пользователя.

Кстати, при установке пакета могут автоматически подтягиваться другие пакеты, необходимые для его установки. В нашем случае при установке TotalCommander дополнительно были дополнительно установлены еще 3 пакета.

установка пакета

 

Напомню о том, что успешная установка пакета вовсе не гарантирует установку приложения. Поэтому, на всякий случай, убедимся, что TotalCommander появился в меню Пуск,

установленные программы

 

на рабочем столе и в контекстном меню проводника.

дополнительные настройки

 

На волне успеха 🙂 установим еще несколько пакетов. На сей раз сделаем это одной командой, просто перечислив имена пакетов через пробел:

choco install firefox adobereader xnview ––yes

установка нескольких пакетов

 

В качестве альтернативы при установке пакетов можно использовать файл конфигурации. В файл можно прописывать любое количество пакетов с любыми дополнительными параметрами. Это очень удобно, особенно если приходится часто устанавливать одинаковый набор приложений с определенными параметрами. Файл конфигурации представляет из себя самый обычный XML-файл с расширением .config, имя может быть любое.

Для примера создадим вот такой файл package.config. В него добавим три пакета, с параметрами и без.

конфиг установки

 

При использовании файла конфигурации при установке вместо имени пакета указывается имя файла (либо путь к нему, если файл находится отдельно):

choco install package.config ––yes

установка с конфиг-файлом

 

Ну и посмотреть уже установленные пакеты можно с помощью команды search\list:

choco list ––local-only

список установленных пакетов

Обновление пакетов

Приложения постоянно обновляются, выходят новые версии, соответственно обновляются и пакеты в репозитории. Chocolatey умеет обновлять как пакеты так и приложения, установленные из этих пакетов. Это одно из больших его преимуществ, ведь встроенный в Windows менеджер пакетов такой возможности лишен.

Проверим, как работает обновление на многострадальном TotalCommander. Я нарочно установил не самую новую версию, чтобы потом ее обновить.

Для полноты эксперимента проверим текущую версию, сейчас она 9.22.

версия до обновления

 

Теперь запускаем обновление командой:

choco upgrade totalcommander ––yes

обновление пакета

 

После чего еще раз проверяем версию. Как видите, она изменилась на 9.22a, а значит обновление прошло успешно.

версия после обновления

 

Что интересно, chocolatey позволяет ″обновиться″ и на более раннюю версию, т.е. произвести даунгрейд. Откатим  TotalCommander обратно на версию 9.22 командой:

choco upgrade totalcommander ––version=9.22 ––allow-downgrade ––yes

даунгрейд

 

Примечание. С учетом того, что большинство приложений не поддерживают возможность даунгрейда, сия процедура может не сработать или сработать не так, как ожидается. Поэтому я не стал бы использовать ее без особой необходимости.

Можно обновить один пакет, несколько или все сразу:

choco upgrade all ––yes

Chocolatey сам сверит версии всех установленных пакетов с пакетами в репозитории и, при наличии более новой версии, обновит их. В моем же случае все пакеты последней версии и обновления не требуется.

обновление всех пакетов

 

Еще один интересный момент.

К примеру я хочу обновить Far, которого у меня отродясь не было. Умный chocolatey не находит указанный пакет, сообщает об этом и…  устанавливает его. То есть если указанного для обновления пакета нет в системе, то он будет автоматически установлен.

установка при обновлении

Удаление пакетов

Завершающим этапом жизненного цикла пакета является его удаление из системы. Для этой цели в состав каждого пакета как правило входит скрипт по деинсталляции chocolateyUninstall.ps1. Кроме того, при установке пакета choco отслеживает изменения реестра, производимые собственными установщиками приложений. При удалении пакета эта информация используется службой Auto uninstaller для корректного удаления приложения.

Для наглядности удалим один пакет, к примеру AdobeReader:

choco uninstall adobereader ––yes

удаление пакета

 

Следующий пакет удалим вместе со всеми зависимостями, на всякий случай укажем номер версии:

choco uninstall firefox ––version=66.0.3 ––remove-dependencies ––yes

Кстати, choco отслеживает все зависимости и если удаляемый пакет нужен еще кому нибудь, то его удаление отменяется.

удаление определенной версии пакета

 

Войдя во вкус, удалим все оставшиеся пакеты одной командой:

choco uninstall all ––yes

удаление всех пакетов

 

В большинстве случаев удаление пакета происходит без проблем, но бывают исключения. В моем случае TotalCommander оказался ″живучим″ и удалить его не удалось. Я специально несколько раз устанавливал его и удаление ни разу не прошло успешно. Причина подобного поведения кроется, скорее всего, в некорректной работе штатного деинсталлятора. В такой ситуации проще удалить сам пакет и приложение вручную.

Choco GUI

Не секрет, что далеко не все пользователи Windows любят работать в командной строке 🙂 На такой случай у choco есть графическая оболочка с названием Chocolatey GUI. Устанавливается она из пакета, командой:

choco install chocolateygui

Что интересно, нормально установить пакет chocolateygui мне не удалось, при его установке я все время получал ошибку. Судя по тексту ошибки, инсталлятор не мог записать лог установки, поскольку в параметрах установки указан несуществующий путь.

В принципе можно было загрузить пакет и отредактировать его, после чего корректно установить. Но я не стал возиться, а просто стянул из пакета инсталлятор, обычный MSI-файл, и установил его вручную.

установка GUI

 

Итак, что же дает нам Choco GUI? Да в принципе все то же самое, но в чуть более удобном виде. С ее помощью мы можем найти нужный пакет в репозитории,

поиск пакета в GUI

 

посмотреть подробную информацию о нем, при необходимости установить.

установка пакета в GUI

 

А также можно посмотреть все установленные пакеты, обновить или удалить их.

просмотр установленных пакетов

Настройка chocolatey

Ну и напоследок немного покопаемся во внутренностях choco. Итак, само приложение choco.exe можно найти по адресу C:\ProgramData\chocolatey, указанному в переменной окружения %ChocolateyInstall%. Все установленные пакеты можно найти в папке lib, в папке config находится файл конфигурации, в остальных папках лежат утилиты и модули PowerShell, используемые при установке пакетов.

директория установки chocolatey

 

Дистрибутивы программ, необходимые для установки пакетов, загружаются в кэш. По умолчанию он находится во временной директории в профиле текущего пользователя, путь к которой хранится в переменной окружения %temp%.

кэш chocolatey

 

Глобальные настройки choco хранятся в файле конфигурации, и при необходимости их можно изменить. Файл конфигурации для этого трогать вовсе не обязательно, для этой цели у choco есть специальная команда config. К примеру, просмотреть текущую конфигурацию можно командой:

choco config list

конфигурация choco

 

Попробуем изменить конфигурацию, к примеру изменим место хранения кэша на более доступное. За расположение кэша отвечает параметр cachelocation. Изменим его командой:

choco config set cachelocation C:\temp\choco

И проверим результат:

choco config get cachelocation

изменение конфигурации

 

Как видите, установка программ из chocolatey  — процедура достаточно простая и удобная. Конечно есть отдельные недочеты и ошибки, но в целом все работает как надо. Кроме того, в своей статье я рассмотрел лишь часть функционала, на самом деле ″шоколадка″ может гораздо больше. Для более тесного знакомства с ней на официальном сайте есть подробная документация, рекомендую ознакомиться.

Ну а в целом использование пакетов для управления ПО имеет свои преимущества. И хотя сейчас этот метод не пользуется широкой популярностью, но в дальнейшем все может измениться. Впрочем, это лишь мое мнение 🙂

 
 
Комментарии

Еще можно упомянуть параметр allowglobalconfirmation если его включить ставить пакеты можно без ключа —yes