В настоящата статия ще ви покажа как с няколко съвсем прости команди може да си създадете собствено хранилище за пакети, съвместимо с УСУ, Ubuntu, Debian и т.н. (т.е. apt хранилище).
Причината, която ме подтикна да напиша тази статия е, че през времето откакто се роди УСУ досега, така и не намерих НИКЪДЕ прости инструкции как се прави въпросната процедура.
Навсякъде процеса беше описан супер сложно, все едно ще правиш официално хранилище за Ubuntu – с много команди, приготовления, скриптове и т.н.
Същото важи и при процедурата на създаване на собствени .deb пакети, за която вече имам написани статия и скрипт за бързо генериране на пакет.
С моите инструкции ще можете буквално за десетина минути да си създадете собствено подписано хранилище, без да имате каквито и да е познания за криптове, програмиране и т.н.

И така, какво ви е необходимо:

  • някакви .deb пакети, които искате да сложите в хранилището
  • някакъв WEB-хостинг (http или ftp достъп все ще свършат работа)
  • компютър с инсталиран УСУ / Ubuntu / Debian

Преди да започнете се уверете че имате командите apt-ftparchive и gpg. В УСУ и Убунту идват с пакетите apt-utils и gpgv и би трябвало по подразбиране да ги имате.
Сега си отворете един Терминал (от Програми -> Помощни програми -> Терминал) и си създайте директорията в която ще сложите пакетите (и оставете този Терминал отворен – ще работите още с него).

cd ~/
mkdir ~/repository
cd ~/repository

Сега си отворете файловия мениджър и сложете желаните пакети в папката ~/repository.
Следва изграждането на самото хранилище. Това става с две команди:

apt-ftparchive packages . > Packages
apt-ftparchive packages . | gzip > Packages.gz
apt-ftparchive release . > Release

С това хранилището ви е 50% готово! Ако не ви бърка че хранилището ви няма да е подписано, може да прескочите следващите инструкции, и направо да преминете към края на статията, където съм описал как потребителите ви могат да си добавят хранилището.

Сега следва да създадете GPG подпис на хранилището, за да не ви изкарват мениджърите на пакети съобщения че пакетите от това хранилище са неудостоверени.
За целта трябва първо да си създадете „GPG Идентичност“ – секретен и публичен ключ.
Секретния ключ служи за подписване на хранилището – ще бъде използван само от вас.
Публичния ключ се дава на потребителите. С него те проверяват дали подписа на вашето хранилище отговаря наистина на вашата „идентичност“.
Да не ви притеснява терминологията. Дори не съм сигурен дали използвам правилната терминология, но в крайна сметка точно хората като мен – които създават софтуер, създават и терминологията 😉

Командите с които си създавате GPG идентичност са две:

echo "Key-Type: DSA
Key-Length: 1024
Subkey-Type: ELG-E
Subkey-Length: 2048
Name-Real: вашето-име
Name-Comment: коментар
Name-Email: вашата-електронна-поща
Expire-Date: 0
Passphrase: някаква-парола" > key.inc
 
gpg --gen-key --batch --gen-key key.inc

Трябва на мястото на „вашето-име“ да си напишете името (или името на проекта, например USU Project), на мястото на „коментар“ да напишете някакъв описателен коментар (например USU Repository Key), на мястото на „вашата-електронна-поща“ си пишете email-а, и накрая „някаква-парола“ замествате (о, каква изненада) с някаква парола измислена от вас.

След изпълняването на тези две команди, в терминала ще започнат да се появяват точки, плюсчета, тирета… Това е напълно нормално – докато се генерира ключа, gpg се нуждае от произволно генерирани байтове (ентропия) за да бъде качествено криптирането.
Възможно е процеса на генериране да спре за момент, със съобщение че е нужна още „ентропия“. Ако това стане, просто превключете на някоя друга програма, браузвайте малко Интернет и т.н. – работете малко с компютъра. Това би трябвало да генерира достатъчно ентропия.
Накрая се върнете към терминала който стои още отворен, и би трябвало ключа да е генериран.
Сега трябва да изтриете файла key.inc, който преди малко се създаде – той е излишен вече.
Следва да направите gpg подпис на файла Release (в това е цялата философия).
Това става с една команда:

echo "някаква-парола" | gpg --default-key "вашето-име (коментар) <вашата-електронна-поща>" --passphrase-fd 0 --output Release.gpg -ba Release

В тази команда, замествате „някаква-парола“ и т.н. с данните които написахте преди малко. Важно е да ги въведете по същия начин.

За да сте сигурни, просто изпълнете
gpg –list-keys
Това ще ви покаже с писък с генерираните вече ключове, изглеждащ примерно така:

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 2u
/home/lokster/.gnupg/pubring.gpg
-----------------------------
pub   1024D/5D1CECA9 2010-06-24
uid                  John Smith (Test repository) <johnsmith@email.com>
sub   2048g/54021F7B 2010-06-24

Текста срещу „uid“ е този който трябва да използвате в командата за подписване на Release.
Следва да генерирате md5 суми на файловете в хранилището.
Това става с команда

find . -type f -print0 | xargs -0 md5sum > md5sum.txt

За да могат потребителите да проверяват подписа на хранилището, е нужно да им дадете публичен ключ с който да го правят.
Може да го запазите като файл repo.pub.asc така:

gpg --export --armor "вашето-име (коментар) <вашата-електронна-поща>" > repo.pub.asc

Тук отново е необходимо да въведете коректно данните за име, коментар и поща.
И сте готови! Сега само трябва да качите цялото съдържание на папката ~/repository на някакъв сървър и да кажете на потребителите за вашето хранилище.

Ако примерно сте качили всичко на адрес http://mysite.com/repository/, потребителите които искат да използват хранилището, могат да си го добавят с команда

sudo add-apt-repository "deb http://mysite.com/repository /"

Подписа на хранилището пък може да добавят с команда

wget deb http://mysite.com/repository/repo.key.asc -q -O- | sudo apt-key add -

Накрая трябва да изпълнят

sudo apt-get update

за да се опреснят списъците с пакети и да се появят пакетите от вашето хранилище.
Накрая нещо важно: всеки път когато добавяте нови пакети в хранилището трябва да изпълнявате само командите

apt-ftparchive packages . > Packages
apt-ftparchive release . > Release
echo "някаква-парола" | gpg --default-key "вашето-име (коментар) <вашата-електронна-поща>" --passphrase-fd 0 --output Release.gpg -ba Release
find . -type f -print0 | xargs -0 md5sum > md5sum.txt

И накрая качвате на сървъра новите пакети и файловете Packages, Release, Release.gpg, md5sum.txt.
Това е всичко. Успех!