Как оно работает
Chocolatey позволяет Вам быстро устанавливать Windows приложения из командной строки с помощью сводного каталога инсталляционных скриптов. Вы можете установить Git, 7Zip или даже Microsoft Office (если у Вас есть ключ). Идея заключается в беспроблемной и тихой установке с помощью известного ключа.
Например, как только Вы его установили, Вы можете выполнять из командной строки следующие команды:
- cinst git
- cinst 7zip
- cinst ruby
- cinst vlc
Фактически, это оно и есть.
Каталог стал настолько огромным, что даже когда я недавно захотел установить DosBox, чтобы поиграть в Zork, я решил попробовать и ввел “cinst dosbox”, и это сработало. Это именно то, что и обещает Chocolatey.
Начало работы в chocolatey
Сначала устанавливаем диспетчер пакетов Chocolatey. Скопируйте данную строчку, вставьте её в свою командную строку и запустите. (Более подробно про боязнь этого первого шага чуть позже).
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
Вероятно, что вы предпочитаете знать, что сделает данная строка с вашим компьютером, перед тем, как вы выполните её, так что давайте её проанализируем. Она запустит PowerShell, который и выполнит всю трудную работу. Сегодня практически на каждом компьютере с Windows есть PowerShell, и именно он заставляет Chocolatey работать.
У некоторых созданы особые профили, так что опция –NoProfile блокирует их во избежание конфликтов во время установки. Она запускает фрагменты PowerShell скрипта, которые загружает с https://chocolatey.org/install.ps1/, а затем выполняет их. Обратите внимание, что это не запрещено её правилами выполнения. Чтобы было понятнее, исполняемый код загружается из сети, так что нету никакого риска. Затем он добавляет Chocolatey в ваш path (для этого окошка запроса), так что вы можете сразу им пользоваться. Он будет автоматически добавлен к последующим появляющимся окнам запроса.
А сейчас взгляните на https://chocolatey.org/install.ps1. Это очень простой и понятный скрипт. Он загружает zip архив с установщиком Chocolatey (который на самом деле является NuGet пакетом), распаковывает его и продолжает установку, запуская скрипты в секции инструментов пакета.
Как оно работает
Chocolatey – начальный загрузчик, который использует PowerShell-скрипты и формат пакетирования NuGet для того, чтобы устанавливать приложения. NuGet – это система управления пакетами, используемая разработчиками Windows для того, чтобы «опустить» библиотеки до проектного уровня. Chocolatey (поняли? Chocolatey Nu-Get?) делает эту идею более обширной – до того, чтобы «опустить» приложения до системного уровня.
На сегодняшний день, если Вы хотите установить 7Zip, Вы ищете его в Google, находите нужный сайт, выбираете новейшую или нужную версию для Вашей системы, скачиваете её, запускаете, «далее» «далее» «далее» «завершить» и, возможно, «добавить в path». Chocolatey делает всё это за Вас.
Повторюсь, NuGet – библиотеки, устанавливаемые локально для проектов. Chocolatey – приложения, устанавливаемые глобально для всей системы.
Chocolatey использует скрипты PowerShell (о которых Вам никогда не придётся задумываться), используемые разработчиками пакетных программ для создания цепочек установок и деревьев зависимостей. Взгляните, к примеру, на составляющие скрипта установки Git:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
try { Install-ChocolateyPackage 'git.install' 'exe' '/VERYSILENT' 'http://msysgit.googlecode.com/files/Git-1.8.1.2-preview20130201.exe'
#------- ADDITIONAL SETUP -------# $is64bit = (Get-WmiObject Win32_Processor).AddressWidth -eq 64 $programFiles = $env:programfiles if ($is64bit) {$programFiles = ${env:ProgramFiles(x86)}} $gitPath = Join-Path $programFiles 'Git\cmd'
Install-ChocolateyPath $gitPath 'user'
@"
Making GIT core.autocrlf false "@ | Write-Host
#make GIT core.autocrlf false & "$env:comspec" '/c git config --global core.autocrlf false'
Write-ChocolateySuccess 'git.install' } catch { Write-ChocolateyFailure 'git.install' $($_.Exception.Message) throw } |
Самая важная часть здесь – это первая строчка. Заметьте, что данный Chocolatey-скрипт загружает Git с сайта mSysGit. Chocolatey не меняет, не создаёт и не содержит в себе установщики. Он автоматизирует скучный процесс получения ПО, но загружает это ПО с того же места, что и обычно.
Продвинутые функции
Как только вы выучили основы – а они довольно базовые – в Chocolatey есть, что изучить дальше. Кроме команд cinst и cuninst, существуют другие, которые делают проще установку приложений на Windows. Помните, все они находятся в PATH, так что вы можете в любое время вызвать данные команды.
Каждый из этих основных источников может быть вызван командой cinst с помощью параметра –source, например “cinst IISExperss –source WebPI”, или же с помощью их собственных псевдонимов, как это показано ниже.
- cwindowsfeatures– если вы когда-нибудь запускали Установку либо Удаление Программ, затем нажимали Установить Компоненты Windows, чтобы настроить IIS или Hyper-V, тогда эта команда для вас. Несколько примеров:
- cwindowsfeatures IIS-WebServerRole
- cwindowsfeatures Microsoft-Hyper-V-All
- cwindowsfeatures TelnetClient
- Кроме того, Вы всегда можете использовать clist –source windowsfeatures для выведения полного списка.
- cwebpl– Web Platform Installer – замечательный GUI для скачки любых инструментов разработчика, которые вам могут понадобиться для разработки веб-приложений на Windows. Это каталог, установщик и создатель цепочек. Существует также версия WebPI для командной строки, с которой интегрируется Chocolatey. Так что Вы можете:
- cwebpi IISExpress
- cwebpi VWDOrVs11AzurePack_2_0
- И ещё раз, clist –source webpi выведет список того, что Вы можете сделать.
Более подробный список вы можете найти на Chocolatey Commands Reference, где также рассказано про интеграцию с Cygwin, Gems и Python.
Проблемы безопасности
А вот здесь начинаются проблемы. Возможно ли создать систему, которая позволяет вам устанавливать любые приложения прямо из Интернета быстро и легко без установки чего-либо вредоносного? Вы хотите, чтобы соединение с сервером было защищенным, а пакеты надежными, но вы также хотите быть уверены в том, что пакеты не были подделаны с момента их загрузки. И здесь существует угроза атак «человек посередине». Вы хотите отслеживать вредоносные пакеты и быть способными быстро удалять те, которым всё же удалось проскочить.
Конечно, проблемы с безопасностью есть не только у Chocolatey. Они являются частью пакетных репозиториев с момента их создания. В марте 2012 была обнаружена брешь в защите узлового npm репозитория, и народ из Andyet изучил всё, что с этим связано, однако они также отметили, что в данном вопросе играет роль и личная ответственность.
Apt-get на Linux решает большую часть этого вопроса благодаря использованию криптографии и лучших технологий, на которые можно (и следует) равняться. Пакеты в apt-репозиториях подписываются с помощью SecureApp, при попытке использования стороннего репозитория либо же установке неподписанного пакета, появляются предупреждения.
Команда Chocolatey быстро и охотно отреагировала на проблемы с безопасностью. Они добавили SSL, где это необходимо, и понимают, что ещё им предстоит сделать. Если Chocolatey будет расти (я имею в виду широкое использование и затраты), то, возможно, какая-нибудь некоммерческая организация захочет помочь не только с затратами, но и с проверкой защиты, а также передовыми технологиями.
Вот несколько мнений (я их немного сократил), взятых из сообщения руководителя Chocolatey, подписывающегося как Роб в их списке адресатов, также в марте 2012 года:
«У безопасности Chocolatey есть большой потенциал. На сегодняшний день я являюсь руководителем данного проекта и каждый день получаю письмо, в котором указаны все новые пакеты, вышедшие за предыдущий день. Я рассматриваю пакеты от новых авторов, а также первые версии большинства новых пакетов от авторов, с которыми я уже хорошо знаком.
Я уже разговаривал с другими работниками о том, чтобы добавить модерируемый поток, в том смысле, чтобы каждый пакет, каждую новую версию можно было одобрить до того, как она будет показана в главном потоке. Я уделяю внимание тому, как многопоточность реализуется на Debian, и думаю, что нам следует двигаться в этом же направлении.
Безопасность? В будущем мы намерены отобрать небольшую группу людей, которые будут одобрять файлы .nupkg. Также мы обсудили возможность просмотра хэша для такого вида файлов и спецификации хэша для установщиков, чтобы Chocolatey мог проверять загружаемые файлы до их исполнения».
Могу я назвать пакет Chocolatey «ОтформатируйМойЖесткийДиск»? Конечно, могу. Также, как я могу попросить вас открыть консоль с правами администратора и ввести “format c: /q”. Но вы же не будете этого делать, правда? ;)
Что дальше?
Очевидно, что Chocolatey не для ваших «далёких от техники родителей» и у него есть «конкуренты» в виде установочной утилиты Ninite GUI. Ninite разработана не для обычных пользователей и имеет лимитированный каталог, однако она помогает системным администраторам быстро находить распространённые приложения и утилиты, которые им нужны.
Кроме того, действительно ли Chocolatey apt-get? Он не устанавливает библиотеки в масштабе системы, хотя нет причин, почему он этого не может. Другие проекты с открытыми исходниками, как CoApp, хотели бы считаться app-get для Windows, хотя CoApp более похож на диспетчер с «системными библиотеками, поддержкой C++ и утилитами, похожими на утилиты Unix», а Chocolatey – на «утилиты и их зависимости, созданные для разработчиков и системных администраторов».
Chocolatey действительно устанавливает зависимости и Вы можете это увидеть собственными глазами, если попробуете ввести команду «cinst gitextensions», которая сама имеет git-зависимости. Chocolatey проанализирует таблицу и установит то, что необходимо, перед тем, как установить файлы с расширением git.
Проблемы у Chocolatey, и в конечном итоге у самой Windows, возникают с со странным «PATH-ингом» и местами установки. Так как в Windows отсутствуют формальные места установки и так как Chocolatey размещается первой в PATH, можно попасть впросак, когда приложения, установленные не с Chocolatey, не согласовываются с приложениями, установленными с его помощью. К примеру, несколько месяцев назад я установил Git с помощью Chocolatey, позже я забыл про эту версию и самостоятельно установил более новую версию Git. Тем не менее, я продолжал нажимать на старый значок git, т.к. версия, установленная Chocolatey, была «первой». Надеюсь, что такого рода проблемы были решены в последних сборках Chocolatey, но факт остается фактом: программа сложна для тех, кто когда-то установил какую-то низкоуровневую утилиту, и на этом всё и закончилось.
Брэндинг
Я ни в коем случае не хочу преуменьшать значение той огромной работы, которую проделали Роб и его команда, но (и я это сказал Робу раньше) я никак не могу закрыть глаза на само название Chocolatey. Конечно, есть два варианта написания “Chocolaty”, что усложняет, как минимум для меня, точное написание “Chocolatey”. Использование “-ey” теоретически является приемлемым вариантом, однако скажите это красной волнистой линии в Word. Но дело даже не в написании, а в самом названии. В нём нету той «нердовости», присущей «npm», авторитета “apt-get”, или поэтического лаконизма “gem”. Я понимаю, что мы живем в мире, где существуют компании с названиями Hulu, Yahoo, Microsoft (вдумайтесь, MICRO SOFT, что это вообще такое?) и Google, но стоит отметить, что хорошее название может действительно поднять проект на более высокий уровень. Не уверен, что Chocolatey – подходящее название для данного проекта, но это лично мое мнение.
Я настоятельно рекомендую вам самим испробовать Chocolatey! Это мощная утилита, сплоченное и расширяющееся сообщество, а также по праву интересная вещь.
Является ли Chocolatey долгожданным apt-get для пользователей Windows? Выскажите свое мнение в комментариях.
Комментарии
?...
Заголовок не соответствует содержанию. Не читайте эту горбостатью. Интересующимся вендовым манагером пакетов сюда. Но всё равно Венде по этой части пока далеко до Линукса.