Създаваме собствено хранилище на пакети за Ubuntu (Debian)

В живота на всеки развиващ се проект рано или късно (и рано е по-добре) идва момент, когато операцията смислено разглежда развитието и предлага формализиране на връзката. По-нататъшното развитие на събитията, както обикновено, зависи от двете страни. Нека не говорим за лошото днес, нека веднага да разгледаме случая, когато разработката е готова да използва прост инструментариум за изграждане на пакети, подготвен за нея от операцията (debian/rules и debian/control шаблони, fakeroot, команди за debuild и т.н.). Остава само малко: да създадем собствено хранилище за събраните пакети.

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

Първо, имаме нужда от ключ, който ще подпише хранилището. В този пример създаваме 4096-битов RSA ключ, който не изтича:

Тъй като се предполага, че се подписва хранилището при всяка промяна, по-добре е да оставите паролата за ключа празна, в противен случай няма да актуализирате хранилището със скрипта, но ако искате пълен контрол, можете да го зададете. След това ключът трябва да бъде експортиран във файл и впоследствие поставен в корена на хранилището за по-нататъшно импортиране на клиенти.

Време е да подготвим дървото на хранилището. Имаме само една дистрибуция на Ubuntu, само Intel x86_64 и нямаме пакети с изходен код, така че не се тревожим за изграждането на други елементи на дървото. Ако пакетите са създадени за различни дистрибуции и имат различни зависимости, дървото ще бъде по-разпръснато и правилата за изграждане, споменати по-долу, ще станат по-сложни.

Нека създадем конфигурационен файл на хранилището:

Време е да конфигурирате хранилището да се актуализира автоматично, когато в него се появят нови пакети. InRelease файл с вграден подписсе изисква от новите мениджъри на пакети, а пакет от два файла Release и Release.gpg е необходим на старите. Зависимостите трябва да бъдат дублирани за всички дистрибуции, които планирате да поддържате.

Хранилището е готово, остава да конфигурирате попадането на всички новосъздадени пакети в /var/www/repo/dists/xenial/contrib/binary-amd64 (извън обхвата на тази статия). Но каква е ползата от едно хранилище, ако е чисто локално? Трябва да го направим достъпен чрез HTTP:

И накрая, регистрираме нашето хранилище на клиенти:

Сеансът на черна магия с експозиция приключи, благодаря на всички за вниманието.

Можете да помогнете и да прехвърлите средства за развитието на сайта