我很难理解autoconf工具链是如何处理init脚本的--这些脚本通常放在/etc/init.d/中以启动/停止守护进程或服务。
autoconf工具链指定了一系列婚前安装目录变量,如$bindir (可执行文件通常是/usr/local/bin)或$includedir (用于头文件,可能是/usr/include)等等。
但是在/etc/init.d中的init文件呢?在目录变量列表上阅读时,我没有看到任何与/etc/init.d/类似的东西
那么这里的惯例是什么呢?我是否只需要选择一个安装目录变量并使用AC_SUBST覆盖它,这样我就可以将脚本安装到/etc/init.d
发布于 2015-01-30 08:33:15
最简单的答案;在顶层源目录Makefile.am中:
# Install my_script in $(bindir) and distribute it.
dist_bin_SCRIPTS = my_script因此,$(bindir)是脚本的默认设置。
--
对于一个更健壮的实现,它实际上涵盖了守护进程/服务的init脚本(首先引用了权威的源代码):
不需要EXTRA_DIST或任何构建规则: Automake从AC_CONFIG_FILES中推断它们(参见需求)。CLEANFILES仍然很有用,因为在默认情况下,Automake将清除AC_CONFIG_FILES的目标,而不是清除。
链接到源(节点/Scripts.html):
示例
安装到自定义位置:
# Yes, even though its `init_d_SCRIPTS`, we use `init_ddir`,
# with-out a second underscore.
init_ddir = $(sysconfdir)/rc.d/init.d
init_d_SCRIPTS = <yourscript>
# CLEANFILES = $(init_d_SCRIPTS)请注意,$(sysconfdir)代表$(prefix)/etc;init.d或rc.d/init.d的基本路径,您可以/应该(?)如果您的init脚本是由Autotools生成的,请在两个示例中注释CLEANFILES行。
或安装到默认位置:
bin_SCRIPTS = <yourscript>
# CLEANFILES = $(bin_SCRIPTS)哪一个是$(bindir)
编辑
上面的两个例子都假设您让Autotools生成init_d_SCRIPTS文件,但是如果我们想要分发一个已经创建的脚本并将它安装到我们的$(init_ddir)位置,该怎么办?
init_ddir = $(sysconfdir)/init.d
dist_init_d_SCRIPTS = <yourscript>诀窍是dist不需要后面跟着_bin_SCRIPTS,它可以是dist_<your_var>_SCRIPTS。主SCRIPTS让Autotools知道值是脚本以及如何处理它,而前面的关键字dist提醒Automake它不会为我们创建文件,并指示Automake不要在脚本源目录中查找makefile模板。
我想要添加这个小编辑,因为我只需要自己修改一个脚本,我要分发给我的源代码。
--
额外
对于那些将在打包(特别是Debian打包)方面担心他们的init脚本的人来说,这或多或少地提醒了我一下->:
https://www.debian.org/doc/manuals/maint-guide/dother.en.html#initd
在我的文件系统根目录中直接安装init.d文件和conf文件,而不是像在包构建过程中那样在/etc和/etc/init.d中安装init.d文件和conf文件,而不是在debian/<package>/<location>中安装init.d文件和conf文件时出现的错误。
我发现最终我不得不删除Debian的打包教程中提供的一个附加规则,在这里他们让您重写dh_auto_install。特别是在debian/rules中的这个位
#!/usr/bin/make -f
%:
dh $@
# If installing an upstream init.d script:
override_dh_installinit:
dh_installinit --name=<scriptname> --onlyscripts
# Remove the following:
# override_dh_auto_install:
# $(MAKE) DESTDIR=$$(pwd)/debian/<package> prefix=/usr install删除该规则(在添加我的init.d脚本和conf文件之后才需要删除)之后,所有生成和编译的内容都绝对是perfectly....Including --实际上--使用/usr前缀将回收箱丢弃到它们的目的地,这是重写最初想要的效果。
对dh_installinit调用的覆盖告诉debuild不要像makefile那样安装init脚本,并指定只进行update-rc.d调用来向系统注册脚本。我选择将脚本命名为与包不同的名称,因此需要传递-- name =选项。
希望这能帮助到别人,我知道如果这个答案能继续存在的话,将来会对我有帮助的。
发布于 2014-11-10 10:18:23
根据这 (加上一些日期),Autotools可能不太适合这样做。尽管如此,提供了这些指示(经小修改后转载):
EXTRA_DIST = bootscript
install-exec-hook:
cp $(srcdir)/bootscript /etc/init.d
cd /etc/rc3.d && $(LN_S) ../init.d/bootscript S900bootscript
cd /etc/rc4.d && $(LN_S) ../init.d/bootscript S900bootscript
cd /etc/rc5.d && $(LN_S) ../init.d/bootscript S900bootscripthttps://stackoverflow.com/questions/26837148
复制相似问题