利用rpmbuild 打包可執行文件和鏈接庫生成rpm 包

Background:

Background: 遇到一個打包可執行程式和鏈接庫生成rpm 包的需求,查遍了很多網站的資料,現在整理下解決方案。

前期參考的是這篇帖子: //codeantenna.com/a/jUEqRgoEsZ

CSDN 很多帖子都是抄的rpm 官方提供的教程://www.thegeekstuff.com/2015/02/rpm-build-package-example/

這個帖子介紹了rpmbuild 的所有操作,包括把源碼放到rpmbuild 創建的文件夾中,通過配置spec完成從源碼=》編譯=》打包=》安裝的全流程,很詳細但是太複雜了。我遇到的場景是,已經構建了CMAKELIST, 可以通過寫好的腳本一鍵編譯生成可執行程式和需要的動態連接庫,我們這裡只需要打包一下即可。

 Processing:

該打包過程只是記錄了一下將二進位放入rpm中的過程和注意事項,不涉及預編譯、編譯和安裝等繁瑣的過程。

 1 、安裝依賴

此次打包是SUSE 系統,需要提前安裝 rpmbuild 工具。

zypper in -y rpm-build rpmdevtools

2、創建安裝目錄

 通過rpm 構建默認的文件夾,rpm 默認創建文件夾的路徑都是在~/ 目錄,如果你把rpmbuild 目錄移動到其他地方,進去build ,會顯示找不到文件,可以修改rpmbuild 的路勁資訊,但是本教程就在~/ 目錄下打包。

rpmdev-setuptree

# ls -lF /home/rpmbuild/
drwxr-xr-x. 2 home home 4096 Feb  4 12:21 BUILD/
drwxr-xr-x. 2 home home 4096 Feb  4 12:21 BUILDROOT/
drwxr-xr-x. 2 home home 4096 Feb  4 12:21 RPMS/
drwxr-xr-x. 2 home home 4096 Feb  4 12:21 SOURCES/
drwxr-xr-x. 2 home home 4096 Feb  4 12:21 SPECS/
drwxr-xr-x. 2 home home 4096 Feb  4 12:21 SRPMS/

3、編寫spec文件

    在SPECS目錄中,創建並編寫一個**.spec文件,名字無所謂,格式如下,這個文件很關鍵,這是告訴rpmbuild 如何打包,其他不相關的我直接刪了,只留最需要的

%files 是告訴rpm 打包方法,即你最終想如何把你的程式安裝到linux 系統裡面。

Summary: test package.
Name: Test
Version: 1.0
Release: 200
License: GPL
Group: test
AutoReqProv: no

%description
test process rpm.
%files
/usr/bin/test
/usr/test

       我現在有兩個資源,一個test程式需要在安裝之後放到/usr/bin目錄,之前cmake 會生成test 和libtest.so 這兩個得在一塊才能運行,所以我把這兩個文件都放在/usr/test/ 中,然後 在/usr/bin/中鏈接一個可執行程式 ../test/test .

  4、放置資源

    放入資源的時候需要根據編寫的spec文件來放置,在BUILDROOT目錄要先創建一個目錄Test-1.0-200.x86_64,該目錄是根據spec文件中配置拼接而成:Name-Version-Release.arch。

    然後在Test-1.0-200.x86_64中創建目錄usr/bin,usr/test/,然後將test、libtest.so 放入usr/test/ ,然後cd usr/bin, ln -s ../test/test , 這樣就把可執行程式鏈接到了usr/bin,這樣後期安裝也是這麼按照到linux 下的/usr

      其實打包方式很靈活的,需要結合當前項目的需求靈活考慮

    5、打包

    進入SPECS目錄,執行 rpmbuild -bb **.spec 命令,就可以在RPMS目錄中生成相應的rpm包了。

 

Tags: