[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