构建PAM模块并安装到/ lib / security中

时间:2014-09-25 07:40:05

标签: install autotools libtool pam

我目前正在尝试使用autotools构建和安装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模块更合适的选择。

如何更改安装配置?

1 个答案:

答案 0 :(得分:3)

按顺序解决你的两件事:

  • 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发行版中打包您的程序。包装系统。

正确的方法是将责任推送到安装软件包的任何人:使用--with-libsecuritydirconfigure.ac添加AC_ARG_WITH参数,并将其默认为$(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