Rescue/Deploy/system-profile
system-profile
Менеджер профилей оборудования и развёртывания — вспомогательная утилита, дополняющая system-restore, предназначенная для простого и удобного управления профилями. Вкратце, зачем это нужно, поясняется в этом разделе.
Профили оборудования и развёртывания system-restore
Рядом с бэкапами эталонной системы может находиться каталог «profiles» с т.н. «профилями». Профиль — это заранее созданный подкаталог внутри «profiles» с дополнительными файлами, позволяющими определить принадлежность текущей машины к определённому классу оборудования, а также выполнить развёртывание на конкретном оборудовании с учётом его особенностей и/или с учётом потребностей для решения конкретных задач.
Другими словами: если основной каталог с файлами бэкапа содержит набор настроек, пользовательские «хуки», файлы для переноса в целевую систему при развёртывании (т.н. «оверлей»), то профиль может содержать ещё один набор «уточняющих» настроек, «хуков» и дополнительных файлов, применяемых только в каких-то особых случаях или только на определённом оборудовании. Профиль может и не содержать ничего дополнительного для развёртывания, а использоваться просто для автоматической идентификации оборудования.
Профиль оборудования однозначно определяет, для какого «железа» предназначена деплойная система, тогда как профиль развёртывания как бы «уточняет», как именно будет выполняться развёртывание, эти профили могут быть объединены в один профиль или просто связаны между собой. Если профиль определён каким-либо способом, его имя выводится в самом начале развёртывания.
При запуске системы развёртывания профиль либо не используется совсем, либо определяется автоматически, либо указывается непосредственно. Последнее можно выполнить одним из трёх способов: через аргументы командной строки (--profile=), в общем конфигурационном файле (/etc/system-restore/restore.conf) и в конфигурации бэкапа (sysrest.ini). Если профиль указан непосредственно, system-restore не будет пытаться определять его автоматически, она будет его сразу использовать. Никакой привязки к «железу» в этом случае не выполняется, мы просто говорим деплойной системе: «работай с таким-то уточняющим вариантом развёртывания».
Если профиль нигде не указан, система развёртывания попытается определить его автоматически. И если его не удалось определить, двигается дальше, при этом дополнительные файлы профиля просто не используются. При включенном параметре profile_required, когда профиль не задан или его не получается определить автоматически, напротив, развёртывание не состоится и программа завершится фатально. По умолчанию этот параметр выключен. Другими словами: по умолчанию профиль необязателен, если его удаётся определить и он имеется, только тогда он используется. Но можно сделать использование профиля обязательным, включив параметр profile_required. Мы рекомендуем установить profile_required=1 и использовать именно такой вариант для «боевых» стиков.
Машинные и общие профили system-profile
В отличии от system-restore, менеджер профилей system-profile оперирует профилями двух видов: машинными и общими. Внутри каталога «profiles» общие профили начинаются с символа «@», все остальные считаются машинными. При запуске системы развёртывания указывать вручную можно любой существующий профиль, в том числе, общий. Определить автоматически можно только существующий машинный профиль.
Машинный профиль используется, прежде всего, для автоматической идентификации машины или целого класса машин одной конфигурации. Соответствие такого профиля текущей машине определяется путём автоматического вычисления уникального идентификатора текущей машины (UUID) на основе следующих данных:
- информации из DMI материнской платы, которая обычно не отличается для машин одной конфигурации;
- информации с шины PCI (включена по умолчанию параметром pci_bus=1, отключается аргументом --no-pci);
- информации из DMI материнской платы, характерной для уникального экземпляра машины (серийных номеров, даты выпуска BIOS, UUID продукта и подобного, по умолчанию это отключено, но можно включить аргументом --instance);
- названия процессорной архитектуры (платформы машины), например, «x86_64».
Машинный профиль всегда содержит файл PROFILE с информацией об этом машинном профиле. Он может либо непосредственно содержать дополнительные файлы для развёртывания на машинах данного класса, либо содержать только ссылку (файл PARENT) на общий профиль с нужными файлами. Если он содержит только файл PARENT, то такой профиль, с т.з. system-restore, считается профилем оборудования, поскольку он используется только для автоматической идентификации оборудования, и больше ни для чего. В этом случае файлы для развёртывания будут взяты из общего профиля, на который указывает ссылка PARENT. Если файла PARENT в каталоге машинного профиля нет, то такой профиль, с т.з. system-restore, считается профилем оборудования и развёртывания, даже если он не содержит никаких дополнительных файлов для развёртывания.
Общий профиль содержит файл SHARED с информацией об этом профиле и обычно содержит дополнительные файлы, используемые в процессе развёртывания, но это необязательно. С т.з. system-restore, такой профиль считается профилем развёртывания, даже если он не содержит никаких дополнительных файлов для развёртывания, его нельзя использовать для автоматической идентификации машин, и на него всегда должна указывать ссылка хотя бы из одного машинного профиля.
Профили с точки зрения пользователя
Допустим, мы сделали и проверили систему развёртывания, теперь хотим передать её конечному пользователю. Но мы хотим быть уверенными, что она будет разворачиваться на таком же в точности оборудовании, как у нас. Для этого мы создаём «профиль оборудования и развёртывания» под нашу единственную машину и включаем в деплойной системе параметр profile_required=1. Теперь при развёртывании название этого профиля будет выводиться на экран. С каким-то другим оборудованием использовать стик уже не получится. Другими словами: мы выполнили привязку деплойной системы к конкретному «железу». В этом примере была использована одноуровневая система профилей: «профиль оборудования» и «профиль развёртывания» объединены в один каталог («машинный профиль», с т.з. system-profile). «Профиль развёртывания» в данном примере не использовался.
С тем же успехом можно привязать стик к нескольким конфигурациям оборудования, но только, когда мы точно знаем, что на них это действительно будет работать. Допустим, при проверке мы обнаружили, что одна из трёх конфигураций моноблоков некорректно выходит из спящего режима и хотим только для этой конфигурации отключить поддержку спящего режима и соответствующую кнопку в графической среде пользователя. Для этого в файле sysrest.ini внутри каталога соответствующего профиля добавляем параметр no_hibernate=1. Теперь мы задействовали ещё и «профиль развёртывания» для одной из машин.
В ситуации, когда несколько разных классов машин (конфигураций) имеют необходимость применять одни и те же настройки в процессе развёртывания, например, распаковывать «оверлей», нет смысла дублировать архив с «оверлеем» в каждом «машинном профиле». Вместо этого можно создать один «общий профиль» (с т.з. system-profile), он же станет «профилем развёртывания» в терминологии system-restore, и сложить в этот каталог все необходимые для развёртывания файлы только один раз, а также создать несколько «машинных профилей» (с т.з. system-profile), которые будут указывать через ссылку PARENT на «общий профиль». В терминологии system-restore они будут «профилями оборудования».
Описанная ситуация позволяет в ручном режиме выполнить осознанную дедубликацию файлов в каталоге «profiles», значительно сократив свои трудозатраты при обслуживании крупного парка машин, и создаёт двухуровневую систему профилей, в которой «машинные профили» («профили оборудования») отделены от «общего профиля» («профиля развёртывания»), но связаны между собой ссылкой на «общий профиль». Кроме того, вся система профилей в каталоге «profiles» позволяет комбинировать как одноуровневую систему («профили оборудования и развёртывания»), так и двухуровневую (когда «профили оборудования» отделены от «профиля развёртывания»).
Типовой рабочий процесс подготовки профилей
Менеджер профилей system-profile предназначен, прежде всего, для подготовки начальной структуры каталога «profiles», хотя и для дальнейшей работы с ним его тоже можно использовать. Когда system-restore запускается, в каталоге с бэкапом уже должен быть создан каталог «profiles», а внутри него должны находиться все необходимые файлы и подкаталоги, иначе работа с профилями из деплойной системы будет невозможна.
Для подготовки начального «скелета» каталога с профилями нужно использовать такой же носитель начальной загрузки, как и для system-restore, обойти с ним все задействованные машины (или конфигурации) и создать необходимую структуру профилей. При изготовлении носителя, не забудьте зарезервировать на нём достаточно свободного места для создания профилей. В качестве примера в составе документации из пакета предлагается скрипт autorun для т.н. «обходной флешки», с помощью которой можно выполнить указанную процедуру создания начального «скелета». В сложных случаях можно обойтись и без автоматики, используя менеджер профилей в консоли обычной ALT Rescue — достаточно при загрузке выбирать режим «Rescue LiveCD с поддержкой сеансов».
Когда «скелет» готов, каталог «profiles» переносится целиком на рабочее место изготовителя деплойной системы. При переносе не забудьте поменять владельца всех файлов на обычного пользователя. Теперь в соответствующие каталоги нужно сложить необходимые файлы — дополнительные конфиги sysrest.ini, «хуки» и «оверлеи». Если файлы бэкапа для будущей системы развёртывания лежат в каталоге ~/workdir/sys-part, то профили должны оказаться в каталоге: ~/workdir/sys-part/profiles.
Глобализация настроек для вычисления UUID
Весь будущий комплекс должен учитывать аргументы --no-pci и --instance либо соответствующие им параметры в конфигурационных файлах: pci_bus и instance. Если профили собираются утилитой system-profile с одним набором этих параметров, то и system-restore должна будет запускаться с такими же, иначе она не сможет потом «опознать» профили. Настоятельно рекомендуется прописать оба параметра в глобальную конфигурацию (/etc/system-restore/restore.conf для system-restore и /etc/system-restore/profile.conf для system-profile), чтобы не использовать аргументы при каждом вызове программ. Конфиги можно создать прямо в скрипте автозапуска. Комбинация из этих двух параметров однозначно определяют «что является уникальным классом машин»:
| PCI Bus | Instance | Комментарий |
|---|---|---|
| — | — | В UUID включается только информация о классе машин из DMI (требуется аргумент --no-pci) |
| — | ВКЛ | Добавляется информация из DMI об уникальном экземпляре (требуются аргументы --no-pci --instance) |
| ВКЛ | — | Информация о классе машин из DMI плюс конфигурация с шины PCI: это умолчание для обеих программ |
| ВКЛ | ВКЛ | Информация о классе и экземпляре из DMI плюс конфигурация с шины PCI (требуется аргумент --instance) |
В скрипте из примера в документации предлагается не учитывать незначительные отличия на PCI-шине, на которые могут влиять даже настройки BIOS, поэтому при вызове system-profile добавляется аргумент --no-pci. Но вообще это всё на усмотрение администратора. Делается раз, и потом должно учитываться в стиках. Ещё раз: те же аргументы или параметры используются при вызове system-restore из autorun!
Каталог машин
Машинные профили определяются путём сопоставления автоматически вычисленного UUID машины названию ранее созданного профиля. Таблица сопоставлений находится в файле CATALOG.lst в каталоге profiles. В каждой строчке одно сопоставление в виде UUID с удалённым символом дефиса и названия машинного профиля. Не удаляйте этот файл и не забывайте переносить его вместе с со всем содержимым каталога profiles.
Основные действия и команды
Проверим, существует ли профиль для текущей машины:
# system-profile --check || echo "Профиль пока не создан!"
Команда ничего не выводит, она возвращает 0 в случае успеха, т.е. когда профиль для машины уже создан. Можно использовать, например, в своих скриптах. Если профиля ещё нет, создадим его:
# system-profile --make --comment="Персональный ноутбук директора"
В случае успеха, данная команда выведет относительный путь к каталогу с созданным профилем. В этом примере была использована одноуровневая система — мы создали «профиль оборудования и развёртывания», без ссылок на «общий профиль». Чтобы увидеть полный путь к каталогу, куда нужно складывать файлы для системы развёртывания, такие, как sysrest.ini, hooks.sh, chroot-pre.sh, chroot-post.sh, update.tgz, даём команду:
# system-profile --path
Чтобы посмотреть на содержимое профиля для текущей машины, даём команду:
# system-profile --show
Current machine information:
CPUARCH: x86_64
MACHINE: LG gram PC 14Z90Q-K.ADB9U1
CLASSID: 43af9dc2-3e88-7ad3-67f8-c1684f07636161c1e565
system-profile fatal: Profile 'lg_gram_pc_14z90q-k.adb9u1' not found.
Кстати, в данном примере, прежде чем завершиться фатально, команда что-то покажет о текущей машине даже в том случае, если профиль ещё не создан, мы этим уже пользовались для создания привязки машины к деплойной системе. Можно использовать полнотекстовый поиск (--search), а также выводить список всех существующих профилей (--list), например:
# system-profile --search lg gram pc
При выводе списка «машинные профили» отмечены символом «^» в самом начале, «общие профили» — символом «@». Можно попросить показать содержимое определённого профиля из списка:
# system-profile --show inferit-2
PROFILE: inferit-2
VERSION: 1.0
CPUARCH: x86_64
MACHINE: Inferit INFPC IFMBH510IP
CLASSID: 49f8fbe5-6776-2131-d063-16a32a498f5469337dd2
COMMENT: All-in-one PC configuration #2
CREATED: 2025-02-10 10:26:12
DMI.bios_vendor: INFERIT
DMI.board_name: IFMBH610IP
DMI.board_vendor: INFERIT
DMI.board_version: Default string
DMI.chassis_type: 3
DMI.chassis_vendor: Default string
DMI.chassis_version: Default string
DMI.product_family: Default string
DMI.product_name: INFPC
DMI.product_sku: Default string
DMI.sys_vendor: INFERIT
OVERLAY-FS: No
USER-HOOKS: No
PARAMETERS: Yes (78 bytes):
---[ sysrest.ini:
# Inferit INFPC
computer=infpc
newifname=enp2s0
#no_suspend=1
#no_hibernate=1
]---
Не путайте очистку содержимого (--erase) и полное удаление профиля вместе с содержимым (--remove). В первом случае удаляются все файлы «профиля развёртывания», сам профиль не удаляется. Для создания двухуровневой системы профилей добавляется параметр (--parent) со ссылкой на «общий профиль», если его ещё нет, он тоже будет создан:
# system-profile --make --parent=accounting --comment="Помощник главного бухгалтера"
profiles/toshiba_satellite.420p
# system-profile --show accounting
PROFILE: accounting (SHARED)
VERSION: 1.0
COMMENT: This is a shared profile
CREATED: 2026-04-08 04:08:26
USED-BY: 43af9dc2-3e88-7ad3-67f8-c1684f07636161c1e565
OVERLAY-FS: No
USER-HOOKS: No
PARAMETERS: No
Можно сразу отредактировать некоторые поля:
# system-profile --update --comment=Бухгалтерия accounting
Переименование профиля осуществляется также через обновление:
# system-profile --update --newname=acc2 accounting
Хотя название профиля создаётся автоматически, его можно менять, ведь создаётся оно на основе данных в DMI, а чего туда порой не пишут. Например, нам встречалось такое: Default string или Filled by O.E.M.. И это название будет потом выводиться в процессе развёртывания! В таких случаях можно не только переименовывать сам профиль, но и как бы давать более разумное название машине через аргумент --hardware.
Понятно, что программа может больше, есть другие команды и опции. Используйте встроенную помощь для получения деталей:
# system-profile --help
Сообщайте об ошибках на https://bugzilla.altlinux.org/
Успешных деплойных проектов! ;-)