Пользователь
0,0
рейтинг
19 мая 2012 в 00:57

Разработка → Chocolatey — apt-get для Windows

Chocolatey — менеджер пакетов в среде Windows по аналогии с apt-get в Linux Мире.



Начал использовать по причине разработки на Node.js под Nodester. Мне хотелось бы регулярно обновлять ноду, git, dropbox, да и тот же skype, при этом, не заморачиваясь со скачиванием msi инсталяторов и установками, а просто обновить одной командой:

cup all

Это возможно — обновить все пакеты. Общий список доступных команд в Wiki. К сожалению, нет возможности удалить пакеты.

Так, как для работы постоянно требуется доступ к консоли, git, node, jade. Я хотел бы немножечко проиллюстрировать работу с Chocolatey в контексте (на примере) подготовки к разработке под Nodester.

Требования для установки:

Windows XP/Vista/7/2003/2008
.NET Framework 4.0
PowerShell 2.0

Устанавливается просто, выполнением такой незамысловатой команды (в cmd.exe в PowerShell не обрабатывается):

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('http://bit.ly/psChocInstall'))"

Процесс установки Chocolatey

После чего автоматически устанавливается в C:\Chocolatey, в C:\Chocolatey\libs будут находится описания пакетов, библиотеки. Основные же модули программ по дефолту устанавливаются в Program Files (x86).

Все основные и необходимые, для девелопера, пакеты присутствуют. Интерпретируемые языки, типа PHP, Ruby, Python, Node.js. БД — MySQL, MongoDB, SQLite. Контроль версий Git, Mercurial, SVN. Notepad++, Sublime. Сalibre для обработки книг под Kindle.

1. Установка пакета Node.js вместе с npm

cinst nodejs.install

Эта команда аналогична следующей

chocolatey install nodejs.install



Правда консоль придется закрыть и открыть заново, что бы стали доступны записанные пути в path.



2. Когда нода установлена уже можно вести разработку, инсталлировать модули через менеджер пакетов. Вот и пакетик для Нодстера



3. Без Git-a на Nodester совершить деплой не удастся, так что устанавливаем его с помощью Chocolatey



Вот список того, что я ещё дополнительно установил.

cinst Console2
cinst putty
cinst curl
cinst Wget


Пробуем putty, команда открывает окно программы и смотрим на, то что git поставился успешно (напомню, что придется закрывать консоль и открывать заново).



4. Вот видим что к Nodester можем свободно обращаться



Дальше остается рутинный процесс, инсталяция на локальной машине через npm требуемый в проекте модулей, типа expressjs, jade, тестирование на локальном веб-сервере который загружает нода. Все это дело ведется в git, коммитится, после чего совершается push в репы nodester. На nodester-е (список команд) так же потребуется установить npm модули через nodester npm install appname.

Не для всего подходит Chocolatey. Сама идеология Windows и создаваемых под платформу приложений склоняется к тому, что они сами должны лезть в автозагрузки и при каждом удобном случае без разрешения лезть обновляться. Так, в пакетах есть Chrome, но мы то знаем про GoogleUpdater.exe который и так все обновляет. Так, же и про Notepad++ который сам может полезть за обновлениями. Skype и самому обновить можно. Однако если изначально все ставить по-шоколадному, быстрое обновление одной командой будет приносить удовольствие, особенно если это относится не к GUI инструментам.

Напоследок приложу видео ролик с оф. сайта



UPD.

В комментариях попросили добавить пакет Slik Subversion (SVN). Я думаю полезно будет проиллюстрировать, как просто это осуществляется. Также прояснится принцип работы «шоколада».

Главное описание и скрипт инсталляции для простейшего случая. Все пакеты можно собрать самому, вот примеры.

1. Создаем файл описания C:\sliksvn\sliksvn.nuspec с соответствующим текстом (исходная болванка):

<?xml version="1.0"?>
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <metadata>
    <id>sliksvn</id>
    <title>SlikSVN</title>
    <version>1.7.4</version>
    <authors>Slik Company</authors>
    <owners>anatooly</owners>
    <summary>Slik subversion reliable version control starts here</summary>
    <description>We provide a standalone command line Subversion package for Windows. The installer contains all command line tools (svn, svnadmin, svnsync, svnserve, svnmucc, etc.) but no application bindings nor Apache modules. The tools are fully side-by-side compatible with other packages. Ideal for automated build and deploy scripts</description>
    <projectUrl>http://www.sliksvn.com/</projectUrl>
    <tags>sliksvn svn subversion</tags>
    <copyright>Slik Company</copyright>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
  </metadata>
</package>


2. После чего создаем скрипт инсталляции C:\sliksvn\tools\chocolateyInstall.ps1

try {

Install-ChocolateyPackage 'sliksvn' 'msi' '/quiet' 'www.sliksvn.com/pub/Slik-Subversion-1.7.4-win32.msi' 'http://www.sliksvn.com/pub/Slik-Subversion-1.7.4-x64.msi'

Write-ChocolateySuccess 'SlikSVN'
} catch {
Write-ChocolateyFailure 'SlikSVN' "$($_.Exception.Message)"
throw
}


Из кода становится понятно. Что скачивается с оф. сайта либо 32-бита, либо 64 бита инсталятор и будет ставиться в тихом режиме не отвлекая вопросами.

3. Доп. файл установки (может отсутствовать), а данном случае не принципиально C:\sliksvn\tools\install.ps1

param($installPath, $toolsPath, $package, $project)

Write-Host 'This is not a package with dlls to reference in it.'
Write-Host 'Please install using chocolatey'
Write-Host "To get chocolatey just run 'Install-Package chocolatey' followed by 'Initialize-Chocolatey'"
Write-Host 'chocolatey install sliksvn'
write-host 'Removing this package...'
uninstall-package sliksvn -ProjectName $project.Name


4. Собираем пакет. Его собрать можно NuGet-ом. Пропишите доступ к нему в path, либо обращайтесь через полный путь. Лежит в C:\Chocolatey\chocolateyInstall\NuGet.exe

> cd C:\sliksvn
> nuget pack

После чего получаем C:\sliksvn\sliksvn.1.7.4.nupkg локальный пакет. С него можно уже устанавливать, проверьте cinst sliksvn -source C:\sliksvn (в пути обязательно только путь к папке где лежит пакет, без его названия). Устанавливается локально. После чего можете загрузить пакет на сайт. Там работает режим постмодерации, так что пакет будет виден сразу и становится доступным через cinst sliksvn.

Как все работает при установке пакета? При установке, все что запаковано в пакете nupkg — скрипты установки, описание, и другие файлы, бинарные архивы (есть много интересных примеров что там может быть) попадает в папку C:\Chocolatey\lib\НАЗВАНИЕ_ПАКЕТА, а вот действия прописанные в скрипте, в нашем случае тихая установка выполняются по дефолту, то есть SlikSVN у меня 64-бита система, значит он ставится в C:\Program Files\SlikSVN\ и сам прописывается в path. Но на самом деле установка может быть любой распаковка из собственного архива, который будет входить в пакет, либо ещё какие-то действия со своими входящими библиотеками. Все зависит от фантазии.

Как его удалить? Сам SlikSVN через Установка-Удаления, как любую стандартно установленную программу, и из C:\Chocolatey\lib\НАЗВАНИЕ_ПАКЕТА руками.

Update 2012-08-15:

В последних версиях уже появилось удаление пакетов через chocolatey uninstall. По команде удаляется содержимое пакета из C:\Chocolatey\lib\ название пакета, то есть утилиты которые устанавливаются распаковываясь в эту папку удаляются полностью. То что инсталлировалось в систему и в Program Files — не трогается.

Списка установленных, как логично было бы предположить по chocolatey list пакетов — нет. Но ведь это можно легко исправить, как вариант таким хаком:

diff --git "a/c:\\Chocolatey\\chocolateyInstall\\functions\\Chocolatey-List.ps1" "b/c:\\Chocolatey\\chocolateyInstall\\functions\\Chocolatey-List.ps1"
index 67c2ecc..aa67027 100644
--- "a/c:\\Chocolatey\\chocolateyInstall\\functions\\Chocolatey-List.ps1"
+++ "b/c:\\Chocolatey\\chocolateyInstall\\functions\\Chocolatey-List.ps1"
@@ -15,7 +15,12 @@ param(
     $parameters = "list"
     if ($selector -ne '') {
       $parameters = "$parameters ""$selector"""
-    }
+    } else {
+	  $packageFolders = Get-ChildItem $nugetLibPath | sort name
+	  $packages = $packageFolders -replace "(\.\d{1,})+"|gu 
+	  Write-Host $packages
+	  exit
+	}
     
     if ($allVersions -eq $true) {
       Write-Debug "Showing all versions of packages"


Теперь по chocolatey list мы получим:

7zip 7zip.install chocolatey Console2 curl foobar2000 git git.install miranda msysgit nodejs.install notepadplusplus notepadplusplus.install php php5-dev putty sliksvn sublimetext2 warmup Wget
@anatooly
карма
19,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (55)

  • 0
    Это клевый конкурент ninite.com/
    Сейчас буду пробовать.
    • 0
      Что-то не очень и конкурент. В любом случае для меня консоль ближе)
      • +1
        Конечно не конкурент, он чоколатей уделывает тока так.
        • +3
          Скажите, как через Ninite установить node.js или php с mysql? Они, вроде не открытый проект, на Github-е нет, плюс деньги за какие-то обновления хотят зарабатывать, плюс не нашел у них консольного режима.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +3
      Это и есть NuGet, только шоколадный.
      Chocolatey NuGet — kind of like apt-get, but for Windows
  • +26
    Корявый велосипед. Никакого никсовского шарма
    • +11
      У винды и не может быть никсового шарма, но попытка взять что-то лучшее и удачно применить много-го стоит.
  • 0
    Если я правильно понял, то chocolatey ставит ещё и свою консоль какую-то? Как в ней обстоят дела с гитовыми репами, включающими файлы с unix EOL?
    • +1
      Консоль не ставится никакая. Это я «cinst Console2» устанавливаю, что бы с табами было, внутри обычный PowerShell.
  • 0
    allmyapps.com — не без багов, но в целом позволяет получать обновления кучи софта, из них многие с автоустановкой, а те что с рекламными модулями точно будут требовать ручной установки.

    И не всегда корректно определяет версию, что-то приходится и вовсе руками ставить.
  • –9
    КРУТО! Наконец! Консоль правит балом! Долой графические интерфейсы! Да здравствует суровый links! gnome/kde/xfce/lxde- не, не слышал! :)
    • –7
      Сижу под Гномом, он уже задолбал.

      Не, базовые вещи делает.

      Но рыться в манах и создавать/редактировать файлы, чтобы приложение в менюшку добавить, — это жопа.

      То ли дело Винда или Макось, добавление одним перетаскиванием.
      • –2
        поставь KDE
        • 0
          Я не понимаю — зачем эти комментарии. Ветка — 3 комментария. У всех минусы. Зачем такое писать?

          Насколько я понял:
          * В постах про windows не любят linux
          * В постах про linux не любят windows
          И наконец главное:
          * На хабре не любят когда НОЮТ. Не нравиться — не используй!

          KDE — зло. xfce и gnome — годиться (других хороших не знаю).
          • 0
            Fluxbox? :)
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Как времени освободится я добавлю пакет в галлерею. Когда его верифицируют, я скину сюда ссылку.
    • 0
      Как и обещал chocolatey.org/packages/sliksvn 32/64-bit с оф. сайта, установка в тихом режиме. Если будут жалобы на пакет, его удалят.
  • 0
    Что-то не увидел списка доступных эээ… репозитариев?
    • 0
      Ссылка скрыта в тексте «пакеты присутствуют». Листать по 20 штук жутко неудобно.
      • 0
        а как дела с обновлениями? я имею ввиду серверной части? насколько быстро туда падают апдейты? и это происходит автоматически? или каждый раз «пересобирают» пакеты?
        • 0
          Не буду голословным, так, как могу ошибаться, но пакет собирают из бинарного файла инсталляции. Каждый автор, добавивший пакет поддерживает его. Но это не точно. Процесс сбоки пакета, можно для наглядности на видео посмотреть. Пакеты идентичны тем, что и NuGet использует.
          • 0
            хм, если все так и есть, то велика вероятность что в какой-то момент автор просто забьет на это…
        • –2
          С обновлениями пакетов и в линуксах не всё так гладко. Лежит какая-нибудь древняя, сто лет не обновлявшаяся версия похапэ — и шут ты одной командой поставишь новую версию. Жди обновления всей оси, и ещё вопрос, включат ли нужную тебе версию или сочтут недостаточно стабильной. Иди ищи, кто где выложил в удобном виде, да ковыряй свои конфиги.

          Тут, с виндовыми костылями, разумеется, всё ещё хуже.

          Пока над таким проектом не будет работать команда, которая получает хорошую стабильную зарплату, всё будет плохо, всё будет на уровне, недалёким от «proof of concept».
          • 0
            У вас какой-то неправильный дистрибутив GNU/Linux.
    • +3
      Репозито́рий.
  • +22
    Могу ли я поинтересоваться у автора: к чему такие мучения, если можно просто поставить один из свободных дистрибутивов GNU/Linux?
    • +4
      У автора два компьютера рядом стоит один с Win8 CP, второй с Ubuntu 12.04, по-этому я и пишу про консольный менеджер chocolatey, с которым быстрее работается, и который считаю удачным решением под мою конкретную задачу. Это не значит что я пропагандирую использовать Windows.
  • –13
    Только хардкор, только dos!
    • 0
      При чём тут Dos?
      • 0
        Человек просто любит блестнуть умом и пошутить. Но получилось — «Слышу звон, не знаю где он» или «Хахаха. Не шути так больше».
        • –1
          Я у вас учился шутить.
  • +9
    Удивительно, что подобное в этих ваших виндах появилось только недавно. :)

    А вот скрин node.js под windows доставляет мне моральные страдания. Не, я понимаю, как прибежали шальные майкрософтовские денежки, сразу — ооо, кроссплатформенность, кроссплатформенность, как же мы до этого заблуждались, это ооочень важно, пнятненько? Не, я не спорю, кроссплатформенность — это хорошо, но не методом ломания всего и выбрасивания того, что на винду портируется чуть сложнее чем в три строчки! Ладно, форки там, но customFds-то за что? В node.js 0.2 я за 10 минут сделал воркеры+мастер+демонизацию (несмотря на отсутствующий форк). В 0.6, если нужно слушать привелегированный порт, это не делается, блин, НИКАК. И все из-за винды :)
    • 0
      да, забавно, пользлватели винды переходят на консоль, в то время как под убунтой наоборот менеджер пакетов переделывают под более юзерфрендли.
      • 0
        так переделывают или всё-таки пишут user-friendly фронтенды?
        • 0
          ну вот нада обязательно к словам придраться: пишут user-friendly фронтенды
          • +1
            Так apt-get и aptitude живут своей жизнью, просто поверх всего этого счастья уже сто лет существует synaptics, который не вполне удобен новым пользователям, поэтому сделали ещё и Software Center с каталогом и описаниями.
  • –1
    Спасибо, мне очень пригодится
  • 0
    Понятно, что в этой штуке нет ничего революционного, это надстройка над давно и успешно используемым пакетным менеджером под Windows — NuGet (или, возможно, просто использует его формат описания пакетов NuSpec). Вот только в чём эта настройка заключается, что нового привносит? Вот что хотелось бы понять из этой статьи.
  • 0
    И все таки, почему вы против гуи? Судя по скринам, команд немного, значит можно продублировать кнопками, а эо быстрее чем пользоваться консолью. А консоль нужна все таки для ускорения оперций, а не замедления. Откуда тяга все проводить через консоль?
    • 0
      Наверно, потому, что я ещё не приловчился пользоваться кнопками, что бы запустить свое приложение с помощью node server.js или обработать Jade шаблон в html-вид по запросу node .\node_modules\jade\bin\jade --out .\html example.jade и постоянно работать с Nodester можно исключительно через консоль. Вполне логично что мне легче там же забить chocolatey update all или chocolatey update nodejs
  • +1
    Через 3 месяца зарелизнется уже существующий родной магазин приложений, который по прежнему не будет уметь ставить git/msysgit и ruby. А это означает, что такие вот аналог apt-get будут и будут появляться.
  • +1
    «К сожалению, нет возможности удалить пакеты.» :D Какой же это менеджер пакетов?
  • 0
    «Все основные и необходимые, для девелопера, пакеты присутствуют»

    Окей, Perl я там нашёл, есть vim и ctags, но что нет mingw – это очень странно.
    На какого-то слегка однорукого девелопера рассчитано.

    Вообще, прекрасно, что такая штука появилась.

    Удаления пакетов нет по причине понятных сложностей, но я думаю, это появится в каком-то виде.
    • 0
      mingw добавить не проблема, правда сами компиляторы опять руками надо будет инсталить через mingw.

      Удаление из Chocolatey/libs где описание пакетов, можно сделать. Проблемно, то, что программы устанавливаются в тихом режиме, то есть фактически через консоль installer.exe /S & installer.exe /quiet по-этому удалять их нужно через Установка/удаление программ, что вызовет вывод GUI окна удаления (сохранять настройки, восстановить). Наверно унинсталлеры для тихого режима не делают.
  • 0
    Не помню, как назывался предыдущий претендент на звание репозитория windows-программ, но спрошу в очередной раз: что помешает авторам понапихать внутрь скачиваемых программ вирусов или троянов? Кто они такие и почему им можно доверять?
    • 0
      Ничего не помешает, в инсталлятор что угодно можно поместить. Пакеты добавляются с пост-модерацией, то есть сразу становятся доступны для загрузки. Но на сайте, странице пакета, есть ссылка Abuse, если будут жалобы на пакет, его заблокируют. Авторам не нужно доверять, возможно сформируется сообщество, что бы все пакеты проходили модерацию поначалу, тогда будет лучше конечно.
  • 0
    ИМХО один из самых существенных недостатков подобных репозиториев — временная задержка между моментом выхода обновленной версии программы и обновлением её пакета на этом репозитории.
    • 0
      Да, нужно вручную подготовить описание пакета, даже если ссылка на сайте программы, где находится сам exe/msi инсталлятор, не изменилась.
      • +1
        Подозреваю, что эту процедуру можно автоматизировать.
        Например, вот таким образом я ставлю себе на локальную машину некоторый софт (используется cygwin):

        curl 'http://winmerge.org/downloads/' | grep -o 'http://downloads.sourceforge.net/winmerge/WinMerge-.*.-Setup.exe' | sed q | wget -O %downloads%\1.exe -i -
        %downloads%\1.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-


        Всё прекрасно работает, если ссылка на инсталятор не изменяется
  • 0
    полезная тулза, сэкономила кучу нервов )
  • 0
    очень круто! еще бы (если вообще есть такой в природе) какой нибудь приличный шелл, не cmd и не bash а чтото между — с поддержкой как виндузных заморочек типа С:\ так и tab completion и других юниксовых шелловых вкусностей. Кто знает такой, посоветуйте!
    • 0
      PowerShell под MS Windows.
    • 0
      Есть еще UnxUtils и ConEmu, но это все путь в обход.
      Истинно виндусовый шелл — это PowerShell

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.