Alterator-manager, модули remote и backend3 (Иван Савин, OSSDEVCONF-2025)
Материал из 0x1.tv
- Докладчик
- Иван Савин
Alterator-manager — это модульный сервис для управления операционной системой. Доклад посвящён двум его новым модулям — remote и backend3. Remote предназначен для работы с D-Bus методами alterator-manager’а на удалённой машине. Backend3 предназначен для использования бэкендов «старого» alterator’а.
Видео[править вики-текст]
Презентация[править вики-текст]
Thesis[править | править вики-текст]
Ключевые слова: altlinux, alterator, D-Bus.
Alterator-manager — это сервис с интерфейсом на D-Bus для управления операционной системой. Его функционал реализуется в модулях, первым из которых был executor. Executor на основе специальных конфигурационных файлов создаёт интерфейс на D-Bus для запуска исполняемых файлов. Например, поместив в директорию /usr/share/alterator/backends/user/ файл example1.backend со следующим содержимым:
type = "Backend"
module = "executor"
name = "executor"
interface = "Example1"
[methods.Hexdump]
execute = "hexdump -C {file_name}"
stdout_strings = true
и выполнив команду
systemctl --user start alterator-manager.service
мы увидим на сессионной шине по адресу org.altlinux.alterator объект /org/altlinux/alterator/executor и интерфейс org.altlinux.alterator.Example1 с методом Hexdump, который запускает hexdump -C:
Backend3[править | править вики-текст]
Новый модуль backend3 предназначен для использования бэкендов alterator’а. Этот модуль похож на executor. D-Bus интерфейсы, использующие его, описываются в конфигурационных файлах с расширением .backend. Один такой файл описывает один интерфейс. Для описания используется язык TOML. Ниже приведён пример описания объекта /org/altlinux/alterator/example1 и интерфейса org.altlinux.alterator.Backend3 с методом MenuList:
type = "Backend" module = "backend3" name = "example1" interface = "org.altlinux.alterator.Backend3" action_id = "org.altlinux.alterator" [methods.MenuList] backend3 = "menu" _objects = "avail_modules" language = "ru_RU" action = "list"
Поле backend3 — обязательное, в нём указывается имя бэкенда из директории /usr/lib/alterator/backend3/. Остальные поля необязательные. Поле _objects содержит то же, что одноимённая переменная в бэкендах из backend3. (Ещё можно встретить название path, например, в данном случае этот path был бы /menu/avail_modules, но в _objects первая часть не записывается). В поле language указывается локаль. В поле action указывается действие: list, write, read и прочее.
Методы, которые создаёт этот модуль, имеют один входной параметр — массив пар ключ–значение. В этом параметре задаются строковые пары, которые ожидает получить backend3 на свой stdin. Возвращаемое значение методов — массив массивов пар ключ–значение; такую структуру возвращает backend3 alterator’а.
Пример работы метода, описанного выше:
Remote[править | править вики-текст]
Модуль remote даёт возможность подключиться к удалённой машине по ssh и вызывать D-Bus методы её alterator-manager’а у себя на локальной машине как свои собственные. Интерфейс модуля состоит из трёх методов на D-Bus объекте /org/altlinux/alterator/remote в интерфейсе org.altlinux.alterator.remote.
Метод Connect — подключение к удалённой машине. Параметры метода: 1) адрес удалённой машины (<name>@<ip>) 2) имя соединения 3) D-Bus-адрес password-agent’а. Когда на удалённой машине polkit запросит пароль для подтверждения прав на выполнение метода, на локальной машине этот запрос отобразит данный агент. 4) pty для password-agent’а (необязательно).
Метод Disconnect — отключение соединения. Параметр: имя соединения.
Метод GetConnections — показывает список соединений.
После подключения в дереве D-Bus alterator-manager’а на локальной машине (/org/altlinux/alterator) появится поддерево alterator-manager’а удалённой машины (/org/altlinux/alterator/connection/<connection_name>). Методы в этом поддереве вызываются так же, как и любые другие, за исключением того, что для подтверждения прав на выполнение будет вызван не polkit-agent, а password-agent, D-Bus-адрес которого был передан параметром в методе Connect.
