Сам собі супроводжувач пакетів Debian: збираємо Nginx

Debian Rules!В попередній статті ми зробили корисну справу і зібрали собі urxvt з підтримкою 256 кольорів. Тепер нарешті можна вмикати нормальну кольорову схему одного з найпотужніших редакторів ­— vim, а саме desert256. Однак розробники все ще сидять незадоволені і очікують, коли ми їм нарешті поставимо найсвіжіший Nginx зі скомпільованим стороннім модулем Nginx HTTP Push Module, або просто NHPM. Що ж, не будемо змушувати їх чекати ще.

Для початку йдемо і дивимося, наскільки стара версія в репозиторії, можливо вдастьтся якось умовити розробників на стабільну версію з репозиторію.

  • Версія в репозиторії — 0.7.64
  • Версія на офсайті — 0.8.31

Видно, домовитись не вийде. Що ж, доведеться збирати. Йдемо в нашу директорію для збирання і витягуємо сирці пакету nginx з його залежностями і радіємо існуванню утиліти apt, яка робить всю брудну роботу за тебе.

$ cd ~/debian && apt-get source nginx
$ sudo apt-get build-dep nginx

Тепер качаємо останню свіжу версію з офсайту в звичну ~/debian, а заодно і так необхідний розробникам модуль:

$ wget http://sysoev.ru/nginx/nginx-0.8.31.tar.gz
$ wget http://github.com/slact/nginx_http_push_module/tarball/v0.69

А тепер починається магія Debian — однією командою з джерельних кодів, не призначених для створення пакету, ми створюємо дерево, придатне для цього. Саме в цьому і сила даного дистрибутиву — він надає абсолютно всі необхідні інструменти для зручної підготовки програмних продуктів до впровадження їх в офіційний дистрибутив. Мало того, операційна система надає з добру сотню скриптів, які настільки спрощують роботу по створенню пакетів, що кожен в змозі ними користуватись! Отже, поїхали:

$ cd nginx-0.7.64 && uupdate ../nginx-0.8.31.tar.gz

Оновлення джерельних кодів пакету nginx

Оновлення джерельних кодів пакету nginx

Як бачимо, всі патчі розробників Debian наклались без жодної помилки, і в цьому заслуга саме розробника Nginx Ігоря Сисоєва — проект розвивається без надто різких змін, зберігаючи навіть сумісність патчів.

Якби нам необхідно було лиш оновити Nginx до найсвіжішої версії, нам би лишилося лиш перейти в нове дерево джерельних кодів і виконати dpkg-buildpackage, як і минулого разу, проте задача встановлення модуля ще не завершена, і тепер ми візьмемося за неї. Для початку слід вибрати, де саме в джерельних кодах розмістити сам модуль. Після нетривалого пошуку вирішено розмістити їх в директорії contrib.

$ cd ../nginx-0.8.31/contrib && tar zxvf ../../slact-nginx_http_push_module-f762a04.tar.gz
$ mv slact-nginx_http_push_module-f76 http_push_module 

Підготовка модуля до компіляції з Nginx

Підготовка модуля до компіляції з Nginx

Тепер необхідно, щоб цей модуль компілювався разом з Nginx. За весь процес конфігурування, компіляції, та ще купи речей відповідає один єдиний файл – debian/rules. Фактично це Makefile з правами запуску та багаться цілями (targets). Так, наприклад, для банального збирання пакету можна використати команду

$ fakeroot debian/rules binary-arch 

Відкриваємо файл і до опцій конфігурування додаємо NHPM:

Включення модуля в компіляцію Nginx

Включення модуля в компіляцію Nginx

Нарешті, вказуємо наші зміни в debian/changelog за допомогою dch і збираємо такий бажаний пакет Nginx 0.8.3. Слід зауважити, що утиліта uupdate вже встигла змінити наступну версію пакета на 0.8.3, що заслуговує окремої подяки в бік розробників.

$ dch 
$ fakeroot dpkg-buildpackage -sa 

Завершення збирання пакету Nginx

Завершення збирання пакету Nginx

Нарешті, пакет зібраний і готовий до встановлення на радість розробникам, а це значить, що наступного разу ми створимо власний репозиторій і відкриємо його всьому світові. Бажаючі встановити пакет зможуть з легкістю це зробити, додавши наш тестовий репозиторій в індекс apt, розташований за адресою http://itblog.org.ua/debian як описано у відповідній статті. Наостанок лиш хочу перелічити ті утиліти, які допомогли оновити, підлаштувати та, врешті, зібрати готові пакети для Nginx та rxvt-unicode:

  1. apt-get — отримання джерельних кодів, встановлення залежностей збирання.
  2. dpkg-buildpackage — збирання пакету з дерева джерельних кодів Debian.
  3. dch — внесення записів в журнал змін пакета, зміна версії, налаштування цифрового підпису пакету.
  4. uupdate — оновлення джерельних кодів програми з накладанням патчів Debian та частини дерева кодів для збирання пакету.

Ця стаття вкотре доводить, що не такий страшний чорт, як його малюють. До наступних зустрічей!