首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rpm生成无法使生成根dir生成。

rpm生成无法使生成根dir生成。
EN

Stack Overflow用户
提问于 2015-01-20 18:14:45
回答 1查看 3.1K关注 0票数 1

我正在为我们企业中使用的一个小程序制作一个rpm。rpm流程的%build部分可以工作。安装部分有问题。我引用了this article response,并且我认为我正确地引用了%{_buildroot}的目标位置。

我正在制作的程序将作为系统服务安装。因此,在为这个步骤实际生成rpm之后,我必须在安装过程中添加下一个步骤,包括安装到init.d位置的脚本并运行该安装。不过,一步一步。

构建错误如下(省略除%install之外的所有内容):

代码语言:javascript
复制
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是怎样的?我以为这是定义,但它似乎是不同的东西。

作为参考,我的规范文件

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-20 18:38:32

您正在尝试将一个文件安装到一个不存在的目录中(目前为止)。

RPM只自动为您创建%{buildroot}。任何你需要创造自己的东西。

所以当你跑的时候

代码语言:javascript
复制
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部分,然后将文件复制到其中。

你可以用这两种方法

代码语言:javascript
复制
%{__mkdir_p} '%{buildroot}%{_sbindir}'

代码语言:javascript
复制
%{__install} -d '%{buildroot}%{_sbindir}'

哪里

代码语言:javascript
复制
$ rpm -E '__mkdir_p = %{__mkdir_p}'
__mkdir_p = /bin/mkdir -p
$ rpm -E '__install = %{__install}'
__install = /usr/bin/install
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28052377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档