master
alexey 2 weeks ago
parent 5ae6f97c69
commit ba79ecd029

@ -1,11 +1,153 @@
## Запуск
# MockGUI
Обертка над mock для организации графического интерфейса сборки RPM паектов
![Главный экран MockGUI](docs/mock-gui/docs/img/mockgui_mainscreen.png)
## Где можно запустить
ПО может быть установлено на следующих ОС:
MSVSphere 9
Almalinux 9
RockyLinux 9
Требования к системе:
| | Минимальные требовнаия |
|--------|--------------------------------------------------------------|
| CPU | 1 ядро |
| Memory | Зависит от собираемых исходников, для небольших проектов 2Гб |
| HDD | размер исходных кодов * 4 |
## Установка
### ansible + root
```
dnf install epel-release
dnf install ansible git
git clone https://dev.brepo.ru/brepo/mock-gui.git
cd mock-gui/install
ansible-galaxy install -r requirements.yml
ansible-playbook mock-gui-install.yml --ask-become-pass
перезагрузить систему
systemctl enable mockgui
systemctl start mockgui
затйти под пользователем mockgui в каталог /home/mockgui/mock-gui/gen-scripts и выполнить команду:
./install-key UserName UserEmail 316224000 StrongSignPassword
```
где UserName - имя пользователя ключа, UserEmail - email пользователя ключа, 316224000 - время действия ключа в секундах, StrongSignPassword - пароль для ключа
### ansible + пользователь в sudo
```
sudo dnf install epel-release
sudo dnf install ansible git
git clone https://dev.brepo.ru/brepo/mock-gui.git
cd mock-gui/install
ansible-galaxy install -r requirements.yml
ansible-playbook mock-gui-install.yml --ask-become-pass
перезагрузить систему
sudo systemctl enable mockgui
sudo systemctl start mockgui
затйти под пользователем mockgui в каталог /home/mockgui/mock-gui/gen-scripts и выполнить команду:
./install-key UserName UserEmail 316224000 StrongSignPassword
```
где UserName - имя пользователя ключа, UserEmail - email пользователя ключа, 316224000 - время действия ключа в секундах, StrongSignPassword - пароль для ключа
### Ручная установка
Команды ниже выполнять под root или привилегированным пользователем с sudo:
1. отключить selinux
2. `systemctl stop firewalld`
3. `systemctl disable firewalld`
4. `systemctl stop nftables`
5. `systemctl disable nftables`
6. `useradd mockgui`
7.
Добавить репозиторий:
```
# cat /etc/yum.repos.d/brepo_projects.repo
[brepo_projects]
name=msvsphere9 repo on repo.brepo.ru
baseurl=https://repo.brepo.ru/hestia/
enabled=1
gpgkey=https://repo.brepo.ru/hestia/brepo_projects-gpg-key
gpgcheck=1
```
Далее:
8. `dnf install epel-release`
9. `dnf install mock rpmdevtools rpm-build ccache rpm-sign sqlite sqlite-devel alt-brepo-ruby33 openssh-server git tar gcc gcc-c++ make cmake alt-brepo-ruby33-devel openssl-devel zlib-devel`
10. `usermod -a -G mock mockgui`
11.
добавить в .bashrc root и mockgui строки:
`export PATH=/usr/lib64/ccache:$PATH`
Команды ниже выполнять под пользователем mockgui:
12. `cd ~`
13. `git clone https://dev.brepo.ru/brepo/mock-gui.git`
14. `cd mock-gui`
15. `/opt/brepo/ruby33/bin/bundle install`
16. `/opt/brepo/ruby33/bin/bundle exec sequel -m db/migrations sqlite://db/workbase.sqlite3`
17. `cd gen-scripts`
18. `./install-key UserName UserEmail 316224000 StrongSignPassword`
где UserName - имя пользователя ключа, UserEmail - email пользователя ключа, 316224000 - время действия ключа в секундах, StrongSignPassword - пароль для ключа
Следующая команда от root:
15. `cp /home/mockgui/mock-gui/mockgui.service /etc/systemd/system/mockgui.service`
16. `systemctl enable mockgui.service --now`
## Запуск без сервиса
Подготовка базы данных(деалется один раз):
```
/opt/brepo/ruby33/bin/bundle exec sequel -m db/migrations sqlite://db/workbase.sqlite3
```
Запуск приложения
```
/opt/brepo/ruby33/bin/bundle exec /opt/brepo/ruby33/bin/ruby app.rb
```
## Использование приложения
Открыть в браузере страницу:
```
http://[ip]:8081
```
## Документация
[OnLine](https://mockgui.brepo.ru)
### Сборка локальной докумнтации
```
cd docs/mock-gui
pip install mkdocs
pip install markupsafe==2.0.1
pip install mkdocs-bootstrap
```
Локальный сервер:
```
bundle exec ruby app.rb
mkdocs serve
```
## Подготовка базы данных
Или статическая документация:
```
bundle exec sequel -m db/migrations sqlite://db/workbase.sqlite3
mkdocs build
```

@ -0,0 +1,11 @@
# Общий принцип работы с MockGUI
Системя является однопользовательской.
Рекомендуется устанвливать ее на локальной машине в локальной сети.
## Текущие ограничения
* Одновременно может запускаться только одна сборка.
* Сборка потребляет все доступные ядра процессора
* На текущий момент система является alpha сборкой, поэтому подавление ошибок не включено, для детального отслеживания ошибок

@ -0,0 +1,22 @@
# Документация
## Сборка локальной докумнтации
```shell
cd docs/mock-gui
pip install mkdocs
pip install markupsafe==2.0.1
pip install mkdocs-bootstrap
```
Локальный сервер:
```shell
mkdocs serve
```
Или статическая документация:
```shell
mkdocs build
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

@ -0,0 +1,36 @@
# MockGUI система сборки RPM пакетов
## Описание
Это однопользовательская система по сборке ПО, а так же по подготовке репозиториев для установки собранного ПО.
Система является надстройкой над git, mock, rpmbuild, т.е. использует данные команды для подготовки и сборки программ.
mock в отличие от rpmbuild позволяет собрать пакет, при этом не изменяя конфигурацию системы, где он собирается и очистка изменений затрагивает удаление всего одного каталога сборки проекта, а MockGUI позволяет через web интерфейс управлять сборками. Группировать их и готовить к публикации.
MockGUI содержит линейный список git проектов, которые позволяет сгруппировать в проекты.
Каждый проект является отдельным репозиторием, подписанный проект может быть доступен для использования в локальной сети.
## Где можно запустить
ПО может быть установлено на следующих ОС:
* MSVSphere 9
* Almalinux 9
* RockyLinux 9
Требования к системе:
| | Минимальные требовнаия |
|--------|--------------------------------------------------------------|
| CPU | 1 ядро |
| Memory | Зависит от собираемых исходников, для небольших проектов 2Гб |
| HDD | размер исходных кодов * 4 |
## Интерфейс
![Главный экран MockGUI](img/mockgui_mainscreen.png)

@ -0,0 +1,86 @@
# Способы установки
## С помощью ansible от пользователя root
```shell
dnf install epel-release
dnf install ansible git
git clone https://dev.brepo.ru/brepo/mock-gui.git
cd mock-gui/install
ansible-galaxy install -r requirements.yml
ansible-playbook mock-gui-install.yml --ask-become-pass
перезагрузить систему
systemctl enable mockgui
systemctl start mockgui
```
И обязательно задать пароль для mockgui, т.к. без ключа git будет запрашивать именно пароль для этого пользователя:
```shell
passwd mockgui
```
## С помощью ansible и пользователь в sudo
```shell
sudo dnf install epel-release
sudo dnf install ansible git
git clone https://dev.brepo.ru/brepo/mock-gui.git
cd mock-gui/install
ansible-galaxy install -r requirements.yml
ansible-playbook mock-gui-install.yml --ask-become-pass
перезагрузить систему
sudo systemctl enable mockgui
sudo systemctl start mockgui
```
И обязательно задать пароль для mockgui, т.к. без ключа git будет запрашивать именно пароль для этого пользователя:
```shell
passwd mockgui
```
## Ручная установка
Команды ниже выполнять под root или привилегированным пользователем с sudo:
1. отключить selinux
2. `systemctl stop firewalld`
3. `systemctl disable firewalld`
4. `systemctl stop nftables`
5. `systemctl disable nftables`
6. `useradd mockgui`
7. Добавить репозиторий:
```ini
# cat /etc/yum.repos.d/brepo_projects.repo
[brepo_projects]
name=msvsphere9 repo on repo.brepo.ru
baseurl=https://repo.brepo.ru/hestia/
enabled=1
gpgkey=https://repo.brepo.ru/hestia/brepo_projects-gpg-key
gpgcheck=1
```
8. `dnf install epel-release`
9. `dnf install mock rpmdevtools rpm-build ccache rpm-sign sqlite sqlite-devel alt-brepo-ruby33 openssh-server git tar gcc gcc-c++ make cmake alt-brepo-ruby33-devel openssl-devel zlib-devel`
10. `usermod -a -G mock mockgui`
11. добавить в .bashrc root и mockgui строки: `export PATH=/usr/lib64/ccache:$PATH`
Команды ниже выполнять под пользователем mockgui:
12. `cd ~`
13. `git clone https://dev.brepo.ru/brepo/mock-gui.git`
14. `cd mock-gui`
15. `/opt/brepo/ruby33/bin/bundle install`
16. `/opt/brepo/ruby33/bin/bundle exec sequel -m db/migrations sqlite://db/workbase.sqlite3`
Следующая команда от root:
17. `cp /home/mockgui/mock-gui/mockgui.service /etc/systemd/system/mockgui.service`
18. `systemctl enable mockgui.service --now`
И обязательно задать пароль для mockgui, т.к. без ключа git будет запрашивать именно пароль для этого пользователя:
19. `passwd mockgui`

@ -0,0 +1,31 @@
# Запуск приложения
Для запуска необходимо выполнить слудующую команду:
```shell
sudo systemctl start mockgui
```
## Ручной запуск без service файла
Ручной запуск без service файла может выпоняться от пользователя состоящего в группе `mock`.
Подготовка базы данных(деалется один раз):
```shell
/opt/brepo/ruby33/bin/bundle exec sequel -m db/migrations sqlite://db/workbase.sqlite3
```
Запуск приложения
```shell
/opt/brepo/ruby33/bin/bundle exec /opt/brepo/ruby33/bin/ruby app.rb
```
## Использование приложения
Открыть в браузере страницу:
```
http://[ip]:8081
```

@ -0,0 +1,16 @@
# Список сборок
На данной страинце отображается ифнормация о текущих и прошлых сборках
![Список сборок](../img/mockgui_builds1.png)
Если нажать на ссылку "Детальнее", то можно получить детальную информацию о сборке:
![Список сборок2](../img/mockgui_build10.png)
Где можно увидеть вес файлы логов с ошибками и без, пакеты собранные при сборке и т.д.
Список сборок может быть:
* общим
* сборки проекта
* сборки проекта и git репозитория

@ -0,0 +1,75 @@
# Конфигурация
Конфигруация MockGUI представлена одним файлом `config.ini` расположенном в корне проекта.
## Пример файла конфигруации
```ini
[server]
port = 8081
db = "sqlite://db/workbase.sqlite3"
[repo]
repo = "repo"
[projects]
path = "projects"
old = 3
[counter]
path = "locks/counter"
[configs]
hide=open,amazon,anolis,circle,custom,euro,fedora,mageia,navy,alma,rocky
selected=msvsphere
[pages]
items_per_page = 30
[sign]
path = "keys"
[repoview]
path = "repoview"
```
## Секции
Все пути указываются от корня проекта.
### server
* `port` - порт, который будет слущать сервер для доступа к WEB интерфейсу (умолчание: 8081)
* `db` - путь к базе данных и тип базы данных (умолчание: db/workbase.sqlite3 и тип базы данных SQLite)
### repo
* `repo` - путь к каталогу, где гранятся bare git проекты, можно скопировать уже существующие, они автоматом при старте добавятся в базу (умолчание: repo)
### counter
* `path` - путь к глобальному счетчику сборок (умолчание: locks/counter)
### projects
* `path` - путь к папке, где создаются проекты, в нее же копируются git исходники, поэтому рекомендуется эту папку делать пообъемнее (умолчание: projects)
* `old` - неиспользуемый параметр
### configs
* `hide` - скрыть из списка доступных конфигураций сборки считанных из `/etc/mock/`, содержащие в имени одно из слов, указееых через запятую
* `selected` - добавить в список избранных сборки с именами, указанными содержащими слова через запятую
### pages
* `items_per_page` - отображать на страницах не более указанного числа записей (умолчание: 30)
### sign
* `path` - папка, где хранятся gpg ключи (приватный и публичный) для подписи пакетов (умолчание: keys)
### repoview
* `path` - папка, где хранятся шаблоны для генерации статического repoview для подписанного репозитория (умолчание: repoview)
Так же следует учесть, что сборки происходят в папке `/var/lib/mock` поэтому данная папка так же должна быть большого объема.

@ -0,0 +1,19 @@
# Окружения сборки mock
Отображает список доступных окружений, отфильрованных согласно [конфигруации](configuration.md)
Файлы конфигураци доступны только для ознакомления.
Добавлять можно только вручную, редактируя файлы по пути `/etc/mock/`
## Список конфигураций
![Список конфигураций](../img/mockgui_env1.png)
## Просмотр файлов конфигураций сборки
![Конфигурация сборки](../img/mockgui_env2.png)
В листинге файла конфигурации сборки можно кликать мышкой на `include` и будет происходить переход на указнный шаблон или конфигурацию.
Такой механиз для ознакомления с конфигурацией сборки.

@ -0,0 +1,46 @@
# Управление git репозиториями
По-умолчанию git проекты - это папки содержащие bare git структуры, которые расположены в каталоге `repo` (настраивается в [конфигруации](configuration.md))
Папка repo может содержать не зарегистрированные git репозитории, в таком случае они при открытии страницы атоматически добавятся в базу (правда без писания).
## Список git репозиториями
![Первоначальный вид](../img/mockgui_creategit1.png)
![С добавленными репозиториями](../img/mockgui_creategit3.png)
## Создание нового пустого git репозитория
![Создание пустого git репозитория](../img/mockgui_creategit2.png)
Необходимо заполнить имя git репозитория и описание. И нажать кнопку "Создать".
## Просмотр информации git репозитория
На текущий момент етсть возможность просмотра:
* Списка веток
* Списка коммитов
* Списка тегов
* Строки для клонирования репозитория
* Описание репозитория
Список тегов и коммитов даст ифнормацию о том, что исходные коды в ветке master находятся в нужно состоянии ис нужными коммитами.
Сборочница производит выборку исходных кодов из master ветки git репозитория.
![Информация о git репозитории](../img/mockgui_creategit4.png)
Пример строки клонирования репозитория:
![Информация о git репозитории](../img/mockgui_creategit5.png)
Для успешного клонирования и наполнения git репозитория, необходимо либо установить публичный ключ для доумпа пользователя по ssh или знать пароль к mockgui пользователю по ssh. Вот почему в [инсталляционном руководстве](../install.md) рекомендуется установить пароль для mockgui пользователя.
## Удаление git репозитория
Удаление возможно только в том случае, если данный git репозиторий не имеет ни рецептов сборки, а так же не подключен ни к одному проекту и соответсвенно, не имеет сборок, указывающих на данный git репозиторий.
При нажатии на кнопку "Удалить" появится окно, где нужно будет написать имя репозитория и нажать кнопку "Удалить" для подтверждения удаления:
![Удаление git репозитория](../img/mockgui_deletegit1.png)

@ -0,0 +1,138 @@
# Управление проектами
Проекты - это объединения git репозиториев, результат которого - это репозиторий rpm пакетов (подписанный и не подписанный).
Неподписанный репозиторий используется для внутренних сборок, при подключении проекта в другой проект.
Подписанный репозиторий используется для публикации rpm пакетов на внешний сервер (внешний репозиторий).
## Список проектов
![Список проектов пустой](../img/mockgui_project1.png)
![Список проектов](../img/mockgui_projects4.png)
## Создание нового проекта
![Новый проект](../img/mockgui_projects2.png)
* `Название проекта` - уникальное название проекта, оно будет содержаться в названии будущего репозитория, поэтому стоит подходить к названию с умом.
* `Описание` - краткое описание
* `Не публиковать отладочные пакеты и исходные коды` - при установенном флажке в подписанный репозиторий не публикуются пакеты src.rpm, debuginfo, debugsource. Если флажок не установлен, то подписывается и публикуется все. Флажок для проприетарного ПО
* `Выберите конфигурацию окружения сборки для проекта` - выбирается конфигурация сборки, выбирается один раз при создании проекта и больше потом не меняется. Можно только создать новый проект с другой конфигурацией.
Пример выбора конфигурации. Имеется поле фильтрации.
![Выбор конфигурации](../img/mockgui_projects3.png)
## Информация о проекте
![Проектная информация](../img/mockgui_projects5.png)
`Добавить git репозиторий к проекту` - позволяет добавить к проекту один из существующих git репозиториев.
Необходимо из выпадающего списка выбрать один - нажать кнопку "Добавить".
Тк выглядит добавленый в проект новый git репозиторий.
![Добавленый репозиторий](../img/mockgui_projects6.png)
Пустые репозиториий без исходников добавить в проетк нельзя!
`Редактировать конфигурацию сборки` - локальная конфигурация сборочного окружения для mock.
Данный пукнт меню озволять отредактировать корневой файл сборочного окружения.
Здесь условно можно поменять конфигурацию сборки с которой создавался проект, но такой финт лучше не проделывать, особенно если есть уже собранные пакеты.
![Конфигурация сборки](../img/mockgui_projects7.png)
`Добавить внутренний репозиторий из другого проекта` - позволяет связать проекты при сбоке, т.е внутренний неподписанный репозиторий одного проекта, становится доступен для сборки текущего.
![Линк на другой проект](../img/mockgui_projects8.png)
`Список всех пакетов` - список пакетов, собранных для данного проекта (неподписанных пакетв)
![Список пакетов](../img/mockgui_projects20.png)
Отображается структура репозитория, где можно перемещаться по папкам и нажимать на rpm пакеты, получая о них информацию.
`Список сборок проектов` - отображается список сборок, принадлежащих проекту.
В данном списке можно получить информацию о каждой сборке. Детальнее о [сборках](builds.md)
`Подписать` - подписать gpg ключем файлы репозитория проекта и опубликовать их в отдельном репозитории
Как происходит подпись:
![Подпись](../img/mockgui_projects25.png)
Подписывание требует наличие gpg ключей в папке keys.
Данные ключи создаются при [установке](../install.md) скриптом ./install-key из папки `gen-scripts`
Параметры запуска:
```shell
cd gen-scripts
./install-key UserName UserEmail 316224000 StrongSignPassword
```
* UserName - это имя владельца ключа
* UserEmail - почта владельца ключа
* 316224000 - число секунд жизни ключа. Высчитывается по формуле: пусть нужен ключ на 2 года значит чилсо будет: 2 * 366 * 24 * 60 * 60 = 63244800, а 316224000 = 10 лет
* StrongSignPassword - пароль для ключа
В результате будет сгенерирован gpg ключ приватный и публичный в папке keys, желательно не потерять их.
`Просмотр подписанного репозитория` - после подписи в проекте появится подписанный репозиторий с пакетами и сгенерированным файлом repoview. Т.е в таком виде как репозиторий будет выглядеть при публикации в интернете.
![Подписанный репозиторий](../img/mockgui_projects26.png)
`Установить адрес подписанного репозитоия` - установить адресс подписанного репозитория, т.е установить url, данная информация необходима для корректного формирования шапки:
```shell
echo -e "[project_test1]
name=msvsphere9 repo on repo.brepo.ru
baseurl=https://test.repo.tst/repo1/
enabled=1
gpgkey=https://test.repo.tst/repo1/project_test1-gpg-key
gpgcheck=1" > /etc/yum.repos.d/project_test1.repo
```
т.е устанавливается корректный url будущего удаленного репозитория.
`Удалить проект` - удаляется весь проект, подписанные и неподписанные репозитории, сборки.
Но если проект залинкован в другом проекте, то удаление будет невозможным, пока не будет снят линк.
![Пример удаления](../img/mockgui_projects27.png)
Для удаления - нужно перевести в активное состояние флажок и нажать кнопку "Удалить".
Без установки флажка - удаление не произойде. Такая защита от случайного удаления.
### Список действий над репозиторием проекта
Напротив каждого git репозитория, добавленного в проект есть список действий:
![Расширенный список действий](../img/mockgui_list2.png)
Слева направо:
* удалить git репозиторий из проекта (при этом rpm пакеты в проекте, сборки - остаются)
* обновить исходники проекта - если такой значек появился, значит в git репозиторий в ветку master были внесены изменения и в текущем проекте неактуальные исходники. Когда исходники актаульны список действий выглядит так:
![](../img/mockgui_list1.png)
* запустить сборку - запускается сборка проекта в фоне. Отображается страница, которая обновляется каждые 5 секунд (обновление можно остановить или запустить опять)
![Сборка проекта](../img/mockgui_projects10.png)
Во время сборки отображается лог файл процесса сборки. Результат сборки можно посмотреть на странице [сборки](builds.md)
* указать файл spec для проекта и git репозитория - если в гит репозитории несколько spec файлов, то будет подхватываться первый попавшийся файл, чтоб избежать такого поведения можно точно указать какой файл использовать
![Установка spec файла](../img/mockgui_projects9.png)
* отобразить список сборок для проекта и текущего git репозитория
Если нажать на имя git репозитория в списке, то можно просмотреть его содержимое, т.е список файлов:
![Список файлов репозитория](../img/mockgui_projects14.png)

@ -0,0 +1,81 @@
# Сценарии подготовки исходных кодов git репозиториев
Сценарии подготовки исходных кодов git репозиториев в дальнейшем буду называть `рецептами`.
Для сборки необходимо, чтоб все файлы git пректа были прописаны в spec файле, а зачастую в spec файле файлы исходных кодов прописаны как один архив.
По умолчанию MockGUI предполпгает, что в spec прописаны все исходные файлы, которые используются при сборке и ничего делать не нужно.
Но если необходимо проделать какие-то манипуляции для подготовки исходных файлов, то сборка завершится с ошибкой.
Чтоб не было ошибки для этого сделаны рецепты.
Рецепт - это по сути bash скрипт, который:
* получает на вход spec файл
* парсит spec файл при необходимости
* делает необходимые манипуляции с исходными кодами
* производит подготовку к сборке
Нужно учитывать при написании сценариев, что они выполняются в реальной системе, поэтому их функционал ограничен. Например это может быть:
* использование sed, grep для создания файлов конфигруаций
* использование доступных архиватор в системе для подготовки архива
* и т.д.
Пример такого скрипта уже встроен в MockGUI - make_tar_from_git. Он из исходных кодов git проекта создает архив для сборки:
```bash
#!/bin/bash
need_spec="n"
SPEC="$1"
FIND_SPEC="$SPEC"
if [ -z "$SPEC" ];then
need_spec="y"
fi
if [ -n "$SPEC" -a ! -e "$SPEC" ];then
need_spec="y"
fi
if [ "$need_spec" == "y" ];then
FIND_SPEC=$(/usr/bin/find . -iname "*.spec" -type f -print -quit)
fi
if [ -n "$FIND_SPEC" ];then
NAME=$(rpm -q --queryformat="%{NAME}" --specfile "$FIND_SPEC" | xargs)
VERSION=$(rpm -q --queryformat="%{VERSION}" --specfile "$FIND_SPEC" | xargs)
PKG_NAME="${NAME}-${VERSION}"
tar -h --exclude="${PKG_NAME}.tar.gz" --exclude=".git" --exclude="$FIND_SPEC" -cvf ${PKG_NAME}.tar.gz --transform "s,^,${PKG_NAME}/," *
exit 0
else
echo "Не найден spec файл"
exit 255
fi
```
Его код прост, скрипт выполняется в корне git репозитория, он получает spec файл, извлекает из него версию и имя пакета и создает тут же архив.
Данныей рецепты могут изменять исходники, это не вредит репозиторию, т.к все манипуляции делаются с копией данных в временном каталоге.
## Получить список рецептов
![Список рецетов](../img/mockgui_recips1.png)
## Добавить новый рецепт
![Добавить рецепт](../img/mockgui_recip2.png)
`Имя рецепта` - имя файла, который будет создаваться при подготовке сборки во временных исходниках проекта. Имя желательно выбирать такое, чтоб оно не переписало файл исходников
`Описанье` - краткое описание подготовительного скрипта
`Код` - bash скрипт
`git проекты использующие рецепт` - список git-репозиториев, для которых данный рецепт будет применяться. Может иметь несколько значений
## Редактирование существующего рецепта
![Редактирование рецепта](../img/mockgui_recip3.png)
## Удаление рецепта
![Удаление рецепта](../img/mockgui_recip11.png)
Для удаления, нужно нажать кнопку "Удалить" и в появившемся окне вписать имя рецепта для подтверждения удаления.

@ -0,0 +1,13 @@
# Список пакетов
В данном разделе отображается список git репозиториев и число пакетов собранных из данного репозитория
![Список пакетов](../img/mockgui_rpm1.png)
Для получения более детальной информации нужно нажать на стрелку, и отобразится список всех пакетов, собранных из данного репозитория.
![Список пакетов2](../img/mockgui_rpm2.png)
Здесь же можно получить информацию когда и для какого проекта собирался пакет, а так же детальную информацию об rpm пакете.
![Список пакетов3](../img/mockgui_rpm3.png)

@ -0,0 +1,24 @@
site_name: MockGUI
nav:
- index.md
- install.md
- run.md
- docs.md
- Инструкция пользователя:
- common.md
- userguide/configuration.md
- userguide/gits.md
- userguide/recips.md
- userguide/env.md
- userguide/projects.md
- userguide/builds.md
- userguide/rpms.md
theme:
name: readthedocs
locale: ru
extra:
generator: false
copyright: Copyright © 2025 - ... BayRepo
repo_url: https://dev.brepo.ru/brepo/mock-gui

@ -72,17 +72,13 @@
groups: mock
append: yes
- name: Delete previously cloned project
ansible.builtin.file:
path: "/home/mockgui/mock-gui"
state: absent
- name: Clone project to the mockgui
ansible.builtin.git:
repo: https://dev.brepo.ru/brepo/mock-gui.git
dest: /home/mockgui/mock-gui
single_branch: yes
version: master
ignore_errors: true
- name: Add ccache to PATH
ansible.builtin.lineinfile:
@ -99,10 +95,7 @@
group: mockgui
- name: Install needed ruby gems
ansible.builtin.command: /opt/brepo/ruby33/bin/bundle install
become: yes
become_user: mockgui
become_method: su
ansible.builtin.command: su - mockgui -c "cd /home/mockgui/mock-gui; /opt/brepo/ruby33/bin/bundle install"
args:
chdir: /home/mockgui/mock-gui
register: myout
@ -111,10 +104,7 @@
- name: Create database
ansible.builtin.command: /opt/brepo/ruby33/bin/bundle exec sequel -m db/migrations sqlite://db/workbase.sqlite3
become: yes
become_user: mockgui
become_method: su
ansible.builtin.command: su - mockgui -c "cd /home/mockgui/mock-gui; /opt/brepo/ruby33/bin/bundle exec sequel -m db/migrations sqlite://db/workbase.sqlite3"
args:
chdir: /home/mockgui/mock-gui
register: myout
@ -124,8 +114,10 @@
- name: Copy systemd service file to server
ansible.builtin.copy:
remote_src: true
src: /home/mockgui/mock-gui/mockgui.service
dest: /etc/systemd/system
owner: root
group: root
mode: 0644

Loading…
Cancel
Save