Jump to content

Веб магазин: различия между версиями

Нет описания правки
м Малые правки
 
(не показано 5 промежуточных версий 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 запускается другая утилита, которая создает модули вместо установки.


* ПО в магазине не имеет версий, это позволяет не пересобирать страницу после каждого изменения в репозитории, а также использовать один магазин для разных платформ.
=== Общие сведения ===


* В текущей реализации страница статична, что одновременно является дополнительной защитой магазина, снижает нагрузку на сервер и позволяет установить Магазин локально без использования локального веб сервера.
* Веб-магазин не отдаёт пользователю пакеты для скачивания напрямую. Вместо этого он формирует специальную ссылку, которая открывается в программе ''rpmgrab''. Эта программа извлекает из ссылки имя пакета и устанавливает его из репозитория ОС. Таким образом, даже в случае компрометации магазина установка ПО в обход репозитория невозможна.
* Тот же самый магазин без изменений используется также для [[BFRESH]] и Бария. Разница только в том, что вместо ''rpmgrab'' запускается другая утилита, которая создаёт модули, а не выполняет установку.
* У программ в магазине не указываются версии. Это позволяет не пересобирать страницу после каждого изменения в репозитории, а также использовать один и тот же магазин для разных платформ.
* В текущей реализации страница магазина является статической. Это повышает безопасность, снижает нагрузку на сервер и позволяет использовать магазин локально без запуска локального веб-сервера.
* Для снижения трафика сервер отдаёт небольшую HTML-страницу и базу данных, записанную в JS-файл. Часть содержимого формируется JavaScript-кодом на стороне браузера, а скриншоты подгружаются с использованием механизма ''lazy loading'', то есть загружаются только по мере необходимости.
* HTML-страница и JS-файлы генерируются скриптом на основе базы данных. Эта же база используется для сборки пакета со скриншотами и описаниями для ''dnfdragora''.
* Сама база заполняется в полуавтоматическом режиме на основе данных ''dnf info'' и метаданных ''AppStream''.
* Архитектура магазина позволяет сравнительно просто интегрировать и другие способы установки ПО, отличные от ''dnf''. Первый кандидат на интеграцию - ''epm''.


* Для снижения трафика  сервер отдает небольшую HTML страницу и базу с данными записанную в js файл, часть страницы с контентом формируется js на стороне браузера, а скриншоты догружаются с использованием механизма  lazy download, то есть грузятся только видимые в данный момент.
=== Связанные проекты ===


* Html cтраница и js генерируются скриптом на основе базы данных, которая одновременно используется для генерации пакета со скриншотами и описаниями для dnfdragora.
* [https://abf.io/soft/rosastore rosastore] - генератор страницы магазина: шаблоны HTML, JS и CSS, скрипты обработки скриншотов, а также инструменты сборки магазина из базы данных.
* Сама база наполняется в полу-автоматическом режиме на основе данных dnf info и appstream метаданных.
* [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-файл для открытия страницы магазина в браузере по умолчанию. Именно этот пакет устанавливается в системе пользователя для доступа к магазину.


* Магазин позволит достаточно просто интегрировать отличные от dnf способы установки софта. Первый на очереди epm.
=== Как добавить приложение в веб-магазин РОСА ===


=== Проекты связанные с магазином ===
Сначала приложение должно быть добавлено в репозиторий. На текущий момент магазин работает только с пакетами, собранными в репозитории.
https://abf.io/soft/rosastore - Генератор страницы магазина (шаблоны для сборки html, js, css, скрипт для обработки скриншотов и из базы данных для магазина)


Этот процесс здесь не рассматривается. После того как пакет появился в репозитории, есть два варианта действий: простой и расширенный.


https://abf.io/soft/web-store-database - База данных по которой собирается страница магазина ( Описания, скриншоты, иконки и т.д.) подключен гит сабмодулем к rosastore
==== Простой способ ====


Можно написать на форум с просьбой добавить приложение в магазин:


https://abf.io/import/metadata - Сборка rpm пакетов:
* [https://forum.rosa.ru/viewtopic.php?t=11774 Обсуждение на форуме]


# metadata-apps - пакет с магазином, можно установить локально, для использования локального магазина в пакете есть десктоп файл.
==== Самостоятельное добавление ====
# metadata-dnfdragora - пакет с метаданными для dnfdragora собранными из той же базы данных
# web-store-desktop - в пакете всего один десктоп файл для открытия страницы магазина в браузере по умолчанию. Именно этот пакет устанавливается в ОС пользователя для доступа к магазину.


=== Как добавить приложение в веб магазин Росы ===
Можно подготовить карточку приложения самостоятельно и отправить ''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'' будет указано, что нужно исправить.


Простой это написать в форум https://forum.rosa.ru/viewtopic.php?t=11774  просьбу добавить приложение,  которое по вашему мнению необходимо в магазине. Интересный -  сделать самому и отправить пулл реквест,  вот об этом подробнее:
=== Возможные проблемы ===


# Нужен аккаунт на https://abf.rosa.ru, регистрация там по инвайтам, приглашение может дать любой пользователь. Просто спросите например тут https://t.me/rosalinux
==== Ошибка при первом запуске genhtml.py ====
# Используя веб интерфейс abf необходимо клонировать гит проект https://abf.io/soft/web-store-database себе.
 
# Используя git clone забираете склонированный проект на свою машину.
При первом запуске команда
# Карточки приложений лежат в папке database. Можно сделать свою "с нуля" по аналогии с прочими, либо использовать вспомогательные инструменты описанные в README в корне проекта.  README в любом случае почитайте, там описан формат app.yml
 
# Теперь нужно проверить как карточка вашего приложения отображается в магазине. Для этого клонируете генератор магазина https://abf.io/soft/rosastore  
<code>./genhtml.py -s ./site -d database</code>
# копируете папку с вашим приложением из ..../web-store-database/database  в папку database внутри проекта rosastore. Это папка для тестовых сборок магазина, там всего несколько проектов, реальный магазин собирается достаточно долго.  Далее команды выполняются в корне rosastore:  
 
#* ./gen_html.py -d database  это создаст страницу в папке .....rosastore/site
может завершиться ошибкой:
#* xdg-open ./site/index.html
 
# Повторяете пункты 4, 6 пока не получится красиво и аккуратно. Чтобы не открывать каждый раз новую страницу в браузере можно вместо второй команды жать ctrl-f5 в открытом магазине в браузере.
<pre>
# В проекте web-store-database делаете коммит
Traceback (most recent call last):
#* git add database/*
  File "/home/sbraumann/Документы/Project/rosastore/./genhtml.py", line 11, in <module>
#* git commit -m "added my supperproject"
    import rjsmin
#* git push
ModuleNotFoundError: No module named 'rjsmin'
# В веб интерфейсе на странице склонированного себе проекта создаете pull request
</pre>
# Ждете когда ваш PR примут либо в комментариях ответят, что нужно исправить чтобы приняли.
 
'''Причина:''' в системе отсутствует модуль ''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.

  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


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