linux – RPM build没有这样的文件或目录

我想用许多小文件创建简单的RPM文件.

[root@laptop rpm]# tree
.
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
│   └── some_agent-1.0.tar.gz
├── SPECS
│   ├── kernel.spec
│   └── kernel.spec~
└── SRPMS

6 directories, 3 files
[root@laptop rpm]# 

我有这个spec文件:

Summary: some_agent
Name: some_agent
Version: 1.0
Release: 1
License: Apache
Group: application
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
%description
Test 

%prep
%setup -q

%build


%install
rm -rf $RPM_BUILD_ROOT
make root=$RPM_BUILD_ROOT install

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%doc
agent/*

但是当我尝试构建RPM包时,我收到此错误:

[root@laptop ~]$rpmbuild -bb -v ~/rpm/SPECS/kernel.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.RUwFW5
+ umask 022
+ cd /home/rcbandit/rpm/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /home/rcbandit/rpm/BUILD
+ rm -rf some_agent-1.0
+ /usr/bin/gzip -dc /home/rcbandit/rpm/SOURCES/some_agent-1.0.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd some_agent-1.0
/var/tmp/rpm-tmp.RUwFW5: line 38: cd: some_agent-1.0: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.RUwFW5 (%prep)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.RUwFW5 (%prep)
[root@laptop ~]$^C

你知道我的错误在哪里吗?

我复制了源文件,但由于某种原因找不到它.

解决方法:

%install 
install -m 0755 -d %{buildroot}/opt/agent
cp -a your_milion_files/* %{buildroot}/opt/agent

%files 
/opt/agent

指定%dir时,它将仅包含该目录而不包含任何其他内容.如果没有%dir pragma,它将包含该目录和其中的所有内容.
所以你只需要在%install部分中复制那个目录中的文件.

编辑:

假设some-agent-1.0.tar.gz包含:

agent/binary/agent.sh
agent/data/data1.dat
agent/data/data2.dat
....
agent/data/data1000.dat
agent/LICENSE

那么你的部分应该是:

%install
install -m 0755 -d %{buildroot}/%{_bindir}/some-agent
install -m 0755 -d %{buildroot}/%{_datadir}/
cp -a binary/agent.sh %{buildroot}/%{_bindir}/some-agent
cp -a data/* %{buildroot}/%{_datadir}/

%files
%doc LICENSE
%{_bindir}/some-agent
%{_datadir}/some-agent

您可以使用以下代替最后一行:

%dir %{_datadir}/some-agent
%{_datadir}/some-agent/*

但显然

 %{_datadir}/some-agent

更短,具有相同的含义.

在该%安装部分中,您可以使用任何bash命令.那么你通常会在命令行上做什么.任何shell扩展都可以使用,以便你的进步.

我使用了一些宏 – 你应该使用它们而不是硬编码路径.您可以通过以下方式获取可用宏的完整列表

rpm --showrc

并评估他们

rpm --eval '%{_datadir}'

在最近的RHEL和Fedoras评估中

/usr/share

我还提出了LICENSE文件的小技巧.当它出现在tarfile的最顶层目录中时,您只需将名称传递给%doc宏,rpm将自动将其置于正确的%docdir中.

上一篇:在linux下搭建数据库


下一篇:【转载】Linux(centOS 7)系统 离线安装gcc及其依赖项