【问题标题】:Custom installation directories自定义安装目录
【发布时间】:2010-03-16 12:32:43
【问题描述】:

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

假设用户选择了自定义安装目录,例如 ~/myprogram/。用户有责任确保我的程序可以执行,还是我的安装脚本必须这样做?

【问题讨论】:

    标签: linux unix installation packaging


    【解决方案1】:

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

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

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

    我希望这能回答你的问题。

    【讨论】:

      【解决方案2】:

      这将取决于您的安装程序是否由 root 运行。

      如果该软件安装在 /opt/myprogram 中,那么每个人都可以使用它,并且修复 /etc/ld.so.conf(或其等效项)是半合适的,以便任何人都可以使用它。

      在个人的主目录下,或者当安装程序不是由 root 运行时,您能做的最好的事情就是说“将 ~/myprogram/lib 添加到 LD_LIBRARY_PATH”。

      如果有一个环境变量可以用来识别安装位置,那么您可以安装一个脚本,确保在 ~/myprogram/bin 中设置了 LD_LIBRARY_PATH,然后运行带有环境设置的可执行文件。可能在 ~/myprogram/libexec 中,如果我没记错 FHS1.


      1 FHS 中似乎没有提到 libexec 目录。常用于autoconf及相关的GNU安装系统。

      【讨论】:

      • 谢谢。实际上,我想知道我的安装脚本是否应该这样做,或者用户。目前,我不问如何确保程序可以从任何目录执行。
      • 您的安装程序可以记下要求放置软件的位置。如果您使用的是 RPM,则有安装后脚本。如果你使用 script+libexec 机制,那么无论如何你的安装都是一样的——你在安装过程中用实际的安装目录编辑脚本,设置 LD_LIBRARY_PATH,然后继续。
      • @Alex Farber:您的问题的直接答案是“是的,如果可能的话,软件安装程序应确保软件在安装完成后可用”。想想你安装的其他软件包——你必须做什么才能让它工作?你不应该对你的软件做更多的事情。
      • 也许我的英语有问题……再说一次,我不问如何做到这一点。我的问题是:如果用户选择自定义安装目录,设置运行环境是我的责任,还是用户的责任。这种情况的常见准则是什么?
      • @Alex:抱歉 - 我没看到你的英语有问题。安装程序软件应设置系统,以便在可能的情况下立即使用该软件。如果安装软件由于某种原因无法执行此操作,则由用户负责。但这是不可取的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多