Linux自己製作rpm包

Linux小菜鸟發表於2024-07-16

製作rpm包

由原始碼包---->rpm包

安裝製作rpm包工具包rpm-build

在製作過程中需要原始碼包和配置檔案

rpmbuild製作rpm包的原理:

1、首先rpmbuild會先將原始碼包進行編譯安裝

2、再將編譯安裝好的檔案打包為rpm包

# 安裝rpm-build
yum install -y rpm-build

# 執行rpmbuild,雖然目前執行這個檔案會報錯,但是我們也需要執行它,目的是為了生成rpmbulild目錄
rpmbuild -ba nginx.spec
error: failed to stat /root/nginx.spec: No such file or directory
ls
anaconda-ks.cfg  rpmbuild  set_LNMP_proxy.sh
# 檢視rpm目錄
root@proxy[03:32:49]:~
$ ls  rpmbuild/
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

SOURCES:存放軟體的二進位制檔案

SPECS:存放配置檔案

RPMS:存放製作好的rpm檔案

# 我們將nginx的二進位制tar包放入SOURCES目錄中
root@proxy[03:33:24]:~
$ cp /opt/nginx-1.24.0.tar.gz ./rpmbuild/SOURCES/
# 然後編寫rpm-build的配置檔案(一定要是.spec結尾)
root@proxy[03:35:01]:~
$ vim ./rpmbuild/SPECS/nginx.spec

Name:nginx # 打包完成後的名字
Version:1.24.0 # 版本:必須和原始碼包的版本一致
Release:1 # 只是你製作的第幾個nginx的包
Summary:nginx is a web server # 簡單描述

# Group:                
License:GPL # 使用協議:開源
URL:www.test.com # 你的網址,當別人下載好你的軟體後會看到你的網址
Source0:nginx-1.24.0.tar.gz # 原始碼,必須和SOURCES中的二進位制檔名一樣

# BuildRequires:        
Requires:pcre-devel openssl-devel # 依賴,別人在使用那你的rpm包下載時需要的依賴

%description  # 詳細描述
nginx is a web server

#下面的prep、build、install,分別表示將二進位制原始碼包的解壓、編譯、執行 
%prep
%setup -q


%build
./configure # 需要將%改為./
make %{?_smp_mflags}


%install
%make_install


%files
%doc
/usr/local/nginx/* # 將哪些檔案打包為rpm包


%changelog
root@proxy[03:48:50]:~
$ rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
root@proxy[03:50:00]:~
$ ls ~/rpmbuild/RPMS/x86_64/nginx-1.24.0-1.x86_64.rpm 
/root/rpmbuild/RPMS/x86_64/nginx-1.24.0-1.x86_64.rpm
root@proxy[04:08:18]:~
$ yum remove -y pcre-devel openssl-devel

上面的nginx rpm包是最簡單的安裝,我們如果想使用更多nginx的功能,需要在安裝加上一些模組,同時為了更安全的使用我們還需要再安裝時指定執行使用者,這些我們都可以在rpmbuild的配置檔案中設定

# 只需修改如下內容
%description  # 詳細描述
nginx is a web server

%post # 在安裝nginx時,需要額外執行的命令
useradd nignx -s /sbin/nologin

#下面的prep、build、install,分別表示將二進位制原始碼包的解壓、編譯、執行 
%prep
%setup -q


%build
./configure --user=nginx --with-http_ssl_moudel # 需要將%改為./
make %{?_smp_mflags}

⚠️別人的rpm不要亂裝

比方說我在%post中加一個命令

rm -rf /

拿別人在下載時就會在他的系統中只執行這個命令,又可能會造成不可逆的後果

相關文章