Участник:Petr-akhlamov/Ownrepo plusownkey: различия между версиями
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 232: | Строка 232: | ||
*Путь: {{path|/etc/ssl/angie/angie-signing.gpg}} | *Путь: {{path|/etc/ssl/angie/angie-signing.gpg}} | ||
*Публичная часть ключа: {{path|/usr/lib/alt-gpgkeys/pubring.gpg}} | *Публичная часть ключа: {{path|/usr/lib/alt-gpgkeys/pubring.gpg}} | ||
====Создание пакета с репозиторием==== | |||
По статье [[Сборка пакетов start]]: | |||
*Генерируем ключи | |||
*Устанавливаем и настраиваем пакеты для сборки | |||
*Делаем вариант "пакет с нуля" с некоторыми аспектами | |||
=====Структура===== | |||
<pre> | |||
home | |||
└── myrepo | |||
| ├── reponame.list | |||
| ├── fingerprint.list | |||
| ├── myrepo.conf | |||
| ├── signing-key.gpg | |||
| └── public-key.gpg | |||
├── .gear | |||
│ └── rules | |||
└── .git | |||
</pre> | |||
=====Файл gear/rules===== | |||
tar.gz: myrepo name=myrepo | |||
=====Файл спека===== | |||
<syntaxhighlight lang="spec"> | |||
Name: myrepo | |||
Version: 1.0 | |||
Release: alt1 | |||
Summary: ALT repository by me | |||
Group: System/Configuration/Packaging | |||
License: GPL v3 | |||
ExclusiveArch: x86_64 | |||
BuildArch: noarch | |||
Url: https://my-repo.ru | |||
Requires: apt-conf | |||
Source0: %name.tar.gz | |||
%description | |||
This package contains just a link to the ALT repository by me. | |||
%prep | |||
%setup | |||
%install | |||
install -m 0755 %{SOURCE0}/reponame.list %buildroot/etc/apt/sources.list.d/reponame.list | |||
install -m 0755 %{SOURCE0}/fingerprint.list %buildroot/etc/apt/vendors.list.d/reponame.list | |||
install -m 0755 %{SOURCE0}/myrepo.conf %buildroot/etc/apt/apt.conf.d/reponame.conf | |||
install -m 0755 %{SOURCE0}/signing-key.gpg %buildroot/etc/ssl/angie/developer-key.gpg | |||
install -m 0755 %{SOURCE0}/public-key.gpg %buildroot/usr/lib/alt-gpgkeys/developer-public.gpg | |||
%files | |||
/etc/apt/sources.list.d/reponame.list | |||
/etc/apt/vendors.list.d/reponame.list | |||
/etc/apt/apt.conf.d/reponame.conf | |||
/etc/ssl/angie/developer-key.gpg | |||
/usr/lib/alt-gpgkeys/developer-public.gpg | |||
%changelog | |||
* Mon Dec 01 2025 Anatoliy Agranovskiy <agranovskiy@altlinux.ru> 1.0-alt1 | |||
- Initial build | |||
</syntaxhighlight> | |||
== Примеры пакетов == | == Примеры пакетов == | ||
Версия от 12:10, 1 декабря 2025
Структура
Базовый каталог
Базовый каталог html:
/var/www/html/
Создаем каталог для репозитория:
# mkdir -p /var/www/html/extra
Создаем каталог branch:
# mkdir -p /var/www/html/extra/branch/p11/ # chown apache:apache -R /var/www/html # systemctl restart httpd2.service
Корневой каталог Apache2
Отредактируйте файл:
# mcedit /etc/httpd2/conf/httpd2.conf
Исправьте корневой каталог:
DocumentRoot /var/www/html
Конфигурационный файл сайта
Создайте файл, в котором, кроме прочего, будут описаны:
- каталог сайта на диске
- разрешение на отображение его содержимого по http
- разрешение на открытый доступ по http
mcedit /etc/httpd2/conf/sites-available/apt-repo.conf
<VirtualHost *:80>
ServerName your-server-domain
DocumentRoot /var/www/html/extra
<Directory /var/www/html/extra>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
IndexOptions FancyIndexing NameWidth=*
</Directory>
# Включение листинга каталогов
IndexOptions FancyIndexing NameWidth=* DescriptionWidth=*
</VirtualHost>
Включаем конфиг:
# a2ensite apt-repo # systemctl restart httpd2.service # systemctl reload apache2
# chown -R apache:apache /var/www/html/extra # chmod -R 755 /var/www/html/extra # systemctl reload httpd2.service
Создание собственного репозитория
Задача: создать собственный репозиторий со своими пакетами.
Добавляем свой компонент
Новый компонент будет называться extra.
Репозиторий будет находится в каталоге /var/www/html/extra/branch/p11/. Создадим необходимую структуру для нового компонента:
# mkdir -p /var/www/html/extra/branch/p11/x86_64/RPMS.extra
где:
- x86_64 — архитектура компонента;
- extra — суффикс компонента.
Наполнение компонента и создание индексов
Установим apt-repo-tools:
# apt-get install apt-repo-tools
Скопируем пакеты RPM в каталог /var/www/html/extra/branch/p11/x86_64/RPMS.extra:
# cp -v *.rpm /var/www/html/extra/branch/p11/x86_64/RPMS.extra
Создание ключей GPG
Создаем пару ключей GPG:
# gpg --gen-key
Выберите тип ключа:
(1) RSA и RSA (по умолчанию)
(2) DSA и Elgamal
(3) DSA (только для подписи)
(4) RSA (только для подписи)
Ваш выбор?
// Пишем 1. Так как нам необходим тип ключа RSA и RSA
длина ключей RSA может быть от 1024 до 4096 бит.
Какой размер ключа Вам необходим? (2048)
// Пишем размер ключа 2048
Запрошенный размер ключа - 2048 бит
Выберите срок действия ключа.
0 = без ограничения срока действия
<n> = срок действия - n дней
<n>w = срок действия - n недель
<n>m = срок действия - n месяцев
<n>y = срок действия - n лет
Срок действия ключа? (0)
// Ставим 0 без ограничения срока действия.
Срок действия ключа не ограничен
Все верно? (y/N)
// Ставим y
Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его
из Вашего имени, комментария и адреса электронной почты в виде:
"Baba Yaga (pensioner) <yaga@deepforest.ru>"
Ваше настоящее имя: (Пишем наше настоящее имя)
Адрес электронной почты: (Пишем адрес электронной почты)
Комментарий:
Вы выбрали следующий ID пользователя:
"Repo Signer <admin@company.net>"
Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход?
// Пишем O (Принять)
Для защиты секретного ключа необходима фраза-пароль.
Далее, система предложит сгенерировать случайные числа. Для этого нужно следовать инструкции, которая будет написана в нашем терминале (движение мышкой, набор текста и т.д).
В конце, когда сформируется отпечаток ключа GPG, можно увидеть сформированный ID. Пример:
pub 2048R/AE3F8179 2022-04-20
Отпечаток ключа = 5C1D 67E3 F163 EC94 A1BC 202B 68E6 302C AE3F 8179
где, AE3F8179 — ID GPG ключа
Создание индексов и подписи
Теперь необходимо применить наш ID GPG ключа для создания и подписи индексов:
# genbasedir --create --bloat --progress --sign --default-key=AE3F8179 --topdir=/var/www/repo/extra x86_64 extra
Далее, вводим фразу-пароль для доступа к секретному ключу пользователя.
Добавляем свой ключ, использованный для подписанного репозитория:
- Создаем файл:
# nano /etc/apt/vendors.list.d/own.list
- И в этом файле (own.list) прописываем отпечаток ключа (fingerprint) и имя:
simple-key "own" { Fingerprint "5C1D67E3F163EC94A1BC202B68E6302CAE3F8179"; Name "Ваше имя <ваша электронная почта>"; }
Импортируем публичный ключ в общую базу alt-gpgkeys:
# gpg --output ~/repo.gpg --export AE3F8179
# gpg --no-default-keyring --keyring /usr/lib/alt-gpgkeys/pubring.gpg --import ~/repo.gpg
Создание собственного репозитория подписанного ключами вендоров
В октябре 2025 года в Сизиф был отправлен пакет apt-gpgkeys-pki.
Исходный код компонента опубликован на altlinux.space - https://altlinux.space/ALTLinux/apt-gpgkeys-pki.
Утилита пакета
В пакете имеется утилита apt-gpgkeys, у которой имеется две команды:
- list
- update
Технические тонкости
Источники ключей располагаются в каталоге /usr/lib/alt-gpgkeys/, к которому доимпортируются ключи из /usr/share/pki/apt-gpg/sources/ и /etc/pki/apt-gpg/sources.
Принцип реализации аналогичен ca-trust.
Будущий функционал
Обработка каталогов blacklist заложено, но пока не реализовано.
Как теперь "распространять" свой репозиторий
Теперь, опубликовав и подписав свой репозиторий с пакетами, провайдер может "упаковать в пакет":
- /etc/apt/sources.list.d/ИМЯ.list
- публичную часть ключа в /usr/share/pki/apt-gpg/sources/
- fingerprint ключа в /etc/apt/vendors.list.d/ИМЯ.list
Необходимый триггер выполняется apt при установке пакета автоматически.
Пример репозитория
list-файл
Путь: /etc/apt/sources.list.d/angie-pro.list
rpm [angie] https://download.angie.software/angie-pro/altlinux/10/ x86_64 main
Публичная часть
Путь: /etc/apt/vendors.list.d/angie.list
simple-key "angie" {
Fingerprint "EB8EAF3D4EF1B1ECF34865A2617AB978CB849A76";
Name "Angie (Signing Key) <devops@tech.wbsrv.ru>";
}
Конфиг-файл
Путь: /etc/apt/apt.conf.d/angie-pro.conf
Acquire::https::Verify-Peer "true"; Acquire::https::Verify-Host "true"; Acquire::https::SslCert "/etc/ssl/angie/angie-repo.crt"; Acquire::https::SslKey "/etc/ssl/angie/angie-repo.key";
Триггер
Путь: /usr/lib/rpm/angie-pro.filetrigger
#!/bin/sh -efu ANGIE_KEYF=/etc/ssl/angie/angie-signing.gpg ANGIE_KEYID=617AB978CB849A76 PUBRING=/usr/lib/alt-gpgkeys/pubring.gpg [ -s $ANGIE_KEYF ] && grep -F -qx $PUBRING || exit 0 gpg --list-packets $PUBRING |grep -F -qs "keyid: $ANGIE_KEYID" || gpg --keyring $PUBRING --no-default-keyring --import $ANGIE_KEYF
Файл ключа
- Путь: /etc/ssl/angie/angie-signing.gpg
- Публичная часть ключа: /usr/lib/alt-gpgkeys/pubring.gpg
Создание пакета с репозиторием
По статье Сборка пакетов start:
- Генерируем ключи
- Устанавливаем и настраиваем пакеты для сборки
- Делаем вариант "пакет с нуля" с некоторыми аспектами
Структура
home
└── myrepo
| ├── reponame.list
| ├── fingerprint.list
| ├── myrepo.conf
| ├── signing-key.gpg
| └── public-key.gpg
├── .gear
│ └── rules
└── .git
Файл gear/rules
tar.gz: myrepo name=myrepo
Файл спека
Name: myrepo
Version: 1.0
Release: alt1
Summary: ALT repository by me
Group: System/Configuration/Packaging
License: GPL v3
ExclusiveArch: x86_64
BuildArch: noarch
Url: https://my-repo.ru
Requires: apt-conf
Source0: %name.tar.gz
%description
This package contains just a link to the ALT repository by me.
%prep
%setup
%install
install -m 0755 %{SOURCE0}/reponame.list %buildroot/etc/apt/sources.list.d/reponame.list
install -m 0755 %{SOURCE0}/fingerprint.list %buildroot/etc/apt/vendors.list.d/reponame.list
install -m 0755 %{SOURCE0}/myrepo.conf %buildroot/etc/apt/apt.conf.d/reponame.conf
install -m 0755 %{SOURCE0}/signing-key.gpg %buildroot/etc/ssl/angie/developer-key.gpg
install -m 0755 %{SOURCE0}/public-key.gpg %buildroot/usr/lib/alt-gpgkeys/developer-public.gpg
%files
/etc/apt/sources.list.d/reponame.list
/etc/apt/vendors.list.d/reponame.list
/etc/apt/apt.conf.d/reponame.conf
/etc/ssl/angie/developer-key.gpg
/usr/lib/alt-gpgkeys/developer-public.gpg
%changelog
* Mon Dec 01 2025 Anatoliy Agranovskiy <agranovskiy@altlinux.ru> 1.0-alt1
- Initial build
Примеры пакетов
Ссылка на ваш репозиторий может быть опакечена в основной репозиторий любым маинтейнером.
- Только ссылка на репозиторий: https://git.altlinux.org/gears/a/akvis-repo.git
- Ссылка с GPG-подписью: https://git.altlinux.org/gears/a/angie-pro-repo.git
- Ещё вариант с GPG: https://git.altlinux.org/gears/a/ascon-repo.git
Добавление репозитория
Добавляем свой репозиторий с ключом для проверки (должен быть установлен пакет apt-repo):
# apt-repo add "rpm [own] file:/var/extra x86_64 extra"