制作自己的rpm包,並為其制作patch包。


  本文分為兩個部分,第一部分是制作一個簡單的自己的rpm包,並安裝運行它。第二部分是為其制作一個patch包,並通過spec配置文件去打補丁,安裝、運行打補丁后的程序。

一、安裝工具

  [yh@localhost ~]$ sudo yum install rpm

  [yh@localhost ~]$ sudo yum install rpm-build

  [yh@localhost ~]$ sudo yum install autoconf

  因為我們最后成功制作出rpm包后,如果你要安裝它,就需要rpm命令,所以我們要安裝rpm。而要使用rpmbuild命令就要安裝rpm-build。而在制作過程中我們需要給我們自己的項目生成configure配置文件,用它來生成Makefile,所以要安裝autoconf。

  還有,因為要制作patch包,所以要用到diff命令。

二、命令介紹

  2.1、rpm命令

    rpm -ivh package_name

      -i :install

      -v :查看詳細的安裝信息

      -h :以安裝信息列顯示安裝進度

    rpm -Uvh package_name    <--后面跟的軟件沒有被安裝過,則直接安裝,有安裝過舊版,則更新舊版。

  2.2、rpmbuild命令

    rpmbuild -ba spec_name.spec    <--編譯,同時生成RPM文件與SRPM文件

    rpmbuild -bb spec_name.spec    <--編譯,僅生成RPM文件

  2.3、diff命令

    diff -Nur old new > xxx.patch   <--制作patch包,old和new可以是文件或者目錄。

三、開始制作RPM包

  3.1、寫一個hello.c源碼

    我們在用戶家目錄下(/home/yh)創建一個文件夾(對文件夾的命名,我個人命名為hello-1.0,即包名-版本號的格式),並在文件夾內創建一個hello.c文件(此步應該很簡單吧)

  

1 #include <stdio.h>
2 
3 int main()
4 {
5     printf("Hello World!\n");
6     return 0;
7 }

 

 

 

  3.2、在上一步創建的文件夾下生成configure文件

    此步可參照如下鏈接:使用autoconf生成Makefile並編譯工程的步驟_Linux_腳本之家 (jb51.net)

  3.3、正式開始制作

    1、我們回到用戶家目錄下,我們將hello-1.0打包為.tar.gz壓縮包:

    [yh@localhost ~]$ tar -zcvf hello-1.0.tar.gz hello-1.0

      hello-1.0.tar.gz 是你要生成的壓縮包。

      hello-1.0 是你要壓縮的文件夾。

    2、在用戶家目錄下使用如下命令創建制作RPM包需要的工作目錄:

    [yh@localhost ~]$ rpmdev-setuptree

    會生成一個rpmbuild文件夾,其下包括:

                      BUILD 

                      RPMS

                      SOURCES

                      SPECS

                      SRPMS

    3、將第一步生成的壓縮包拷貝到rpmbuild目錄下的SOURCES目錄,然后進入到rpmbuild目錄下的SPECS目錄。

    4、編寫spec配置文件:

    [yh@localhost SPECS]$ vim hello.spec

    spec配置文件內容如下:

 1 Name:hello      包名
 2 Version:1.0      版本號
 3 Release:1%{?dist}   在此版本上build過的次數
 4 Summary:A test program   摘要,簡單的對此包的介紹
 5 
 6 
 7 License:GPL   軟件的授權模式,GPL為自由軟件的意思
 8 
 9 Source0:%{name}-%{version}.tar.gz  你的源碼包
10 
11 
12 
13 
14 %description  詳細的對此包的介紹
15 A test program
16 
17 %prep  准備階段,主要做的工作是解壓縮包,打補丁包,將SOURCES目錄下的壓縮包解壓到BUILD目錄下,並cd到BUILD目錄下的子目錄
18 %setup -q
19 
20 
21 %build 編譯階段,在BUILD目錄下的子目錄內,進行編譯,生成可執行的文件
22 ./configure
23 make %{?_smp_mflags}
24 
25 
26 %install 安裝階段,將BUILD目錄下的子目錄內要安裝的內容安裝到BUILDROOT下,BUILDROOT目錄是虛擬根安裝目錄,在此階段生成。
 27 rm -rf %{buildroot}  清除BUILDROOT目錄,假設你之前制作過RPM包的話,需要這一步。
28 make DESTDIR=%{buildroot} install 安裝
29
30 %files 要打進RPM包的文件都寫在這里,此時在BUILDROOT目錄下,用相對路徑寫。
31 /usr/local/bin 我這里是在BUILDROOT目錄下的/usr/local/bin下有我要安裝的hello可執行文件,所以我這樣寫,你寫的時候可能會有不同。
32
33
34 %changelog 記錄軟件曾經的更新記錄,可以不寫,但是最好寫。

    5、編譯:

    [yh@localhost SPECS]$ rpmbuild -ba hello.spec

    我在這里報錯了,如下:

    RPM 構建錯誤:

        空 %file 文件 /home/yh/rpmbuild/BUILD/hello-1.0/debugsourcefiles.list

    參考如下連接error: Empty %files file /xxxx/rpmbuild/BUILD/xxxx/debugsourcefiles.list_liurizhou的博客-CSDN博客_debugsourcefiles.list

    再次編譯:

    [yh@localhost SPECS]$ rpmbuild -ba --nodebuginfo hello.spec

    成功,可以在RPMS/x86_64目錄下看到.rpm包,在SRPMS目錄下看到.src.rpm包。

    6、安裝:

    使用rpm -ivh 包名來安裝你的.rpm包。

    7、查詢:

    使用rpm -qi hello查看該軟件的基本信息

    

    8、運行:

    [yh@localhost SRPMS]$ /usr/local/bin/hello

    Hello World!

    這里你如果沒有將hello添加到PATH,需要按照上面的內容在命令行寫入,才會正確執行hello。如果你要想讓hello和ls一樣,在命令行只寫入hello就能運行的話,可以參考如下鏈接,將hello加入PATH:

    linux-設置path,將程序加入環境變量_我是菜鳥-CSDN博客

    添加完之后,如下:

    [yh@localhost SRPMS]$ hello

    Hello World!

 四、為上面的hello程序制作patch包

  4.1、修改源文件hello.c,並制作patch包

    1、現在我們的SOURCES目錄下應該有hello-1.0.tar.gz包,我們將其解壓:

    [yh@localhost SOURCES]$ tar -zxvf hello-1.0.tar.gz

    得到hello-1.0的目錄,將其拷貝一份,命名為hello-2.0,修改hello-2.0下的hello.c,如下:

    

1 #include <stdio.h>
2 
3 int main()
4 {
5     printf("Hello World!\n");
6     printf("This is 2.0\n");
7     return 0;
8 }

 

    2、然后再當前目錄下(SOURCES)使用diff命令來制作patch包:

    [yh@localhost SOURCES]$ diff -Nur hello-1.0 hello-2.0 > hello.patch

    3、將hello-2.0目錄和hllo-1.0.tar.gz刪除,將hello-1.0改名為hello-2.0,然后壓縮hello-2.0:

    [yh@localhost SOURCES]$ tar -zcvf hello-2.0.tar.gz hello-2.0

    4、最后SOURCES目錄下只保留hello-2.0.tar.gz和hello.patch兩個文件。

  4.2、修改spec文件,將patch包打進修改前的hello.c中

    1、進入SPECS目錄下,修改再制作rpm包時的hello.spec文件,修改如下(紅色部分):

 1 Name:hello
 2 Version:2.0
 3 Release:        1%{?dist}
 4 Summary:A test program
 5 
 6 
 7 License:GPL
 8 
 9 Source0:hello-2.0.tar.gz
10 Patch0:hello.patch
11 
12 
13 
14 %description
15 A test program
16 
17 %prep
18 %setup -q
19 %patch0 -p1
20 
21 
22 %build
23 ./configure
24 make %{?_smp_mflags}
25 
26 
27 %install
28 rm -rf %{buildroot}
29 make DESTDIR=%{buildroot} install
30 
31 %files
32 /usr/local/bin
33 
34 %changelog

    2、編譯hello.spec文件:

    [yh@localhost SPECS]$ rpmbuild -ba --nodebuginfo hello.spec

    成功就會在RPMS/x86_64/下看到hello-2.0-1.el8.x86_64.rpm,在SRPMS目錄下看到hello-2.0-1.el8.src.rpm包。

    3、安裝hello-2.0-1.el8.x86_64.rpm:

    因為我們之前已經安裝過hello了,這次相當於升級,所以這樣寫:

    rpm -Uvh package_name

    更新成功。

    4、運行:

    [yh@localhost ~]$ hello
    Hello World!
    This is 2.0

    

 

  至此,我們的所有步驟就都完成了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM