Jump to content

Веб магазин

Опубликовано: 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.

  1. Зарегистрируйтесь на ABF. Регистрация там работает по приглашениям; инвайт может выдать любой пользователь. Например, можно спросить в Telegram-чате ROSA.
  2. Через веб-интерфейс ABF клонируйте себе проект web-store-database.
  3. Склонируйте свой форк на локальную машину с помощью git clone.
  4. Карточки приложений находятся в папке database. Можно:
    • создать новую карточку по аналогии с уже существующими;
    • воспользоваться вспомогательными инструментами, описанными в файле README в корне проекта.
  5. Обязательно прочитайте README: в нём описан формат файла app.yml.
  6. Чтобы проверить, как карточка отображается в магазине, клонируйте генератор магазина: rosastore.
  7. Скопируйте папку своего приложения из .../web-store-database/database в папку database внутри проекта rosastore. Эта папка используется для тестовых сборок магазина и содержит только часть проектов, поэтому локальная сборка выполняется быстрее.
  8. Далее выполните команды в корне проекта rosastore:
    • ./genhtml.py -d database
    • xdg-open ./site/index.html
  9. Если у вас Zen Browser или отображение идёт не корректно то:
    • cd ./site
    • python3 -m http.server 8000
    • Перейди по Ссылка
  10. Проверьте результат в браузере.
  11. При необходимости повторяйте редактирование карточки и пересборку магазина, пока оформление не станет аккуратным и полным.
  12. Чтобы не открывать страницу заново после каждой пересборки, можно просто обновлять уже открытую вкладку сочетанием клавиш Ctrl+F5.
  13. После завершения работы в проекте web-store-database сделайте коммит:
    • git add database/*
    • git commit -m "added my superproject"
    • git push
  14. В веб-интерфейсе своего форка создайте pull request.
  15. Дождитесь проверки. Если потребуется доработка, в комментариях к 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


Продолжение следует.