ALT Linux Wiki:Песочница:kaftest
Описание разворачивания OSTREE в клиент-сереной архитектуре на основе анализа вызовов OSTREE CoreOSAssembler
Создание архивного репозитория на сервере
В рамках данного подхода рассмотрим клиент-серверную архитектуру, когда архивный репозиторий располагается удаленно и доступен по http-протоколу, например http://ostreeserver/AOS/repo/
.
В нашем случае развернем на сервере apache2-сервер
с корневым каталогом /var/www/html/
.
Формирование корневой файловой системы на сервере
Дерево корневой файловой системы, которую необходимо разметить и поддерживать в ostree-репозитории разместим в каталоге /home/ostreeserver/root/
.
Определим переменную среды
export OstreeServerRoot=/home/ostreeserver/root
Создаем каталог /home/ostreeserver/root
# mkdir $OstreeServerRoot
и размещаем там дерево файловой системы. Это может быть сделано командой
# apt-get install ...
или в рамках создания образа в среде mkimage-profiles
В каталоге $OSTREEHOME/root/
должны присутствовать только: - подкаталоги - файлы - символические Ссылки
Файлы остальных типов (сокеты, устройства, …) должны отсутсвовать.
Узнать список “неподходящих” файлов можно командой:
# find $OstreeServerRoot ! -type f -a ! -type d -a ! -type l
Инициализация архивного OSTREE-репозитория
ostree
поддерживает несколько форматов репозитория: - bare
, - bare-user
, - bare-user-only
, - archive
.
Для серверного репозитория наиболее удобен формат archive
хранит данные в сжатом виде, что уменьшает накладные расходы при передаче репозитория по сети (pull
).
Зададим переменную среды корневого каталога репозитория
export OstreeServerRepo=/var/www/html/AOS/repo/
Переходим к каталог OSTREEHOME
и под пользователем root
выполняем команду:
# ostree init --repo=$OstreeServerRepo --mode=archive
В результате выполнения команды в каталоге $OstreeServerRepo
создаются базовые каталоги архивного репозитория:
repo/ ├── config ├── extensions ├── objects ├── refs │ ├── heads │ ├── mirrors │ └── remotes ├── state └── tmp └── cache
Инициализируется файл конфигурации :
[core] repo_version=1 mode=archive-z2
Все остальные каталоги остаются пустыми.
Наполнение архивного OSTREE-репозитория на сервере
Для наполнения архивного репозитория выполним команду:
ostree commit \ --tree=dir=$OstreeServerRoot \ --repo=$OstreeServerRepo \ -b ostree/1/1/0 \ --owner-uid 0 \ --owner-gid 0 \ --no-xattrs \ --no-bindings \ --parent=none \ --mode-ro-executables
В результаты выполнение команда выводит на стандартный вывод идентификатор комита:
8883a05aa82a22512f1ff389fa227c6451f62b23a148102f9819fceef615ee27
Данный идентификатор записывается в файл $OstreeServerRepo/refs/heads/ostree/1/1/0
указаннои нами ветки ostree/1/1/0
.
Все файлы корневой файловой системы разместятся в каталогах repo/objects/xx
под именами с суффиксом .filez
.
Все директории корневой файловой системы разместятся в каталогах repo/objects/xx
под именами с суффиксом .dirtree
.
Разворачивание репозитория на клиенте
На клиентской машине при разворачивании создается bare
-репозиторий в каталоге /home/ostreeclient/sysroot/
Определим переменную среды
export OstreeClientRoot=/home/ostreeclient/sysroot/
Создадим каталог репозитория и инициализируем его как bare
-репозиторий:
# mkdir $OstreeClientRoot # ostree admin init-fs --modern $OstreeClientRoot
После инициализации репозитория клиента имеет структуру:
sysroot/ ├── boot └── ostree ├── deploy └── repo ├── config ├── extensions ├── objects ├── refs │ ├── heads │ ├── mirrors │ └── remotes ├── state └── tmp └── cache
Локальный bare
-репозиторий будет располагаться в каталоге $OstreeClientRoot/ostree/repo
. Содержимое config
-файла $OstreeClientRoot/ostree/repo/config
:
[core] repo_version=1 mode=bare
Определим URL репозитория удаленного архивного репозитория:
# ostree --repo=$OstreeClientRoot/ostree/repo --no-gpg-verify remote add AOS http://ostreeserver/AOS/repo
Флаг --no-gpg-verify
отключает проверку gpg-подписи при операции pull
.
В config
-файл добавится описание репозитория AOS
:
[core] repo_version=1 mode=bare [remote "AOS"] url=http://ostreeserver/AOS/repo gpg-verify=false
Загрузим архивный удаленный репозитория в локальный:
# ostree pull --repo $OstreeClientRoot/ostree/repo AOS 8883a05aa82a22512f1ff389fa227c6451f62b23a148102f9819fceef615ee27
В каталог $OstreeClientRoot/ostree/repo/object/
помещается разжатый удаленный архивный репозиторий.
Создадим новый ref
для скачанного репозитория:
# ostree refs --repo $OstreeClientRoot/ostree/repo --create alt:alt/x86_64/coreos/stable 8883a05aa82a22512f1ff389fa227c6451f62b23a148102f9819fceef615ee27
В каталоге $OstreeClientRoot/ostree/repo/refs/remotes/
создается файловая структура:
refs/remotes/ └── alt └── alt └── x86_64 └── coreos └── stable
Файл $OstreeClientRoot/ostree/repo/refs/remotes/alt/alt/x86_64/coreos/stable
содержит идентификатор бранча
8883a05aa82a22512f1ff389fa227c6451f62b23a148102f9819fceef615ee27
Инициализируем начальное состояние оперционной системы alt-coreos
:
# ostree admin os-init alt-coreos --sysroot $OstreeClientRoot ostree/deploy/alt-coreos initialized as OSTree root
В поддиректории $OstreeClientRoot/ostree/deploy/alt-coreos/
создается каталог var/
с начальной файловой структурой:
ostree/deploy/alt-coreos/ └── var ├── lib ├── lock -> ../run/lock ├── log ├── run -> ../run └── tmp
Развернем репозиторий в каталог :
# ostree admin deploy \ alt:alt/x86_64/coreos/stable \ --sysroot $OstreeClientRoot \ --os alt-coreos error: Failed to find kernel in /usr/lib/modules, /usr/lib/ostree-boot or /boot
После разворачивания создастся каталог $OstreeClientRoot/ostree/deploy/alt-coreos/deploy/8883a05aa82a22512f1ff389fa227c6451f62b23a148102f9819fceef615ee27.0/
в котором будет развернуто дерево целевой файловой системы:
/home/ostreeclient/sysroot/ostree/deploy/ └── alt-coreos ├── deploy │ └── 8883a05aa82a22512f1ff389fa227c6451f62b23a148102f9819fceef615ee27.0 │ ├── bin │ ├── boot │ │ └── grub │ ├── dev │ ├── etc │ │ ├── alternatives │ │ ├── bash_completion.d ... │ ├── home │ ├── lib │ │ ├── binfmt.d │ │ ├── cryptsetup ... │ ├── lib64 │ │ ├── iptables │ │ └── security │ ├── libx32 │ ├── media │ ├── mnt │ ├── opt │ ├── proc │ ├── root │ │ └── tmp │ ├── run │ ├── sbin │ ├── selinux │ ├── srv │ ├── sys │ ├── tmp │ ├── usr │ │ ├── bin │ │ ├── etc ... │ │ └── tmp -> ../var/tmp │ └── var │ ├── adm │ ├── cache ... └── var ├── lib ├── log └── tmp