В 100% последних проектов мы используем docker и kubernetes, поэтому, повстречавшись с "особым" путем использования базовых docker-образов AstraLinux, мы решили упростить жизнь себе и другим разработчикам.
Кому лень читать дальше, то образы здесь https://hub.docker.com/r/ipodsekin/astralinux.
А кому интересны подробности, добро пожаловать под кат.
"Особый" путь
Разработчик AstraLinux предоставляет готовые docker-образы, которые вы можете использовать в своих проектах.
Для этого вы можете зайти на сайт https://vault.astralinux.ru/images/, найти интересующий вас дистрибутив скачать его в виде... tar-архива и загрузить на ваш Docker Host и импортировать его на ваш Docker Host (оптимизация по комментариям @kozlyuk). Это делается командой:
docker import $BASE_URL$IMAGE_FILE $CI_REGISTRY_IMAGE:$TAG
Полагаю, что данный способ отличается от того, к чему привыкли разработчики, просто указывая наименование docker-образа в Dockerfile:
FROM ubuntu:22.04
...
Манипуляции с tar-архивами усложняют CI/CD, заставляют создавать промежуточные Docker Registry, а также делают неочевидным автоматическое обновление базовых образов.
А когда разрабатываем совсем простые образы, то мы просто на docker.com указываем автоматическую сборку: Docker Hub сам скачивает исходники, собирает образ, проверяет на уязвимости, а потом еще и webhook пришлёт вдогонку. Ясно, что tar-архивы идут мимо.
Путь самурая
Мы разработали скрипт https://gitlab.com/cloudlab_ru/astralinux, который позволяет скачивать tar-архивы docker-образов и публиковать их в Docker Hub. Самым очевидным решением было создать bash-файл со ссылками, прибитыми гвоздями, но тогда нужно было бы заходить на сайт, проверять наличие нового или обновленного образа (с тем же тэгом), обновлять bash-файл руками и т.п. Этот путь тоже "особый".
Был написан парсер в одну строку, который вытаскивал имена SHA-хэшей образов.
Затем, проходимся в цикле по ссылкам, скачиваем SHA-файл и проверяем, что у нас до этого не было образа с таким же SHA-хэшем. При этом сам tar-файл не проверяем на SHA, считаем, что разработчик все делает правильно. Так вот, если у нас не было такого файла, то скачиваем архив, импортируем в локальный Docker Host, а затем заливаем в Docker Hub имени меня https://hub.docker.com/r/ipodsekin/astralinux.
После этого мы можем уже свободно скачивать образ
docker pull ipodsekin/astralinux:orel-slim-2.12.45-mg7.1.0
или использовать его в качестве базового в вашем Dockerfile:
FROM ipodsekin/astralinux:orel-slim-2.12.45-mg7.1.0
...
Наш скрипт запускается раз в день и заливает обновления в Docker Hub.
Проверка
Создаем тестовый образ с curl:
FROM ipodsekin/astralinux:orel-slim-2.12.45-mg7.1.0
RUN apt-get update && apt-get install curl -y
Собираем его:
docker build . -t astralinuxtest
Запускаем контейнер и заходим в него:
docker run -it astralinuxtest /bin/sh
Проверяем версию AstraLinux и убеждаемся, что именно та, которую хотели (UPD: исправлено по комментариям @qrick):
# cat /etc/astra_version
CE 2.12.45 (orel)
Ну, и для проформы можно протестировать curl внутри:
curl https://www.google.com/
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang...
...
Образ работает, можно использовать.
Мы потратили примерно два часа на создание скрипта и написание этой статьи. Будет здорово, если разработчик ОС последует нашему примеру и выложит официальные образы в удобном виде.
Комментарии (25)
kozlyuk
13.10.2022 18:13+4cat alse-slim-1.7.1-docker-mg7.0.0.tar| docker import - alse/alse1.7.1
Во-первых, stop cat abuse! ©, во-вторых, docker import умеет принимать URL файла, что снизит использование диска. Надеюсь, образы выложат в registry и заодно подпишут их.
qrick
13.10.2022 18:22+1Мы убили минут 10 времени на перепроверки, но, нет, все верно, это Ubuntu, но AstraLinux.
Так контейнер не подменяет хостовое ядро. Что именно вы перепроверяли?
WondeRu Автор
13.10.2022 18:32+1Спасибо, что обратили внимание. Искренне считал, что uname покажет ОС контейнера, посыпаю голову пеплом. Исправлю.
snakers4
13.10.2022 19:14+1Думаю разработчики OC рано или поздно сделают свой registry, но честно говоря не совсем понимаю, зачем скачивать базовый образ ОС с репозитория третьей стороны, если как заметили выше можно просто сделать:
docker import $BASE_URL$IMAGE_FILE $CI_REGISTRY_IMAGE:$TAG
и потом уже в своём реестре наследовать образы.
Ну конечно кроме рекламы Gitlab и / или услуг автора статьи.
А про https://vault.astralinux.ru/images/ не знал, большое спасибо, это реально полезно, странно что в оф. документации на это просто ссылки нет ...
snakers4
13.10.2022 19:22Еще из интересного - по ссылке https://vault.astralinux.ru/images/alse/ - видно кому из вендоров они собирали какой-то кастом (может умельцы смогут быстро понять, чем они отличаются).
Ну и что еще странно - по идее версия alse платная, а архивы для
docker
просто скачиваются и разархивируются без пароля.snakers4
13.10.2022 19:26Чисто ради интереса посмотрел хеши в папках для разных вендоров хостинга для одной версии - они разные.
WondeRu Автор
13.10.2022 22:10+2rhel образы тоже можно скачивать, но софт от этого не становится лицензионным)
Evengard
14.10.2022 05:56+1А не нарушает ли такой перезалив какие-нибудь лицензионные соглашения?
mylitsyn
14.10.2022 09:35-2не исключено)
kozlyuk
14.10.2022 14:38+2От представителя компании ожидался бы не бесполезный двусмысленный комментарий, а авторитетный ответ на вопрос или хотя бы "спросил юристов про лицензию, сказал менеджерам про реестр", что уже было бы здоровым вниманием к сообществу, даже если юристы и менеджер в итоге скажут "нет".
mylitsyn
14.10.2022 14:47+33.1. Пользователь обязуется не осуществлять самостоятельно и не создавать условия третьим лицам для осуществления следующих действий:
3.1.3. Распространять ПО в пользу третьих лиц на возмездной или безвозмездной основе...
WondeRu Автор
14.10.2022 15:34+1Так закрывать docker, gitlab и удалять статью? Если да, пришлите, пожалуйста, запрос с официального ящика на email, указанный в gitlab-репозитории.
AstraLinux_Group
14.10.2022 16:39+1Действительно, данный вопрос лежит в юридической плоскости. Мы обязательно вернемся с оптимальным вариантом решения. Спасибо за статью.
snakers4
14.10.2022 17:39+3@AstraLinux_Group
Уважаемые разработчики Астры,
Обращаюсь к вам публично как завсегдатай Хабра и человек, активно использующий докер билды в работе.
Если отбросить все притворные ужимки по поводу "отечественного ПО", то мы живем в интересное время и более дружелюбная (где хотя бы кто-то активно сканирует закладки) к нашим разработчикам ОС, которая соответствует каким-то там критериям безопасности (я не супер спец в этом) - объективно нужна.И то, что она основана на Debian - это просто прекрасно (если вы можете обеспечить эту самую безопасность на уровне =) ). Понятно, что без полного вертикально интегрированного процесса от дизайна до производства чипов мы далеки от суверенитета.
Я прочитал вашу лицензию и прекрасно понимаю, почему там все так написано. Скорее всего всё делалось усилиями команды энтузиастов, вы сводили до недавнего времени концы с концами (думаю меня поправят знатоки в ответе на комментарий).
Но честно говоря и ваши ответы, лицензия и "спрятанные" docker-образы (на vault ссылки в документации у вас нету) - неправильные (должно быть условно FROM bla-bla astra). Вы должны с одной стороны стричь купоны с корп. клиентов, а с другой добиваться, чтобы каждый утюг в нашей стране использовал вашу ОС в качестве базовой (я утрирую). Как вы этого добьетесь - я не знаю.
Заход в хостинги - объективно правильный, тут вы супер круто сделали. Я был приятно удивлен.
Все ОС за редким исключением сейчас уже давно стали условно бесплатными и вы явно в проигрышной позиции, у вас сильно меньше ресурсов и времени. Но это не повод так отвечать своим пользователями, которые хотели добра для всех.
Комментарий по поводу того, что ОС нельзя ни в коем случае качать не с ресурса официального разработчика (и он очевидно так рекламирует свои услуги) я добавил выше. Но в этом нет ничего плохого. Коммунизм уже развалил недавно покинувший нас "товарищ".
Поэтому просто человеческая просьба - будьте проще и добрее к пользователям. И они к вам потянутся.
Johan_Palych
14.10.2022 20:37Цены на лицензирование
https://astralinux.online/
По Astra Linux:
Astra Linux is the Russian Debian derivative. Debian derivative model: rebuilds all Debian source packages, modifies some source packages and adds new packages https://wiki.debian.org/Derivatives/Census/AstraLinux --- Linux Kernel Organization, управляемая The Linux Foundation, разместила в 2019 г. официальное зеркало Astra Linux https://mirrors.kernel.org/astra https://mirrors.edge.kernel.org/astra/
s207883
15.10.2022 21:43Разве выкладывание на докерхаб будет противоречить вашей лицензии? Удобство использования увеличится на порядок и тем самым поспособствует продвижению ос в массы.
Если не хочется использовать докерхаб как недружелюбную и неподконтрольную площадку, то можно развернуть свой с использованием какого-нибудь Harbor. Образы ведь так и так доступны.
jingvar
16.10.2022 09:07+1А зачем ссать против ветра? Не хочет вендор быть лицом к народу, так не используйте его продукт.
Какая угроза жизни и здоровью заставляет использовать астру? Работы мало на рынке чтобы вот так нагибаться?
OrkBiotechnologist
16.10.2022 15:51Почему Docker, а не Podman?
Почему Астра, а не любой другой дистр?
Преимущество только в том, что его сертифицировали и дали государственную бумажку с одобрением к использованию?WondeRu Автор
16.10.2022 15:53Мы делаем проекты в том числе для окологосударственных компаний, поэтому сейчас новые проекты идут на Астре и Альте. А по поводу подмана: мы дальше живем на кубере, лучше него ничего нет.
9ella
16.10.2022 15:53+1Говорят, в 20-ом релизе НСА заставила их добавить листенер, так что не совсем ясно насколько защищена Астра под новым докером...
Ares_ekb
Спасибо! Как-раз на днях был нужен образ. Я нашёл только инструкцию как в Astra Linux сделать Docker образ Astra Linux, безуспешно попробовал адаптировать скрипт под Ubuntu и завис на установке Astra Linux :)
Johan_Palych
Дело не в скрипте а в симолической ссылке в debootstrap
Пакет debootstrap есть в этих дистрибах
Ares_ekb
Спасибо, заработало! Единственное в скрипте build-docker-image.sh из инструкции заменил docker.io на docker-ce-cli.
Может мне кто-нибудь поможет разобраться с ещё одной проблемой?.. Вообще мне нужно было запустить одно приложение, но на Ubuntu оно выдаёт ошибку "error while loading shared libraries: libparsec-base.so.3: cannot open shared object file: No such file or directory". На сколько я понимаю этот файл из пакета libparsec-base2. Но в обоих докер образах (из статьи, и в сделанном по инструкции) следующая команда выдаёт ошибку, что пакет не найден: apt-get install libparsec-base2. Он из какого-то секретного репозитория или я чего-то не понимаю...