Deployment rpm生成无法生成根目录

Deployment rpm生成无法生成根目录,deployment,centos,rpm,Deployment,Centos,Rpm,我正在为我们企业中使用的一个小程序制作rpm。rpm过程的%构建部分起作用。我在安装部分遇到了问题。我已经引用了并且我相信我正确地引用了关于%{u buildroot}的目标位置 我正在制作的程序将作为系统服务安装。因此,在为这一步实际生成rpm之后,我必须在安装过程中添加下一步,即包括安装到init.d位置的脚本并运行该安装。但一步一个脚印 生成错误如下(省略除%install以外的所有内容): 现在,我的rpmbuild目录没有目录/home/packager/rpmbuild/BUILDR

我正在为我们企业中使用的一个小程序制作rpm。rpm过程的%构建部分起作用。我在安装部分遇到了问题。我已经引用了并且我相信我正确地引用了关于%{u buildroot}的目标位置

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

生成错误如下(省略除%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:%(mktemp-ud%{u-tmppath}/%{name}-%{version}-%{release}-XXXXXX)
如何从%{u-BuildRoot}的定义开始?我以为这就是定义,但似乎有些不同

作为参考,我的规范文件

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}%{u sbindir}
扩展为
/home/packager/rpmbuild/buildroot/o2arbitord-1.0-1.el6.x86\u 64/usr/sbin
RPM已经为您创建了
/home/packager/rpmbuild/buildroot/o2arbitord-1.0-1.el6\u 64

您需要创建该路径的
/usr/sbin
部分,然后将文件复制到其中

你可以用任何一种方法

%{__mkdir_p} '%{buildroot}%{_sbindir}'

在哪里


您需要先创建目录,然后才能将文件安装到其中<代码>%{uuuumkdir\up}%{buildroot}%{uSBindir}或
%{{uuuuu install}-d%{buildroot}%{sbindir}
@EtanReisner谢谢。我不知道那两个宏。我试图在%prep部分创建目录,但失败了。我将您的两个建议中的第一个放在%install中,当然,它起了作用。太糟糕了,我不能接受一个评论作为回答。这是一件奇怪的事情。我知道我看到这个过程已经完成了
/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86\u 64
。但那个目录并不存在。添加您在这里提到的第一行,可以创建我需要的每个目录(当然)。非常感谢。那个目录什么时候不存在?RPM将为您清除失败的生成。它应该在构建期间存在,并且在构建失败后可能不会存在。此外,在CentOS 6上,您不需要手动设置
BuildRoot
,通常也不应该这样做(如果您想控制常规位置,可以设置_buildrootdir)。
%{__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