我应该将应用程序放入 /usr/local 还是 /usr/local/share ?

我应该将应用程序放入 /usr/local 还是 /usr/local/share ?

“标准”是什么——我应该将应用程序(不仅仅是二进制文件,而是整个发行版)放置到 /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(但后者尚未存在于可执行文件PATHLD_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弄乱
  • 不影响基础系统
  • 删除所有附加组件并返回到干净的基础系统仍然非常简单

缺点:

  • 还有更多工作需要设置
  • 仅删除一个包需要进行一些搜索

对于许多包。由于这不是您想要的情况,因此我将保持简短。我建议将包拆分为binlibshare等并将它们安装到/usr/local.这是为了保持结构清洁。您还可以指定谁可以在哪里书写等等。例如,您不希望除 root 之外的其他人修改可执行文件。

这里的更新有点棘手,因为您需要写入多个目录。我建议打包整个东西,让包管理器处理其余部分。

股份

share目录本身用于存放与体系结构无关的文件,如 Faheem 中所述关联与体系结构相关的文件应转到liblib32lib64等。

相关内容