速成制作rpm包


本節內容:

  • FPM介紹
  • 安裝FPM
  • 打包示例
  • 卸載安裝后的rpm包

 

一、FPM介紹

由於很多軟件在安裝時需要編譯,這會浪費不少的時間,為了提升部署效率,於是就想到制作rpm包。
通常rpm包的制作是使用rpmbuild命令來制作,但是你需要知道它的語法,比較繁瑣。這就用到了FPM。
FPM功能簡單說就是將一種類型的包轉換成另一種類型。FPM是Ruby模塊,其實打包時也是調用rpmbuild命令。

支持的源類型包:

  • dir 將目錄打包成所需要的類型,可以用於源碼編譯安裝的軟件包
  • rpm 對rpm進行轉換
  • gem 對rubygem包進行轉換
  • python 將python模塊打包成相應的類型

支持的目標類型包:

  • rpm 轉換成rpm包
  • deb 轉換成deb包
  • solaris 轉換成solaris包
  • puppet 轉換成puppet模塊

 

二、安裝FPM

1. 安裝依賴包

# yum -y install ruby rubygems ruby-devel gcc make

2. 添加倉庫

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

3. 移除原有的倉庫

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

4. 查看倉庫是不是只有自己添加的那個倉庫地址  

# gem sources -l 
http://mirrors.aliyun.com/rubygems/

5. 安裝fpm  

# gem install fpm

如果遇到報錯:

Building native extensions.  This could take a while...
ERROR:  Error installing fpm:
        ffi requires Ruby version >= 1.9.

原因:安裝fpm需要依賴包ruby的版本在1.9以上,那么升級ruby就可以了。

解決:

1. 使用rvm安裝,首先需要安裝rvm
先查看你是否安裝過rvm, 執行命令
rvm -v

2.yum -y update nss
   curl -L get.rvm.io | bash -s stable
執行成功后,根據尾部的提示執行:source /etc/profile.d/rvm.sh (路徑以尾部提示為准)
            
3. 查看是否安裝成功, 輸入:rvm -v

4. 列表顯示都可以安裝ruby的哪些版本
rvm list known

5. 更新ruby至版本2.3.0
rvm install 2.3.0

  

6. 如何查看fpm幫助  

# fpm --help  

常用參數:

-s 指定源類型
-t 指定目標類型
-n 指定包的名字
-v 指定包的版本號
-C 指定打包的相對路徑 change directory to here before searching for files
-d 指定依賴於哪些包
-f 第二次打包時目錄下如果有同名安裝包存在,則覆蓋它
-p 輸出的安裝包的目錄,不想放在當前目錄下就需要指定
--post-install 軟件包安裝完成之后所要運行的腳本,同--after-install
--pre-install 軟件包安裝完成之前所要運行的腳本,同--before-install
--post-uninstall 軟件包卸載之后所要運行的腳本,同--after-install
--pre-uninstall 軟件包卸載之前所要運行的腳本,同--before-install

 

三、打包示例

1. 打包MySQL

事先安裝好MySQL,MySQL安裝過程這里不在詳述。命令行終端輸入以下命令,然后等待rpm包制作完成。

# fpm -s dir -t rpm -n mysql -v 5.6.27 --description 'author: jkzhao' -d 'libaio' -d 'libaio-devel' --pre-install /usr/local/mysql/mysql_pre_init.sh --post-install /usr/local/mysql/mysql_post_init.sh  /usr/local/mysql /usr/local/mysql-5.6.27-linux-glibc2.5-x86_64 /data

【注意】:默認打好的包是在當前目錄下。

命令說明:
-s dir:指定源文件是目錄的形式
-t rpm:指定打包的格式
-n:指定打包后名稱
-v:版本號
--description:描述信息
-d:指定需要依賴的包。安裝MySQL前需要在系統上安裝libaio、libaio-devel。當你安裝fpm打包成的rpm包時,它會先去檢測系統上是否安裝了這兩個包,如果沒有安裝會給出提示,並終止rpm的安裝。
--pre-install:安裝rpm包前需要執行的腳本
--post-install:安裝rpm包后需要執行的腳本 

 

  • mysql_pre_init.sh的內容如下:
#!/bin/bash

user=mysql
group=mysql

# create group if not exists.
egrep "^$group" /etc/group >& /dev/null
if [ $? -ne 0 ]
then
    groupadd -r -g 300 $group
fi

# create user if not exists.  
egrep "^$user" /etc/passwd >& /dev/null
if [ $? -ne 0 ]
then
    useradd -g $group -r -s /sbin/nologin -u 300 $user
fi
  • mysql_post_init.sh的內容如下:
#!/bin/bash

# cp my.cnf force.
\cp /usr/local/mysql/my.cnf /etc/

# start/stop/restart script.
\cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld

# MySQL Client PATH.
\cp /usr/local/mysql/mysql.sh /etc/profile.d/

cd /usr/local/mysql
chown -R root.mysql .
chown -R mysql.mysql /data

打包完成后正常安裝,如:  

# rpm -ivh mysql-5.6.27-1.x86_64.rpm

 

2. 打包openresty  

事先安裝好openresty。命令行終端輸入以下命令,然后等待rpm包制作完成。

# fpm -s dir -t rpm -n openresty -v 1.9.7.3 --description 'author: jkzhao' -d 'openssl-devel' -d 'readline-devel' -d 'pcre-devel' -d 'gcc' --post-install /usr/local/openresty/openresty_init.sh  /usr/local/openresty

如果報如下錯誤:

Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}

解決:

# yum install -y rpm-build
  • openresty_init.sh的內容如下:
#!/bin/bash

mv /usr/local/openresty/nginx.service /etc/systemd/system/
systemctl enable nginx.service

  

四、卸載安裝后的rpm包

如果重新安裝rpm,必須先卸載rpm包,然后刪除相應的目錄及文件,否則再次安裝時會報錯。
【注意】:卸載不要先直接刪除目錄和文件,否則你再次安裝這個包時會說已安裝,沖突了。

# rpm -e --nodeps  mysql-5.6.27-1.x86_64.rpm

然后再去刪除各個目錄和配置文件。  

  


免責聲明!

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



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