rpm 构建无法生成构建根目录
rpm build fails to make build root dir
我正在为我们企业中使用的一个小程序制作 rpm。 rpm 进程的 %build 部分有效。我在安装部分遇到了问题。我已经引用了 this article response,我相信我正确地引用了关于 %{_buildroot} 的目标位置。
我正在制作的程序将作为系统服务安装。因此,在为这一步实际生成 rpm 之后,我必须在我的安装过程中添加下一步,即包括安装到 init.d 位置的脚本和安装的 运行 .不过一步一个脚印。
构建错误如下(省略除 %install 外的所有内容):
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.eUDaCK
+ umask 022
+ cd /home/packager/rpmbuild/BUILD
+ '[' /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64 '!=' / ']'
+ rm -rf /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
++ dirname /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
+ mkdir -p /home/packager/rpmbuild/BUILDROOT
+ mkdir /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
+ cd o2arbitord-1.0
+ LANG=C
+ export LANG
+ unset DISPLAY
+ install -m 555 /home/packager/rpmbuild/BUILD/o2arbitord-1.0/o2arbitord /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
install: cannot create regular file `/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin': No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.eUDaCK (%install)
现在,我的rpmbuild目录没有目录/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
。虽然我知道这是问题的一部分,但 rpmbuild 进程也没有生成目录 /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
。我不明白的是:为什么?查看上面的脚本输出,您可以清楚地看到行:mkdir /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
。那么,为什么没有创建目录呢?
无论 %{_buildroot} 的定义如何,行 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
是什么?我以为那是定义,但它似乎有所不同。
作为参考,我的规范文件
Name: o2arbitord
Version: 1.0
Release: 1%{?dist}
Summary: a daemon
Group: Applications/System
License: GPL
URL: http://My.site
Source0: %{name}-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildArch: x86_64
BuildRequires: libusb1-devel
#Requires:
%description
%prep
%setup -q
%build
make -f o2arbitord.mk
%install
install -m 555 %{_builddir}/%{name}-%{version}/%{name} %{buildroot}%{_sbindir}
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
/usr/sbin/o2arbitord
%changelog
您正在尝试将文件安装到(尚)不存在的目录中。
RPM 只会自动为您创建 %{buildroot}
。您需要自己创建任何内容。
所以当你 运行
install -m 555 %{_builddir}/%{name}-%{version}/%{name} %{buildroot}%{_sbindir}
其中 %{buildroot}%{_sbindir}
扩展为 /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
RPM 已经为您创建了 /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
。
您需要创建该路径的 /usr/sbin
部分,然后将文件复制到其中。
您可以使用任一方法来做到这一点
%{__mkdir_p} '%{buildroot}%{_sbindir}'
或
%{__install} -d '%{buildroot}%{_sbindir}'
在哪里
$ rpm -E '__mkdir_p = %{__mkdir_p}'
__mkdir_p = /bin/mkdir -p
$ rpm -E '__install = %{__install}'
__install = /usr/bin/install
我正在为我们企业中使用的一个小程序制作 rpm。 rpm 进程的 %build 部分有效。我在安装部分遇到了问题。我已经引用了 this article response,我相信我正确地引用了关于 %{_buildroot} 的目标位置。
我正在制作的程序将作为系统服务安装。因此,在为这一步实际生成 rpm 之后,我必须在我的安装过程中添加下一步,即包括安装到 init.d 位置的脚本和安装的 运行 .不过一步一个脚印。
构建错误如下(省略除 %install 外的所有内容):
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.eUDaCK
+ umask 022
+ cd /home/packager/rpmbuild/BUILD
+ '[' /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64 '!=' / ']'
+ rm -rf /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
++ dirname /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
+ mkdir -p /home/packager/rpmbuild/BUILDROOT
+ mkdir /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
+ cd o2arbitord-1.0
+ LANG=C
+ export LANG
+ unset DISPLAY
+ install -m 555 /home/packager/rpmbuild/BUILD/o2arbitord-1.0/o2arbitord /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
install: cannot create regular file `/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin': No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.eUDaCK (%install)
现在,我的rpmbuild目录没有目录/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
。虽然我知道这是问题的一部分,但 rpmbuild 进程也没有生成目录 /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
。我不明白的是:为什么?查看上面的脚本输出,您可以清楚地看到行:mkdir /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
。那么,为什么没有创建目录呢?
无论 %{_buildroot} 的定义如何,行 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
是什么?我以为那是定义,但它似乎有所不同。
作为参考,我的规范文件
Name: o2arbitord
Version: 1.0
Release: 1%{?dist}
Summary: a daemon
Group: Applications/System
License: GPL
URL: http://My.site
Source0: %{name}-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildArch: x86_64
BuildRequires: libusb1-devel
#Requires:
%description
%prep
%setup -q
%build
make -f o2arbitord.mk
%install
install -m 555 %{_builddir}/%{name}-%{version}/%{name} %{buildroot}%{_sbindir}
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
/usr/sbin/o2arbitord
%changelog
您正在尝试将文件安装到(尚)不存在的目录中。
RPM 只会自动为您创建 %{buildroot}
。您需要自己创建任何内容。
所以当你 运行
install -m 555 %{_builddir}/%{name}-%{version}/%{name} %{buildroot}%{_sbindir}
其中 %{buildroot}%{_sbindir}
扩展为 /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
RPM 已经为您创建了 /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
。
您需要创建该路径的 /usr/sbin
部分,然后将文件复制到其中。
您可以使用任一方法来做到这一点
%{__mkdir_p} '%{buildroot}%{_sbindir}'
或
%{__install} -d '%{buildroot}%{_sbindir}'
在哪里
$ rpm -E '__mkdir_p = %{__mkdir_p}'
__mkdir_p = /bin/mkdir -p
$ rpm -E '__install = %{__install}'
__install = /usr/bin/install