1. 程式人生 > 其它 >SRPM:通過rpmbuild製作自己的rpm包

SRPM:通過rpmbuild製作自己的rpm包

一、安裝工具

  [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。

二、命令介紹

  2.1、rpm命令

    rpm -ivh package_name

      -i :install

      -v :檢視詳細的安裝資訊

      -h :以安裝資訊列顯示安裝進度

  2.2、rpmbuild命令

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

    rpmbuild -bb spec_name.spec    <--編譯,僅生成RPM檔案

三、開始製作RPM包

  3.1、寫一個hello.c原始碼

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

  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!

    

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