gpt4 book ai didi

java - 如何在 rpm 中创建指向外部 rpm 提供的文件的符号链接(symbolic link)?

转载 作者:行者123 更新时间:2023-12-01 09:57:03 25 4
gpt4 key购买 nike

我正在尝试将两个符号链接(symbolic link)打包到外部 dep1.rpmdep2.rpm 提供的相应 jar 中。这些在 my-app-extra.spec 中声明为依赖项:

Requires: dep1
Requires: dep2

我的 %install 符号链接(symbolic link)了他们的 jar(%dep1jar%dep2jar):

%install
%{__install} -d -m 0755 $RPM_BUILD_ROOT%{_javadir}
%{__install} -d -m 0755 $RPM_BUILD_ROOT%{_javadir}/%{my_app}
pushd $RPM_BUILD_ROOT%{_javadir}/%{my_app}
for jar in %dep1jar %dep2jar
do
ln -sf ../"${jar}" "${jar}"
done
popd

但是 rpmbuild 失败并显示:

ERROR: link target doesn't exist (neither in build root nor in installed system):
/usr/share/java/my-app/dep1.jar -> /usr/share/java/dep1.jar
Add the package providing the target to neededforbuild and Requires
// same error for dep2.jar
error: Bad exit status from /var/tmp/rpm-tmp.31253 (%install)

有什么办法可以绕过这个 rpmbuild 检查吗?

<小时/>

背景

我有一个 java 应用程序(可选)需要两个外部库来提供扩展功能。为了安装这些库,我创建了 dep1.rpmdep2.rpm 将 jar 存储在 %_datadir/java 下,以及一个额外的 my-app-extra rpm 应该对 %_datadir/java/my-app 下的符号链接(symbolic link)(遵循 linux 下一些明显建立的 java 打包约定)。

但我无法找到如何强制 rpmbuild 构建此 rpm,而不将外部库声明为 BuidRequires 并首先安装它们。

我想要什么

这就是我所追求的总结(简化,因为完整的解决方案涉及版本控制):

/usr/share/java/dep1.jar (from dep1.rpm)
/usr/share/java/dep2.jar (from dep2.rpm)

/usr/share/java/my-app/dep1.jar -> ../dep1.jar (from my-app-extended.rpm)
/usr/share/java/my-app/dep2.jar -> ../dep2.jar (from my-app-extended.rpm)

注意:我现在正在探索 rpm 子包的可能性,但我不知怎的希望这在没有子包的情况下是可能的。

最佳答案

我可以让它“接触”目标并将它们从文件中排除。在my-app-extra.spec中:

%install
%{__install} -d -m 0755 $RPM_BUILD_ROOT%{_javadir}
%{__install} -d -m 0755 $RPM_BUILD_ROOT%{_javadir}/%{my_app}
pushd $RPM_BUILD_ROOT%{_javadir}/%{my_app}
for jar in %{dep1jar} %{dep2jar}
do
# touch! rpmbuild aborts the build if symlink targets missing!
touch ../"${jar}"
ln -sf ../"${jar}" "${jar}"
done
popd

# more stuff ...

%files
# ...
# Exclude dummy (touched) files!
%exclude %{_javadir}/%{dep1jar}
%exclude %{_javadir}/%{dep2jar}
%{_javadir}/%{my_app}/%{dep1jar}
%{_javadir}/%{my_app}/%{dep2jar}

关于java - 如何在 rpm 中创建指向外部 rpm 提供的文件的符号链接(symbolic link)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37119827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com