- PVSM.RU - https://www.pvsm.ru -
pgAdmin 4 - де-факто стандартный GUI-клиент для PostgreSQL.
Он активно развивается, официально поддерживается на Debian и… при этом на Arch Linux с Desktop-версией всё стабильно плохо.
На момент написания статьи в AUR есть несколько пакетов pgAdmin4 Desktop, но ни один из них:
не собирается стабильно,
не переживает обновления Python / Electron,
или требует ручных правок после установки.
В этой статье я хочу расс��азать:
почему pgAdmin4 Desktop так плохо ложится на Arch,
какие решения обычно ломаются,
и какой компромиссный, но рабочий вариант в итоге получился у меня.
Архитектурно pgAdmin4 Desktop - это:
backend на Python (Flask + остальные зависимости),
frontend на JavaScript,
desktop-обвязка на Electron,
и жёсткое предположение upstream, что всё это запускается из virtualenv.
Для дистрибутивов Debian based это не проблема:
там спокойно живут venv внутри /usr/lib.
Но из за того что разрабы на Arch Linux положили большой и длинный... Это сразу конфликтует с "философией":
system Python - один,
пакеты должны быть воспроизводимы,
runtime-загрузки и auto-updaters не приветствуются.
Если коротко, основные причины такие.
Upstream pgAdmin ожидает путь вида:
venv/bin/python3
Любая попытка «подменить» это без патчей приводит к:
падениям,
сломанному PYTHONPATH,
несовместимости после обновлений Python.
Многие пакеты:
либо тянут свой Electron,
либо не переживают обновление system Electron.
Некоторые сборки:
скачивают зависимости при первом запуске,
или делают это через yarn/npm.
Это ломает воспроизводимость и доверие к пакету.
Я хотел получить пакет, который:
собирается из upstream source
использует system Electron
использует system Python в runtime
не качает ничего при запуске
воспроизводимо собирается в clean chroot
не требует ручных правок после установки
Самое важное архитектурное решение:
virtualenv используется только при сборке,
а в runtime — обычный/usr/bin/python3.
Как это реализовано:
Во время build():
создаётся временный venv,
туда устанавливаются все Python-зависимости pgAdmin.
В package():
содержимое site-packages копируется в /opt/pgadmin4-native/python-packages,
сам venv в пакет не попадает.
В runtime:
PYTHONPATH указывает на этот каталог,
Python системный.
Таким образом:
зависимости изолированы,
system Python не загрязняется,
pgAdmin видит именно те библиотеки, которые ему нужны.
pgAdmin Desktop — это:
Electron-приложение,
с собственным layout,
со своей логикой запуска.
Размещение в /opt/pgadmin4-native позволяет:
не смешивать файлы с системой,
не имитировать структуру обычного Python-пакета,
честно признать, что это application bundle.
К сожалению, без патчей не обойтись.
В процессе сборки:
жёсткие пути вида /venv/bin/python3 заменяются на /usr/bin/python3,
относительные пути до pgAdmin4.py заменяются на абсолютные.
Это делается простыми sed патчами на этапе build
и хорошо воспроизводимо в clean chroot.
В пакете:
нет встроенного Electron,
используется electron34 из репозиториев Arch.
Если в будущем версия Electron изменится — это будет видно сразу,
а не через "тихие" runtime-баги.
Итоговый пакет:
pgadmin4-desktop-native
AUR: https://aur.archlinux.org/packages/pgadmin4-desktop-native [1]
GitHub: https://github.com/IlyaP358/pgadmin4-desktop-native [2]
На текущий момент он:
протестирован на vanilla Arch и CachyOS,
собирается в clean chroot,
запускается без runtime-загрузок,
переживает обновления Python и Electron (в пределах совместимости upstream).
Да, этот пакет:
не использует system site-packages,
не использует runtime virtualenv,
и не вписывается идеально в абстрактную модель.
Но он:
работает,
воспроизводим,
и хотя бы решает проблему пользователей.
pgAdmin4 Desktop на Arch Linux - это пример того,
как upstream-архитектура и философия дистрибутива могут конфликтовать.
Иногда, чтобы получить стабильный результат, приходится:
принимать компромиссы,
ставить костыли
и брать ответственность за то что наворотил.
Если этот пакет окажется полезным, я буду очень рад.
Если у вас есть идеи, как сделать его лучше без потери стабильности я всегда открыт для pull requests =] и обсуждение приветствуются.
Автор: IlyaP358
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/444776
Ссылки в тексте:
[1] https://aur.archlinux.org/packages/pgadmin4-desktop-native: https://aur.archlinux.org/packages/pgadmin4-desktop-native
[2] https://github.com/IlyaP358/pgadmin4-desktop-native: https://github.com/IlyaP358/pgadmin4-desktop-native
[3] Источник: https://habr.com/ru/articles/996696/?utm_source=habrahabr&utm_medium=rss&utm_campaign=996696
Нажмите здесь для печати.