Разпространение на приложения

brew

Въведение в поредицата

Наскоро се изправих пред предизвикателството как да разпространя една помощна програма за конзола? Обичайните ми инструменти като pip, npm и gem не бяха подходящи поради езика на самата помощна програма - bash. Тогава стана ясно, че трябва да разпространявате приложението си, включително чрез системни мениджъри на пакети. За Mac - поради липсата на вграден такъв - има няколко такива мениджъра на пакети. И всеки от тях има свои собствени характеристики и недостатъци. И в първата част искам да разгледам по-отблизо Homebrew и как да го опаковам.

Е, за да инсталирате приложения на Linux, ще трябва да изградите пакети от следните формати: .tar.gz, .deb и .rpm. За което ще говоря във втората част.

Терминология

Първо, нека се споразумеем за условията, защото в света на Homebrew има достатъчно специфични думи. В статията ще използвам оригиналните термини, за да не изглежда много комично. Така:

Термин Описание Пример
Формула (Формула)Дефиниция на пакета/usr/local/Library/Formula/foo.rb
Кег (кег)Префикс на формула/usr/local/Cellar/foo/0.1
opt префикс (префикс)Символна връзка към активната версия на Keg/usr/local/opt/foo
Изба (Изба)Всички Keg са инсталирани тук/usr/local/Cellar
ДокоснетеДопълнителни хранилища с формула или добавки/usr/local/Library/Taps/homebrew/homebrew-версии
бутилка (бутилка)Компилирана версия на Kegqt-4.8.4.mavericks.bottle.tar.gz

Как работи Homebrew

Невъзможно е да се пренебрегне устройството на самия инструмент, един от неговите създатели перфектно говори за него:

Homebrew се основава на две неща: Git и Ruby. Когато инсталирате Homebrew за първи път, той създава копие на официалното хранилище в /usr/local. Всеки път, когато актуализирате Homebrew с командата brew update, се случва git pull и също така ви показва кои формули са се променили. Когато инсталирате нещо с командата brew install, Homebrew изтегля архива (в бъдеще файловете ще бъдат взети от кеша), проверява неговия хеш и след това го инсталира. Но всъщност Formula може да бъде много по-сложна: може да има зависимости, функции за изтегляне: svn, ftp и т.н. Homebrew също така предоставя предварително изградени пакети (автоматично създадени от бота), когато е възможно.

Създаване на ваша собствена формула

Да приемем, че вече имате версия на github (и ако не, създайте я с git tag). Ще работя върху примера на моя сценарий. Сега най-лесният начин да създадете формула е да извикате brew create https://github.com/sobolevn/git-secret/archive/v0.1.0.tar.gz:

По-късно можете да използвате командата за редактиране на варене, за да редактирате формулата. Нека обърнем внимание на основния клас, който наследява абстрактния клас Formula * . Има няколко важни качества:

Понякога става необходимо да добавите различни опции по време на инсталацията, дали да добавите незадължителни пакети, какви опции да зададете по време на изграждане и т.н. Homebrew има опция * за това. Да кажем, че тук е пример за опции от формулата git.rb *:

За достъп до текущите опции от код, използвайте build.with? "име_на_опция" или build.without? "име_на_опция" .

Зависимости

Вашето приложение можеdependencies, за тях има специален методdependent_on *. Важно е да се отбележи, че зависимостите могат да бъдат различни * както във вида на инсталацията, така и в аксесоара: само формулата или системният пакет ще свършат работа. Има няколко вида зависимости (по инсталация):

  • стандартен, необходим за работата на приложението
  • :build - необходимо е само при изграждане
  • :recommended - зададено по подразбиране, добавя опцията --without-foo
  • :optional - не е зададено по подразбиране, но автоматично добавя опцията --with-foo

За тези зависимости, които не са част от Homebrew, има специален ресурс * блок, който трябва да бъде деклариран с url и sha256.

„Пакет предварително“

Homebrew има чудесен бот *, който обхожда формули и ги събира в бутилки. За да му кажете да събира, се използва специален блок bottle *, където можете да посочите URL адреса за изтегляне, пътя за запазване на файла и параметрите sha256 за различни версии на Mac OS X. Пълен пример от документацията:

Или можете да посочите бутилка: ненужна и сглобяването няма да се извърши. Между другото, за да провери правилността на сглобяването, нашият любезен бот извършва тестовете, които сме посочили за формулата. За тях по-долу.

Инсталиране на най-новата версия от хранилището

Атрибутът head * ви позволява да добавите връзка към хранилището, така че да можете да инсталирате най-новата версия директно от текущия клон (който може да бъде указан чрез параметъра :branch). За да инсталирате формула по този начин, трябва да използвате brew install --HEAD $formula.

Процес на инсталиране на формула

Тук е моментът да поговорим за основния метод - install * , който изпълнява необходимите за инсталацията команди. Основно използваизвикване на системни команди с Kernel#system * . Тук трябва да споменем специалните стойности на променливите, които могат да бъдат предадени на вашия скрипт за неговата конфигурация, те са достъпни на връзката.

Комуникация с потребителя

Има специални функции за показване на съобщения *:

  • охай за обща информация
  • опу за предупреждения
  • odie за съобщения за грешка и незабавен изход
Има и метод с предупреждения *, който ще напише на потребителя всякакви подробности за вашия пакет след успешна инсталация или при изпълнение на командата brew info $formula.

Тестване на инсталацията

Въпросът е малък: да се провери дали формулата е установена, дали се е събрала. За да проверите правилността на работата в Homebrew, има специален блоков тест *. Изпълнява се вътре в кутията за изпращане и ако се изпълни, тогава формулата се счита за правилно събрана. Както казват самите създатели, те нямат нищо против, ако тестът проверява само версията. Основното е, че програмата се е събрала. Но ще бъде по-добре, ако тестът е по-впечатляващ. Важно е да разберете, че тук не се тества функционалността, а само сглобяването. Ето примерен тест:

За да извикате теста локално, използвайте командата brew test $formula.

Формулата излиза в света

Всичко, нашата формула е почти готова! Сега трябва да сме сигурни, че преминава вътрешните проверки на Homebrew: стартирайте brew audit --strict --online $formula. Ако няма грешки, продължете. Ако има, тогава го правим. Веднага ще ви кажем какво трябва да се промени. Формулата вече е готова да излезе в открития свят. И от отворения свят има няколко начина за задаване на формулата:

  • Официално хранилище на Homebrew
  • Личен кран
Подробности за всеки.

Попълнете формулатаофициално homebrew хранилище

Труден път. Нашата формула трябва да отговаря на много изисквания на Homebrew, за да бъде приета. Ето някои от тях:

Ако формулата ви пасва, сега трябва да я качите в официалното хранилище. Официалното ръководство за участие в проекта ще ви каже как да направите Pull-Request по-добре, има много тънкости и правила.

Е, ако не се побира или умишлено не искате да го изпратите там, тогава трябва да създадете свой собствен кран.

Създайте свой собствен Tap

Tap * е основно хранилище, където съхранявате вашите собствени формули. За да създадем Tap, създаваме хранилище в github с префикса homebrew-. Например: homebrew-mytap. Самите формули могат да бъдат или в корена, или в папката Formula (или HomebrewFormula). Сега има два начина да зададете вашата формула, първият е:

  • brew tap /mytap - ще създаде локално копие на вашето хранилище
  • brew install $formula - ще инсталира формула от него
Или една команда:

  • brew install /mytap/$formula - този начин първо ще направи brew /mytap и след това ще извика командата за инсталиране
Готово!

Заключение

Писането на ваши собствени формули е много лесно, защото Homebrew предоставя много висококачествен API. Дори и да не познавате Ruby, тогава всичко трябва да се окаже доста бързо. Ето какво ми се случи.

Hardcore conf в C++. Каним само професионалисти.