1. 程式人生 > 其它 >定製rpm包

定製rpm包

目錄

day30定製rpm包


定製rpm包概述


什麼是定製rpm包

  • 將原本,使用原始碼安裝的服務,打包成rpm包

為什麼要定製rpm包

使用原始碼安裝,步驟繁瑣複雜,浪費時間,把原始碼包打成rpm包安裝時可以節省時間,提高工作效率,做好rpm包,
可以將rpm包放入yum倉庫中,方便安裝

如何定製rpm包

  • fpm
  • rpmbuild

安裝fpm

fpm 是ruby語法寫的一種,定製rpm包的工具,所以在安裝fpm之前,需要先安裝ruby環境。

# 1.下載阿里雲的base源和epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 2.安裝ruby環境
[root@localhost ~]# yum -y install ruby rubygems ruby-devel

# 3.檢視gem預設的源
[root@localhost ~]# gem sources
*** CURRENT SOURCES ***
https://rubygems.org/

gem作用:gem和yum差不多,是包管理工具,yum來管理.rpm的包,gem來管理.gem包

# 4.刪除gem預設官方源
[root@localhost ~]# gem sources --remove https://rubygems.org/
https://rubygems.org/ removed from sources
[root@localhost ~]# gem sources
*** CURRENT SOURCES ***

# 5.新增阿里雲的gem源
[root@localhost ~]# gem sources -a https://mirrors.aliyun.com/rubygems/
https://mirrors.aliyun.com/rubygems/ added to sources

[root@localhost ~]# gem sources
*** CURRENT SOURCES ***
https://mirrors.aliyun.com/rubygems/

# 6.安裝fpm
[root@localhost ~]# gem install fpm -v 1.3.3 ## 賊慢
[root@localhost fpm]# tar xf fpm-1.3.3.x86_64.tar.gz
[root@localhost fpm]# gem install *.gem

安裝fpm成功

報錯

報錯原因:ruby版本是2.0,安裝fpm工具需求是ruby版本要2.4.0以上
[root@localhost ~]# rpm -qa|grep ruby
ruby-2.0.0.648-39.el7_9.x86_64

原始碼安裝nginx

# 安裝依賴
[root@localhost ~]# yum install -y gcc gcc-c++ glibc pcre-devel openssl-devel

# 下載nginx原始碼包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.20.2.tar.gz

# 解壓
[root@localhost ~]# tar xf nginx-1.20.2.tar.gz

# 生成
[root@localhost nginx-1.20.2]# ./configure --prefix=/opt/nginx-1.20.2 --with-http_ssl_module --
with-http_stub_status_module

# 4.編譯 和 安裝
[root@localhost nginx-1.20.2]# make && make install

使用fpm定製rpm包

# fpm

-s:指定將什麼打成rpm包(dir將目錄打成rpm包)
-t:打成什麼包(rpm 打成rpm包)
-n:指定包名,-n如何指定,yum就如何裝(ngx) yum install -y ngx
-v:指定版本號
-d:指定依賴包,在這指定後,yum安裝的時候,會根據-d的內容自動安裝對應的依賴
--post-install:安裝rpm包之後,要執行的指令碼
--pre-install:安裝rpm包之前,要執行的指令碼
--post-uninstall:解除安裝rpm包之後,要執行的指令碼
--pre-uninstall:解除安裝rpm包之前,要執行的指令碼
-f:指定要打包的路徑

# 安裝完nginx之後
做軟連結
新增nginx的環境變數

# 先寫指令碼
[root@web01 ~]# vim post_install_nginx.sh
ln -s /opt/nginx-1.20.2 /opt/nginx
echo 'PATH="/usr/local/nginx/sbin:$PATH"' > /etc/profile.d/nginx.sh

# fpm打包

[root@localhost ~]# fpm -s dir -t rpm -n nginx -v 1.20.0 -d 'openssl-devel,pcre-devel' --post-install /root/post_install_nginx.sh -f /opt//nginx-1.20.2/

# 或

fpm -s dir \
-t rpm \
-n nginx \
-v 1.20.2 \
-d 'openssl-devel,pcre-devel' \
--post-install /root/post_install_nginx.sh \
-f /opt/nginx-1.20.2
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.20.2-1.x86_64.rpm"}

# 使用其他機器測試
rpm -ivh nginx-1.20.2-1.x86_64.rpm
yum localinstall -y nginx-1.20.2-1.x86_64.rpm

# 需要提前,下載好nginx需要的所有依賴包
rpm -Uvh *rpm
Preparing... ################################# [100%]
Updating / installing...
1:pcre-devel-8.32-17.el7 ################################# [ 20%]
2:libselinux-devel-2.5-15.el7 ################################# [ 40%]
3:krb5-devel-1.15.1-51.el7_9 ################################# [ 60%]
4:openssl-devel-1:1.0.2k-25.el7_9 ################################# [ 80%]
5:nginx-1.20.2-1 ################################# [100%]

fpm工具底層,呼叫了rpmbuild這個工具,所以需要提前安裝rpmbuild
解決方法:yum install -y rpm-build