diff --git a/README.md b/README.md index d9bab12..b509c74 100644 --- a/README.md +++ b/README.md @@ -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 ``` \ No newline at end of file diff --git a/docs/mock-gui/docs/common.md b/docs/mock-gui/docs/common.md new file mode 100644 index 0000000..3412ae1 --- /dev/null +++ b/docs/mock-gui/docs/common.md @@ -0,0 +1,11 @@ +# Общий принцип работы с MockGUI + +Системя является однопользовательской. + +Рекомендуется устанвливать ее на локальной машине в локальной сети. + +## Текущие ограничения + +* Одновременно может запускаться только одна сборка. +* Сборка потребляет все доступные ядра процессора +* На текущий момент система является alpha сборкой, поэтому подавление ошибок не включено, для детального отслеживания ошибок \ No newline at end of file diff --git a/docs/mock-gui/docs/docs.md b/docs/mock-gui/docs/docs.md new file mode 100644 index 0000000..991a79b --- /dev/null +++ b/docs/mock-gui/docs/docs.md @@ -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 +``` \ No newline at end of file diff --git a/docs/mock-gui/docs/img/mockgui_build10.png b/docs/mock-gui/docs/img/mockgui_build10.png new file mode 100644 index 0000000..8fcfaf2 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_build10.png differ diff --git a/docs/mock-gui/docs/img/mockgui_builds1.png b/docs/mock-gui/docs/img/mockgui_builds1.png new file mode 100644 index 0000000..2279ae9 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_builds1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_creategit1.png b/docs/mock-gui/docs/img/mockgui_creategit1.png new file mode 100644 index 0000000..bb9a7ac Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_creategit1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_creategit2.png b/docs/mock-gui/docs/img/mockgui_creategit2.png new file mode 100644 index 0000000..8f3ee1f Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_creategit2.png differ diff --git a/docs/mock-gui/docs/img/mockgui_creategit3.png b/docs/mock-gui/docs/img/mockgui_creategit3.png new file mode 100644 index 0000000..af32787 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_creategit3.png differ diff --git a/docs/mock-gui/docs/img/mockgui_creategit4.png b/docs/mock-gui/docs/img/mockgui_creategit4.png new file mode 100644 index 0000000..a5f6b26 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_creategit4.png differ diff --git a/docs/mock-gui/docs/img/mockgui_creategit5.png b/docs/mock-gui/docs/img/mockgui_creategit5.png new file mode 100644 index 0000000..9f273a4 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_creategit5.png differ diff --git a/docs/mock-gui/docs/img/mockgui_deletegit1.png b/docs/mock-gui/docs/img/mockgui_deletegit1.png new file mode 100644 index 0000000..3a1eeba Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_deletegit1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_env1.png b/docs/mock-gui/docs/img/mockgui_env1.png new file mode 100644 index 0000000..431c63e Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_env1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_env2.png b/docs/mock-gui/docs/img/mockgui_env2.png new file mode 100644 index 0000000..78cdf6d Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_env2.png differ diff --git a/docs/mock-gui/docs/img/mockgui_list1.png b/docs/mock-gui/docs/img/mockgui_list1.png new file mode 100644 index 0000000..ae14421 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_list1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_list2.png b/docs/mock-gui/docs/img/mockgui_list2.png new file mode 100644 index 0000000..fa16e64 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_list2.png differ diff --git a/docs/mock-gui/docs/img/mockgui_mainscreen.png b/docs/mock-gui/docs/img/mockgui_mainscreen.png new file mode 100644 index 0000000..2460291 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_mainscreen.png differ diff --git a/docs/mock-gui/docs/img/mockgui_project1.png b/docs/mock-gui/docs/img/mockgui_project1.png new file mode 100644 index 0000000..1e31614 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_project1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects10.png b/docs/mock-gui/docs/img/mockgui_projects10.png new file mode 100644 index 0000000..c03dd29 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects10.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects14.png b/docs/mock-gui/docs/img/mockgui_projects14.png new file mode 100644 index 0000000..6fa93ac Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects14.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects15.png b/docs/mock-gui/docs/img/mockgui_projects15.png new file mode 100644 index 0000000..f1624a4 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects15.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects17.png b/docs/mock-gui/docs/img/mockgui_projects17.png new file mode 100644 index 0000000..19f289f Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects17.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects2.png b/docs/mock-gui/docs/img/mockgui_projects2.png new file mode 100644 index 0000000..c638b66 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects2.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects20.png b/docs/mock-gui/docs/img/mockgui_projects20.png new file mode 100644 index 0000000..94a0529 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects20.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects25.png b/docs/mock-gui/docs/img/mockgui_projects25.png new file mode 100644 index 0000000..6c70599 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects25.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects26.png b/docs/mock-gui/docs/img/mockgui_projects26.png new file mode 100644 index 0000000..a97ff34 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects26.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects27.png b/docs/mock-gui/docs/img/mockgui_projects27.png new file mode 100644 index 0000000..0d2434c Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects27.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects3.png b/docs/mock-gui/docs/img/mockgui_projects3.png new file mode 100644 index 0000000..34fdcbd Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects3.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects4.png b/docs/mock-gui/docs/img/mockgui_projects4.png new file mode 100644 index 0000000..f11a471 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects4.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects5.png b/docs/mock-gui/docs/img/mockgui_projects5.png new file mode 100644 index 0000000..23d67b6 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects5.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects6.png b/docs/mock-gui/docs/img/mockgui_projects6.png new file mode 100644 index 0000000..8d03220 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects6.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects7.png b/docs/mock-gui/docs/img/mockgui_projects7.png new file mode 100644 index 0000000..eff4b1b Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects7.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects8.png b/docs/mock-gui/docs/img/mockgui_projects8.png new file mode 100644 index 0000000..3c9e12f Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects8.png differ diff --git a/docs/mock-gui/docs/img/mockgui_projects9.png b/docs/mock-gui/docs/img/mockgui_projects9.png new file mode 100644 index 0000000..7dd7ba4 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_projects9.png differ diff --git a/docs/mock-gui/docs/img/mockgui_recip11.png b/docs/mock-gui/docs/img/mockgui_recip11.png new file mode 100644 index 0000000..6ac8070 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_recip11.png differ diff --git a/docs/mock-gui/docs/img/mockgui_recip2.png b/docs/mock-gui/docs/img/mockgui_recip2.png new file mode 100644 index 0000000..2d42253 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_recip2.png differ diff --git a/docs/mock-gui/docs/img/mockgui_recip3.png b/docs/mock-gui/docs/img/mockgui_recip3.png new file mode 100644 index 0000000..e97e633 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_recip3.png differ diff --git a/docs/mock-gui/docs/img/mockgui_recips1.png b/docs/mock-gui/docs/img/mockgui_recips1.png new file mode 100644 index 0000000..cd892c8 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_recips1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_rpm1.png b/docs/mock-gui/docs/img/mockgui_rpm1.png new file mode 100644 index 0000000..3a3495f Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_rpm1.png differ diff --git a/docs/mock-gui/docs/img/mockgui_rpm2.png b/docs/mock-gui/docs/img/mockgui_rpm2.png new file mode 100644 index 0000000..e2870e0 Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_rpm2.png differ diff --git a/docs/mock-gui/docs/img/mockgui_rpm3.png b/docs/mock-gui/docs/img/mockgui_rpm3.png new file mode 100644 index 0000000..4f751cd Binary files /dev/null and b/docs/mock-gui/docs/img/mockgui_rpm3.png differ diff --git a/docs/mock-gui/docs/index.md b/docs/mock-gui/docs/index.md new file mode 100644 index 0000000..600bc05 --- /dev/null +++ b/docs/mock-gui/docs/index.md @@ -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) + diff --git a/docs/mock-gui/docs/install.md b/docs/mock-gui/docs/install.md new file mode 100644 index 0000000..033f004 --- /dev/null +++ b/docs/mock-gui/docs/install.md @@ -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` + diff --git a/docs/mock-gui/docs/run.md b/docs/mock-gui/docs/run.md new file mode 100644 index 0000000..9edb89e --- /dev/null +++ b/docs/mock-gui/docs/run.md @@ -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 +``` diff --git a/docs/mock-gui/docs/userguide/builds.md b/docs/mock-gui/docs/userguide/builds.md new file mode 100644 index 0000000..e948502 --- /dev/null +++ b/docs/mock-gui/docs/userguide/builds.md @@ -0,0 +1,16 @@ +# Список сборок + +На данной страинце отображается ифнормация о текущих и прошлых сборках + +![Список сборок](../img/mockgui_builds1.png) + +Если нажать на ссылку "Детальнее", то можно получить детальную информацию о сборке: + +![Список сборок2](../img/mockgui_build10.png) + +Где можно увидеть вес файлы логов с ошибками и без, пакеты собранные при сборке и т.д. + +Список сборок может быть: +* общим +* сборки проекта +* сборки проекта и git репозитория \ No newline at end of file diff --git a/docs/mock-gui/docs/userguide/configuration.md b/docs/mock-gui/docs/userguide/configuration.md new file mode 100644 index 0000000..154b8f5 --- /dev/null +++ b/docs/mock-gui/docs/userguide/configuration.md @@ -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` поэтому данная папка так же должна быть большого объема. \ No newline at end of file diff --git a/docs/mock-gui/docs/userguide/env.md b/docs/mock-gui/docs/userguide/env.md new file mode 100644 index 0000000..766db77 --- /dev/null +++ b/docs/mock-gui/docs/userguide/env.md @@ -0,0 +1,19 @@ +# Окружения сборки mock + +Отображает список доступных окружений, отфильрованных согласно [конфигруации](configuration.md) + +Файлы конфигураци доступны только для ознакомления. + +Добавлять можно только вручную, редактируя файлы по пути `/etc/mock/` + +## Список конфигураций + +![Список конфигураций](../img/mockgui_env1.png) + +## Просмотр файлов конфигураций сборки + +![Конфигурация сборки](../img/mockgui_env2.png) + +В листинге файла конфигурации сборки можно кликать мышкой на `include` и будет происходить переход на указнный шаблон или конфигурацию. + +Такой механиз для ознакомления с конфигурацией сборки. \ No newline at end of file diff --git a/docs/mock-gui/docs/userguide/gits.md b/docs/mock-gui/docs/userguide/gits.md new file mode 100644 index 0000000..8f29b3f --- /dev/null +++ b/docs/mock-gui/docs/userguide/gits.md @@ -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) \ No newline at end of file diff --git a/docs/mock-gui/docs/userguide/projects.md b/docs/mock-gui/docs/userguide/projects.md new file mode 100644 index 0000000..4998569 --- /dev/null +++ b/docs/mock-gui/docs/userguide/projects.md @@ -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) \ No newline at end of file diff --git a/docs/mock-gui/docs/userguide/recips.md b/docs/mock-gui/docs/userguide/recips.md new file mode 100644 index 0000000..7b5ceb8 --- /dev/null +++ b/docs/mock-gui/docs/userguide/recips.md @@ -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) + +Для удаления, нужно нажать кнопку "Удалить" и в появившемся окне вписать имя рецепта для подтверждения удаления. diff --git a/docs/mock-gui/docs/userguide/rpms.md b/docs/mock-gui/docs/userguide/rpms.md new file mode 100644 index 0000000..62b0d92 --- /dev/null +++ b/docs/mock-gui/docs/userguide/rpms.md @@ -0,0 +1,13 @@ +# Список пакетов + +В данном разделе отображается список git репозиториев и число пакетов собранных из данного репозитория + +![Список пакетов](../img/mockgui_rpm1.png) + +Для получения более детальной информации нужно нажать на стрелку, и отобразится список всех пакетов, собранных из данного репозитория. + +![Список пакетов2](../img/mockgui_rpm2.png) + +Здесь же можно получить информацию когда и для какого проекта собирался пакет, а так же детальную информацию об rpm пакете. + +![Список пакетов3](../img/mockgui_rpm3.png) \ No newline at end of file diff --git a/docs/mock-gui/mkdocs.yml b/docs/mock-gui/mkdocs.yml new file mode 100644 index 0000000..588e5c2 --- /dev/null +++ b/docs/mock-gui/mkdocs.yml @@ -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 + + diff --git a/install/mock-gui-install.yml b/install/mock-gui-install.yml index 7866847..3dd1d31 100644 --- a/install/mock-gui-install.yml +++ b/install/mock-gui-install.yml @@ -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 +