2010-03-16 150 views
1

假设我正在为包含可执行文件和共享库的程序编写安装脚本。默认情况下,此脚本将可执行文件放置到/ usr/local/bin,并将共享库放置到/ usr/local/lib。在这种情况下,我的程序可以由任何用户通过在命令行输入其名称来执行。自定义安装目录

假设用户选择自定义安装目录,如〜/ myprogram /。用户有责任确保我的程序可以执行,否则我的安装脚本必须执行此操作?

回答

2

通常,“make install”或安装脚本使用install命令复制文件并设置权限(包括执行位)。

安装过程应该追加任何新的(即如果它不存在)目录用于共享库,或者告诉用户需要添加什么。例如,如果程序安装在/etc/ld.so.conf中尚未列出的目录中或目录/etc/ld.so.conf.d/中的配置文件中。

仅供参考,您可以参考的两个主要包装指南是Linux Standard BaseDebian Policy Manual

我希望能回答你的问题。

1

这取决于您的安装程序是否以root身份运行。

如果软件安装在/ opt/myprogram中,那么所有人都可能会使用它,并且修复/etc/ld.so.conf(或其等价物)是半合适的,因此任何人都可以使用它。

在个人主目录下,或者当安装程序不是以root运行时,最好的办法是说“Add〜/ myprogram/lib to LD_LIBRARY_PATH”。

如果存在可用于识别安装位置的环境变量,则可以安装一个脚本,以确保在〜/ myprogram/bin中设置了LD_LIBRARY_PATH,该脚本随后会使用环境集运行可执行文件。如果我记得FHS正确可能在〜/ myprogram/libexec。


所述的libexec目录不出现在FHS被提及。它通常在autoconf和相关的GNU安装系统中使用。

+0

谢谢。其实,我想知道,我的安装脚本是否应该这样做,或者是用户。现在,我不问如何确保程序可以从任何目录执行。 – 2010-03-16 12:49:03

+0

您的安装人员可以记下要求放置软件的位置。如果您使用RPM,则有安装后脚本。如果使用脚本+ libexec机制,那么无论您在安装过程中使用实际安装目录编辑脚本,设置LD_LIBRARY_PATH,然后执行,安装都是相同的。 – 2010-03-16 12:52:49

+1

@Alex Farber:您的问题的直接答案是“是的,如果可能的话,软件安装程序应该确保软件在安装完成时可用”。想想你安装的其他软件包 - 你需要做些什么才能使它起作用?你不应该对你的软件做更多的事情。 – 2010-03-16 13:05:00