Веб магазин
Опубликовано: 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
Продолжение следует.