Простой не-CLI (т.е. C / C ++) API для управления сервисами systemd - PullRequest
0 голосов
/ 10 июня 2018

Цель

Я хотел бы написать приложения на C / C ++ и предоставить им API для непосредственного взаимодействия с systemd управляемыми сервисами.По сути, я бы хотел, чтобы мои приложения могли выполнять эквивалент systemctl start service_name@unit_number.service без использования вызовов system(), popen() или exec() ( жесткое требование ).


Вопрос

Существует ли простой C / C ++ API для связи с systemd, предполагая, что systemd версия 219 (то есть CentOS v7.4, такжежесткое требование )?


Работа на данный момент

  1. В Интернете я нашел примеры управления systemd управляемыми сервисами в C / C ++ и нашел странное обсуждение по теме , но не нашел хороших примеров.
  2. Я всегда мог перепроектировать systemctl версию 219 из источника , но затем я потенциально столкнулся с лицензией GPL.
  3. Так как я застрялс CentOS v7.4, что означает, что я не могу получить версию 221 или более позднюю версию systemd, я не могу использовать более новый API-интерфейс «SD Bus». Никто не позволил бы обновить libsystemd вручную только дляпреимущества для конкретного приложения, и я, очевидно, не первый человек, который поднимет эту проблему.
  4. Я не решаюсь использовать низкоуровневый C API для DBUS ,поскольку сами сопровождающие заявляют: « Если вы используете этот низкоуровневый API напрямую, вы регистрируетесь с некоторыми трудностями. ».

Жесткие требования

  • systemd v219.
  • CentOS v7.4
  • C / C ++.
  • Нет system() / popen() / exec() вызовык утилите systemctl CLI.
  • Лицензия на нераспространение (т. е. LGPLv2 в порядке, хотя предпочтительнее BSD / MIT).

Вопрос (Redux)

Есть ли простойКакой API, который я мог бы использовать в CentOS v7.4 (даже если мне придется самому предоставлять разделяемую библиотеку), который можно использовать для простого и надежного взаимодействия с systemd напрямую через код C / C ++? Если существующий libdbus-1.so API сложен, но все еще надежен, и я могу создать надежную / стабильную библиотеку оберток вокруг него, я открыт для изучения этого варианта. Кроме того, если возможно создать и вручную построить иразверните компоненты SD-BUS независимо от systemd и используйте их без необходимости изменять / обновлять библиотеку / демон systemd, уже находящиеся в системе, я потенциально мог бы также пойти по этому пути.


Редактирование& Комментарии

  • Я был бы открыт для использования зрелой библиотеки C ++, если только она не требует полного выпуска всего исходного кода.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Как вы уже поняли, вы должны взаимодействовать с systemd только с помощью библиотеки dbus, другого поддерживаемого способа для этого нет.Даже если вы отменили требование не выполнять двоичные файлы, оно останется недовольным, так как * ctl - это командная строка пользовательские интерфейсы , не предназначенные или не предназначенные для вызова из других программ.

0 голосов
/ 11 июня 2018

Поскольку API-интерфейс systemd представлен в виде набора интерфейсов D-Bus, этот вопрос сводится к тому, «какие привязки C / C ++ D-Bus вы рекомендуете?»- который покрывается этим существующим ответом вместе с их плюсами и минусами.

...