[sisyphus] I: система загрузки CoLaBoot
Michael A. Kangin
mak на complife.ru
Вс Мар 18 23:59:24 MSK 2018
С позволения Павла запощу сюда, будущей документации ради :)
On 03/18/2018 07:46 PM, Pavel Vainerman wrote:
> Пытаюсь разобраться как создавать образы.
> У меня правда p8, но colaboot-utils я себе собрал нормально.
Я тоже всё делал под P8. Сорри, мне сейчас после долгой возни с этим
проектом многие вещи кажутся сами-собой разумеющимися и я еще не
добрался их задокументировать по-человечески.
> Столкнулся с тем, что examples не работают.
>
> В sources.list прорвались локальные адреса.
> rpm [p8] http://192.168.123.1/ALTLinux p8/x86_64 classic
> rpm [p8] http://192.168.123.1/ALTLinux p8/x86_64-i586 classic
> rpm [p8] http://192.168.123.1/ALTLinux p8/noarch classic
Это из кастомизированных конфигов apt,
/usr/share/doc/colaboot-utils-0.5/examples/docker/apt/
в частности
examples/docker/apt/sources.list
Мне для сборок нужно было заюзать локальный репозитарий, чтобы он был
доступен (только на время сборки!) внутри докер-контейнеров, и я
выкрутился следующим образом: сделал локальный репозитарий доступным по
http, и нарисовал функцию APT-INIT в docker-functions, которая копирует
эту копию апт-конфига внутрь контейнера, и дальше работа идёт с этой
копией. А после сборки функция APT-CLEAN вычищает эти временные конфиги
из контейнера, и в итоговом имидже они оставаться не должны.
Если такая схема работы не подходит, попробуйте модифицировать APT-INIT
под свои условия. Учитывая, что прочие APT-функции хотят сейчас видеть
конфигурацию в /usr/local/share/apt, может стоит делать симлинк на
настоящую конфигурацию.
> В docker недоступные (по крайней мере я не нашёл на
> https://hub.docker.com/) образы
>
> altlinux-p8-clb-base
> altlinux-p8-clb-xxxx
Да, я их не заливал.
-base образ я готовил методом импорта: в mkimage-profiles нашёл
более-менее близкую мне цель сборки, ve/systemd-bare, и собрал там с
минимальными модификациями:
В conf.d/ve.mk:
ve/clb: ve/systemd-bare use/deflogin/desktop
@$(call add,BASE_PACKAGES,iconv htop)
получившийся ~/out/clb-latest-x86_64.tar импортировал в докер как base
image
(https://docs.docker.com/develop/develop-images/baseimages/#create-a-full-image-using-tar):
# docker import -c 'CMD ["/bin/bash"]' clb-latest-x86_64.tar
altlinux-p8-clb-base
Вот, как-то так. А остальные образы уже изготавливались с помощью
.docker-make файлов.
Докеровский нативный метод с помощью dockerfile меня не удовлетворил:
там создаётся какое-то адское количество промежуточных образов, что для
CLB совершенно не нужно (или файл совершенно теряет в читабельности,
если пытаться упихнуть все заклинания в одну строчку). Готовых рецептов
по мержу я не нагуглил, свой написать порывался, но решил лучше не лезть
куда не надо. :)
И, эмулировав несколько функций и дописав свои, решил делать контейнеры
с помощью визуально похожих на dockerfile'ы обычных скриптов.
Базовый образ в виде .tar я тоже залил на всякий случай:
http://mak.complife.ru/colaboot/clb-20180220-x86_64.tar
>
> Хотелось бы больше примеров и документации )
Ну вот со временем наработается :)
Сейчас выложил всё, что у меня было.
> Я попробовал просто как пример подправил образ на тот который у меня
> есть. Запустил (по root) и получил ошибку
Я очень подозреваю, что тут нужен докер, настроенный на использование
overlayfs:
https://docs.docker.com/storage/storagedriver/overlayfs-driver/
Обратите внимание, там у overlayfs нелюбовь к XFS, отформатированной без
d_type=true - криво файлы стираются. Чтобы не переформатировать всё и
вся, можно подсунуть в /var/lib/docker специально приготовленный
файл-имидж с ext4 или правильно-отформатированной xfs.
>
> [root на pvbook mm]# docker2squash fotengauer/altlinux-p8
> Looking docker objects for "fotengauer/altlinux-p8"...
> Selected object:
> sha256:f6ab513a2bef9d8a624e8dbaf429f5cd29e204adf160d1f871cd4e7d43f05e28
> Type: image; Name: fotengauer_altlinux-p8
Кстати, я хоть и попытался превратить / в _, но не проверял, как в итоге
получится. Обратите внимание на имена создаваемых файлов.
> Can't locate UpperDir for object
Очевидно как раз из-за отсутствия overlayfs.
docker inspect fotengauer/altlinux-p8 должен вернуть значения для
GraphDriver->Data->UpperDir
В принципе, для diff (и может chain) режима можно наверное будет
сделать, чтобы использование других сторадж-драйверов тоже понималось,
но для merged оно точно будет критически-необходимым.
Подробная информация о списке рассылки Sisyphus