在 Linux 中,根据文件系统层次结构标准,/opt
是附加应用程序软件包的指定位置。因此,在开发我自己的软件包(不依赖于其他任何东西)时,我会将其放置在 中/opt/somepackage
,并在其下方具有我选择的层次结构。
根据上面的链接,FreeBSD 并不严格遵循 FHS,而是将第三方软件包安装到/usr/local
. OPNsense 基于 FreeBSD,将自己的代码(至少部分)安装到/usr/local/opnsense
. FreeBSD 上的联机hier
帮助页没有提及/opt
- 因此在该位置安装的软件包不太可能与其他任何东西发生冲突,但会引入一个顶级路径,几乎与直接安装到/somepackage
.
FreeBSD 中合适的安装位置是什么?/usr/local/somepackage
而不是/opt/somepackage
,再次在下面有我选择的层次结构?
请注意,我看过以下帖子,它们提供了一些见解,但没有完全回答我的问题:
- 在 Linux 中,我会使用“/opt”来表示自定义软件。在 FreeBSD 中?– 特别询问不受包管理器管理的软件,而我询问的是开发我自己的
.pkg
. - 什么可能相当于 OpenBSD 中的 Linux /opt/?– 询问 OpenBSD,这可能与 FreeBSD 不同
答案1
至少在 OpenBSD 上(我猜这同样适用于 FreeBSD),/usr/local
本质上是由操作系统的包系统管理的。如果您的“定制软件包”将不是如果由包系统处理,则可能会与其他包发生冲突,例如具有相同名称的文件。因此,除非您正在构建要通过操作系统的软件包系统安装的软件包,否则我会坚持将其放在 下/opt
,以确保它不会干扰其他软件包(或被干扰)。
答案2
/usr/local
vs.的使用/opt/
超越了 BSD,并且早于 Linux。
通常,这两个目录都用于安装操作系统不附带的软件。关于软件“不是由包管理器安装”的引用实际上意味着不是来自操作系统提供的存储库和包。许多第三方包管理器和存储库将安装到 /opt 中。
从历史上看,所有本地安装的(非发行版)软件包/usr/local
通常都会转储到{bin,sbin,man,lib}
某种层次结构中。
但这很快就会变得混乱,因为来自多个包的文件将全部混杂在一起,可能会互相干扰,并使更新路径不清楚。
因此开始了一种安装/usr/local/$packagename/{bin,lib,man}
更好但仍然混乱的东西的做法。为了解决这个问题,鼓励使用 /opt 来解决这个问题,但这/usr/local/
仍然是一团糟,但至少有一些包不在这个混乱之中。
但实际上,最终,您可以在任何地方安装软件,包括$HOME/mysillyapps/$package/{bin,man,lib}
并且唯一的要求是您添加bin
($PATH
尽管其他环境也有帮助),因此使用/usr/local/
or/opt
是一种不可知的东西,这在任何地方都有效。
希望通过将 $packagename (或 $packagename-$version )添加到目录名称中,无论安装在何处,与包管理器安装的应用程序发生冲突的风险都会降低。 (当然你不是手动安装和包管理器安装同一个包!)
这里唯一与操作系统风格相关的是 /usr/local/bin 可能已经默认添加到 PATH 中。