“标准”是什么——我应该将应用程序(不仅仅是二进制文件,而是整个发行版)放置到 /usr/local 或 /usr/local/share 中。
例如 scala 或 weka —— 它包含示例、二进制文件、库等。所以它会是
/usr/local/scala-2.9.1
或者
/usr/local/share/scala-2.9.1
由于我是唯一的管理员,这对我来说不是什么大问题,但我更喜欢使用广泛使用的东西,而不是我自己的习惯。
重要的:我不是在询问您应该将应用程序拆分为 /usr/local/bin、/usr/local/lib 等的情况。相反,我问的是当您必须为整个应用程序保留一个主目录时的情况。
答案1
我认为 /opt 在这种情况下更标准。文件系统层次结构标准中的相关部分引用如下。
发行版可以在 /opt 中安装软件,但未经本地系统管理员同意,不得修改或删除本地系统管理员安装的软件。
 基本原理 在附加软件中使用 /opt 是 UNIX 社区中的一种成熟实践。 System V 应用程序二进制接口 [AT&T 1990] 基于 System V 接口定义(第三版),提供了与此处定义的非常相似的 /opt 结构。
英特尔二进制兼容性标准 v.2 (iBCS2) 也为 /opt 提供了类似的结构。
通常,支持系统上的软件包所需的所有数据都必须存在于 /opt/ 中,包括要复制到 /etc/opt/ 和 /var/opt/ 中的文件以及 /opt 中的保留目录。
使用 /opt 对发行版进行小的限制是必要的,因为发行版安装的软件和本地安装的软件之间可能会发生冲突,特别是在某些二进制软件中找到固定路径名的情况下。
/opt/ 下面的目录结构由软件的打包者决定,但建议将软件包安装在 /opt// 中并遵循与 /opt/package 指南类似的结构。偏离此结构的一个有效原因是支持包的文件可能安装在 /opt//lib 或 /opt//bin 中。
答案2
您应该仅使用/usr/local/share
不特定于特定体系结构/操作系统版本的文件。
之后,您可以决定是在 的现有子目录之间分发文件/usr/local
,还是在 中 创建一个新的专用目录/usr/local
(但后者尚未存在于可执行文件PATH
、LD_LIBRARY_PATH
或 中MANPATH
)。
看看FHS
答案3
在/opt
变得普遍之前,通常的地方是/usr/local/lib/<package>
。
答案4
安装本地应用程序时,有多个选项,具体取决于您想要访问和更新的方式。还应该注意的是,有些方法看起来更像您已有的系统,而有些则更加临时。我建议“最好”的解决方案是那些让事情更容易管理的解决方案。
我根据要进行自定义安装的软件包数量拆分了这个答案。分裂是基于我自己的经历。这些经验权衡了管理包裹所需的时间以及弄乱某些东西的风险。我并不是说我了解通用标准,而是指将其作为做出决定时的参考点。
仅适用于少数包裹,我会把附加软件包放在/opt
不妨碍其他一切的地方,这样就没有什么可以弄乱它们,也可以弄乱其他东西。这是我在 NAS 上使用的方法。但是,此方法会将二进制文件保留在您的 PATH 之外,因此您需要手动添加它们。如果只有很少的软件包需要安装,这种方法效果很好,但如果有很多软件包,就会变得很混乱。
此处更新非常简单,只需覆盖目录即可。
优点:
- 简单的
- 快速设置
- 没有机会影响系统的其他部分
- 卸载和安装一样简单
缺点:
- 如果要安装的软件包数量很大,就会变得相当乏味
- 让人
PATH
看起来凌乱
对于多个包裹,我建议使用/usr/local/<your package>
并符号链接可执行文件,/usr/local/bin
或者/usr/local/sbin
取决于您是否需要 root 权限。这样您就不必在每次添加新内容时更改 PATH,从而使 PATH 保持干净。这是我在 Arch 笔记本电脑上对所有非 pacman 软件包和 AUR 软件包使用的方法。
更新是通过覆盖包目录并检查符号链接是否仍然有效并修复(如果无效)来完成的。
优点
- 不会
PATH
弄乱 - 不影响基础系统
- 删除所有附加组件并返回到干净的基础系统仍然非常简单
缺点:
- 还有更多工作需要设置
- 仅删除一个包需要进行一些搜索
对于许多包。由于这不是您想要的情况,因此我将保持简短。我建议将包拆分为bin
、lib
、share
等并将它们安装到/usr/local
.这是为了保持结构清洁。您还可以指定谁可以在哪里书写等等。例如,您不希望除 root 之外的其他人修改可执行文件。
这里的更新有点棘手,因为您需要写入多个目录。我建议打包整个东西,让包管理器处理其余部分。
股份
该share
目录本身用于存放与体系结构无关的文件,如 Faheem 中所述关联与体系结构相关的文件应转到lib
、lib32
、lib64
等。