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

标签 installation autotools libtool pam

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

如何更改安装配置?

最佳答案

按顺序解决您的两件事:

  • 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-libsecuritydir configure.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/securityconfigure .

关于installation - 构建PAM模块并安装到/lib/security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033155/

相关文章:

shared-libraries - 如何使用 pkglib_LTLIBRARIES = test.la 只构建 *.so

autotools - 使用 Automake 在固定位置安装任意数据文件?

java - Gradle 的安装

php - 在 MAMP 上安装 Mongo 驱动程序

带有自动工具的 CDT 中的 C++11

c - Libtool 为对象添加前缀,但 gcov 要求它们没有前缀

shared-libraries - 为什么 libtool 的 "current"在 BSD 上用作 "SOVERSION"而不是 "major"?

ubuntu - Debian 放弃了对 .la 文件的支持;我现在如何构建?

wix - 基于 CheckBox 值显示 WIX 对话框

php - xdebug 安装不工作