Pull to refresh

Легкая публикация PEAR-пакетов

Reading time 4 min
Views 3.1K
Скажу сразу: у меня создание PEAR-канала и публикация пакета заняли около часа. Но, если отбросить все тупиковые способы, сэкономить на гуглении, и не использовать сомнительные утилиты, то вполне возможно уложиться в 10 минут.

У PHP программистов больше поводов не любить PEAR, чем любить. Действительно, создается впечатление, что за последние 5 лет ни библиотеки в репозиториях, ни сам инсталлятор, практически не изменились.
Тем не менее, до сих пор, установить PHP-бибиотеку проще всего посредством PEAR. Это, конечно, при условии, что она будет одинаково востребована для всей системы. Например, такие продукты, как PHPUnit и Docblox устанавливаются именно через PEAR, и крайне неудобно устанавливать их другими способами: например, клонированием GitHub репозитория.

Скорее всего у вас есть библиотека, которой вы бы хотели поделиться с сообществом. Ну или когда-то появится. Это не важно. Важно то, что рано или поздно вам захочется сделать так, чтобы ваш продукт можно было установить всего в 2 команды…

Такое вот вступление. Дальше будут чисто практические рекомендации.
Одна из них: документация с сайта pear.php.net может не только помочь, но и навредить. Разбираться во всех этих PEAR, PEAR2, Pyrus, PEAR_PackageFileManager2, а также в структуре package.xml, равносильно изучению служебных инструкций какой-нибудь атомной станции. Вот увидите, мы сможем обойтись без всего этого. Кроме того, мы ограничены во времени, а на изучение лишних деталей 10 минут нам точно не хватит. И часа тоже.

Мы будем прагматиками, рационалистами, ну и просто лентяями.
Например, нам лень создавать свой PEAR-сервер где-то у себя на хостинге. Да и зачем? Лучше приспособить под это дело GitHub.

Для начала нам понадобится Pirum. Это легковесный менеджер PEAR-каналов.

Устанавливается он, как ни странно, тоже через PEAR:
$ pear channel-discover pear.pirum-project.org
$ pear install pirum/Pirum

Сам сервер, настроенный под GitHub можно взять тут: github.com/saucelabs/pear

Следуем инструкции:
Создаем репозиторий pear на гитхабе.

Создаем локальный репозиторий:
$ mkdir pear 
$ cd pear 
$ git init 
$ git remote add origin git@github.com:[username]/pear.git

Создаем конфигурационный файл pirum.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<server>
  <name>[username].github.com/pear</name>
  <summary>[channel name]</summary>
  <alias>[shortname]</alias>
  <url>http://[username].github.com/pear</url>
</server>


Выполняем команды
$ pirum build .
$ git add . 
$ git commit -m "Initial server build"

Заливаем наш репозиторий на гитхаб, под видом гитхаб страниц:
$ git branch -m master gh-pages
$ git push origin gh-pages

Напомню, гитхаб позволяет вам захостить свой статический сайт, для него и используется специальная ветка: gh-pages.
После того как мы залили репозиторий на сервер, по адресу https://[username].github.com/pear уже будет находится новый канал.
Там, кстати и инструкции его использованию. Жаль только поставить оттуда пока нечего.

Исправим этот недочет. Нам нужен правильно созданный pear-пакет для нашей библиотеки.
Создать его поможет утилита Pearfarm. Это не только утилита, а ещё и сайт с хостингом pear-пакетов, но к сожалению, особой популярностью он не пользуется.
По сути, нам и не нужно было бы проходить вышеизложенные шаги, если бы было больше уверенности в Pearfarm.

Впрочем, сама утилита работает и существенно упрощает жизнь при создании пакета с нуля.
Устаналиваеем её… Правильно, тоже через PEAR:
$ pear install pearfarm.pearfarm.org/pearfarm

В каталоге с вашей библиотекой выполните команду:
$ pearfarm init


Она создает файл pearfarm.spec, назовем его метапакетом. По сути это PHP-файл, который в удобной форме определяет настройки для создания пакета.
Вот он:

<?php
$spec = Pearfarm_PackageSpec::create(array(Pearfarm_PackageSpec::OPT_BASEDIR => dirname(__FILE__)))
             ->setName('[dirname]')
             ->setChannel('TODO: Release channel here')
             ->setSummary('TODO: One-line summary of your PEAR package')
             ->setDescription('TODO: Longer description of your PEAR package')
             ->setReleaseVersion('0.0.1')
             ->setReleaseStability('alpha')
             ->setApiVersion('0.0.1')
             ->setApiStability('alpha')
             ->setLicense(Pearfarm_PackageSpec::LICENSE_MIT)
             ->setNotes('Initial release.')
             ->addMaintainer('lead', 'TODO: Your name here', 'TODO: Your username here', 'TODO: Your email here')
             ->addGitFiles()
             ->addExecutable('[dirname]')
             ;


Вам остается пройтись по всем полям и заполнить их. Обратите внимание как легко заполняется лицензия! По умолчанию в пакет попадут все файлы из гит-репозитория, можете убрать некоторые из них с помощью метода addExcludeFilesRegex().
Больше информации по конфигурции тут: pearfarm.org/help/spec

После заполнения всех полей подключимся к нашему pear-каналу:
$ pear channel-discover [username].github.com/pear


И создадим пакет.
$ pearfarm build

И если всё прошло хорошо, на выходе вы получите файл package.xml (конфигурация пакета для PEAR) и свежий билд вашей библиотеки в архиве.

Добавляем билд на сервер:
$ pirum add [путь-к-нашему-pear-репозиторию] [путь-к-билду]

Заливаем обновленный сервер на гитхаб:
$ git add .
$ git commit -m "first package added"
$ git push origin gh-pages


Готово! Теперь вы можете с легкостью публиковать свои open-source библиотеки и больше не прятать их в недрах локальных веб-серверов.

А чтобы убедиться в том, что всё работает, давайте зайдем на:

http://[username].github.com/pear/

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

Спасибо за внимание.

Также отмечу, что:
— На винде всё работает.
— Не стоит использовать верхний регистр в названии сервера каналов. PEAR с ними не дружит.
Tags:
Hubs:
+34
Comments 22
Comments Comments 22

Articles