我目前正在尝试使用自动工具构建和安装 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/security
至configure
.
关于installation - 构建PAM模块并安装到/lib/security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033155/