ALT Linux Wiki:Песочница:kaftest

Материал из ALT Linux Wiki

Описание разворачивания 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

Ссылки