1. 程式人生 > >定制rpm包

定制rpm包

定制rpm包

(一) ~ FPM打包工具

I.支持的源類型包

1.dir 將目錄打包成所需要的類型,可以用於源碼編譯安裝的軟件包

2.rpm 對rpm進行轉換

3.gem 對rubygem包進行轉換

4.python 將python模塊打包成相應的類型

II.支持的目標類型包

1.rpm 轉換為rpm包

2.deb 轉換為deb包

3.solaris 轉換為solaris包

4.puppet 轉換為puppet模塊

III.FPM安裝

1.fpm是ruby寫的,因此系統環境需要ruby,且ruby版本號大於1.8.5

2.#安裝ruby模塊

yum -y install ruby rubygems ruby-devel

3.# 添加阿裏雲的Rubygems倉庫,國外資源會影響下載速度

gem sources -a http://mirrors.aliyun.com/rubygems/ http://mirrors.aliyun.com/rubygems/added to sources

4.移除原生的ruby倉庫

gem sources --remove http://rubygems.org/

5.#安裝fpm,gem從rubygem倉庫安裝軟件類似yum從yum倉庫安裝軟件。首先安裝低版本的json,高版本的json需要ruby2.0以上,然後安裝低版本的fpm,夠用。

gem install json -v 1.8.3

gem install fpm -v 1.3.3

#此處如果安裝不上,先安裝gem installfpm 然後在安裝gem install fpm -v 1.3.3

#上面的2步安裝僅適合CentOS6系統,CentOS7系統一步搞定,即gem install fpm

#如果fpm安裝不上先將fpm版本去掉安裝gem install fpm然後在進行安裝對應版本gem install fpm -v 1.3.3

(二) ~ FPM參數

詳細使用見fpm -help

常用參數

1.-s 指定源類型

2.-t 指定目標類型,即想要制作為什麽包

3.-n 指定包的名字

4.-v 指定包的版本號

5.-C 指定打包的相對路徑 Change directory to here before searchingforfiles

6.-d 指定依賴於哪些包

7.-f 第二次打包時目錄下如果有同名安裝包存在,則覆蓋它

8.-p 輸出的安裝包的目錄,不想放在當前目錄下就需要指定

9.--post-install 軟件包安裝完成之後所要運行的腳本;同--after-install

10.--pre-install 軟件包安裝完成之前所要運行的腳本;同--before-install

11.--post-uninstall 軟件包卸載完成之後所要運行的腳本;同--after-remove

12.--pre-uninstall 軟件包卸載完成之前所要運行的腳本;同--before-remove


(三) ~ RPM包常用命令組合

#查看rpm幫助

man rpm

#查看rpm包信息

rpm -qpi 包名

#查看rpm包內容

rpm -qpl 包名

#查看rpm包的依賴

rpm -qpR 包名

#查看rpm包帶的執行腳本,執行腳本不是以文件形式存在rpm包中

rpm -qp–scripts 包名

#安裝rpm包

rpm -ivh 包名

rpm -ivh --aid*.rpm

#--aid參數解決RPM包循環依賴的問題,及當前目錄有所有相互依賴的rpm包。就可以用這種方法

#查看文件屬於哪個軟件包

rpm -qf /etc/my.cnf

rpm -qf `which+命令`

註意:(一)要使用絕對路徑打包

1.# 相對路徑

[root@oldboynginx]# fpm -s dir -t rpm -n nginx -v 1.6.2 .

no valuefor epoch is set, defaulting to nil {:level=>:warn}

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}

[root@oldboynginx]# rpm -qpl nginx-1.6.2-1.x86_64.rpm

/client_body_temp

/conf/extra/dynamic_pools

/conf/extra/static_pools

…………

3.# 絕對路徑

[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v1.6.2 /application/nginx-1.6.2/

no valuefor epoch is set, defaulting to nil {:level=>:warn}

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}

[root@oldboy~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm

/application/nginx-1.6.2/client_body_temp

/application/nginx-1.6.2/conf/extra/dynamic_pools

/application/nginx-1.6.2/conf/extra/static_pools

/application/nginx-1.6.2/conf/fastcgi.conf

/application/nginx-1.6.2/conf/fastcgi.conf.default

…………

註:fpm類似tar打包一樣,只是fpm打的包能夠被yum命令識別而已。

註意:(二)軟鏈接問題 不能使用軟鏈接打包,使用安裝目錄打包

1.[root@oldboy~]# fpm -s dir -t rpm -n nginx -v 1.6.2 /application/nginx

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Filealready exists, refusing to continue: nginx-1.6.2-1.x86_64.rpm{:level=>:fatal}

# 報錯是因為當前目錄存在同名的rpm包可以使用-f參數強制覆蓋

2.[root@oldboy~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -f /application/nginx

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Force flaggiven. Overwriting package at nginx-1.6.2-1.x86_64.rpm {:level=>:warn}

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}

打包看似成功,但查看包的內容,只是這一個軟鏈接文件。

3.[root@oldboy~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm

/application/nginx

原因:目錄結尾的/問題,類似rm刪除軟鏈接目錄

註意:(三)yum 安裝本地倉庫軟件時,yum不上,先清下本地緩存在進行安裝

安裝rpm

命令安裝rpm

yum localinstallnginx-1.10.2-1.x86_64.rpm

這個命令會自動先從網絡安裝rpm包的依賴,然後再安裝Nginxrpm

rpm 命令安裝 報沒有pcre-devel openssl-devel這兩個包

rpm -ivh nginx-1.10.2-1.x86_64.rpm

會發現報如下錯誤

[root@m01tools]# rpm -ivh nginx-1.10.2-1.x86_64.rpm

error:Failed dependencies:

pcre-devel is needed by nginx-1.10.2-1.x86_64

openssl-devel is needed by nginx-1.10.2-1.x86_64

解決方法:

1yum安裝依賴包

2rpm -ivh openssl-devel1.0.1e-42.e16.x86_64.rpm

rpm -ivh pcre-devel-7.8.7.e16.x86_64.rpm

3、如果本機已有所有的依賴包,就可以用下面的方法

tar xfnginx_yum.tar.gz

#將所有的rpm包放在一個目錄

rpm -ivh--aid *.rpm


(四) ~ 打包實例

  1. nginx打包

(1).編寫腳本

#cat /server/scripts/nginx_rpm.sh #這是安裝完rpm包要執行的腳本

#!/bin/sh

#Custom rpmpackage to be implemented by YH

NGINXversion=1.10.2

##Judge wwwusers do not exist ##判斷www用戶存在不存在

id www >/dev/null2>&1

if [ $? -eq0 ];then

echo "OK"

else

useradd -s /sbin/nologin -M www -u 1003

fi

#Judgenginx and no soft links ##判斷nginx又沒有軟鏈接

ls -l/application/nginx &>/dev/null

if [ $? -eq0 ];then

echo "OK"

else

/bin/ln-s /application/nginx-$NGINXversion /application/nginx

fi

#echo -e ‘\n#NginxServer\n/etc/init.d/nginx start’ >>/etc/rc.local

(2) 打包

#fpm -s dir -t rpm -nnginx -v 1.10.2 -d ‘pcre-devel,openssl-devel‘ --post-install/server/scripts/nginx_rpm.sh -f /application/nginx-1.10.2/

2.php打包

(1) 編寫腳本

#cat /server/scripts/php-install.sh

#!/bin/sh

id www&>/dev/null

[ $? -eq 0] || /usr/sbin/useradd -M -s /sbin/nologin -u 1003 www

ln -s/application/php-5.5.32/ /application/php

/application/php/sbin/php-fpm

grep"/application/php/sbin/php-fpm" /etc/rc.local &>/dev/null

[ $? -eq 0] || \

echo -e"\n#php-fpm start from the boot\n/application/php/sbin/php-fpm">> /etc/rc.local

(2) 打包

#fpm -s dir-t rpm -n php -v 5.5.32 -d‘zlib-devel,libxml2-devel,libjpeg-devel,libjpeg-turbo-devel,libiconv,freetype-devel,libpng-devel,gd-devel,libcurl-devel,libxslt-devel,libmcrypt-devel,mhash,mcrypt‘--post-install /server/scripts/php-rpm.sh -f /application/php-5.5.32/ /usr/local/libiconv

3.mysql打包

(1)編寫腳本

#cat mysql_install.sh

#!/bin/sh

#Installmysql ready

id mysql&>/dev/null

if [ $? -eq0 ];then

echo "OK" &>/dev/null

else

useradd -s /sbin/nologin -M mysql

fi

ln -s/application/mysql-5.6.34/ /application/mysql

#Modifypermissions

chown -Rmysql.mysql /application/mysql/

#Configurethe self-starting program

/bin/cp/application/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod +x/etc/init.d/mysqld

chkconfig--add mysqld

chkconfigmysqld on

sed -i‘s#/usr/local/mysql#/application/mysql#g‘ /application/mysql/bin/mysqld_safe/etc/init.d/mysqld

/bin/cp -a/application/mysql/bin/* /usr/local/sbin/

\cp/application/mysql/support-files/my-default.cnf /etc/my.cnf

/etc/init.d/mysqldstart

#Configureenvironment variables

grep"/application/mysql/bin" /etc/profile &>/dev/null

[ $? -eq 0] || echo ‘export PATH="/application/mysql/bin:$PATH"‘ >>/etc/profile

source/etc/profile

(2)打包

#fpm -s dir-t rpm -n mysql -v 5.6.34 -d ‘ncurses-devel‘ --post-install/server/scripts/mysql_rpm.sh -f /application/mysql-5.6.34/

本文出自 “丨Faith丶丨” 博客,請務必保留此出處http://13232152.blog.51cto.com/13222152/1981046

定制rpm包