使用某些对其他用户来说非常有效的 spec 文件构建 RPM 时出现故障,我发现它由于某种原因将当前目录更改为 rpmbuild/BUILD:
+ umask 022
+ cd /home/dev1/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
对于同一台机器上的其他用户来说,它会停留在启动的目录中,并能够找到所需的文件,因此它可以正常工作。
我仔细检查了我的 .rpmmacros,唯一的条目是指向 rpmbuild 目录的 topdir。
SPEC文件是:
Summary: core package
Name: core
Version: 2
Release: 1
Group: Applications
License: Commercial
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
Core package
%prep
%build
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/Core
mkdir -p $RPM_BUILD_ROOT/Core/etc
install -m 755 dist/Core.jar $RPM_BUILD_ROOT/Core/
install -m 755 dist/launch.sh $RPM_BUILD_ROOT/Core/
install -m 755 dist/etc/configuration.conf $RPM_BUILD_ROOT/Core/etc/
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
/Core/Core.jar
/Core/launch.sh
%config(noreplace) /Core/etc/configuration.conf
%preun
mv /Core/etc/configuration.conf /Core/etc/configuration.conf.bak
%postun
rm -f /Core/Core.jar
rm -f /Core/launch.sh
有什么想法吗,什么原因导致 rpmbuild 切换当前目录?
谢谢!
答案1
topdir in.rpmmacros
表示您的软件应该被构建在哪里,rpmbuild 建议在单独的目录中构建您的程序以避免与实时文件交叉流,这通常是一种好的行为。
如果您想消除这种行为,只需删除 topdir,.rpmmacros
尽管我不推荐这样做。
很可能是 SPEC 文件依赖于某些未在您的用户中设置但在其他用户中设置的环境变量,您应该比较一下是否是这种情况,如果是的话,请将此环境变量添加到 SPEC 文件中。
总之,我认为 SPEC 应该为这个问题的缺失负责,如果你把 SPEC 粘贴到这里,我可以帮你看看,并试着找出问题所在