Software-Installation

將二進製文件放在哪裡,以便它們始終在路徑中並且可以輕鬆找到

  • April 2, 2014

我正在製作一些我想輕鬆安裝的二進製文件、腳本等(使用我自己的 rpms)。因為我希望每個人都可以訪問它們,所以我的直覺是將它們放在 /usr/bin 中;

  • 無需更改 PATH

然而; 我的執行檔現在消失在所有其他執行檔中;我怎樣才能以一種簡單的方式找回我放在那裡的所有執行檔。我在想:

  • /usr/bin 中的子目錄(我知道我不能這樣做;只是為了說明我的想法)
  • 另一個目錄(/opt/myself/bin)並將每個執行檔連結到 /usr/bin(大量工作)
  • 另一個目錄(/opt/myself/bin)並將目錄連結到 /usr/bin(這可能嗎?)

做到這一點的“最好、最符合 linux 的方式”是什麼?

編輯:我們在公司對此進行了討論,並提出了這個次優選項:將二進製文件放在 /usr/bin/company 中,並帶有來自 /usr/bin 的符號連結。我對這個解決方案不感興趣(討論正在進行中)

如果您將二進製文件捆綁到您自己的 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 HostRPM 中的一條線。

使用/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

引用自:https://unix.stackexchange.com/questions/122749