我正在制作一些我想轻松安装的二进制文件、脚本等(使用我自己的 rpm)。因为我希望每个人都可以访问它们,所以我的直觉是将它们放在 /usr/bin 中;
- 无需更改路径
然而;我的可执行文件现在消失在所有其他可执行文件的池中;我怎样才能以简单的方式找到我放在那里的所有可执行文件。我在想:
- /usr/bin 中的一个子目录(我知道我不能这样做;只是为了说明我的想法)
- 另一个目录(/opt/myself/bin)并将每个可执行文件链接到/usr/bin(大量工作)
- 另一个目录(/opt/myself/bin)并将该目录链接到/usr/bin(这可能吗?)
做到这一点的“最好的、最符合Linux标准的方法”是什么?
编辑:我们在公司对此进行了讨论,并提出了这个次优选项:将二进制文件放入 /usr/bin/company 中,并使用来自 /usr/bin 的符号链接。我对这个解决方案并不满意(讨论正在进行中)
答案1
如果您将二进制文件捆绑到您自己的 RPM 中,那么获取它们是什么以及它们安装位置的列表就很简单了。
例子
$ rpm -ql httpd| head -10
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf
我建议将您的可执行文件放入 或 中,/usr/bin
然后/usr/local/bin
滚动您自己的 RPM。做到这一点非常简单,通过使用 RPM 管理软件部署,您将能够使用版本号标记捆绑包,从而进一步简化软件部署时的配置管理。
确定哪些 RPM 是“我的”?
您可以使用一些已知信息来构建 RPM,然后可以在构建之前就这些信息达成一致。我经常在我的域拥有的系统上构建软件包,因此只需搜索主机 X.mydom.com 上构建的所有 RPM 即可轻松找到 RPM。
例子
$ rpm -qi httpd
Name : httpd
Version : 2.4.7
Release : 1.fc19
Architecture: x86_64
Install Date: Mon 17 Feb 2014 01:53:15 AM EST
Group : System Environment/Daemons
Size : 3865725
License : ASL 2.0
Signature : RSA/SHA256, Mon 27 Jan 2014 11:00:08 AM EST, Key ID 07477e65fb4b18e6
Source RPM : httpd-2.4.7-1.fc19.src.rpm
Build Date : Mon 27 Jan 2014 08:39:13 AM EST
Build Host : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager : Fedora Project
Vendor : Fedora Project
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
这将是Build Host
RPM 内的线。
使用/usr/bin/company吗?
我可能会不鼓励使用这样的位置。主要是因为它要求所有系统都进行$PATH
增强以包含它并且是非标准的。定制东西一直是每个想要成为 Unix 管理员的“通行权”,但除非绝对必要,否则我总是不鼓励这样做。
像这样的定制的最大问题是,它们成为维护环境和让新人快速了解如何使用环境的负担。
我可以只从 RPM 获取文件列表吗?
是的,您可以实现此目的,但需要 2 次调用 RPM。第一个将构建在主机 X.mydom.com 上构建的软件包列表。获得此列表后,您需要重新调用 RPM 查询来查找每个包所拥有的文件。您可以使用以下衬里来实现这一目标:
$ rpm -ql $(rpm -qa --queryformat "%-30{NAME}%{BUILDHOST}\n" | \
grep X.mydom.com | awk '{print $1}') | head -10
/etc/pam.d/run_init
/etc/sestatus.conf
/usr/bin/secon
/usr/bin/semodule_deps
/usr/bin/semodule_expand
/usr/bin/semodule_link
/usr/bin/semodule_package
/usr/bin/semodule_unpackage
/usr/sbin/fixfiles
/usr/sbin/genhomedircon
答案2
一个明显的建议是以特殊的方式命名您的二进制文件或包。例如,您可以cm-
按照本文中给出的姓名首字母前缀添加 , 。如果您要安装 rpm,则需要/usr/bin
根据 FHS 进入它们(如果它们是用户级可执行文件)。他们不应该进入/usr/local/bin
例如。这仅适用于本地安装。
根据记录,我认为将二进制文件放入特殊目录并链接它们的想法根本没有吸引力,尽管我认为有时会这样做。还要记住,如果您需要找出哪些二进制文件属于哪个包,您只需查询打包系统即可。
答案3
不属于系统或发行版的二进制文件通常位于
/usr/local/bin
该目录通常位于标准目录中,$PATH
以便可以找到您的二进制文件。