成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何編寫RPM的spec文件

系統 Linux
在關于 RPM 軟件包構建的上一篇文章中,你了解到了源 RPM 包括軟件的源代碼以及 spec 文件。這篇文章深入研究了 spec 文件,該文件中包含了有關如何構建 RPM 的指令。同樣,本文以 fpaste 為例。

[[281378]]

關于 RPM 軟件包構建的上一篇文章中,你了解到了源 RPM 包括軟件的源代碼以及 spec 文件。這篇文章深入研究了 spec 文件,該文件中包含了有關如何構建 RPM 的指令。同樣,本文以 fpaste 為例。

了解源代碼

在開始編寫 spec 文件之前,你需要對要打包的軟件有所了解。在這里,你正在研究 fpaste,這是一個非常簡單的軟件。它是用 Python 編寫的,并且是一個單文件腳本。當它發布新版本時,可在 Pagure 上找到:https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz

如該檔案文件所示,當前版本為 0.3.9.2。下載它,以便你查看該檔案文件中的內容:

  1. $ wget https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz
  2. $ tar -tvf fpaste-0.3.9.2.tar.gz
  3. drwxrwxr-x root/root 0 2018-07-25 02:58 fpaste-0.3.9.2/
  4. -rw-rw-r-- root/root 25 2018-07-25 02:58 fpaste-0.3.9.2/.gitignore
  5. -rw-rw-r-- root/root 3672 2018-07-25 02:58 fpaste-0.3.9.2/CHANGELOG
  6. -rw-rw-r-- root/root 35147 2018-07-25 02:58 fpaste-0.3.9.2/COPYING
  7. -rw-rw-r-- root/root 444 2018-07-25 02:58 fpaste-0.3.9.2/Makefile
  8. -rw-rw-r-- root/root 1656 2018-07-25 02:58 fpaste-0.3.9.2/README.rst
  9. -rw-rw-r-- root/root 658 2018-07-25 02:58 fpaste-0.3.9.2/TODO
  10. drwxrwxr-x root/root 0 2018-07-25 02:58 fpaste-0.3.9.2/docs/
  11. drwxrwxr-x root/root 0 2018-07-25 02:58 fpaste-0.3.9.2/docs/man/
  12. drwxrwxr-x root/root 0 2018-07-25 02:58 fpaste-0.3.9.2/docs/man/en/
  13. -rw-rw-r-- root/root 3867 2018-07-25 02:58 fpaste-0.3.9.2/docs/man/en/fpaste.1
  14. -rwxrwxr-x root/root 24884 2018-07-25 02:58 fpaste-0.3.9.2/fpaste
  15. lrwxrwxrwx root/root 0 2018-07-25 02:58 fpaste-0.3.9.2/fpaste.py -> fpaste

你要安裝的文件是:

  • fpaste.py:應該安裝到 /usr/bin/
  • docs/man/en/fpaste.1:手冊,應放到 /usr/share/man/man1/
  • COPYING:許可證文本,應放到 /usr/share/license/fpaste/
  • README.rstTODO:放到 /usr/share/doc/fpaste/ 下的其它文檔。

這些文件的安裝位置取決于文件系統層次結構標準(FHS)。要了解更多信息,可以在這里閱讀:http://www.pathname.com/fhs/ 或查看 Fedora 系統的手冊頁:

  1. $ man hier

第一部分:要構建什么?

現在我們知道了源文件中有哪些文件,以及它們要存放的位置,讓我們看一下 spec 文件。你可以在此處查看這個完整的文件:https://src.fedoraproject.org/rpms/fpaste/blob/master/f/fpaste.spec

這是 spec 文件的第一部分:

  1. Name: fpaste
  2. Version: 0.3.9.2
  3. Release: 3%{?dist}
  4. Summary: A simple tool for pasting info onto sticky notes instances
  5. BuildArch: noarch
  6. License: GPLv3+
  7. URL: https://pagure.io/fpaste
  8. Source0: https://pagure.io/releases/fpaste/fpaste-0.3.9.2.tar.gz
  9.  
  10. Requires: python3
  11.  
  12. %description
  13. It is often useful to be able to easily paste text to the Fedora
  14. Pastebin at http://paste.fedoraproject.org and this simple script
  15. will do that and return the resulting URL so that people may
  16. examine the output. This can hopefully help folks who are for
  17. some reason stuck without X, working remotely, or any other
  18. reason they may be unable to paste something into the pastebin

NameVersion 等稱為標簽,它們定義在 RPM 中。這意味著你不能只是隨意寫點標簽,RPM 無法理解它們!需要注意的標簽是:

  • Source0:告訴 RPM 該軟件的源代碼檔案文件所在的位置。
  • Requires:列出軟件的運行時依賴項。RPM 可以自動檢測很多依賴項,但是在某些情況下,必須手動指明它們。運行時依賴項是系統上必須具有的功能(通常是軟件包),才能使該軟件包起作用。這是 dnf 在安裝此軟件包時檢測是否需要拉取其他軟件包的方式。
  • BuildRequires:列出了此軟件的構建時依賴項。這些通常必須手動確定并添加到 spec 文件中。
  • BuildArch:此軟件為該計算機體系結構所構建。如果省略此標簽,則將為所有受支持的體系結構構建該軟件。值 noarch 表示該軟件與體系結構無關(例如 fpaste,它完全是用 Python 編寫的)。

本節提供有關 fpaste 的常規信息:它是什么,正在將什么版本制作為 RPM,其許可證等等。如果你已安裝 fpaste,并查看其元數據時,則可以看到該 RPM 中包含的以下信息:

  1. $ sudo dnf install fpaste
  2. $ rpm -qi fpaste
  3. Name : fpaste
  4. Version : 0.3.9.2
  5. Release : 2.fc30
  6. ...

RPM 會自動添加一些其他標簽,以代表它所知道的內容。

至此,我們掌握了要為其構建 RPM 的軟件的一般信息。接下來,我們開始告訴 RPM 做什么。

第二部分:準備構建

spec 文件的下一部分是準備部分,用 %prep 代表:

  1. %prep
  2. %autosetup

對于 fpaste,這里唯一的命令是 %autosetup。這只是將 tar 檔案文件提取到一個新文件夾中,并為下一部分的構建階段做好了準備。你可以在此處執行更多操作,例如應用補丁程序,出于不同目的修改文件等等。如果你查看過 Python 的源 RPM 的內容,那么你會在那里看到許多補丁。這些都將在本節中應用。

通常,spec 文件中帶有 前綴的所有內容都是 RPM 以特殊方式解釋的宏或標簽。這些通常會帶有大括號,例如 %{example}

第三部分:構建軟件

下一部分是構建軟件的位置,用 %build 表示。現在,由于 fpaste 是一個簡單的純 Python 腳本,因此無需構建。因此,這里是:

  1. %build
  2. #nothing required

不過,通常來說,你會在此處使用構建命令,例如:

  1. configure; make

構建部分通常是 spec 文件中最難的部分,因為這是從源代碼構建軟件的地方。這要求你知道該工具使用的是哪個構建系統,該系統可能是許多構建系統之一:Autotools、CMake、Meson、Setuptools(用于 Python)等等。每個都有自己的命令和語法樣式。你需要充分了解這些才能正確構建軟件。

第四部分:安裝文件

軟件構建后,需要在 %install 部分中安裝它:

  1. %install
  2. mkdir -p %{buildroot}%{_bindir}
  3. make install BINDIR=%{buildroot}%{_bindir} MANDIR=%{buildroot}%{_mandir}

在構建 RPM 時,RPM 不會修改你的系統文件。在一個可以正常運行的系統上添加、刪除或修改文件的風險太大。如果發生故障怎么辦?因此,RPM 會創建一個專門打造的文件系統并在其中工作。這稱為 buildroot。 因此,在 buildroot 中,我們創建由宏 %{_bindir} 代表的 /usr/bin 目錄,然后使用提供的 Makefile 將文件安裝到其中。

至此,我們已經在專門打造的 buildroot 中安裝了 fpaste 的構建版本。

第五部分:列出所有要包括在 RPM 中的文件

spec 文件其后的一部分是文件部分:%files。在這里,我們告訴 RPM 從該 spec 文件創建的檔案文件中包含哪些文件。fpaste 的文件部分非常簡單:

  1. %files
  2. %{_bindir}/%{name}
  3. %doc README.rst TODO
  4. %{_mandir}/man1/%{name}.1.gz
  5. %license COPYING

請注意,在這里,我們沒有指定 buildroot。所有這些路徑都是相對路徑。%doc%license命令做的稍微多一點,它們會創建所需的文件夾,并記住這些文件必須放在那里。

RPM 很聰明。例如,如果你在 %install 部分中安裝了文件,但未列出它們,它會提醒你。

第六部分:在變更日志中記錄所有變更

Fedora 是一個基于社區的項目。許多貢獻者維護或共同維護軟件包。因此,當務之急是不要被軟件包做了哪些更改所搞混。為了確保這一點,spec 文件包含的最后一部分是變更日志 %changelog

  1. %changelog
  2. * Thu Jul 25 2019 Fedora Release Engineering < ...> - 0.3.9.2-3
  3. - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
  4.  
  5. * Thu Jan 31 2019 Fedora Release Engineering < ...> - 0.3.9.2-2
  6. - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
  7.  
  8. * Tue Jul 24 2018 Ankur Sinha - 0.3.9.2-1
  9. - Update to 0.3.9.2
  10.  
  11. * Fri Jul 13 2018 Fedora Release Engineering < ...> - 0.3.9.1-4
  12. - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
  13.  
  14. * Wed Feb 07 2018 Fedora Release Engineering < ..> - 0.3.9.1-3
  15. - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
  16.  
  17. * Sun Sep 10 2017 Vasiliy N. Glazov < ...> - 0.3.9.1-2
  18. - Cleanup spec
  19.  
  20. * Fri Sep 08 2017 Ankur Sinha - 0.3.9.1-1
  21. - Update to latest release
  22. - fixes rhbz 1489605
  23. ...
  24. ....

spec 文件的每項變更都必須有一個變更日志條目。如你在此處看到的,雖然我以維護者身份更新了該 spec 文件,但其他人也做過更改。清楚地記錄變更內容有助于所有人知道該 spec 文件的當前狀態。對于系統上安裝的所有軟件包,都可以使用 rpm 來查看其更改日志:

  1. $ rpm -q --changelog fpaste

構建 RPM

現在我們準備構建 RPM 包。如果要繼續執行以下命令,請確保遵循上一篇文章中的步驟設置系統以構建 RPM。

我們將 fpaste 的 spec 文件放置在 ~/rpmbuild/SPECS 中,將源代碼檔案文件存儲在 ~/rpmbuild/SOURCES/ 中,現在可以創建源 RPM 了:

  1. $ cd ~/rpmbuild/SPECS
  2. $ wget https://src.fedoraproject.org/rpms/fpaste/raw/master/f/fpaste.spec
  3.  
  4. $ cd ~/rpmbuild/SOURCES
  5. $ wget https://pagure.io/fpaste/archive/0.3.9.2/fpaste-0.3.9.2.tar.gz
  6.  
  7. $ cd ~/rpmbuild/SOURCES
  8. $ rpmbuild -bs fpaste.spec
  9. Wrote: /home/asinha/rpmbuild/SRPMS/fpaste-0.3.9.2-3.fc30.src.rpm

讓我們看一下結果:

  1. $ ls ~/rpmbuild/SRPMS/fpaste*
  2. /home/asinha/rpmbuild/SRPMS/fpaste-0.3.9.2-3.fc30.src.rpm
  3.  
  4. $ rpm -qpl ~/rpmbuild/SRPMS/fpaste-0.3.9.2-3.fc30.src.rpm
  5. fpaste-0.3.9.2.tar.gz
  6. fpaste.spec

我們看到源 RPM 已構建。讓我們同時構建源 RPM 和二進制 RPM:

  1. $ cd ~/rpmbuild/SPECS
  2. $ rpmbuild -ba fpaste.spec
  3. ..
  4. ..
  5. ..

RPM 將向你顯示完整的構建輸出,并在我們之前看到的每個部分中詳細說明它的工作。此“構建日志”非常重要。當構建未按預期進行時,我們的打包人員將花費大量時間來遍歷它們,以跟蹤完整的構建路徑來查看出了什么問題。

就是這樣!準備安裝的 RPM 應該位于以下位置:

  1. $ ls ~/rpmbuild/RPMS/noarch/
  2. fpaste-0.3.9.2-3.fc30.noarch.rpm

概括

我們已經介紹了如何從 spec 文件構建 RPM 的基礎知識。這絕不是一份詳盡的文檔。實際上,它根本不是文檔。它只是試圖解釋幕后的運作方式。簡短回顧一下:

  • RPM 有兩種類型:源 RPM 和 二進制 RPM。
  • 二進制 RPM 包含要安裝以使用該軟件的文件。
  • 源 RPM 包含構建二進制 RPM 所需的信息:完整的源代碼,以及 spec 文件中的有關如何構建 RPM 的說明。
  • spec 文件包含多個部分,每個部分都有其自己的用途。    在這里,我們已經在安裝好的 Fedora 系統中本地構建了 RPM。雖然這是個基本的過程,但我們從存儲庫中獲得的 RPM 是建立在具有嚴格配置和方法的專用服務器上的,以確保正確性和安全性。這個 Fedora 打包流程將在以后的文章中討論。

你想開始構建軟件包,并幫助 Fedora 社區維護我們提供的大量軟件嗎?你可以從這里開始加入軟件包集合維護者

如有任何疑問,請發布到 Fedora 開發人員郵件列表,我們隨時樂意為你提供幫助!

參考

這里有一些構建 RPM 的有用參考:

 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2019-11-05 10:55:05

RPM包RPMLinux

2020-12-28 06:44:45

FedoraLinux RPM文件

2016-11-21 16:01:48

SPEC

2016-11-28 17:38:05

SPEC

2017-04-08 19:45:27

Linux命令安裝

2012-07-11 10:51:37

編程

2024-05-09 10:51:44

AI 模型OpenAI人工智能

2012-03-08 09:44:41

編程

2022-06-07 09:30:35

JavaScript變量名參數

2024-06-24 14:19:48

2020-10-30 12:42:06

TypeScript編程開發

2021-03-17 08:00:59

JS語言Javascript

2012-03-20 09:44:39

編程開發

2022-05-12 12:47:07

SPI主設備通信

2023-08-16 14:43:31

技術文檔軟件開發

2011-03-28 11:20:11

Nagios 插件

2011-04-06 16:02:26

Nagios插件

2017-09-07 16:20:39

SQL查詢語句查詢優化

2024-03-20 08:00:00

軟件開發Java編程語言

2023-10-10 08:00:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久亚洲 | 人人射人人 | 欧美啊v在线观看 | 毛色毛片免费看 | 国产日韩欧美在线观看 | 亚洲国产精品一区二区www | 香蕉久久a毛片 | 久久久久久国 | 三级黄片毛片 | 日韩精品一区二区三区在线播放 | 男女羞羞在线观看 | 国产伊人精品 | 亚洲精品片 | 自拍偷拍中文字幕 | 欧美日韩精品在线一区 | 国产精品视频导航 | 国产伦精品一区二区三区精品视频 | 亚洲一区二区中文字幕在线观看 | 噜噜噜噜狠狠狠7777视频 | 国产精品色哟哟网站 | 欧美xxxx黑人又粗又长 | 久久亚洲国产 | 成人依人| 亚洲小视频 | 日韩国产在线观看 | 亚洲国产成人在线观看 | 99re在线视频 | 在线区| 国产激情网 | 青春草在线 | 91精品国产91久久久久游泳池 | 青娱乐av | 91精品久久久久久久久中文字幕 | 在线观看成年视频 | 精品中文视频 | 国产精品伦理一区二区三区 | 在线观看www| 激情五月婷婷 | 国产高清美女一级a毛片久久w | 国产精品亚洲精品 | www.五月天婷婷 |