我正在尝试使用 redis RPM氟PM
当我运行以下命令时,所有二进制文件都安装到 /tmp/installdir/usr/local/bin
cd /tmp/redis2-8
PREFIX=/tmp/installdir/usr/local/ make
PREFIX=/tmp/installdir/usr/local/ make install
我如何编译redis以便redis-server
安装二进制文件并安装/tmp/installdir/usr/local/sbin
其他所有内容(等..) ?redis-cli, redis-benchmark
/tmp/installdir/usr/local/bin
答案1
开发fpm
者有话要说关于特定发行版指南的主题:
我想要一种简单的方法来创建包,而不需要所有的废话。在我自己的基础设施中,我对 Debian 政策和 RedHat 打包指南不感兴趣 - 我对我的团队自己的风格文化感兴趣,并且对完成工作有非常浓厚的兴趣。
(这并不是说您不能使用 FPM 创建遵守 Debian 或 RedHat 政策的软件包,如果您愿意的话,您可以而且应该这样做)
因此,您观察到的默认行为(所有内容都放置在其中)/usr/local/bin
似乎是该群体的偏好。他们并不孤单;不仅是 Fedora 等自由桌面网站同意合并/bin
并/sbin
进入/usr/bin
。虽然当前草案的 FSH 仍然使用sbind
目录,但似乎确实存在针对它们的运动。
无论如何,Fedora 人有一些非常好的论据其中sbin
包括(强调我的):
a) sbin和bin的拆分需要
上游开发者的灵力:简单的事实是,在这些目录之间移动二进制文件确实很困难,因此理论上开发人员需要在第一次引入二进制文件时知道它是否曾经作为非特权用户调用它可能是有意义的(因为在这种情况下,二进制文件属于 /bin,而不是 /sbin)。历史表明,开发人员经常将他们的东西放在错误的目录中,参见 /sbin/arp、/sbin/ifconfig、/usr/sbin/httpd然后就没有明智的方法来修复问题了,因为更改路径意味着破坏所有硬编码脚本。由于性能原因,我们实际上鼓励在脚本中硬编码路径。最终的结果是,许多上游开发人员无条件地将他们的东西放在 bin 中,而根本不考虑 sbin,这完全破坏了 sbin 的目的(即在 systemd 中,我们不会在 sbin 中粘贴单个二进制文件,因为我们无法确定它的任何工具对于非 root 用户永远不会有用。 systemd 是低级的、特定于系统的)。
b) /sbin 的原始定义已完全过时(即 sbin 中的“s”最初代表“静态”二进制文件)
c) /bin 与 /sbin 与安全无关,从来都不是。这样做
会是默默无闻的安全,而且也相当愚蠢。d)将 /bin 与 /sbin 分开纯粹且仅与 $PATH 相关,而 $PATH 纯粹且仅是为了方便 shell 用户访问其中的工具。这里强调的是“轻松”。这并不是让用户更难访问某些工具的方法。或者换句话说:如果您的目的是向用户隐藏某些工具以免让他感到困惑,那么有更好的地方可以做到这一点:文档可以将它们记录在单独的部分左右。我认为尝试通过玩游戏来教育用户在 shell 中按下 TAB 时可以看到的内容是没有任何意义的。 [...]
这些观点都被提出过/sbin
,但它们似乎同样适用于/usr/local/sbin
。所以,虽然 @slm 给了你我确信是做你真正要求的事情的方法,但最好忽略sbin
并让它fpm
做它的事情。
答案2
如果您想控制各种文件的安装位置,您必须负责.spec
直接在 RPM 文件中手动执行此操作。
例子
.spec
以下是我在几年前撰写的博客系列中创建的JBOSS RPM 文件的片段。本系列文章的标题是:CentOS RPM 教程第 3 部分 - 构建您自己的 JBoss RPM。
...
%prep
%setup -q
%build
%install
rm -fr $RPM_BUILD_ROOT
mkdir -m 0755 -p $RPM_BUILD_ROOT/opt/%{name}/%{name}-%{version}
cp -R * $RPM_BUILD_ROOT/opt/%{name}/%{name}-%{version}
%clean
rm -rf $RPM_BUILD_ROOT
%post
echo " "
echo "install of jboss complete!"
%files
%defattr(-,root,root)
/opt/%{name}/*
...
在上面的%install
节中,您需要指定您$RPM_BUILD_ROOT
希望将软件“安装”到的位置。您可以在此处分别创建sbin
和bin
目录。
对使用此 RPM“安装”的文件进行分类时,您需要在该%files
部分中反映它们的位置。$HOME/.rpmmacros
如果您发现自己一直在创建相同的宏,则可以通过在文件中创建 bulid 宏来简化此操作。
例如,我有一个%_topdir
在构建东西时使用的宏,如下所示:
%_topdir %(echo $HOME)/rpmbuild
然后可以在您的文件中使用这些宏.spec
。