Доброго дня, шановний читачу. В житті операційної системи поруч з резервним копіюванням важливе місце займає її оновлення. Так звані «виробничі» сервери першими пунктами в списку пріоритетів мають безпеку та стабільність роботи, тому їхні оновлення проводяться виключно з метою підвищення даних параметрів. З іншого боку, експериментальні сервери та сервери розробки вимагають найсвіжішого програмного забезпечення, зібраного з необхідними параметрами, рівнем оптимізації та відлагоджувальною інформацією. Проте очікувати виходу офіційного оновлення пакету Debian часом доводиться дуже довго, а встановлена програма необхідна зараз. Звичайно, можна становити програму власноруч, зібравши її з джерельних кодів, проте в результаті система все далі й далі буде походити на смітник. Саме для таких випадків є красиве і правильне вирішення проблеми – створення власного репозиторію.
Звичайно, у випадку одноразового встановлення, можна обійтись і компіляцією з джерельних кодів, проте невже ви вірите в те, що вам ніколи не доведеться оновлювати встановлену програму? А подібне оновлення для більш ніж десятка комп’ютерів виглядає просто марною витратою часу. Організація власного репозиторію буде зручна не лише системним адміністраторам, а й розробникам, а іноді — навіть звичайним користувачам. Приведу кілька прикладів, коли організація власного репозиторію виправдана:
- Відсутність нових версій пакетів в офіційному репозиторії. Подібна ситуація дуже часто трапляється при адмініструванні великої кількості гомогенних систем, таких, як експериментальні сервери або сервери розробки.
- Відсутінсть необхідного програмного забезпечення в офіційному репозиторії.Саме так і з’являються супроводжувачі пакетів Debian, хоча до офіційних супроводжувачів (Debian-maintainers) ще немаленька дорога.
- Оптимізація існуючих пакетів та/або зміна параметрів компіляції. Якщо вас не влаштовує швидкодія системи, і ви хочете зібрати її власноруч, або деякі опції збирання програми вимкнені через політику операційної системи Debian GNU/Linux, організація власного репозиторію дасть вам можливість виправити це.
Звісно, часто можна обійтися просто збиранням пакетів, однак при цьому вам не бачити переваг використання утиліт apt, зокрема розв’язання залежностей та механізму apt-pinning. Ну і, звісно, ви не зможете встановити пакети через apt, а доведеться використовувати dpkg.
Нарешті, якщо після мого розтікання мислію по древу, у читача не пропало бажання створити власний репозиторій, розпочнемо. Цю задачу я опишу в невеличкій серій статей на прикладі збирання модифікованого пакету rxvt-unicode та свіжої версії кешуючого веб-сервера nginx.
Якщо ви збираєтесь робити репозиторій доступним через мережу, дуже рекомендовано створювати підписані пакети та репозиторій, для чого доведеться налаштувати GnuPG. Це можна просто зробити, використовуючи статтю graywolf-а «Gnuтый PGP». Цей етап можна пропустити, однак я наполегливо раджу цього не робити. Надалі я вважатиму, що ви маєте згенеровані публічний та приватний ключ, причому перший доступний на сервері ключів.
Розпочну, мабуть, з rxvt-unicode. Причина, з якої ми його збиратимемо, криється в особливостях компіляції офіційного пакету Debian — він зібраний без підтримки відображення 256 кольорів, незважаючи на існування відповідного патчу в самому пакеті. Підтримку 256 кольорів можна перевірити за допомогою зручного скрипта 256colors.pl. Ось як виглядає результат для офіційного пакету Debian:
Для початку слід пересвідчитись, що файл apt має хоча підключений репозиторій джерельних кодів. Такий репозиторій представлений рядком, що починається з deb-src і знаходиться в файлі /etc/apt/sources.list, наприклад:
deb-src http://debian.osdn.org.ua/debian lenny main contrib non-free |
Тепер створимо директорію, в якій будемо збирати наші пакети, в ній отримаємо джерельні коди, а також встановимо пакети, необхідні для збирання пакету:
$ mkdir -p ~/debian && cd ~/debian $ apt-get source rxvt-unicode $ sudo apt-get build-dep rxvt-unicode
Результати цих дій представлені нижче:
Тепер настав момент, заради якого це все і робилося – накладаємо патч для підтримки 256 кольорів:
$ cd rxvt-unicode-* && patch -p1 < doc/urxvt-8.2-256color.patch
Тепер необхідно вказати, які зміни були проведені в файлі debian/changelog. Для цього використаємо утиліту dch з пакету devscripts. Слід обов’язково звернути увагу на поле автора пакету – воно повинне співпадати з вашими даними вашого PGP ключа. Перевірити дані ключа можна командою
$ gpg --list-keys
Якщо ж ви не користуєтесь GnuPG, або вказали невірні дані, то в процесі підписування неможливо буде знайти відповідну пару ключів, і пакет лишиться непідписаним, щоправда буде згенероване попередження. Звісно, такий пакет не можна буде залити до репозиторію. Також зі знімку екрану видно, що я власноруч змінив версію пакета в заголовку журналу з 9.06-3.1 на 9.06-3.1jr. Це вплине на назву згенерованого пакету.
Завершуємо даний етап задачі власне збиранням пакету. Робиться це в одну команду:
$ CXX=/usr/bin/g++-4.3 fakeroot dpkg-buildpackage -sa
Опція -sa вказана для того, щоб файл rxvt-unicode-*.changes був створений з усіма джерельними кодами, а не їх різницею. Це необхідно у випадку, коли пакет буде впереше завантажуватись в репозиторій. Також я примусово вказав g++ версії 4.3 в якості компілятора, оскільки встановлений за замовчуванням у мене g++-4.4 жорстокіше ставиться до свавілля програмістів і вимагає поправити сирці. Пакет може не зібратися і повернути код помилки при створенні пакету вихідних кодів. Це сталося через те, що Debian переходить на нову систему ведення патчів до основного дерева джерельних кодів під назвою DebSrc3.0 . Для того, щоб пакет з джерельними файлами все ж створився, FAQ рекомендує виконати наступні команди:
$ mkdir debian/sources ; echo '3.0 (quilt)' > debian/sources/format
Після цього бажано додати відповідний рядок (“Switch to dpkg-source 3.0 (quilt) format”) до changelog-файлу за допомогою dch, і бажано внести його в уже існуючий наш запис, а не створювати новий.
На зображенні можна побачити, що файли *.dsc і *.changes підписуються вашим ключем, і вам необхідно ввести пароль до ключа:
В результаті ми отримаємо список з наступних файлів в директорії debian:
- rxvt-unicode_9.06-3.1jr_amd64.deb, rxvt-unicode-lite_9.06-3.1jr_amd64.deb, rxvt-unicode-ml_9.06-3.1jr_amd64.deb — бінарні пакети, заразди яких все це і затівалося.
- rxvt-unicode_9.06-3.1jr_amd64.changes. Debian Policy Manual каже нам, що цей файл визначає порядок завантаження файлів в репозиторій.
- rxvt-unicode_9.06-3.1jr.dsc. Так званий Debian source control file. Саме він вказує, з якого архіву джерельних кодів були згенеровані бінарні пакети, залежності компіляції джерельного пакету, контрольні суми та інші дані. Він, до речі, підписаний Вашим ключем.
- rxvt-unicode_9.06-3.1jr.debian.tar.gz. Частина джерельних кодів, що стосується виключно генерації Debian пакетів а також патчі супроводжувачів Debian, що вносяться в джерельний код перед компіляцією і збиранням пакета. Все це добро знаходиться в директорії debian
- rxvt-unicode_9.06.orig.tar.gz Оригінальні джерельні коди urxvt. Саме їх ви можете скачати з офіційної сторінки проекту
Що ж, поки в нас ще немає репозиторію, встановимо пакет засобами dpkg:
$ cd ~/debian && sudo dpkg -i rxvt-unicode_9.06-3.1jr_amd64.deb
Для того, щоб зміни вступили в силу, необхідно перезапустити демон urxvtd, якщо ви його використовуєте, або ж відкрити нове вікно терміналу і насолоджуватися виконаною роботою:
Бажаючі просто встановити пакет зможуть з легкістю це зробити, додавши наш тестовий репозиторій в індекс apt, розташований за адресою http://mirror.itblog.org.ua/debian як описано у відповідній статті.
Сподіваюся, після прочитання цього матеріалу, ви розвієте для себе міф про те, що збирання пакетів під силу лиш обраним. Якщо так, то саме ви — обрані. До нових зустрічей!