Astra Linux SE Орёл | Обучение системе через боль
Как запустить свежий Playwright на старом Astra Linux Special Edition, не сломав систему
Дисклеймер: всё описанное — реальный опыт автора, решившего освоить отечественную доступную широкому кругу пользователей ОС в условиях, приближенных к боевым; статья сгенерирована нейросетью на основе проведённой совместной с автором работы, ссылка на подробную инструкцию.
Исходные данные
Astra Linux SE (Орёл), база Debian 9, glibc 2.17 Система стара как мир, но трогать её нельзя — обновление glibc гарантированно превратит рабочую станцию в кирпич. При этом душа просит современного инструментария: Python 3.14, Playwright, визуальное тестирование браузеров.
Первая кровь: Node.js и зависимости
Попытка playwright install обрушилась с ошибками о неудовлетворённых версиях GLIBC 2.25, 2.27, 2.28 и CXXABI. Встроенный в пакет бинарник Node был собран под более свежую libc. Решили подменить Node на версию, собранную со старым glibc. Через nvm и неофициальные сборки нашли Node 18 под glibc 2.17 — Playwright перестал ругаться на Node, но браузеры всё равно не запустились. Оказалось, современный Chromium (даже в Playwright 1.45) требует getrandom@GLIBC_2.25.
Боль усиливается: библиотеки
Система честно сообщала: отсутствуют libgtk-4.so.1, libgraphene-1.0.so.0, icu 74 и ещё десяток библиотек. Родной apt ничем помочь не мог — пакеты не найдены. Идея подложить недостающие .so из Ubuntu 24.04 через LD_LIBRARY_PATH разбилась о грабли транзитивных зависимостей и всё той же glibc. Откат на старый Playwright с Node 16 не помог: браузеры всё равно хотят glibc ≥ 2.25.
Принятие
Стало очевидно: современный браузерный движок напрямую на glibc 2.24 не завести. Но сдаваться не в наших правилах. Решение — контейнеризация. Docker (или Podman) позволяет запустить Ubuntu 24.04 внутри старой Astra, не прикасаясь к системным библиотекам. Так мы получаем и нужную glibc, и все зависимости.
Рецепт победы
- Установили Docker из штатного репозитория Astra. - Написали Dockerfile на базе ubuntu:24.04, установили туда Python, Node, uv, xvfb и все необходимые пакеты (включая хитрый libasound2t64 вместо libasound2). - Собрали образ: docker build -t playwright-astra . - Для визуального режима пробросили сокет X11: docker run ... -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY - На хосте выполнили xhost +local:, чтобы разрешить контейнеру доступ к дисплею. - Внутри контейнера тесты запускаются через uv run python test_browser.py (headless по умолчанию) или с headless=False для отображения на родном рабочем столе Astra.
Неожиданные грабли
- При сборке образа вылезла ошибка externally-managed-environment — поправили установкой uv через официальный скрипт, а не через pip. - Не хватало места в /var/lib/docker — перенесли хранилище на другой раздел через data-root в daemon.json. - Docker кешировал старые слои. Вылечили флагом --no-cache.
Итог
Мы получили полностью рабочее окружение: свежий Playwright, Chromium, Firefox, WebKit — и всё это на отечественной ОС, которую не пришлось калечить. Визуальная отладка работает как часы. Контейнер изолирует риски и делает проект переносимым. На фото — запущенный из контейнера Chromium с простым открытием страницы.
Да, путь был тернист. Но именно через такую боль приходит настоящее понимание системы. Astra показала характер, мы — упорство. Рекомендую каждому патриоту пройти этот квест: после него любая другая система покажется детской песочницей. А полученные навыки контейнеризации и обхода ограничений останутся с вами навсегда.
Astra — сурова, но справедлива. Орёл не сдаётся!
· 29.05
upd
В процессе эксплуатации выснилось, что при использовании контейнера монтируется вся папка с проектом (vscode), включая .venv. Тем самым при запуске тестов контейнер подменяет путь к интерпертатору на линк в контейнер и после первого же запуска среда разработки теряет интерпретатор.
Чтобы решить эту проблему (в vscode) нужно создать два виртуальных окружения - один интерпретатор будет занят контейнером, второй - средой разработки.
Я пользуюсь пакетным менеджером uv.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён