通过 rpmbuild 打包符号链接?

Posted

技术标签:

【中文标题】通过 rpmbuild 打包符号链接?【英文标题】:Packaging symlinks via rpmbuild? 【发布时间】:2011-11-23 05:35:06 【问题描述】:

是否可以让 rpmbuild 在打包时保留符号链接?

当前的行为是创建文件副本,我想避免这样做。

【问题讨论】:

【参考方案1】:

我不这么认为。我在我的包中使用了安装后脚本设置符号链接。

【讨论】:

【参考方案2】:

当然它支持符号链接。但是您实际上必须打包符号链接而不是将内容复制到 buildroot。将符号链接打包到名为 /newbin 的 /bin 目录的示例规范

Name:           test
Version:        1.0
Release:        1%?dist
Summary:        nothing
License:        GPLv2
Source0:        nothing

%description 

%install
rm -rf %buildroot
mkdir %buildroot
ln -sf /bin %buildroot/newbin

%files
/newbin

您还需要 SOURCES 目录中的 nothing 文件才能成功构建 rpm。使用 rpm 4.9.1.2 测试

【讨论】:

我会对 Stan 上面所说的进行一些更改,因为 -f 在创建链接中,所以不需要删除。 @Jane - 我不同意。清理 buildroot 以删除 %install 开头的杂物通常是个好主意。例如,假设以前版本的软件包安装了第二个文件“%buildroot/newlib”,但当前版本没有安装该文件。软件包的当前版本不会知道该文件,因此不会从 buildroot 中删除(按照您的建议)。通常,当前的 rpmbuild 实例不知道构建根目录中可能存在任何旧的垃圾。最好在安装步骤之前对整个 buildroot 进行核对。 在 buildroot 中创建符号链接不是一个好主意,原因有两个:1) 您不应该指向 buildroot 之外的任何内容。 2)如果您确实链接到您的 buildroot 中的某些内容(例如,假设您创建了一个 %buildroot/bin 并链接到该文件,那么复制文件部分中的文件将复制指向您的 buildroot 的链接,而不是实际的链接/bin 目录。最好的方法是使用 %ghost 文件并在 %post 部分中创建符号链接(请参阅下面的我的帖子)。【参考方案3】:

我知道这个 Q 已经过时了,但我是这样做的。

%install 部分,只需触摸将成为符号链接的文件。

touch %buildroot[path to your file]

%files 部分中,将其指定为 %ghost 文件:

%ghost [path to symlink file]

通过这样做,它将作为包文件的一部分列出,并且在卸载包时也会自动删除。

最后,在 %post 部分创建符号链接:

ln -sf [file to link to] [symlink]

【讨论】:

以上是关于通过 rpmbuild 打包符号链接?的主要内容,如果未能解决你的问题,请参考以下文章

通过 os 包创建相对符号链接

为啥我们通过链接阶段仍然错过符号?

通过符号链接访问多个文件

windows符号链接目标

静态链接

文件和目录详解---符号链接和硬链接