RPM包的構建

sam_shen_921發表於2020-04-07
  1. 建立資料夾helloworld,用於存放編寫的程式程式碼

    mkdir ~/helloworld

  2. 編寫程式程式碼

    helloworld.c

    #include <stdio.h>

    int main(void)

    {

    printf(“Hello, world !/n”);

    return 0;

    }


Makefile

all:

gcc -o helloworld helloworld.c

         fresh:

                    rm -rf Makefile

        clean:

                   rm -rf helloworld helloworld.o

        install:

                  cp helloworld /usr/bin

        uninstall:

                  rm -rf /usr/bin/helloworld


       readme

       author: sam shen

       description: this is the first program for testing rpm build

  1. 複製~/helloworld資料夾到/usr/src/redhat/SOURCES

    cp -R ~/helloworld /usr/src/redhat/SOURCES

  2. 壓縮原始碼

    cd /usr/src/redhat/SOURCES

    tar -zcvf helloworld-0.1-1.tar.gz helloworld

  3. 編寫spec檔案

    cd /usr/src/redhat/SPECS

    編寫helloworld-0.1-1.spec,內容如下:

    Summary: the First RPM of sam

    Name:helloworld

    Version:0.1

    Release:1

    Vendor:Sam Shen (sxc_1985921@126.com)

    License:Share

    Group:Applications/Text

    Source0:helloworld-0.1-1.tar.gz

    #Patch0:helloworld-0.1-1.patch

    %description

    My test helloworld

    %prep

    export RPM_SOURCES_DIR=/usr/src/redhat/SOURCES

    export RPM_BUILD_DIR=/usr/src/redhat/BUILD

    tar -xvf $RPM_SOURCES_DIR/helloworld-0.1-1.tar.gz

    #%patch

    %build

    cd $RPM_BUILD_DIR/helloworld

    make

    %install

    cd $RPM_BUILD_DIR/helloworld

    make install

    %clean

    rm -rf $RPM_BUILD_DIR/helloworld

    %files

    %defattr(-,root,root)

    /usr/bin/helloworld

    %doc

    /usr/src/redhat/BUILD/helloworld/readme

    %changelog

    * Tue Sep 2 2008 Sam Shen sxc_1985921@126.com

    - sam test it

  4. 打包,在/usr/src/redhat/SPEC目錄下執行如下命令:

    rpmbuild -ba helloworld-0.1-1.spec

    後在/usr/src/redhat/RPMS/i386目錄下產生helloworld-0.1-1.i386.rpm,在/usr/src/redhat/SRPMS目錄下產生helloworld-0.1-1.src.rpm

    此時,在終端執行helloworld將輸出:Hello, world !

  5. 修改源程式,進行源程式更新

    cd /usr/src/redhat/SOURCES/

    mkdir helloworld2

    cd helloworld2

    cp ../helloworld/* ./

    vim helloworld.c

    在第一個prinf語句後加上printf(“This is a simple program for testing rpm build/n”);

    vim readme

    在末尾加上you can input helloworld in terminal , and you can see what happened

    回到上級目錄

    cd /usr/src/redhat/SOURCES

    diff -uNr helloworld helloworld2 > helloworld-0.1-1.patch

    上條命令將產生一個patch檔案helloworld-0.1-1.patch

    現在回頭把Patch0%patch前面的註釋去掉

  6. 重新生成RPM包,觀察變化

    rpmbuild -bb helloworld-0.1-1.spec (只生成二進位制格式的rpm),或

    rpmbuild -bs helloworld-0.1-1.spec (只生成src格式的rpm),或

    rpmbuild -bp helloworld-0.1-1.spec (只需要生成完整的原始檔,存在BUILD目錄下,它的作用就是把tar包解開然後把所有的補丁檔案合併而生成一個完整的最新功能的原始檔),或

    rpmbuild -ba helloworld-0.1-1.spec (產生以上3個過程分別生成的包)

    rpmbuild -bc helloworld-0.1-1.spec Build (compile) the program but do not make the full RPM, stopping just after the %build section

    rpmbuild -bi helloworld-0.1-1.spec Create a binary RPM and stop just after the %install section

    rpmbuild -bl helloworld-0.1-1.spec Check the listing of files for the RPM and generate errors if the buildroot is missing any of the files to be installed

    此時,在終端執行helloworld將輸出:

    Hello, world !

    This is a simple program for testing rpm build

  7. 檢查gpg軟體是否安裝

    rpm -qf `which gpg`

    顯示gnupg-1.4.7-7類似的名稱,則已經安裝

  8. 配置一個簽名

    gpg –gen-key

    按照提示回答問題

  9. 建立RPM巨集檔案/home/sam/.rpmmacros

    %_signature gpg

    %_gpg_path /home/sam/.gnupg

    %_gpg_name shen xiao cheng (sam shen) <sxc_1985921@126.com>

    %_gpgbin /usr/bin/gpg

  10. RPM包簽名

    rpm --addsign helloworld-0.1-1.i386.rpm

    或者在打包時加上--sign選項,如:

    rpmbuild -ba --sign helloworld-0.1-1.spec

  11. 也可以從src.rpm打成platform.rpm

    src.rpm.spec檔案放在一個資料夾下

    rpm -ivh helloworld-0.1-1.src.rpm

    檢視安裝到哪裡:

    locate helloworld

    rpm -ba helloworld-0.1-1.spec



RPM命令

  1. 查詢系統中已經安裝的軟體

    rpm -q softname

  2. 檢視系統中所有已經安裝的包

    rpm -qa

  3. 查詢已經安裝的軟體包都安裝都何處

    rpm -ql softname

  4. 檢視一下已經安裝軟體的配置檔案

    rpm -qc softname

  5. 檢視一個已經安裝軟體的文件安裝位置

    rpm -qd softname

  6. 檢視一下已經安裝軟體所依賴的軟體包及檔案

    rpm -qR softname

  7. 檢視一個已安裝檔案屬於哪個包

    rpm -qf file

  8. 檢視一個已安裝軟體包的資訊

    rpm -qi softname

  9. 檢視當前目錄下軟體的資訊

    rpm -qpi name-version-release.platform.rpm

  10. 檢視當前目錄下軟體包將會在系統中安裝那些部分

    rpm -qpl name-version-release.platform.rpm

  11. 檢視軟體包的文件所在的位置

    rpm -qpd name-version-release.platform.rpm

  12. 檢視一個軟體包的配置檔案

    rpm -qpc name-version-release.platform.rpm

  13. 檢視一個軟體包的依賴關係

    rpm -qpR name-verseion-release.platform.rpm

  14. 安裝軟體

    rpm -ivh name-version-release.platform.rpm

  15. 如果在安裝過程中提示此軟體已安裝過或因其他原因無法繼續安裝,但確實要執行安裝命令

    rpm -ivh -replacepkgs name-version-release.platform.rpm

  16. 線上安裝

    rpm -i serveraddress/name-version-release.platform.rpm

  17. 解除安裝軟體

    rpm -e filename

  18. 升級軟體

    rpm -uvh filename

  19. 判定某個檔案屬於哪個軟體包

    rpm -qf file

  20. 匯入簽名

    rpm --import RPM-GPG-KEY

  21. 更新軟體包資料庫

    updatedb

  22. 查詢軟體安裝的位置

    locate softname

  23. rpm軟體包中抽取檔案

    rpm2cpio name-version-release.platform.rpm | cpio -idmv

  24. 只生成二進位制格式的rpm

    rpmbuild -bb helloworld-0.1-1.spec

  25. 只生成src格式的rpm

    rpmbuild -bs helloworld-0.1-1.spec

  26. 只需要生成完整的原始檔,存在BUILD目錄下,它的作用就是把tar包解開然後把所有的補丁檔案合併而生成一個完整的最新功能的原始檔 rpmbuild -bp helloworld-0.1-1.spec

  27. 產生以上3個過程分別生成的包

    rpmbuild -ba helloworld-0.1-1.spec

  28. rpm包管理的配置檔案

    locate rpmrc

相關文章