ALT Services

Материал из ALT Linux Wiki
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


Модуль управления сервисами ALT Services или Aльт Сервисы — часть платформы Alterator on D-Bus, приложение для удобного управления системными сервисами:

  • Samba Active Directory;
  • Chrony (NTP-клиент/сервер).
Примечание: Название пакетов с сервисами имеет вид alterator-service-<имя_сервиса>. Например, alterator-service-samba-ad - сервис для управления Samba Active Directory.



Установка

Для работы с модулем необходимо установить:

  • Сервисы;
  • Приложение для работы с сервисами:
    • для работы в графике — ALT Services (пакет alt-services);
    • для работы в консоли — alteratorctl (пакет alteratorctl).

Установить сервисы:

Для установки сервисов нужно доставить соответствующие пакеты. Например, для установки сервиса, предназначенного для взаимодействия с Samba Active Directory, необходимо выполнить команду ниже:

# apt-get update
# apt-get install alterator-service-samba-ad

Установить приложение для работы с сервисами:

Работать с сервисами можно и в графике и в консоли.

Для работы в графике необходимо установить графическое приложение ALT Services:

# apt-get install alt-services

Для работы в консоли — alteratorctl:

# apt-get install alteratorctl
Примечание: Вместе с alt-services и alteratorctl доставляются пакеты, необходимые для работы сервисов и Alterator on D-Bus:


Запуск

ALT Services

Запуск из Центра Управления Системой

  • Запустить версию платформы Alterator на D-Bus:
    • Чтобы перейти на эту версию ЦУС, установите клиентское приложение alterator-explorer:
      # apt-get install alterator-explorer
      
    • Запустите ЦУС (acc).
  • Выберите сервис в интерфейсе Центра Управления Системой:
    ALT Services в ЦУС

Запуск из консоли

# alt-services

alteratorctl

Для работы с сервисами в alteratorctl предназначен модуль services:

$ alteratorctl services
▲ Samba AD (samba_ad_service) не развёрнут

Обозначения состояний:
  ■ развёрнут, запущен
  ◆ развёрнут, остановлен
  ▲ не развёрнут

Управление службами

В интерфейсе приложения

На левой панели располагается список сервисов, правое поле предназначено для вывода свойств.

Интерфейс ALT Services

При выборе сервиса Samba AD отображается две вкладки. Вкладка «Состояние» передаёт информацию о домене.

Выбрать сервис

Вкладка «Ресурсы» показывает захваченные сервисом ресурсы (файлы, каталоги, порты, systemd-юниты и т. п.) и их текущее состояние.

Вкладка «Ресурсы»

Для каждого из действий ("Диагностика", "Развернуть", "Деактивировать", "Настроить") предусмотрен отдельный мастер, который открывается при их выборе. Ниже приведен мастер развертывания.

Мастер развёртывания

В консоли с помощью alteratorctl

Управление сервисами в консоли происходит при помощи модуля services утилиты alteratorctl. Доступные команды и их синтаксис смотрите в справочном выводе утилиты:

$ alteratorctl services --help
Примечание: Графическое приложение и alteratorctl services доступны пользователю для запуска. Однако для выполнения некоторых действий потребуются права администратора.


Руководство администратора

Основные возможности и работа с сервисами

Приложение имеет простой и интуитивно понятный графический интерфейс. Все функциональные возможности доступны на основной панели и отражают рекомендуемую последовательность работы (workflow):

Примечание: Ресурс это объект системы (файл, каталог, порт, сокет, systemd-юнит и т. п.), который сервис берёт под эксклюзивный контроль при Deploy и освобождает при Undeploy. В один момент времени ресурс контролируется только одним сервисом чтобы избежать конфликтов.


  1. Предварительная диагностика (Diagnose). С помощью ALT Services проверьте, готова ли система к развёртыванию сервиса.
  2. Развертывание (Deploy). Задайте конфигурацию сервиса, сервис захватывает необходимые ресурсы и запускает службы.
  3. Деактивация (Undeploy). Остановите работу сервиса, освободите ресурсы и вернитесь к оригинальным (исходным) настройкам.
  4. Настройка (Configure). В интерактивном режиме редактируйте конфигурационные параметры уже запущенного сервиса.
  5. Запустить/Остановить сервис (Start/Stop).
  6. Резервное копирование (Backup):. Создайте резервную копию изменённой/настроенной вручную/настроенной при развёртывании конфигурации сервиса.
  7. Восстановление (Restore). Вернитесь к конфигурации сервиса с помощью файла резервной копии.

Также приложение позволяет просматривать текущие параметры конфигурации сервиса и его ресурсы.

Памятка: Начните с установки нужного сервиса и его развёртывания через GUI. Используйте стандартный цикл Diagnose -> Deploy -> Configure/Backup -> Undeploy. Всю дополнительную информацию и актуальные версии ищите на altlinux.space/alterator.


Описание доступных сервисов

Название Описание Наличие

в репозитории Sisyphus

Исходники

на altlinux.space

Samba Active Directory Сервис предназначен для управления Samba Active Directory. Позволяет:
  1. разворачивать доменные контроллеры Samba AD;
  2. удалять доменные контроллеры Samba AD;
  3. сообщать информацию о параметрах, с которыми был развёрнут контроллер домена.
alterator-service-samba-ad alterator/alterator-service-samba-ad
Сервис Chrony (NTP-клиент/сервер) Сервис позволяет:
  1. настраивать службу chronyd;
  2. управлять серверами и пулами NTP, подсетями клиентов и параметрами makestep/rtcsync;
  3. резервировать конфигурацию /etc/chrony.conf.
alterator-service-chrony alterator/alterator-service-chrony
Общие каталоги Сервис предназначен для управления общими папками Samba. Позволяет:
  1. создавать, удалять и изменять общие папки Samba;
  2. проверять корректность конфигурации Samba перед применением изменений;
  3. управлять службами Samba (smb.service, nmb.service) и выполнять их перезапуск;
  4. осуществлять логирование всех операций в файл для аудита и отладки.
- alterator/alterator-service-samba-share
Сервис FTP (FTP-сервер VSFTPD) Сервис предоставляет комплексное решение для управления FTP-сервером VSFTPD (Very Secure FTP Daemon) в Linux-системах. Позволяет:
  1. развёртывать;
  2. настраивать;
  3. создавать резервные копии;
  4. восстанавливать конфигурацию FTP-сервиса.
- alterator/alterator-service-vsftpd

Использование службы Samba Active Directory

В данной инструкции описывается процесс развёртывания контроллера домена Active Directory на базе Samba с помощью модуля alt-services.

Установка пакетов

Сначала установите пакеты:

# apt-get install -y alterator-service-samba-ad alt-services

Развёртывание службы

  1. Запустите alt-services.
  2. В списке служб выберите Samba AD и нажмите кнопку Развернуть.
Запуск мастера развертывания Samba AD

Откроется мастер, на одной из страниц которого необходимо задать параметры будущего домена.

Мастер развертывания Samba AD

Параметры развёртывания

Ниже приведено подробное описание каждого параметра.

Параметр Описание и влияние Рекомендации по выбору
Режим Определяет режим развертывания:
  • Развернуть новый домен: создание нового домена и леса Active Directory.
  • Присоединиться к существующему домену: добавление нового контроллера в уже существующий домен.
Для первого сервера в инфраструктуре выберите «Создать новый домен».
Пароль администратора Устанавливает пароль для встроенной учётной записи Administrator. Пароль обязателен и должен соответствовать политикам сложности Active Directory. Задайте надёжный пароль (не короче 12 символов, содержащий буквы в разных регистрах, цифры и спецсимволы).
Имя контроллера домена Устанавливает имя контроллера домена. Пример: dc0 Полное доменное имя контроллера домена должно быть меньше 155 байт.
NetBIOS имя Короткое (до 15 символов) имя домена для обратной совместимости с устаревшими клиентами. Обычно совпадает с первой частью Realm. Пример: corp. Используйте короткое, запоминающееся имя в нижнем регистре.
Realm Полное DNS-имя домена (Kerberos-область). Используется для аутентификации. Пример: corp.example.com Используйте поддомен вашего реального домена. Не рекомендуется использовать несуществующие зоны верхнего уровня (например, .local), так как это может привести к конфликтам с mDNS. Имя должно быть в нижнем регистре. Полное доменное имя контроллера домена должно быть меньше 155 байт.
Тип базы Формат внутреннего хранилища каталога Samba:
  • tdb - формат по умолчанию.При его использовании размер хранилища ограничен 4GB.
  • mdb - формат на базе LMDB.
По умолчанию используйте tdb. Размер базы задаётся только при выборе mdb; для tdb параметр размера не требуется.
Использовать RFC 2307 Синхронизирует UNIX идентификаторы пользователей и групп между различными компьютерами в домене. Обычно выключено. Включайте, если нужна синхронизация ID пользователей и групп.
Функциональный уровень Определяет функциональность домена (DFL) и леса (FFL). Влияет на совместимость с различными версиями Windows Server. Рекомендуется использовать 2008 R2. Уровень можно повысить позже, понизить нельзя.
Бэкенд DNS Реализация DNS-сервера для обслуживания доменной зоны:
  • SAMBA_INTERNAL: встроенный DNS-сервер Samba. Прост в настройке и тесно интегрирован с AD.
  • BIND9 (DLZ): использование DNS-сервера BIND9 с динамической загрузкой зоны из AD.
Рекомендуется SAMBA_INTERNAL по умолчанию.
Серверы пересылки Список внешних DNS-серверов, на которые будут пересылаться запросы для внешних доменов (например, ya.ru). Укажите IP-адреса DNS-серверов вашего провайдера, корпоративные DNS или публичные серверы (например, 9.9.9.9, 8.8.8.8).

Пример рекомендуемых значений

Параметр Пример значения
Режим Создать новый домен
Имя контроллера домена dc0
Realm ad.example.org
NetBIOS имя ad
Тип базы tdb
RFC 2307 Нет (выключено)
Функциональный уровень 2008 R2
Бэкенд DNS SAMBA_INTERNAL

Запуск развёртывания

После заполнения всех полей нажмите кнопку «Применить». Мастер выполнит все необходимые действия по настройке службы.

Процесс развертывания службы

По завершении развёртывания служба не запустится автоматически. Нажмите кнопку Запустить, чтобы активировать контроллер домена.

Кнопка запуска службы Samba AD

Проверка работоспособности

После запуска службы необходимо убедиться, что контроллер домена функционирует корректно.

Проверка Kerberos

Выполните в командной строке сервера запрос на получение TGT-билета для администратора домена.

# kinit Administrator
Password for Administrator@AD.EXAMPLE.ORG: <введите пароль>
Warning: Your password will expire in 41 days on Tue 25 Nov 2025 13:33:00

Затем проверьте, что билет был успешно получен:

# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: Administrator@AD.EXAMPLE.ORG

Valid starting       Expires              Service principal
14.10.2025 14:20:55  15.10.2025 00:20:55  krbtgt/AD.EXAMPLE.ORG@AD.EXAMPLE.ORG
	renew until 21.10.2025 14:20:52

Наличие билета krbtgt/... свидетельствует о корректной работе службы KDC.

Проверка через средства администрирования

Для управления объектами Active Directory (пользователи, компьютеры, группы) можно использовать утилиту ADMC (Active Directory Management Center). Запустите её из системного меню или командой admc.

Окно утилиты ADMC для управления доменом

На этом этапе контроллер домена готов к работе. Вы можете приступать к вводу в домен рабочих станций и серверов.

Управление службой после развёртывания

Изменение настроек

Некоторые параметры службы (например, серверы пересылки DNS) можно изменить после развёртывания. Для этого в модуле Службы нажмите кнопку Настроить.

Доступ к настройкам развернутой службы
Окно изменения параметров Samba AD
Примечание: Базовые параметры, такие как Realm или NetBIOS-имя, изменить через этот интерфейс нельзя. Их смена потребует полного пересоздания домена.


Резервное копирование и восстановление

Модуль alt-services предоставляет встроенные инструменты для создания и восстановления резервных копий конфигурации Samba AD.

Примечание: Для сервиса alterator-service-samba-ad функционал создания и восстановления резервных копий находится в разработке.


  • Резервное копирование: Создаёт архив с ключевыми файлами конфигурации, базой данных...
  • Восстановить: Позволяет восстановить состояние службы из ранее созданной копии.

Файлы резервных копий по умолчанию сохраняются в каталоге: /var/lib/alterator/service/<название_сервиса>/config-backup/. Перед восстановлением, необходимо скопировать файлы резервной копии в тот же каталог.

Ошибки и нестандартные случаи

  • Используйте функцию «Восстановить» из заранее созданной резервной копии.
  • Проверьте статус системных служб:
# systemctl status <имя_службы>
  • Логи операций и диагностики обычно пишутся в файлы, указанные в интерфейсе alt-services или в journalctl.

Руководство разработчика

Методы интерфейса org.altlinux.alterator.service1

Каждый .backend сервиса, реализующий интерфейс org.altlinux.alterator.service1, должен включать реализацию всех его методов.

Ознакомиться с описанием методов можно в документации.

Описание сервисов

В этом разделе в качестве примеров в общих чертах приведено описание методов работы некоторых сервисов.

alterator-service-samba-share

  • Назначение: управление общими папками Samba, включая создание, изменение и удаление записей в /etc/samba/smb.conf и контроль systemd-юнитов smb и nmb.
  • Helper: скрипт /usr/bin/service-samba-shares поддерживает операции create, delete, update, deploy, undeploy, start, stop, status, backup и restore, принимает JSON-параметры и возвращает ответы в JSON.
  • Развёртывание: при deploy сохраняет оригинальный smb.conf, включает службы и публикует событие alterator-announce, возвращая состояние deployed.
  • Статус: формирует JSON с полями status, services и shares.
  • Backend: service-samba-shares.backend вызывает helper с нужными методами, включает передачу stdin и сигналы stdout/stderr для долгих операций; метод Status возвращает JSON как байтовой поток.
  • Описание .service: содержит параметры operation, share_name, share_path, access_user, access_type, allowed_users, enabled, а также ресурсы smb_conf, backups, smb_service, nmb_service и массив shares для вкладки статуса.

alterator-service-chrony

  • Назначение: настройка службы chronyd, управление серверами и пулами NTP, подсетями клиентов и параметрами makestep/rtcsync, а также резервирование конфигурации /etc/chrony.conf.
  • Helper: service-chrony обрабатывает режимы deploy, configure, start, stop, status, backup, restore и undeploy; читает JSON из stdin и модифицирует chrony.conf через sed и jq.
  • Развёртывание: сохраняет оригинальный конфиг, отключает или включает пул pool.ntp.org, добавляет сервера и подсети согласно JSON и фиксирует входные данные в .../deployment-config.json.
  • Конфигурация: удаляет устаревшие записи серверов, пулов и подсетей, затем применяет параметры clientsSettings и NTP-настроек, записывая их в .../configuring-config.json.
  • Статус: выводит текущий JSON (deploy или configure) и добавляет служебные параметры deployed и started в зависимости от состояния chrony.service.
  • Backend: service-chrony.backend задаёт маппинг методов к helper’у и подключает сигналы stdout/stderr для длительных операций.
  • Описание .service: параметры охватывают массивы ntpServersSettings, ntpPoolsSettings, объект ntpDefaultPool, подсети клиентов и ресурсы chronyConf и Chronyd (systemd unit).

alterator-service-vsftpd

  • Назначение: конфигурация FTP-сервера vsftpd, управление параметрами доступа, пассивными портами и резервными копиями конфигурации в /etc/vsftpd.
  • Helper: service-vsftpd реализует режимы deploy, configure, start, stop, status, backup, restore и undeploy; принимает JSON, модифицирует /etc/vsftpd/conf и /etc/vsftpd/vsftpd.conf, создаёт бэкапы и архивы.
  • Развёртывание: сохраняет текущий конфиг, применяет параметры (anonymous_enable, local_enable, write_enable, порты) и записывает итоговый JSON в /usr/share/alterator-service-vsftpd/deployment-config.json.
  • Отмена развёртывания: восстанавливает последний .original из /etc/vsftpd/backups, удаляет JSON и каталог состояния, останавливает службу.
  • Резервное копирование: архивирует /etc/vsftpd в /var/backups/vsftpd/vsftpd_backup_<timestamp>.tar.gz; restore ищет указанный файл или последний архив и перезапускает службу.
  • Статус: читает deployment-config.json, выводит его содержимое и завершает работу.
  • Backend: service-vsftpd.backend использует helper и включает сигналы stdout/stderr; метод Status возвращает байтовой поток с JSON.
  • Описание .service: предоставляет параметры доступа (anonymous_enable, local_enable, write_enable) и порты (listen_port, pasv_min_port, pasv_max_port), а также поле backup_name для восстановления.

Принцип работы

  • Сервисы описываются файлами Alterator Entry (.service и .backend), которые загружаются alterator-manager. Alt-services или alteratorctl подключается к alterator-manager по D-Bus и предоставляет интерфейс пользователю.
  • Методы управления предоставляются D-Bus интерфейсом org.altlinux.alterator.service1; параметры передаются в формате строк JSON через stdin helper’ов.
  • Backend-файлы связывают вызовы интерфейса с исполняемыми помощниками, перенаправляют stdout/stderr в сигналы и определяют таймауты.
  • Helper-скрипты реализуют операционную логику: редактируют конфигурации, управляют systemd и формируют JSON-ответы со статусом и артефактами (логи, пути к бэкапам).

Описание .backend

  • Обязательные поля: type = "Backend", module = "executor", interface = "service1", name = <идентификатор>; методы описываются в секции [methods.<Method>].
  • Для методов, требующих входных данных, указывается stdin_string = true; длительные операции транслируют stdout/stderr в сигналы service_stdout_signal и service_stderr_signal.
  • Метод Status обычно возвращает JSON через stdout_bytes = true (при необходимости stdout_json = true), что позволяет UI парсить данные статуса и ресурсов.
  • Timeout задаётся в секундах (например, 600) и соответствует рекомендациям спецификации .backend для модуля executor.
  • Полная спецификация .backend файлов: документация.

Описание .service

  • Глобальные ключи: type, name, category, display_name, comment, дополнительные флаги enable_force_deploy и no_default_diag по необходимости.
  • Секция parameters описывает поля, их типы (string, boolean, enum, array, object), контексты (deploy, configure, status, backup, restore) и обязательность; составные типы задаются через prototype или properties.
  • Секция resources перечисляет файлы, каталоги, порты и systemd-юниты с указанием свойств и привязок к параметрам; используется для избегания конфликтов между различными сервисами и отображения в UI.
  • Служебные параметры deployed, started и force_deploy доступны в контексте status/deploy и автоматически добавляются при необходимости; enable_force_deploy включает передачу force_deploy.
  • Полная спецификация .service файлов: документация.

Создание простого сервиса

В данном разделе демонстрируется, как создать минимальный рабочий сервис для Alt-services на примере Hello World.

Архитектура системы

В системе участвуют три основных компонента:

Графический интерфейс (alt-services).
Запускается от имени пользователя, предоставляет элементы управления сервисом.
Альтернатива — консольная утилита alteratorctl services.
Общается с alterator-manager по D-Bus.
Системный демон (alterator-manager).
Работает через D-Bus как системная служба.
Получает команды от интерфейса и вызывает методы бэкенда.
Использует модуль executor для запуска скриптов с повышенными привилегиями.
Исполняемый скрипт (helper).
Реализует фактические действия: развёртывание, запуск, остановку.
Вызывается через alterator-manager.

Подготовка системы

Установите необходимые пакеты:

# Установка alt-services (остальные пакеты подтянутся по зависимостям)
sudo apt-get install alt-services

Создание сервиса Hello World

Для создания сервиса потребуется три файла:

  1. hello-world.service — описание интерфейса сервиса (frontend).
  2. hello-world.backend — описание методов сервиса (backend).
  3. hello-world-helper — исполняемый скрипт с логикой.

Frontend описание (hello-world.service)

Создайте файл /usr/share/alterator/services/hello-world.service:

type = "Service"
name = "hello_world"
category = "X-Alterator-Servers"
display_name.en = "Hello World Service"
display_name.ru = "Сервис Hello World"
comment.en = "A simple Hello World service example"
comment.ru = "Простой пример сервиса Hello World"
enable_force_deploy = true

[parameters.message]
display_name.en = "Message"
display_name.ru = "Сообщение"
comment.en = "The message to display"
comment.ru = "Сообщение для отображения"
type = "string"
context = ["deploy", "configure", "status"]
default = "Hello, World!"

[resources.configuration]
display_name.en = "hello-world.conf"
display_name.ru = "hello-world.conf"
comment.en = "hello-world.conf file"
comment.ru = "Файл hello-world.conf"
type = "file"
path.value = "/etc/hello-world/hello-world.conf"

Ключевые моменты:

  • name = "hello_world" — машинное имя сервиса (используйте подчёркивание, не дефис).
  • parameters.message — параметр, который пользователь может настроить.
  • resources.configuration — объявление ресурсов сервиса.

Полная спецификация .service файлов: документация.

Backend описание (hello-world.backend)

Создайте файл /etc/alterator/backends/hello-world.backend:

type = "Backend"
module = "executor"
interface = "service1"
name = "hello_world"  # ВАЖНО: без дефисов!

[methods.Info]
execute = "cat /usr/share/alterator/services/hello-world.service"
action_id = "Info"
stdout_bytes = true

[methods.Deploy]
execute = "hello-world-helper -d"
action_id = "Deploy"
stdin_string = true

[methods.Undeploy]
execute = "hello-world-helper -u"
action_id = "Undeploy"
stdin_string = true

[methods.Configure]
execute = "hello-world-helper -c"
action_id = "Configure"
stdin_string = true

[methods.Status]
execute = "hello-world-helper -s"
action_id = "Status"
stdout_bytes = true

[methods.Start]
execute = "hello-world-helper --start"
action_id = "Start"

[methods.Stop]
execute = "hello-world-helper --stop"
action_id = "Stop"

[methods.Backup]
execute = "hello-world-helper -b"
action_id = "Backup"
stdin_string = true

[methods.Restore]
execute = "hello-world-helper -r"
action_id = "Restore"
stdin_string = true

Важно:

  • Значение name должно быть без дефисов (только подчёркивания), иначе получите ошибку "Incorrect node name".
  • stdin_string = true означает, что метод принимает JSON на stdin.
  • stdout_bytes = true означает, что метод возвращает данные через stdout.

Полная спецификация .backend файлов: документация.

Исполняемый скрипт (hello-world-helper)

Создайте файл /usr/bin/hello-world-helper:

#!/usr/bin/env bash
set -euo pipefail

# Переменные
service="hello-world"
conf="/etc/hello-world/hello-world.conf"
cache="/var/cache/$service"
deployfile="$cache/deployed"
startfile="$cache/started"
log="/var/log/alterator/hello-world.log"

# Функция логирования
logf() {
  mkdir -p "$(dirname "$log")" "$cache"
  ts="$(date -Is 2>/dev/null || date '+%Y-%m-%dT%H:%M:%S%z')"
  echo "[$ts] hello-world-helper: $*" >>"$log" || true
}

# Парсинг аргументов
mode="status"
input=""

while [ $# -gt 0 ]; do
  case "$1" in
    -d) mode="deploy" ;;
    -u) mode="undeploy" ;;
    -c) mode="configure" ;;
    -s) mode="status" ;;
    --start) mode="start" ;;
    --stop) mode="stop" ;;
    -b) mode="backup" ;;
    -r) mode="restore" ;;
    *) echo "Unknown arg: $1" >&2; exit 1 ;;
  esac
  shift
done

# Чтение JSON со stdin если необходимо
if [ -z "${input:-}" ]; then
  case "$mode" in
    deploy|configure|backup|restore) input="$(cat || true)";;
  esac
fi

# Функция записи конфигурации
write_conf() {
  mkdir -p "$(dirname "$conf")"
  printf '%s' "${input:-{}}" > "$conf"
  logf "write_conf $conf"
}

# Функция проверки статуса
status() {
  local deployed=false
  local started=false
  [ -f "$deployfile" ] && deployed=true
  [ -f "$startfile" ] && started=true
  printf '{"deployed": %s, "started": %s}\n' "$deployed" "$started"
  exit 0
}

# Основная логика
case "$mode" in
  deploy)
    write_conf
    mkdir -p "$cache"
    : > "$deployfile"
    echo "$service deployed"
    logf "deploy"
    ;;
  undeploy)
    rm -f "$startfile" "$deployfile"
    echo "$service undeployed"
    logf "undeploy"
    ;;
  configure)
    write_conf
    echo "$service configured"
    logf "configure"
    ;;
  start)
    [ -f "$deployfile" ] || { echo "Service is not deployed!" >&2; exit 1; }
    : > "$startfile"
    echo "$service started"
    logf "start"
    ;;
  stop)
    [ -f "$startfile" ] || { echo "Service is not started!" >&2; exit 1; }
    rm -f "$startfile"
    echo "$service stopped"
    logf "stop"
    ;;
  backup|restore)
    logf "$mode"
    ;;
  status)
    status
    ;;
  *)
    echo "Unknown mode" >&2; exit 1;;
esac

Сделайте скрипт исполняемым:

chmod +x /usr/bin/hello-world-helper

Метод Status:

  • Возвращает JSON c параметрами deployed (развёрнут) и started (запущен), а также произвольными параметрами статуса сервиса.
  • Код завершения 0 при успехе; ненулевой код — ошибки выполнения.

В случае с реальным сервисом скрипт может запускать и останавливать systemd юниты, модифицировать файлы конфигурации, создавать резервные копии файлов конфигурации, и так далее.

Установка сервиса

Вместо того, чтобы создавать файлы непосредственно в нужных директориях, можно устанавливать их.

Быстрая установка для тестирования

Данный вариант не рекомендуется, и его следует применять в первую очередь для быстрой отладки в тестовой среде. Создайте скрипт установки install.sh:

#!/bin/sh
set -eu

[ "$(id -u)" -eq 0 ] || { echo "Run as root"; exit 1; }

install -Dm644 hello-world.service /usr/share/alterator/services/hello-world.service
install -Dm644 hello-world.backend /etc/alterator/backends/hello-world.backend
install -Dm755 hello-world-helper /usr/bin/hello-world-helper

echo "Installation complete."
echo "alterator-manager will auto-reload backend changes."

Запустите установку:

sudo sh install.sh

Примечание: После установки перезапуск alterator-manager обычно не требуется — менеджер автоматически отслеживает изменения в каталоге бэкендов.

Создание RPM-пакета (рекомендуется)

Для реального использования рекомендуется создать RPM-пакет. Создайте файл alterator-service-hello-world.spec:

Name:           alterator-service-hello-world
Version:        0.1.0
Release:        alt1
Summary:        Hello World service for Alt-services
License:        GPLv3+
Group:          System/Configuration/Other
BuildArch:      noarch

Requires:       alt-services

%description
Minimal example service for Alt-services

%install
install -Dm644 hello-world.service %buildroot%_datadir/alterator/services/hello-world.service
install -Dm644 hello-world.backend %buildroot%_sysconfdir/alterator/backends/hello-world.backend
install -Dm755 hello-world-helper  %buildroot%_bindir/hello-world-helper

%files
%_datadir/alterator/services/hello-world.service
%config(noreplace) %_sysconfdir/alterator/backends/hello-world.backend
%_bindir/hello-world-helper

Проверка работы сервиса

Проверка через графический интерфейс

  1. Запустите Alt Services.
  2. Найдите в списке «Сервис Hello World».
  3. Нажмите кнопку Deploy (можете указать своё сообщение в поле «Сообщение»).
  4. После развёртывания нажмите Start.
  5. Проверьте лог работы:
sudo tail -f /var/log/alterator/hello-world.log

Сервис должен выглядеть в Alt Services следующим образом:

Сервис Hello World в Alt Services
Сервис Hello World в Alt Services

Проверка через командную строку

Хоть это и не подразумевается при обычном использовании, для отладки можно работать со скриптом напрямую:

# Развернуть сервис с пользовательским сообщением
echo '{"message":"Привет от Hello World!"}' | sudo hello-world-helper -d

# Запустить сервис
sudo hello-world-helper --start

# Проверить статус
sudo hello-world-helper -s
echo "Код возврата: $?"

# Остановить сервис
sudo hello-world-helper --stop

# Удалить сервис
sudo hello-world-helper -u

Отладка

Проверка D-Bus объектов

После установки backend'а создаётся D-Bus объект. Проверить его можно командами:

# Посмотреть дерево объектов
busctl --system tree org.altlinux.alterator

# Посмотреть методы конкретного объекта
busctl --system introspect org.altlinux.alterator \
  /org/altlinux/alterator/hello_world

Просмотр логов

# Логи alterator-manager
journalctl -u alterator-manager -f

# Логи тестового сервиса
sudo tail -f /var/log/alterator/hello-world.log

Использование D-Feet

Для визуальной отладки D-Bus можно использовать утилиту D-Feet:

  1. Установите: sudo apt-get install D-Feet.
  2. Запустите и выберите System Bus.
  3. Найдите org.altlinux.alterator.
  4. Раскройте дерево до /org/altlinux/alterator/hello_world.
  5. Посмотрите доступные методы интерфейса org.altlinux.alterator.service1.
Доступные методы объекта hello world в D-Feet

Важные замечания

Права доступа.
Alt-services работает от имени пользователя, но операции выполняются с повышенными привилегиями через PolicyKit.
Права регулируются файлом org.altlinux.alterator.service1.policy из пакета alterator-interface-service.
Именование.
В файле .backend используйте только подчёркивания в имени (hello_world), не дефисы.
Это ограничение D-Bus на имена объектов.