Я уже писал про то, как автоматом готовить голые docker-образы Astra Linux. Сегодня расскажу про образы для Ruby и NodeJS, но тут уже не будет готового решения, т.к. весь код показать не можем.
Вместо Ruby может быть что-то другое, но принцип общий.
Нас интересует версия Astra Linux Special Edition 1.7.2. Эта версия является производной (derivative) от Debian 10 Buster, поэтому теоретически, все что работает на buster, будет работать и на Astra Linux 1.7.2.
На момент написания этой статьи уже вышла версия 1.7.3, мы ее еще не тестировали, но логика должна быть похожей.
Docker-образ Ruby
Я пойду по пути наименьшего сопротивления: copy paste driven development:
-
Находим официальный репозиторий Ruby Dockerfile https://github.com/docker-library/ruby.
-
Ищем необходимую версию Ruby и тип релиза buster, в нашем случае это https://github.com/docker-library/ruby/blob/master/3.0/buster/Dockerfile.
-
Копируем файл в свой репозиторий
-
Заменяем
FROM buildpack-deps:buster
на конкретно мой случайARG astra_version=alse-slim-1.7.2-mg8.0.0
FROM ipodsekin/astralinux:${astra_version} -
Дальше скармливаем это сборщику ваших docker-образов (самый простой вариант:
docker build .).
Чтобы проверить работоспособность Ruby, мы потрудились и прогнали unit-тесты из исходников Ruby — ошибок не выявлено, все замечательно.
Docker-образ NodeJS
Вам решать, готовить ли новый образ поверх образа Ruby, делать отдельный, либо засовывать все в один.
Для установки NodeJS необходимо добавить следующие строчки в ваш Dockerfile:
# Выбираем версию NodeJS ARG node_version=12 RUN apt-get update && apt-get install -y debian-keyring curl RUN curl -fsSL "https://deb.nodesource.com/setup_${node_version}.x" | sed 's/DISTRO=\$(lsb_release -c -s)/DISTRO="unnati"/g' | bash - COPY etc/apt/preferences /etc/apt/ RUN apt-get update && apt-get install -y nodejs # Чистим за собой RUN apt-get clean && rm -rf /var/cache/apt/archives/* \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && truncate -s 0 /var/log/*log || true \ && rm -f /etc/apt/sources.list.d/*node* \ && rm -f /etc/apt/preferences
Код требует уточнения в следующих моментах:
-
Официальный установщик NodeJS не содержит логики для Astra Linux Special Edition. Ради интереса откройте в браузере скрипт https://deb.nodesource.com/setup_12.x, вы увидите, что поддерживается лишь вариант Орёл, он же Astra Linux Common Edition, а нашего нет.

Выдержка из кода установщика NodeJS 12 Чтобы это исправить мы в скрипте налету с помощью sed заменяем текущий дистрибутив на первый попавшийся buster — unnati.
Тут просьба разработчикам Astra Linux: скоординируйте, пожалуйста, включение ALSE в официальный установщик nodejs. -
Если мы сразу начнем ставить пакет nodejs, то к нам прилетит старый пакет (на момент написания статьи он был версии 10) из репозитория Astra Linux Special Edition. Есть топорный метод: найти имя пакета с точной версией и поставить именно его, он у вас будет называться как-нибудь nodejs12.12.12debian1 или что-то в этом роде. Причем, эти версии обновляются у nodejs без предупреждения.
Чтобы избежать подобного поведения, мы заставим систему использовать официальный репозиторий nodejs, как более приоритетный.
Для этого в каталог /etc/apt/ скопируем файл preferences со следующим содержимым:Package: *
Pin: origin deb.nodesource.com
Pin-Priority: 950Это позволит сначала загружать одноименные пакеты из deb.nodesource.com, а потом из репозитория Astra Linux, если не найден.
Заключение
Я не решился разбивать статью на две, чтобы не плодить сущности. А используя, описанные подходы можно также подготовить docker-образ Astra Linux с Python или PHP.
Дисклеймер
Ни я, ни моя компания не имеем отношения к производителю операционной системы Astra Linux. Все приведенные примеры предназначены только для образовательных целей.
ссылка на оригинал статьи https://habr.com/ru/post/705860/

Добавить комментарий