【问题标题】:Building a PAM module and install into /lib/security构建 PAM 模块并安装到 /lib/security
【发布时间】:2014-11-19 21:44:58
【问题描述】:

我目前正在尝试使用自动工具构建和安装 PAM 模块。虽然构建过程进展顺利,但 install 目标的行为并不如我所愿。

$ make install
bash ../libtool --mode=install install -c pam_mymodule.la '/usr/local/lib'

在上面的输出中,我删除了 GNU 可执行文件的绝对路径。

在这次通话中有两件事困扰着我:

  • make 尝试移动 pam_mymodule.la 文件,而我希望它移动 .libs/pam_mymodule.so 文件。
  • make 尝试将其移动到 /usr/local/lib,而 /lib/security 是更适合 PAM 模块的选择。

如何更改安装配置?

【问题讨论】:

标签: installation autotools libtool pam


【解决方案1】:

按顺序处理您的两件事:

  • libtool 脚本会拦截 install 指令,并将 .so 文件安装在适当的位置。

  • 它把它放在/usr/local/lib 可能是因为你在lib_LTLIBRARIES 中列出了它(虽然我不能确定你是否不显示你的代码)并且你的--prefix 设置为默认值/usr/local

最后一个是困难的,因为 Autotools 的官方立场是所有用户安装的程序都属于 /usr,而许多其他工具预计东西都在 /lib/something。这是我个人认为错误的一种方法:

# Don't do this
libsecuritydir = /lib/security
libsecurity_LTLIBRARIES = pam_mymodule.la

这绕过了--prefix,如果你尝试在本地安装你的包而不直接写入你的实时系统,这将是非常可怕的错误,相信我,你会想要在某个时候这样做。它还会阻止您在大多数 Linux 发行版的打包系统中打包您的程序。

正确的方法是将责任推到安装包的人身上:使用AC_ARG_WITH--with-libsecuritydir 参数添加到configure.ac,并将其默认设置为$(libdir)/security

AC_ARG_WITH([libsecuritydir],
    [AS_HELP_STRING([--with-libsecuritydir],
        [Directory for PAM modules, pass /lib/security for live install])],
    [], [with_libsecuritydir='$(libdir)/security'])
AC_SUBST([libsecuritydir], [$with_libsecuritydir])

然后就做

libsecurity_LTLIBRARIES = pam_mymodule.la

Makefile.am.

如果您想将实时版本直接安装到系统中(或正在构建二进制包),请将 --with-libsecuritydir=/lib/security 传递给 configure

【讨论】:

  • 完美,谢谢!我担心我会在这里遇到一些与可移植性相关的问题,但使用选项似乎确实是最好的解决方案。不过请注意:您的AS_IF 可能想要针对x 而不是xno 进行测试,否则当根本没有指定该选项时libsecuritydir 将保持为空(除非您明确使用--with-libsecuritydir=no
  • 没错,我应该使用AC_ARG_WITH 的第四个action-if-not-given 参数来做到这一点。我会编辑答案。
猜你喜欢
  • 2018-02-21
  • 1970-01-01
  • 2016-07-05
  • 2021-12-03
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多