Для начинающих майнтейнеров
Версия: универсальная
Дата обновления: Март 2026
1. 🔍 ЧТО ТАКОЕ СИСТЕМА АВТОМАТИЧЕСКОЙ СБОРКИ
ABF (Automatic Build Farm) — это система автоматической сборки пакетов для дистрибутивов на основе RPM.
✅ Преимущества:
| Преимущество | Описание |
|---|---|
| 🧪 Чистая среда | Сборка происходит в изолированном контейнере |
| 🤖 Автоматизация | Не нужно устанавливать зависимости локально |
| 📦 Публикация | Готовые пакеты автоматически попадают в репозиторий |
| 📜 История | Все сборки сохраняются с логами |
| 👥 Совместная работа | Возможность командной разработки |
🔄 Как работает система:
1. Вы создаёте проект в системе сборки
2. Загружаете spec-файл и исходные материалы
3. Система запускает сборку в чистой среде
4. После успешного завершения пакет попадает в ваш репозиторий
5. Пользователи устанавливают пакет через менеджер пакетов
2. 📝 РЕГИСТРАЦИЯ И ПОДГОТОВКА
Шаг 2.1: Регистрация аккаунта
- Откройте веб-сайт системы сборки
- Нажмите «Войти» или «Регистрация»
- Создайте учётную запись или войдите через существующую
- Подтвердите адрес электронной почты ✅
Шаг 2.2: Создание SSH-ключа
# Генерация ключа
ssh-keygen -t ed25519 -C "ваш@email.com"
# Нажимайте Enter для значений по умолчанию
# Просмотр публичного ключа
cat ~/.ssh/id_ed25519.pub
Шаг 2.3: Добавление ключа в систему
- Войдите в веб-интерфейс
- Перейдите в Настройки профиля → SSH Keys
- Нажмите «Добавить ключ»
- Вставьте содержимое публичного ключа
- Сохраните изменения 💾
Шаг 2.4: Установка инструментов командной строки
# Установите клиент для работы с системой сборки
sudo dnf install -y git пакет-клиента-сборки
# Настройте систему контроля версий
git config --global user.name "Ваше Имя"
git config --global user.email "ваш@email.com"
Шаг 2.5: Авторизация в системе
# Запустите авторизацию
клиент-сборки login
# Введите учётные данные при запросе
3. 🏗️ СОЗДАНИЕ ПРОЕКТА
Шаг 3.1: Создание репозитория проекта
- Войдите в веб-интерфейс системы сборки
- Нажмите «Создать проект»
- Заполните обязательные поля:
| Поле | Пример значения |
|---|---|
| Имя проекта | имя-вашего-пакета |
| Описание | Краткое описание функционала |
| Тип проекта | rpm-build |
| Целевая ветка | rosa13, rosa14 или другая |
- Нажмите «Создать» 🎯
Шаг 3.2: Стандартная структура проекта
имя-проекта/
├── SPECS/
│ └── имя-пакета.spec
├── SOURCES/
│ ├── исходный-архив.tar.gz
│ ├── патч-файл.patch
│ └── дополнительные-файлы
├── .abf/
│ └── конфигурация-сборки
└── README.md
4. 📁 ПОДГОТОВКА ФАЙЛОВ ДЛЯ ЗАГРУЗКИ
Шаг 4.1: Создание локальной рабочей папки
# Создайте структуру папок для проекта
mkdir -p ~/abf/имя-проекта/{SPECS,SOURCES}
cd ~/abf/имя-проекта
Шаг 4.2: Подготовка spec-файла
# Скопируйте готовый spec-файл в проект
cp ~/путь/к/файлу/имя-пакета.spec ~/abf/имя-проекта/SPECS/
# Проверьте содержимое файла
cat ~/abf/имя-проекта/SPECS/имя-пакета.spec
Шаг 4.3: Подготовка исходных материалов
cd ~/abf/имя-проекта/SOURCES
# Скачайте исходный архив
wget https://источник/архив-версии.tar.gz -O имя-пакета-версия.tar.gz
# Проверьте целостность и размер файла
ls -lh имя-пакета-версия.tar.gz
Шаг 4.4: Дополнительные конфигурационные файлы
При необходимости подготовьте:
| Файл | Назначение |
|---|---|
.abf.yml | Параметры сборки для системы |
README.md | Документация проекта |
.gitignore | Список игнорируемых файлов |
Шаг 4.5: Создание конфигурационного файла сборки
cat > ~/abf/имя-проекта/.abf.yml << 'EOF'
name: имя-пакета
description: Описание функционала пакета
maintainer: ваш@email.com
priority: contrib
type: rpm
branch: целевая-ветка
EOF
5. 📤 ЗАГРУЗКА В СИСТЕМУ СБОРКИ
Шаг 5.1: Инициализация репозитория контроля версий
cd ~/abf/имя-проекта
git init
git add .
git commit -m "Initial commit: первая версия пакета"
Шаг 5.2: Настройка удалённого репозитория
# Получите URL репозитория из веб-интерфейса
# Пример для SSH:
git remote add origin git@адрес-системы:ваш-логин/имя-проекта.git
# Или для HTTPS:
git remote add origin https://адрес-системы/ваш-логин/имя-проекта.git
Шаг 5.3: Отправка файлов в систему
# Отправка файлов в удалённый репозиторий
git push -u origin main
# При необходимости укажите ветку:
git push -u origin master
Шаг 5.4: Проверка успешной загрузки ✅
- Откройте проект в веб-интерфейсе
- Перейдите на вкладку «Files» или «Файлы»
- Убедитесь в наличии всех необходимых файлов:
SPECS/имя-пакета.specSOURCES/исходный-архив.tar.gz
6. 🚀 ЗАПУСК СБОРКИ
Шаг 6.1: Запуск через веб-интерфейс
- Откройте проект в системе сборки
- Перейдите на вкладку «Builds» или «Сборки»
- Нажмите «Start Build» или «Запустить сборку»
- Настройте параметры:
| Параметр | Рекомендуемое значение |
|---|---|
| Ветка | целевая-ветка дистрибутива |
| Архитектура | x86_64 или all |
| Тип сборки | release |
- Подтвердите запуск 🎯
Шаг 6.2: Запуск через консоль
# Запустить сборку проекта
клиент-сборки build start ваш-логин/имя-проекта
# Проверить текущий статус
клиент-сборки build status ваш-логин/имя-проекта
# Просмотреть логи сборки
клиент-сборки build log ваш-логин/имя-проекта
Шаг 6.3: Статусы сборки
| Статус | Значение |
|---|---|
pending | Ожидание в очереди на сборку |
building | Процесс сборки выполняется |
succeeded | ✅ Сборка завершена успешно |
failed | ❌ Ошибка в процессе сборки |
cancelled | Сборка отменена пользователем |
Шаг 6.4: Анализ логов сборки
Через веб-интерфейс:
- Откройте проект → раздел сборок
- Выберите интересующую сборку
- Изучите логи по этапам процесса
Чересс консоль:
клиент-сборки build log ваш-логин/имя-проекта --last
7. 📦 ПУБЛИКАЦИЯ В РЕПОЗИТОРИЙ
Шаг 7.1: Создание персонального репозитория
- После успешной сборки перейдите в раздел «Repository»
- Нажмите «Create Repository»
- Укажите параметры:
| Параметр | Значение |
|---|---|
| Имя репозитория | personal или другое |
| Ветка | целевая-ветка дистрибутива |
| Компонент | contrib, main или другой |
| Архитектура | x86_64 или all |
Шаг 7.2: Добавление пакета в репозиторий
- Перейдите в «Repository» → «Manage Packages»
- Выберите успешную сборку из списка
- Нажмите «Add to Repository»
- Подтвердите добавление ✅
Шаг 7.3: Получение адреса репозитория
- Откройте раздел «Repository»
- Нажмите «Repository URL» или аналогичную кнопку
- Скопируйте URL для подключения пользователями
Пример формата адреса:
https://адрес-системы/ваш-логин/имя-репозитория/ветка/архитектура
Шаг 7.4: Инструкция для пользователей по подключению
# Создать файл конфигурации репозитория
sudo nano /etc/yum.repos.d/персональный-репозиторий.repo
# Добавить конфигурацию:
[персональный-репозиторий]
name=Персональный репозиторий
baseurl=https://адрес-системы/ваш-логин/имя-репозитория/ветка/архитектура
enabled=1
gpgcheck=0
# Обновить кэш менеджера пакетов
sudo dnf makecache
# Установить пакет
sudo dnf install имя-пакета
8. 🔄 ОБНОВЛЕНИЕ ПАКЕТА
Шаг 8.1: Подготовка новой версии spec-файла
# Откройте spec-файл для редактирования
nano ~/abf/имя-проекта/SPECS/имя-пакета.spec
# Обновите номер версии и релиза:
Version: новая-версия
Release: 1
# Добавьте запись в журнал изменений:
%changelog
* Дата Ваше Имя <ваш@email.com> - новая-версия-1
- Описание изменений
- Исправленные проблемы
Шаг 8.2: Обновление исходных материалов
cd ~/abf/имя-проекта/SOURCES
# Скачайте новую версию исходников
wget https://источник/новая-версия.tar.gz -O имя-пакета-новая-версия.tar.gz
# Удалите старую версию (опционально)
rm имя-пакета-старая-версия.tar.gz
Шаг 8.3: Отправка изменений в систему
cd ~/abf/имя-проекта
git add .
git commit -m "Update to version новая-версия"
git push
Шаг 8.4: Запуск сборки обновлённой версии
- Откройте проект в веб-интерфейсе
- Перейдите в раздел сборок
- Запустите новую сборку
- Дождитесь завершения процесса ⏱️
9. ❌ ЧАСТЫЕ ОШИБКИ И РЕШЕНИЯ
Ошибка 1: Ошибка аутентификации
Текст ошибки:
fatal: Authentication failed
Решение: 🔧
# Проверьте работу SSH-ключа
ssh -T git@адрес-системы
# При необходимости пересоздайте ключ
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
# Добавьте новый публичный ключ в настройки аккаунта
Ошибка 2: Исходный файл не найден при сборке
Текст ошибки:
error: Bad source: имя-файла: No such file
Решение: 🔧
- Убедитесь, что файл размещён в папке
SOURCES/ - Проверьте соответствие имени файла и директивы
Source0в spec-файле - Загрузите файл через систему контроля версий:
git add SOURCES/имя-файла
git commit -m "Add source archive"
git push
Ошибка 3: Превышен лимит размера файла
Текст ошибки:
File too large (max XXXMB)
Решение: 🔧
- Используйте внешние ссылки в spec-файле:
Source0: https://источник/архив-версии.tar.gz
- Разбейте большой архив на части
- Используйте механизм загрузки больших файлов, если поддерживается
Ошибка 4: Длительное ожидание в очереди
Симптомы:
- Статус
pendingсохраняется более 30 минут ⏱️
Решение: 🔧
- Дождитесь освобождения очереди сборки
- Проверьте статус системы на главной странице
- Попробуйте запустить сборку в менее загруженное время
- Обратитесь в поддержку при длительных задержках
Ошибка 5: Пакет не отображается в репозитории
Симптомы:
- Сборка завершена успешно, но менеджер пакетов не находит пакет
Решение: 🔧
# Обновите кэш репозиториев
sudo dnf clean all
sudo dnf makecache
# Проверьте список подключённых репозиториев
dnf repolist
# Проверьте доступность пакета
dnf list available | grep имя-пакета
Ошибка 6: Конфликт имени пакета
Текст ошибки:
Package name conflicts with existing package
Решение: 🔧
- Измените имя пакета в spec-файле на уникальное
- Используйте префикс для различения (например:
custom-имя-пакета) - Запросите права на сопровождение существующего пакета при необходимости
10. ⭐ ЛУЧШИЕ ПРАКТИКИ
10.1: Структура проекта
✅ Рекомендуемая структура:
имя-проекта/
├── SPECS/имя-пакета.spec
├── SOURCES/исходный-архив.tar.gz
├── SOURCES/патч-исправления.patch
├── .abf.yml
└── README.md
❌ Не рекомендуется:
имя-проекта/
├── spec-файл.txt
├── архив.tar
└── заметки.txt
10.2: Именование версий
| Правильно | Неправильно |
|---|---|
Version: 1.0.0 | Version: 1.0 |
Release: 1 | Release: custom1 |
пакет-1.0.0.tar.gz | пакет.tar.gz |
10.3: Ведение журнала изменений
✅ Правильный формат:
%changelog
* Дата Имя Фамилия <email> - версия-релиз
- Описание внесённых изменений
- Список исправленных ошибок
* Предыдущая-дата Имя Фамилия <email> - старая-версия-1
- Начальная версия пакета
❌ Не рекомендуется:
%changelog
* обновил пакет
* исправил ошибки
10.4: Тестирование перед публикацией
# 1. Выполните локальную сборку
rpmbuild -ba SPECS/имя-пакета.spec
# 2. Установите и протестируйте результат
sudo dnf install RPMS/архитектура/имя-пакета-*.rpm
имя-пакета --версия
# 3. Только после успешного тестирования загружайте в систему сборки
10.5: Документирование проекта
Рекомендуется добавлять файл README.md:
# Имя пакета для дистрибутива
## Описание
Краткое описание функционала и назначения пакета.
## Версия
номер-версии
## Зависимости
- Зависимость 1
- Зависимость 2
## Сборка
Пакет собран через систему автоматической сборки.
## Установка
sudo dnf install имя-пакета
## Контакты
- Сопровождающий: ваш@email.com
- Отчёт об ошибках: ссылка-на-трекер
## Лицензия
Тип-лицензии
11. ✅ БЫСТРЫЙ СТАРТ (ЧЕК-ЛИСТ)
Первоначальная настройка (выполняется один раз):
- [ ] Зарегистрировать учётную запись в системе сборки
- [ ] Сгенерировать SSH-ключ для аутентификации
- [ ] Добавить публичный ключ в настройки профиля
- [ ] Установить клиентские инструменты и git
- [ ] Настроить git (имя пользователя и email)
- [ ] Выполнить авторизацию в системе
Для каждого нового пакета:
- [ ] Подготовить и протестировать spec-файл локально
- [ ] Скачать исходные материалы в папку SOURCES/
- [ ] Создать локальную папку проекта
- [ ] Инициализировать git-репозиторий
- [ ] Добавить файлы в индекс:
git add . - [ ] Создать коммит с описанием:
git commit -m "Описание" - [ ] Настроить удалённый репозиторий
- [ ] Отправить файлы в систему:
git push - [ ] Запустить сборку через веб-интерфейс
- [ ] Дождаться успешного завершения ✅
- [ ] Добавить пакет в персональный репозиторий
- [ ] Протестировать установку конечным пользователем
При обновлении существующего пакета:
- [ ] Обновить поля Version и Release в spec-файле
- [ ] Добавить запись в %changelog
- [ ] Загрузить новые исходные материалы
- [ ] Зафиксировать изменения:
git add . && git commit && git push - [ ] Запустить новую сборку
📎 ПРИЛОЖЕНИЕ А: СПРАВОЧНИК КОМАНД
Работа с системой контроля версий
# Клонировать существующий проект
git clone git@адрес-системы:логин/проект.git
# Проверить статус изменений
git status
# Просмотреть внесённые изменения
git diff
# Отменить локальные изменения файла
git checkout -- имя-файла
# Просмотреть историю коммитов
git log --oneline
Работа с клиентом системы сборки
# Авторизация в системе
клиент-сборки login
# Завершение сеанса
клиент-сборки logout
# Список доступных проектов
клиент-сборки project list
# Создание нового проекта
клиент-сборки project create имя-проекта
# Запуск сборки
клиент-сборки build start логин/проект
# Проверка статуса сборки
клиент-сборки build status логин/проект
# Просмотр логов последней сборки
клиент-сборки build log логин/проект --last
# Загрузка готовых пакетов
клиент-сборки download логин/проект
Управление репозиториями
# Список репозиториев
клиент-сборки repo list
# Создание нового репозитория
клиент-сборки repo create имя-репозитория ветка
# Добавление пакета в репозиторий
клиент-сборки repo add имя-репозитория логин/проект
# Удаление пакета из репозитория
клиент-сборки repo remove имя-репозитория логин/проект
📎 ПРИЛОЖЕНИЕ Б: ШАБЛОНЫ КОНФИГУРАЦИОННЫХ ФАЙЛОВ
Шаблон конфигурационного файла сборки
name: имя-пакета
description: Краткое описание пакета
maintainer: ваш@email.com
priority: contrib
type: rpm
branch: целевая-ветка
build_options:
skip_checks: false
skip_debuginfo: false
Шаблон файла документации
# Имя пакета
## Описание
Краткое описание функционала и назначения.
## Версия
номер-версии
## Зависимости
- Зависимость 1
- Зависимость 2
## Сборка
Пакет собран через систему автоматической сборки.
## Установка
sudo dnf install имя-пакета
## Контакты
- Сопровождающий: ваш@email.com
- Трекер ошибок: ссылка-на-трекер
## Лицензия
Тип-лицензии
Шаблон файла исключений
# Файлы и папки, игнорируемые системой контроля версий
*.rpm
*.src.rpm
*.log
*~
.DS_Store
BUILD/
BUILDROOT/
RPMS/
SRPMS/
📎 ПРИЛОЖЕНИЕ В: ПОЛЕЗНЫЕ РЕСУРСЫ
| Ресурс | Назначение |
|---|---|
| Веб-интерфейс системы сборки | Управление проектами и сборками |
| Документация системы | Руководства и справочные материалы |
| Форум сообщества | Обсуждение вопросов и помощь |
| Каталог пакетов | Просмотр доступных пакетов |
| Монитор сборок | Отслеживание статуса процессов |
📎 ПРИЛОЖЕНИЕ Г: КАНАЛЫ ПОДДЕРЖКИ
| Канал | Назначение |
|---|---|
| Форум сообщества | Вопросы по сборке и сопровождению |
| Чат сообщества | Оперативная помощь и обсуждение |
| Электронная почта | Технические вопросы и отчёты |
| Система отслеживания | Отчёты об ошибках и предложения |
🎯 ЗАКЛЮЧЕНИЕ
Система автоматической сборки — мощный инструмент для сопровождения пакетов.
Ключевые рекомендации:
- ✅ Тестируйте локально перед загрузкой в систему сборки
- ✅ Ведите журнал изменений для каждой новой версии
- ✅ Документируйте свои проекты для других участников
- ✅ Следите за обновлениями зависимостей и стандартов
- ✅ Отвечайте на обращения пользователей и коллег
🛤️ Путь развития сопровождающего:
Начинающий → Первый пакет → Регулярные обновления → Поддержка → Опытный майнтейнер
🎉 УДАЧИ В СОПРОВОЖДЕНИИ ПАКЕТОВ!
Документ подготовлен для: универсального использования
Формат: Руководство для начинающих сопровождающих
Версия документа: 1.0
Дата: Март 2026