Подойдет ли использование AC_CONFIG_HEADERS для исправления * .service.in в * .service?Возможно, есть еще один макрос для «не заголовков»?
Нет.AC_CONFIG_HEADERS
- для настройки заголовков конфигурации для поддержки вашей сборки.Он редко используется для чего-либо, кроме создания config.h
записи результатов определенных тестов, которые выполняет Autoconf, и он не такой гибкий, как другие параметры в этой области.
Если у вас есть дополнительные файлы, которые вы хотитеAutoconf для сборки из шаблонов, тогда вы должны сообщить Autoconf о них через AC_CONFIG_FILES
.Пример:
AC_CONFIG_FILES([Makefile AutoBrightnessCam.service])
Но если некоторые данные, которыми вы заполняете этот шаблон, являются установочными каталогами, тогда Autoconf, вероятно, вообще не подходит для этого, поскольку он предусматривает префикс установки длябыть изменено аргументами на make
.Вам, по крайней мере, нужно обойти это, но лучше всего покататься с ним и собрать файл .service
под контролем make
.Это не так сложно, и есть несколько технических преимуществ, некоторые из которых применимы, даже если не нужно беспокоиться о каких-либо заменах установочного каталога.
Вы можете сделать это так же, как configure
, запустивтот же самый шаблон, который вы уже используете через sed
, с соответствующим сценарием.Нечто подобное может появиться в вашем Makefile.am
:
SERVICE_SUBS = \
s,[@]VARIABLE_NAME[@],$(VARIABLE_NAME),g; \
s,[@]OTHER_VARIABLE[@],$(OTHER_VARIABLE),g
AutoBrightnessCam.service: AutoBrightnessCam.service.in
$(SED) -e '$(SERVICE_SUBS)' < $< > $@
Кроме того, как мне указать, что служебный файл должен быть (т.е. установлен) в / etc / systemd / system?
Вы используете Стандартный механизм Automake для указания пользовательских мест установки .Может быть, что-то вроде этого:
sytemdsysdir = $(sysconfdir)/systemd/system
systemdsys_DATA = AutoBrightnessCam.service
Возможно, есть лучший способ запустить это приложение во время загрузки без systemd?
НаСистема на основе systemd, systemd
контролирует то, что начинается при загрузке.Если вы хотите, чтобы машина автоматически запускала ваше приложение при загрузке, то я думаю, что ваши параметры ограничены
- Конфигурирование systemd для его запуска
- Конфигурирование чего-либо в цепочке программ, в конечном итоге запущенныхдля запуска systemd
- Взлом загрузчика или ядра для его запуска
Здесь есть место для разногласий, но я думаю, что первое из них является самым чистым и наиболее перспективными я не могу рекомендовать последнее.