Опубликовать свои собственные Debian пакеты и разместить их в репозитории на GitHub довольно просто. Данная статья является кратким руководством, как это сделать.
PPA репозиторий может быть представлен просто как одна директория
.
└── my_ppa
├── my_list_file.list
├── InRelease
├── KEY.gpg
├── Packages
├── Packages.gz
├── Release
├── Release.gpg
├── package-a_0.0.1_amd64.deb
├── package-a_0.0.2_amd64.deb
├── package-b_0.1.0_amd64.deb
├── package-b_0.1.1_amd64.deb
├── ...
└── package-z_1.0.0_amd64.deb
Рабочий пример можно найти по адресу.
Вы можете назвать my_ppa и my_list_file.list как угодно. Я использовал эти имена лишь для примера.
Также не забудьте заменить ${GITHUB_USERNAME} на своё имя пользователя GitHub и ${EMAIL} на свой адрес электронной почты.
0. Создание GitHub репозитория с вашими deb-пакетами
Создайте GitHub репозиторий. Мы назовём его my_ppa. Затем перейдите на https://github.com/${GITHUB_USERNAME}/my_ppa/settings и под GitHub Pages выберите Source, который должен быть master branch.
На самом деле, подойдет любой HTTP-сервер, но страницы на GitHub выгоднее, они бесплатны, легки и быстры.
Теперь клонируйте репозиторий и поместите все ваши Debian-пакеты внутрь.
git clone "[email protected]:${GITHUB_USERNAME}/my_ppa.git"
cd my_ppa
cp /path/to/my/package-a_0.0.1_amd64.deb .
1. Создание GPG-ключа
Установите gpg и создайте новый ключ:
sudo apt install gnupg
gpg --full-gen-key
Используйте RSA:
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
RSA с 4096 битами:
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Ключ должен быть действителен всегда:
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
Введите ваше имя и адрес электронной почты:
Real Name: My Name
Email address: ${EMAIL}
Comment:
You selected this USER-ID:
"My Name <[email protected]>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Теперь gpg начнет создавать ваш ключ и запросит пароль для дополнительной защиты. Я предпочитаю оставлять его пустым поэтому когда я подписываю что-либо своим ключом, он не запрашивает каждый раз пароль.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key B58FBB4C23247554 marked as ultimately trusted
gpg: directory '/home/assafmo/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/assafmo/.gnupg/openpgp-revocs.d/31EE74534094184D9964EF82B58FBB4C23247554.rev'
public and secret key created and signed.
pub rsa4096 2019-05-01 [SC]
31EE74534094184D9964EF82B58FBB4C23247554
uid My Name <[email protected]>
sub rsa4096 2019-05-01 [E]
Вы можете сделать резервную копию своего закрытого ключа, используя:
gpg --export-secret-keys "${EMAIL}" > my-private-key.asc
И импортируйте его, используя:
gpg --import my-private-key.asc
2. Создание файла KEY.gpg
Создайте файл открытого ASCII ключа KEY.gpg внутри git-репозитория my_ppa:
gpg --armor --export "${EMAIL}" > /path/to/my_ppa/KEY.gpg
Примечание: На закрытый ключ ссылается адрес электронной почты, который вы указали на предыдущем шаге.
3. Создание файлов Packages и Packages.gz
Внутри git-репозитория my_ppa:
dpkg-scanpackages --multiversion . > Packages
gzip -k -f Packages
4. Создание файлов Release, Release.gpg и InRelease
Внутри git-репозитория my_ppa:
apt-ftparchive release . > Release
gpg --default-key "${EMAIL}" -abs -o - Release > Release.gpg
gpg --default-key "${EMAIL}" --clearsign -o - Release > InRelease
5. Создание файла my_list_file.list
Внутри git-репозитория my_ppa:
echo "deb https://${GITHUB_USERNAME}.github.io/my_ppa ./" > my_list_file.list
Этот файл будет установлен позже в пользовательской директории /etc/apt/sources.list.d/. Он говорит менеджеру пакетов apt искать обновления вашего PPA по адресу https://${GITHUB_USERNAME}.github.io/my_ppa.
Вот и всё!
Закомитте и отправьте изменения на GitHub и ваш PPA готов к работе:
git add -A
git commit -m "my ppa repo is now hosted on github"
git push -u origin master
Теперь вы можете попросить всех своих друзей и пользователей установить ваш PPA следующим образом:
curl -s --compressed "https://${GITHUB_USERNAME}.github.io/my_ppa/KEY.gpg" | sudo apt-key add -
sudo curl -s --compressed -o /etc/apt/sources.list.d/my_list_file.list "https://${GITHUB_USERNAME}.github.io/my_ppa/my_list_file.list"
sudo apt update
Затем они смогут установить ваши пакеты:
sudo apt install package-a package-b package-z
Всякий раз, когда вы будете публиковать новую версию существующего пакета, ваши пользователи получат её, как и любое другое обновление.
Как добавить новые пакеты
Просто поместите ваши новые deb-файлы в git-репозиторий my_ppa и выполните:
# Packages & Packages.gz
dpkg-scanpackages --multiversion . > Packages
gzip -k -f Packages
# Release, Release.gpg & InRelease
apt-ftparchive release . > Release
gpg --default-key "${EMAIL}" -abs -o - Release > Release.gpg
gpg --default-key "${EMAIL}" --clearsign -o - Release > InRelease
# Commit & push
git add -A
git commit -m update
git push
Спасибо за внимание! Надеемся, что данная статья помогла вам.
Удачи!
Оригинальная статья: Hosting your own PPA repository on GitHub