Веб магазин: различия между версиями
Betcher (обсуждение | вклад) Нет описания правки |
Braumann (обсуждение | вклад) м Малые правки |
||
| (не показано 6 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
= | <div style="font-size:90%; color:#555; margin-bottom:1em;"> | ||
'''Опубликовано:''' 29.10.2025 • '''Обновлено:''' 04.04.2026 | |||
</div> | |||
= | <div style="border: 2px solid #f39c12; background-color: #fff3cd; padding: 0.5em; margin-bottom: 1em;"> | ||
⚠️ '''Эта статья находится в разработке.''' Содержание может измениться. | |||
</div> | |||
== | == Веб-магазин == | ||
В этой статье описано устройство веб-магазина РОСА, а также способы добавления и редактирования карточек приложений. | |||
=== Общие сведения === | |||
* В текущей реализации страница | * Веб-магазин не отдаёт пользователю пакеты для скачивания напрямую. Вместо этого он формирует специальную ссылку, которая открывается в программе ''rpmgrab''. Эта программа извлекает из ссылки имя пакета и устанавливает его из репозитория ОС. Таким образом, даже в случае компрометации магазина установка ПО в обход репозитория невозможна. | ||
* Тот же самый магазин без изменений используется также для [[BFRESH]] и Бария. Разница только в том, что вместо ''rpmgrab'' запускается другая утилита, которая создаёт модули, а не выполняет установку. | |||
* У программ в магазине не указываются версии. Это позволяет не пересобирать страницу после каждого изменения в репозитории, а также использовать один и тот же магазин для разных платформ. | |||
* В текущей реализации страница магазина является статической. Это повышает безопасность, снижает нагрузку на сервер и позволяет использовать магазин локально без запуска локального веб-сервера. | |||
* Для снижения трафика сервер отдаёт небольшую HTML-страницу и базу данных, записанную в JS-файл. Часть содержимого формируется JavaScript-кодом на стороне браузера, а скриншоты подгружаются с использованием механизма ''lazy loading'', то есть загружаются только по мере необходимости. | |||
* HTML-страница и JS-файлы генерируются скриптом на основе базы данных. Эта же база используется для сборки пакета со скриншотами и описаниями для ''dnfdragora''. | |||
* Сама база заполняется в полуавтоматическом режиме на основе данных ''dnf info'' и метаданных ''AppStream''. | |||
* Архитектура магазина позволяет сравнительно просто интегрировать и другие способы установки ПО, отличные от ''dnf''. Первый кандидат на интеграцию - ''epm''. | |||
=== Связанные проекты === | |||
* | * [https://abf.io/soft/rosastore rosastore] - генератор страницы магазина: шаблоны HTML, JS и CSS, скрипты обработки скриншотов, а также инструменты сборки магазина из базы данных. | ||
* | * [https://abf.io/soft/web-store-database web-store-database] - база данных, на основе которой собирается страница магазина: описания, скриншоты, иконки и другие материалы. Подключается к ''rosastore'' как git-сабмодуль. | ||
* [https://abf.io/import/metadata metadata] - сборка RPM-пакетов: | |||
** '''metadata-apps''' - пакет с магазином; может быть установлен локально. Для запуска локального магазина в пакет включён desktop-файл. | |||
** '''metadata-dnfdragora''' - пакет с метаданными для ''dnfdragora'', собранными из той же базы данных. | |||
** '''web-store-desktop''' - пакет, содержащий только desktop-файл для открытия страницы магазина в браузере по умолчанию. Именно этот пакет устанавливается в системе пользователя для доступа к магазину. | |||
=== Как добавить приложение в веб-магазин РОСА === | |||
Сначала приложение должно быть добавлено в репозиторий. На текущий момент магазин работает только с пакетами, собранными в репозитории. | |||
Этот процесс здесь не рассматривается. После того как пакет появился в репозитории, есть два варианта действий: простой и расширенный. | |||
==== Простой способ ==== | |||
Можно написать на форум с просьбой добавить приложение в магазин: | |||
https:// | * [https://forum.rosa.ru/viewtopic.php?t=11774 Обсуждение на форуме] | ||
# | ==== Самостоятельное добавление ==== | ||
# | |||
# web-store- | Можно подготовить карточку приложения самостоятельно и отправить ''pull request''. | ||
# Зарегистрируйтесь на [https://abf.rosa.ru ABF]. Регистрация там работает по приглашениям; инвайт может выдать любой пользователь. Например, можно спросить в [https://t.me/rosalinux Telegram-чате ROSA]. | |||
# Через веб-интерфейс ABF клонируйте себе проект [https://abf.io/soft/web-store-database web-store-database]. | |||
# Склонируйте свой форк на локальную машину с помощью ''git clone''. | |||
# Карточки приложений находятся в папке '''database'''. Можно: | |||
#* создать новую карточку по аналогии с уже существующими; | |||
#* воспользоваться вспомогательными инструментами, описанными в файле '''README''' в корне проекта. | |||
# Обязательно прочитайте '''README''': в нём описан формат файла '''app.yml'''. | |||
# Чтобы проверить, как карточка отображается в магазине, клонируйте генератор магазина: [https://abf.io/soft/rosastore rosastore]. | |||
# Скопируйте папку своего приложения из ''.../web-store-database/database'' в папку '''database''' внутри проекта ''rosastore''. Эта папка используется для тестовых сборок магазина и содержит только часть проектов, поэтому локальная сборка выполняется быстрее. | |||
# Далее выполните команды в корне проекта ''rosastore'': | |||
#* <code>./genhtml.py -d database</code> | |||
#* <code>xdg-open ./site/index.html</code> | |||
#'''Если у вас Zen Browser или отображение идёт не корректно то:''' | |||
#* <code>cd ./site</code> | |||
#* <code>python3 -m http.server 8000</code> | |||
#* Перейди по [http://localhost:8000/ Ссылка] | |||
# Проверьте результат в браузере. | |||
# При необходимости повторяйте редактирование карточки и пересборку магазина, пока оформление не станет аккуратным и полным. | |||
# Чтобы не открывать страницу заново после каждой пересборки, можно просто обновлять уже открытую вкладку сочетанием клавиш '''Ctrl+F5'''. | |||
# После завершения работы в проекте ''web-store-database'' сделайте коммит: | |||
#* <code>git add database/*</code> | |||
#* <code>git commit -m "added my superproject"</code> | |||
#* <code>git push</code> | |||
# В веб-интерфейсе своего форка создайте ''pull request''. | |||
# Дождитесь проверки. Если потребуется доработка, в комментариях к ''pull request'' будет указано, что нужно исправить. | |||
=== Возможные проблемы === | |||
==== Ошибка при первом запуске genhtml.py ==== | |||
При первом запуске команда | |||
<code>./genhtml.py -s ./site -d database</code> | |||
может завершиться ошибкой: | |||
<pre> | |||
Traceback (most recent call last): | |||
File "/home/sbraumann/Документы/Project/rosastore/./genhtml.py", line 11, in <module> | |||
import rjsmin | |||
ModuleNotFoundError: No module named 'rjsmin' | |||
</pre> | |||
'''Причина:''' в системе отсутствует модуль ''rjsmin''. | |||
'''Решение:''' | |||
Установите его командой: | |||
<code>pip3 install --user rjsmin</code> | |||
---- | |||
''Продолжение следует.'' | |||
Текущая версия от 17:53, 16 апреля 2026
Опубликовано: 29.10.2025 • Обновлено: 04.04.2026
⚠️ Эта статья находится в разработке. Содержание может измениться.
Веб-магазин
В этой статье описано устройство веб-магазина РОСА, а также способы добавления и редактирования карточек приложений.
Общие сведения
- Веб-магазин не отдаёт пользователю пакеты для скачивания напрямую. Вместо этого он формирует специальную ссылку, которая открывается в программе rpmgrab. Эта программа извлекает из ссылки имя пакета и устанавливает его из репозитория ОС. Таким образом, даже в случае компрометации магазина установка ПО в обход репозитория невозможна.
- Тот же самый магазин без изменений используется также для BFRESH и Бария. Разница только в том, что вместо rpmgrab запускается другая утилита, которая создаёт модули, а не выполняет установку.
- У программ в магазине не указываются версии. Это позволяет не пересобирать страницу после каждого изменения в репозитории, а также использовать один и тот же магазин для разных платформ.
- В текущей реализации страница магазина является статической. Это повышает безопасность, снижает нагрузку на сервер и позволяет использовать магазин локально без запуска локального веб-сервера.
- Для снижения трафика сервер отдаёт небольшую HTML-страницу и базу данных, записанную в JS-файл. Часть содержимого формируется JavaScript-кодом на стороне браузера, а скриншоты подгружаются с использованием механизма lazy loading, то есть загружаются только по мере необходимости.
- HTML-страница и JS-файлы генерируются скриптом на основе базы данных. Эта же база используется для сборки пакета со скриншотами и описаниями для dnfdragora.
- Сама база заполняется в полуавтоматическом режиме на основе данных dnf info и метаданных AppStream.
- Архитектура магазина позволяет сравнительно просто интегрировать и другие способы установки ПО, отличные от dnf. Первый кандидат на интеграцию - epm.
Связанные проекты
- rosastore - генератор страницы магазина: шаблоны HTML, JS и CSS, скрипты обработки скриншотов, а также инструменты сборки магазина из базы данных.
- web-store-database - база данных, на основе которой собирается страница магазина: описания, скриншоты, иконки и другие материалы. Подключается к rosastore как git-сабмодуль.
- metadata - сборка RPM-пакетов:
- metadata-apps - пакет с магазином; может быть установлен локально. Для запуска локального магазина в пакет включён desktop-файл.
- metadata-dnfdragora - пакет с метаданными для dnfdragora, собранными из той же базы данных.
- web-store-desktop - пакет, содержащий только desktop-файл для открытия страницы магазина в браузере по умолчанию. Именно этот пакет устанавливается в системе пользователя для доступа к магазину.
Как добавить приложение в веб-магазин РОСА
Сначала приложение должно быть добавлено в репозиторий. На текущий момент магазин работает только с пакетами, собранными в репозитории.
Этот процесс здесь не рассматривается. После того как пакет появился в репозитории, есть два варианта действий: простой и расширенный.
Простой способ
Можно написать на форум с просьбой добавить приложение в магазин:
Самостоятельное добавление
Можно подготовить карточку приложения самостоятельно и отправить pull request.
- Зарегистрируйтесь на ABF. Регистрация там работает по приглашениям; инвайт может выдать любой пользователь. Например, можно спросить в Telegram-чате ROSA.
- Через веб-интерфейс ABF клонируйте себе проект web-store-database.
- Склонируйте свой форк на локальную машину с помощью git clone.
- Карточки приложений находятся в папке database. Можно:
- создать новую карточку по аналогии с уже существующими;
- воспользоваться вспомогательными инструментами, описанными в файле README в корне проекта.
- Обязательно прочитайте README: в нём описан формат файла app.yml.
- Чтобы проверить, как карточка отображается в магазине, клонируйте генератор магазина: rosastore.
- Скопируйте папку своего приложения из .../web-store-database/database в папку database внутри проекта rosastore. Эта папка используется для тестовых сборок магазина и содержит только часть проектов, поэтому локальная сборка выполняется быстрее.
- Далее выполните команды в корне проекта rosastore:
./genhtml.py -d databasexdg-open ./site/index.html
- Если у вас Zen Browser или отображение идёт не корректно то:
cd ./sitepython3 -m http.server 8000- Перейди по Ссылка
- Проверьте результат в браузере.
- При необходимости повторяйте редактирование карточки и пересборку магазина, пока оформление не станет аккуратным и полным.
- Чтобы не открывать страницу заново после каждой пересборки, можно просто обновлять уже открытую вкладку сочетанием клавиш Ctrl+F5.
- После завершения работы в проекте web-store-database сделайте коммит:
git add database/*git commit -m "added my superproject"git push
- В веб-интерфейсе своего форка создайте pull request.
- Дождитесь проверки. Если потребуется доработка, в комментариях к pull request будет указано, что нужно исправить.
Возможные проблемы
Ошибка при первом запуске genhtml.py
При первом запуске команда
./genhtml.py -s ./site -d database
может завершиться ошибкой:
Traceback (most recent call last):
File "/home/sbraumann/Документы/Project/rosastore/./genhtml.py", line 11, in <module>
import rjsmin
ModuleNotFoundError: No module named 'rjsmin'
Причина: в системе отсутствует модуль rjsmin.
Решение:
Установите его командой:
pip3 install --user rjsmin
Продолжение следует.