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

Въведение в поредицата
Наскоро се изправих пред предизвикателството как да разпространя една помощна програма за конзола? Обичайните ми инструменти като 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-версии |
бутилка (бутилка) | Компилирана версия на Keg | qt-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 за съобщения за грешка и незабавен изход
Тестване на инсталацията
Въпросът е малък: да се провери дали формулата е установена, дали се е събрала. За да проверите правилността на работата в 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++. Каним само професионалисти.