![](/img/trans.png)
[英]Error while creating rpm package using rpmbuild from spec file
[英]Creating a spec file for RPM
我的一般任務是將軟件中的所有庫以及可執行軟件放在rpm文件中。 我的另一種方法是使用bash腳本,該腳本將所有庫放入CentOS的指定文件夾中。 此外,還需要安裝外部軟件包(例如,來自yum軟件包庫的庫)的依賴關系(例如yum apt-get install freeglut)。 現在,我只想使用一個可以為我做所有事情的rpm文件,復制正確文件夾中的庫,也添加yum文件,這樣我就可以啟動可執行文件而不會出現任何問題。
我讀到有關在CentOS中創建rpm文件的信息,而我的第一個嘗試是創建規范文件。 從https://stackoverflow.com/a/1165200/7105824找到了一個最小的示例:
Summary: A very simple toy bin rpm package
Name: toybinprog
Version: 1.0
Release: 1
License: GPL+
Group: Development/Tools
SOURCE0 : %{name}-%{version}.tar.gz
URL: http://toybinprog.company.com/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
%{summary}
%prep
%setup -q
%build
# Empty section.
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}
# in builddir
cp -a * %{buildroot}
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*
%changelog
* Thu Apr 24 2009 Elia Pinto <devzero2000@rpm5.org> 1.0-1
- First Build
在宏%files中,我可以將所有文件放入其中。 除了將所有100個庫都額外放置之外,是否還可以在其中放置包含庫內容的文件夾? 下一個問題是我不明白,宏%SOURCE0在做什么。我必須在這里輸入的tar文件是什么? 也許有人可以以一種易於理解的方式讓我清楚我該為我的問題做什么。
感謝大家!
我在這里喜歡這些准則:
https://rpm-packaging-guide.github.io/
Source0
指的是rpmbuild
在嘗試准備軟件包構建時將查找的第一個源文件。 %SOURCE
指令是對您的源的映射。 您可以在其他部分中調用%SOURCE0
來引用它。
%prep
准備構建設置並創建RPM_BUILD_ROOT
目錄。 %setup -q
解壓縮當前目錄中的壓縮包。 在您的示例中,它的名稱toybinprog-1.0.tar.gz
。
在%build
部分中,您的源tarball已被提取,因此您輸入的任何命令(例如make
都將在提取的目錄內執行。
%install
部分告訴rpmbuild
該軟件包在目標系統上的構建(您要安裝)過程中擁有或生成的文件的安裝位置。 在大多數情況下,您想在目標系統上安裝二進制文件,庫,並將頭文件和靜態庫保存在單獨的%{name}-devel
子軟件包中。
與%files
指令類似,目錄也有類似的宏,名稱為%dir
。 用法類似。 一些准則在這里:
http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html
%dir
宏不考慮內部文件,而是%file指令的“ sub”宏。 一個例子,
%files
%license LICENSE
%dir /usr/lib/%{name}/
%{_bindir}/%{name}
/usr/lib/%{name}/%{name}.py*
上方,以%{name}
表示的軟件包將擁有兩件東西
/usr/lib/%{name}/
%{name.py*}
文件 /usr/lib/%{name}
如果您的軟件包%{name}
是要寫入指定的%dir
的主軟件包,則%{name}
應該擁有它。 通常,如果一個包的目錄是由多個包編寫的,則不會指定該包的目錄所有權,並且在安裝包的過程中, %dir
已由系統中的其他某個包創建。
可以使用rpm
命令查詢文件/目錄的所有權,例如/var/log
目錄由Fedora盒子上的軟件包filesystem
擁有,
~]# rpm -qf /var/log
filesystem-3.2-40.fc26.i686
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.