rpm包制作


什么是rpm包?
rpm 相當於windows中的安裝文件,它會自動處理軟件包之間的依賴關系。

rpm優點:
包管理系統簡單,通過幾個命令就可以實現包的安裝、升級、卸載。
安裝速度比源碼包快的多。
缺點:
經過編譯,不能看到源代碼,功能選擇不如源碼靈活。依賴性強。
首先說一下流程:
打rpm 包需要的東西有 源碼、spec文件(打rpm包的腳本)、rpmbuild工具。

1. 安裝rpmbuild
$yum install rpmbuild
$yum install rpmdevtools
$rpmdev-setuptree

此時rpmbuild已經安裝好了,可以查看一下

rpmbuild --showrc | grep topdir


cd ~/rpmbuild/, 進入rpmbuild 目錄,文件夾如下:

 

各個文件夾的用途:

 

 

2. 創建用戶
此處建議創建一個用戶,用於rpm的打包操作

1. #創建用戶
useradd rpmuser
su - rpmuser

2. #定義工作目錄(或車間)吧 (也可使用默認目錄)
vi ~/.rpmmacros
%_topdir /home/rpmuser/rpmbuild ##目錄可以自定義

mkdir ~/rpmbuild
3. #在topdir下建立需要的目錄
cd ~/rpmbuild
mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

3. 整理源碼
rpmbuild安裝完成以后我門就需要將我們的源碼放到 SOURCE 文件夾下。我門的源碼可能是一個tar.gz 的包、也可能是幾個文件。

tar.gz源碼包的名字格式應該為 helloword-1.0.0.tar.gz (其實就是名字-版本號.tar.gz)

4. 編寫spec文件
在SPECS文件夾下新建 xxx.spec 打包腳本,其實也就是把我門的源碼編譯打包成rpm 的一個過程。

vi xxx.spec

Name: hellorpm #名字為源碼tar.gz 包的名字
Version: 1.0.0 #版本號,一定要與tar.gz包的一致哦
Release: 1%{?dist} #釋出號,也就是第幾次制作rpm
Summary: helloword #軟件包簡介,最好不要超過50字符

License: GPL #許可,GPL還是BSD等
URL: #可以寫一個網址
Packager: abel
Source0: %{name}-%{version}.tar.gz
#定義用到的source,也就是你的源碼

BuildRoot: %_topdir/BUILDROOT
#這個是軟件make install 的測試安裝目錄.

BuildRequires: gcc,make #制作過程中用到的軟件包
Requires: python-apscheduler >= 2.1.2-1.el7,python-daemon >= 1.6-1.el7 #軟件運行依賴的軟件包,也可以指定最低版本如 bash >= 1.1.1
%description #描述,隨便寫
%prep #打包開始
%setup -q #這個作用靜默模式解壓並cd


%build #編譯制作階段,主要目的就是編譯,如果不用編譯就為空
./configure \
%{?_smp_mflags} #make后面的意思是:如果就多處理器的話make時並行編譯

%install #安裝階段
rm -rf %{buildroot} #先刪除原來的安裝的,如果你不是第一次安裝的話
cp -rp %_topdir/BUILD/%{name}-%{version}/* $RPM_BUILD_ROOT
#將需要需要打包的文件從BUILD 文件夾中拷貝到BUILDROOT文件夾下。

#下面的幾步pre、post、preun、postun 沒必要可以不寫
%pre #rpm安裝前制行的腳本

%post #安裝后執行的腳本

%preun #卸載前執行的腳本

%postun #卸載后執行的腳本

%clean #清理段,刪除buildroot
rm -rf %{buildroot}


%files #rpm要包含的文件
%defattr (-,root,root,-) #設定默認權限,如果下面沒有指定權限,則繼承默認
/etc/hello/word/helloword.c #將你需要打包的文件或目錄寫下來

### 7.chagelog section 改變日志段
%changelog

注意:
以上階段如果沒有操作的話,為空,但是不能有空行,例如build階段為空應寫為

%build
%install
xxxxxxxx

錯誤示例:
%build

%install
xxxxxxxx

rpm包制作階段

 

5. 打包
spec 文件編寫好以后就可以進行打包了。
在SPECS文件夾下執行命令:

rpmbuild -bb xxx.spec
1
如果出錯了可以通過 不同的命令來看是在打包的那一步出了問題。

rpmbuild
-ba 既生成src.rpm又生成二進制rpm
-bs 只生成src的rpm
-bb 只生二進制的rpm
-bp 執行到pre
-bc 執行到 build段
-bi 執行install段
-bl 檢測有文件沒包含

可以先rpmbuild -bp ,再-bc 再-bi 如果沒問題,rpmbuild -ba 生成src包與二進制包。

解決編譯報錯:

RPM build errors: Symlink points to BuildRoot: /usr/lib/libfastcommon.so -> /root/rpmbuild/BUILDROOT/libfastcommon-1.0.40-1.el7.centos.x86_64/usr/lib64/libfastcommon.so 原因:spec文件使用絕對路徑,修改軟鏈接使用%{buildroot}相對路徑。


---------------------

參考:

rmp制作流程: https://blog.csdn.net/u012373815/article/details/73257754
制作fastdfs rpm包: http://www.178linux.com/62787

fastdfs安裝:https://www.jianshu.com/p/74bb69967094

 


免責聲明!

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



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