RPM包定制-實戰
Rpm命令有五種基本功能;安裝、卸載、升級、查詢、驗證
實戰環境
[root@m01 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@m01 ~]# uname -r 2.6.32-573.el6.x86_64 [root@m01 ~]# getenforce Disabled [root@m01 ~]# /etc/init.d/iptables status iptables:未運行防火墻。 ###設置yum緩存##### [root@m01 tools]# cat /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=1 ?設置為1 yum後包保存下來/var/cache/yum/x86_64/6/base/packages/ ######清空本機已經有的yum緩存 (find /var/cache/ -type f -name "*.rpm")
FPM常用參數
支持的源類型包
DIR 將目錄打包成所需要的類型,可以用於源碼編譯的安裝包.
RPM 對rpm進行轉換
gem 對rubygem包進行轉換.
python 將python模塊打包成相應的類型
支持的目標類型包格式:
RPM 轉換為RPM包
deb 轉換為deb包
solaris 轉換為solaris包
puppet 轉換為puppet包
準備工作
安裝FPM工具:
fpm是使用ruby語言編寫的,因此系統環境需要ruby這個軟件,並且版本號需要大於1.8.5
安裝ruby模塊
yum -y install ruby rubygems ruby-devel
- 安裝ruby的模塊,ruby模塊需要大於1.8.5*
添加阿裏雲的rubygems倉庫,移除原生的yum倉庫
gem sources -a http://mirrors.aliyun.com/rubygems/ ##增加阿裏雲的倉庫
gem sources --remove http://rubygems.org ##移除原有的倉庫
安裝FPM工具
gem install fpm -v 1.3.3
##指定安裝1.3.3 版本,我們需求不大,只要能打包就足夠了,沒必要追求高版本
Fpm是ruby編寫,因此系統吸引ruby且大於1.8.5
安裝ruby
[root@m01 ~]# yum -y install ruby rubygems ruby-devel 安裝fpm [root@m01 ~]# gem sources -a http://mirrors.aliyun.com/rubygems/ http://mirrors.aliyun.com/rubygems/ added to sources [root@m01 ~]# gem sources --remove http://rubygems.org/ http://rubygems.org/ removed from sources
報錯信息
[root@m01 ~]# gem install fpm -v 1.3.3
ERROR: Error installing fpm:
json requires Ruby version >= 1.9.
[root@m01 ~]# ruby -v
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
遇到以上錯誤請先安裝以下兩個軟件,然後繼續安裝fpm1.3.3:
[root@m01 ~]# gem install json -v 1.8.3
[root@m01 ~]# gem install ffi -v 1.9.18
再次安裝fpm[root@m01 ~]# gem install fpm -v 1.3.3
實戰-定制nginx的rpm包
[root@m01 ~]# cd /application/
[root@m01 application]# ll
[root@m01 application]# mkdir -p tools
Wget編譯包
[root@m01 tools]# wget http://10.0.0.61/nginx-1.6.3.tar.gz
--2018-04-28 09:45:37-- http://10.0.0.61/nginx-1.6.3.tar.gz
正在連接 10.0.0.61:80... 已連接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度:805253 (786K) [application/x-gzip]
正在保存至: “nginx-1.6.3.tar.gz”
100%[=====================================>] 805,253 --.-K/s in 0.08s
2018-04-28 09:45:42 (9.28 MB/s) - 已保存 “nginx-1.6.3.tar.gz” [805253/805253])
#####編譯安裝nginx (就安裝我們上傳的1.6.3版本)
yum -y install pcre-devel openssl-devel #安裝必備的包
[root@m01 base]# find packages/ -type f -name "*rpm"
packages/krb5-devel-1.10.3-65.el6.x86_64.rpm
packages/libselinux-utils-2.0.94-7.el6.x86_64.rpm
packages/libss-1.41.12-23.el6.x86_64.rpm
packages/openssl-1.0.1e-57.el6.x86_64.rpm
packages/libselinux-devel-2.0.94-7.el6.x86_64.rpm
packages/libselinux-2.0.94-7.el6.x86_64.rpm
packages/zlib-devel-1.2.3-29.el6.x86_64.rpm
packages/libsepol-devel-2.0.41-4.el6.x86_64.rpm
packages/libcom_err-1.41.12-23.el6.x86_64.rpm
packages/keyutils-libs-devel-1.4-5.el6.x86_64.rpm
packages/krb5-libs-1.10.3-65.el6.x86_64.rpm
packages/pcre-devel-7.8-7.el6.x86_64.rpm
packages/e2fsprogs-1.41.12-23.el6.x86_64.rpm
packages/e2fsprogs-libs-1.41.12-23.el6.x86_64.rpm
packages/libcom_err-devel-1.41.12-23.el6.x86_64.rpm
packages/libkadm5-1.10.3-65.el6.x86_64.rpm
packages/openssl-devel-1.0.1e-57.el6.x86_64.rpm
將依賴包移動到空的目錄下並打包
[root@m01 base]# find packages/ -type f -name "*rpm"|xargs cp -t /tmp/
[root@m01 ~]# cd /tmp/ && tar zcf nginx_yum.tar.gz *.rpm
編譯安裝nginx
[root@m01 tmp]# useradd nginx -M -s /sbin/nologin
[root@m01 tmp]# cd /application/tools/
[root@m01 tools]# tar xf nginx-1.6.3.tar.gz
[root@m01 tools]# cd nginx-1.6.3
[root@m01 nginx-1.6.3]# ./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
[root@m01 nginx-1.6.3]#make && make install
[root@m01 nginx-1.6.3]# ln -s /application/nginx-1.6.3/ /application/nginx
編寫腳本
[root@m01 ~]# mkdir -p /server/scripts/
[root@m01 scripts]# vim nginx_rpm.sh
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.3/ /application/nginx
* Fpm-打包**
fpm -s dir -t rpm -n nginx -v 1.6.3 -d ‘pcre-devel,openssl-devel‘ --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3
格式語法解釋:
-s 指定目錄源類型 –t 打包類型 rpm -n 包名稱 –v 版本 –d ‘依賴包以逗號分隔多個’ --post-install 安裝完程序後執行的腳本 -f 重名強制覆蓋 ,可不帶
整體類似tar 蘋果+框
[root@m01 scripts]# fpm -s dir -t rpm -n nginx -v 1.6.3 -d ‘pcre-devel,openssl-devel‘ --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3
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.6.3-1.x86_64.rpm"}
[root@m01 scripts]# sz nginx-1.6.3-1.x86_64.rpm
Fpm命令與rpmbuild命令關系
Fpm命令其實是對rpmbuild命令進行封裝,其實底層還是rpmbuild命令,因此系統必須要有rpmbuild命令
查看rpm包信息
查看包內容:
[root@m01 scripts]# rpm -qpl nginx-1.6.3-1.x86_64.rpm
/application/nginx-1.6.3/conf/fastcgi.conf
/application/nginx-1.6.3/conf/fastcgi.conf.default
/application/nginx-1.6.3/conf/fastcgi_params
/application/nginx-1.6.3/conf/fastcgi_params.default
/application/nginx-1.6.3/conf/koi-utf
/application/nginx-1.6.3/conf/koi-win
/application/nginx-1.6.3/conf/mime.types
/application/nginx-1.6.3/conf/mime.types.default
/application/nginx-1.6.3/conf/nginx.conf
/application/nginx-1.6.3/conf/nginx.conf.default
/application/nginx-1.6.3/conf/scgi_params
/application/nginx-1.6.3/conf/scgi_params.default
/application/nginx-1.6.3/conf/uwsgi_params
/application/nginx-1.6.3/conf/uwsgi_params.default
/application/nginx-1.6.3/conf/win-utf
/application/nginx-1.6.3/html/50x.html
/application/nginx-1.6.3/html/index.html
/application/nginx-1.6.3/logs
/application/nginx-1.6.3/sbin/nginx
查看包依賴
[root@m01 scripts]# rpm -qpR nginx-1.6.3-1.x86_64.rpm
pcre-devel
openssl-devel
/bin/sh
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
查看執行腳本,執行腳本不是以文件形式存在rpm中
[root@m01 scripts]# rpm -qp --scripts nginx-1.6.3-1.x86_64.rpm
postinstall scriptlet (using /bin/sh):
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.3/ /application/nginx
- Fpm打包註意事項*
安裝rpm包
上傳兩個包依賴tar包以及nginx的rpm包
[root@m01 tools]# ll -h
總用量 7.1M
-rw-r--r-- 1 root root 2.2M 4月 28 2018 nginx-1.6.3-1.x86_64.rpm
-rw-r--r-- 1 root root 5.0M 4月 28 2018 nginx_yum.tar.gz
[root@m01 tools]# pwd
/application/tools
安裝報錯處理
[root@chenleilei ~]# rpm -ivh nginx-1.6.3-1.x86_64.rpm
error: Failed dependencies:
pcre-devel is needed by nginx-1.6.3-1.x86_64
openssl-devel is needed by nginx-1.6.3-1.x86_64
解決辦法:
1. yum 安裝 這兩個包
2. rpm -ivh openssl-devel-1.0.1e-42.e16.x86_64.rpm
rpm -ivh pcre-devel-7.8-7.e16.x86_64.rpm
RPM包定制-實戰