Сам собі супроводжувач репозиторію Debian

apt-get a life Доброї ночі, шановний читачу. Робота та внутрішня організація репозиторіїв в Debian здаються надто складними на перший погляд. Однак, придивившись уважніше, легко зрозуміти, що насправді це не так, що наочно підтверджують попередні дві статті. Сьогодні, як і обіцяється в заголовку, світ дізнається про новий репозиторій.

Існує далеко не один спосіб створення власного репозиторію: деякі пропонують варіант «взяти всі файли, покласти в одну купу, і згенерувати відповідні індексні файли Release та Packages», при використанні деяких утиліт, наприклад apt-build, остання сама створює собі репозиторій. Проте для поширення власних оригінальних або переконфігурованих пакетів такий спосіб навряд чи дасть виграш в довготривалій перспективі. «Правильний» репозиторій повинен мати власний пул, підписані індексні та релізні файли та власне пакети, можливість автоматичної обробки нових та оновлених пакетів та підтримку механізму apt-pinning. Саме такий репозиторій можна просто організувати, використовуючи утиліту reprepro.

Розпочнемо з організації директорії для репозиторію та завантаження необхідного софту. Для зручності налаштування веб-сервера Apache, можна використати ~/htdocs/debian як відправну точку. Створимо необхідні директорії та візьмемося за початкову конфігурацію нашого дітища:

$ mkdir -p ~/htdocs/debian/conf
$ mkdir -p ~/htdocs/debian/incoming
$ sudo apt-get install reprepro

Конфігураційний файл репозиторію виглядатиме наступним чином:

1
2
3
4
5
6
7
8
Origin: Jolly Roger
Label: ITBlog sample repository
Suite: unstable
Codename: sid
Architectures: amd64 source
Components: main non-free contrib
Description: Modified debian packages for personal use.
SignWith: default

Серед усіх очевидних параметрів даного конфігураційного файлу слід дати пояснення останньому. Параметр «SignWith» слід вказувати лише у випадку, якщо репозиторій необхідно захистити цифровим підписом. Під час додання пакетів в репозиторій утиліта reprepro намагатиметься використати ключ за замовчуванням, покладаючись на демон gpg-agent і у випадку, коли такий демон не запущений, операція закінчиться помилкою і пакет не буде доданий. Для вирішення даної проблеми слід додавати опцію «–ask-passphrase» для додання пакетів, або ж налаштувати сам gpg-agent, про який мова йтиме в одній з наступних статей. Але на даному етапі ми скористаємося першою порадою.

Тепер ми готові внести перші файли до репозиторію. Для цього виконайте наступну команду.

$ reprepro --ask-passphrase -Vb ~/htdocs/debian include sid \
    ~/debian/rxvt-unicode_9.06-3.1jr_amd64.changes
$ reprepro --ask-passphrase -Vb ~/htdocs/debian include sid \
    ~/debian/nginx_0.8.31-1jr_amd64.changes

Додання нових пакетів до репозиторію за допомогою reprepro

Додання нових пакетів до репозиторію за допомогою reprepro

В результаті операції буде додано створені нами пакети rxvt-unicode і підписано головний файл репозиторію – Release. Саме в цьому і полягає концепція використання сильного шифрування для перевірки отриманих з репозиторію пакетів під назвою «secure apt».

Тепер, коли репозиторій створений, додамо його в конфігурацію apt окремим файлом, назвавши /etc/apt/sources.list.d/local.list. Ось вміст мого цього файлу для мого локального репозиторію(не забудьте змінити шлях до репозиторію на вірний):

1
2
deb file:/home/jollyroger/htdocs/debian sid main contrib non-free
deb-src file:/home/jollyroger/htdocs/debian sid main contrib non-free

Якщо зараз ми спробуємо оновити локальні індекси пакетів за допомогою команди «sudo aptitude update», то отримаємо цілком вірне попередження про відсутність публічного ключа до репозиторію:

W: GPG error: file: sid Release: Слідуючі підписи не можуть бути перевірені, 
тому що, публічний ключ відсутній: NO_PUBKEY C65DD54CA08F82C0

Ключ можна імпортувати з файлу або з сервера ключів. Нижче я запропонував кілька способів імпортування публічного ключа в apt у в казаному порядку : імпорт з сервера, імпорт з файлу та імпорт з власного списку ключів.

$ sudo apt-key adv --keyserver keys.gnupg.net --recv-keys A08F82C0
$ sudo apt-key add keyfile.asc
$ gpg --export -a A08F82C0 | sudo apt-key add -

Ось як робота цих команд виглядає на моєму терміналі:

Імпорт ключа за допомогою apt-key

Імпорт ключа за допомогою apt-key

Тепер можна спокійно виконати звичний нам «sudo apt-get update» і побачити, що наші пакети тепер індексуються за допомогою apt:

Перегляд деталей пакету з aptitude

Перегляд деталей пакету з aptitude

На цій позитивній ноті я завершую цикл основних статей про створення власного репозиторію. В наступних статтях я коротко зупинюся на покращенні зручності роботи з репозиторієм, його поширення і вивід в «масси». Сподіваюсь, що тепер, коли ви захочете написати щось едаке, що зможе знадобитись не лише вам, або вимагає неоднократного встановлення на купу серверів, ви знатимете, що робити. А для допитливих, лишаю джерельні посилання на англомовну літературу, звідки моя муза черпала знання:

  1. How to Setup A Debian Repository — огляд утиліт для створення власного репозиторію
  2. Secure Apt. Ця сторінка в деталях описує принципи і можливості secure-apt
  3. Debian Policy Manual та Debian New Maintainer’s Guide — біблія Debian GNU/Linux.

Ну, ось і все на сьогодні. Нехай щастить і до нових зустрічей!