[devel-distro] Пример файла разметки и описания
Leonid Krivoshein
klark.devel at gmail.com
Thu Oct 10 04:01:15 MSK 2024
On 10/10/24 01:08, Leonid Krivoshein wrote:
>> [...]
>>> По результатам обсуждения я сформулировал следующие тезисы:
>>> 1. Графический интерфейс инсталлятора представляет собой конфигуратор,
>>> который создаёт сценарий автоустановки (kickstart-файл)
>> Я не считаю, что у нас возможна совместимость с redhat в этом вопросе.
>> Поэтому я предлагаю придумать этому файлу другой формат и название.
>> Взяв у коллег лучшее, естественно.
>>
>> Формат должен быть документирован, его корректность и наличие
>> всех необходимых полей должны быть проверяемы программно (т.е.
>> нужна схема).
>
> Да. Yaml. СхемЫ тоже на Yaml. Есть возражения? Во множественном, т.к.
> модульность, схемы будут разделены по пакетам. Важна строгая
> типизация, давно обсуждали это и кажется Иван Захарящев даже что-то
> делал для этого с woo.
>
Разметка дисков -- существенная часть установщика. Давно хочу написать
этот бэкенд и уже примеряюсь к инструментарию, хотя архитектура Volume
Slicer (vs) созрела окончательно в прошлом году.
Всегда считал, что описание разметки -- весьма непростая сущность, оно
не обязано быть в том же формате, что и файл ответов, хотя служит тем же
целям. Если вдруг это совпадёт, будет здорово, можно вложить одно
Yaml-дерево в другое, но всегда можно использовать просто ссылку на
отдельный файл.
Для предметного обсуждения приложил пару файлов одной и той же
развесистой разметки и краткое описание основных разделов. Ключи в
описаниях блочных сущностный должны просто соответствовать длинным
опциям, создающим эти блочные сущности. К примеру, "homehost: FIXED" в
файле разметки превратится в "--homehost FIXED" при вызове mdadm. Такой
подход позволяет полностью сохранить семантику при работе с внешними
утилитами.
Для проверки схемы используется pydantic. Выбирал из десятка похожих
проектов. В результате схема описывается где-то в Yaml-файлах, где-то
прямо в коде. Пример рабочих сниппетов для лучшего понимания:
def to_kebab(s: str) -> str:
return s.replace('_', '-')
...
class Filesystem(BaseModel):
id: int | None = None
fstype: str | None = None
label: str | None = None
uuid: UUID | None = None
no_discard: bool | None = None
model_config = ConfigDict(
alias_generator=AliasGenerator(
validation_alias=to_snake,
serialization_alias=to_kebab,
)
)
def model_post_init(self, __context: Any) -> None:
if self.fstype is None:
self.fstype = self.__class__.__name__
self.id = id(self)
@model_validator(mode='after')
def check_fstype(self) -> Self:
print(f'fields of the {self.fstype} filesystem are checked')
return self
...
class vfat(Filesystem):
uuid: str | None = Field(
default=None,
min_length=9,
max_lenght=9,
pattern=r'^[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}$'
)
...
Сама разбивалка должна получиться не очень сложной, т.к. используется
много внешнего и готового. Например, для чтения используется lsblk с
выводом в json, pyudev, нативные утилиты, типа dumpe2fs. Ближайшее
чем-то похожее решение -- blivet, который немного залочен на RedHat и
построен вокруг libblockdev. При желании его можно использовать, в
Debian смогли прикрутить. Ещё чем-то очень отдалённо напоминает
libstorage-ng, которая использует DOM/XML-дерево (XML-файл разметки).
--
WBR, Leonid Krivoshein.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: condtree.yaml
Type: application/x-yaml
Size: 5880 bytes
Desc: not available
URL: <http://lists.altlinux.org/pipermail/devel-distro/attachments/20241010/9162968a/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: exp-list.yaml
Type: application/x-yaml
Size: 7202 bytes
Desc: not available
URL: <http://lists.altlinux.org/pipermail/devel-distro/attachments/20241010/9162968a/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: layout-ru.md
Type: text/markdown
Size: 12920 bytes
Desc: not available
URL: <http://lists.altlinux.org/pipermail/devel-distro/attachments/20241010/9162968a/attachment-0002.bin>
More information about the devel-distro
mailing list