1. 程式人生 > >CentOS6.5系統自定義RPM包實踐

CentOS6.5系統自定義RPM包實踐

linux rpm包管理

定制化RPM服務

第1章 RPM的原理及應用

1.1 RPM介紹

RPM全稱是 Red Hat Package ManagerRed Hat包管理器)。幾乎所有的 Linux 發行版本都使用這種形式的軟件包管理安裝、更新和卸載軟件。

RPM是一個開放的軟件包管理系統。它工作於Red Hat Linux以及其它LinuxUNIX 系統,可被任何人使用。redhat軟件公司鼓勵其它廠商來了解RPM並在自己的產品中使用它。RPM的發布基於GPL協議。對於最終用戶來說,使用RPM所提供的功能來維護系統是比較容易和輕松的。安裝、卸載和升級RPM軟件包只需一條命令就可以搞定。RPM維護了一個所有已安裝的軟件包和文件的數據庫,可以讓用戶進行查詢和驗證工作。在軟件包升級過程中,

RPM會對配置文件進行特別處理,絕對不會丟失以往的定制信息。對於程序員RPM可以讓我們連同軟件的源代碼打包成源代碼和二進制軟件包供最終用戶使用。

RPM擁有功能強大的查詢選項。我們可以搜索數據庫來查詢軟件包或文件。也可以查出某個文件屬於哪個軟件包或出自哪兒。RPM軟件包中的文件是以壓縮格式存放的,擁有一個定制的二進制頭文件,其中包含有關包和內容的信息,可以讓我們對單個軟件包的查詢簡便又快速。

RPM另一個強大的功能是進行軟件包的驗證。如果我們擔心誤刪了某個軟件包中的某個文件,我們就可以對它進行驗證。任何非正常現象將會被通知。如果需要的話還可以重新安裝該軟件包。在重新安裝過程中,所有被修改過的配置文件將被保留。

RPM設計目標之一就是要保持軟件包的原始特征, 就象該軟件的原始發布者發布軟件時那樣。通過使用RPM我們可以擁有最初的軟件和最新的補丁程序,還有詳細的軟件構建信息。

概括的說:RPM有五種基本的操作功能(不包括創建軟件包):安裝、卸載、升級、查詢、和驗證。關於rpm命令的使用我們可以用以下命令:

rpm –help

1.2 RPM功能

1.2.1 安裝

rpm -ivh name1.rpm ... nameN.rpm

通過rpm -ivh可以把rpm軟件包安裝到系統中,使用該選項可以解決大部分rpm軟件包的安裝,可使用rpm --help查看詳細的參數說明。

1.2.2 刪除

rpm -e name1 ... nameN

可以使用-e參數卸載rpm包

1.2.3 升級

rpm -Uvh  name1.rpm ... nameN.rpm

由於開源軟件更新速度快,用戶當然要使用最新版本的軟件包,此時最合適的就是rpm升級功能,當然最理想的參數選項就是-Uvh

1.2.4 查詢

rpm -q  options name1

實際上我們通常使用rpm工具最多的功能還是它的查詢功能,比如查看軟件包的版本、依賴關系等軟件包的詳細說明都要用到。最有用的參數選項是-qpi

1.2.5 校驗已安裝的軟件包

rpm -V  name1

可用通過-V參數來驗證已安裝軟件包

第2章 FPM原理及應用

FPM的作者是jordansissel

FPMgithubhttps://github.com/jordansissel/fpm

FPM功能簡單說就是將一種類型的包轉換成另一種類型。

2.1 FPM支持的包類型

支持的源類型包:

包類型(源)

含義

dir

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

rpm

rpm包進行轉換

gem

rubygem包進行轉換

python

python模塊打包成相應的類型

支持的目標類型包:

包類型(目標)

含義

rpm

轉換為rpm

deb

轉換為deb

solaris

轉換為solaris

puppt

轉換為puppet

2.2 安裝FTP工具

fpmruby寫的,因此系統環境需要ruby,且ruby版本號大於1.8.5

q 安裝ruby模塊

yum -y install ruby rubygems ruby-devel

q 查看當前使用的rubygems倉庫

gem sources list

q 添加淘寶的Rubygems倉庫,移除原生的Ruby倉庫

gem sources --add https://ruby.taobao.org/ --remove http://rubygems.org/

q 安裝一個低版本的json

gem install json -v 1.8.3

q 安裝FPM工具

gem install fpm –v 1.3.3

q 查看fpm版本

gem list fpm
gem list json

註:centos7系統可直接gem install fpm安裝

2.3 FTP參數詳解

常用參數如下:

-s

指定源類型

-t

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

-n

制定包的名字

-v

制定包的版本號

-C

指定打包的相對路徑

-d

制定依賴於哪些包

-f

強制輸出,會覆蓋前一個版本(默認為false

-p

輸出的安裝包存放目錄,如果不想放在當前目錄就需要指定

--post-install

指定軟件包安裝完成後需要運行的腳本

--pre-install

指定軟件包安裝完成前需要運行的腳本

--post-uninstall

指定軟件包卸載完成後需要運行的腳本

--pre-uninstall

指定軟件包卸載完成前需要運行的腳本

第3章 定制Nginx服務實踐

3.1 安裝Nginx服務

yum install pcre pcre-devel openssh openssl-devel -y
useradd  -u 888 -s /sbin/nologin -M www
cd /usr/local/src
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar xf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --prefix=/opt/nginx-1.12.2
make && make install
ln -s /opt/nginx-1.12.2 /opt/nginx

3.2 FPM打包腳本

安裝之後需要執行的操作腳本:

[root@ntp scripts]# cat nginx_rpm.sh
#!/bin/bash
#Date:      2017-12-20
#Version:   V1.0
#Description:   do something after nginx.rpm installed
user=`cat /etc/passwd| awk -F ":" '{print $1}' | grep "www" | wc -l`
if [ $user -eq 0 ]
then
    useradd -u 888 -s /sbin/nologin -M www
fi
ln -s /opt/nginx-1.12.2 /opt/nginx

卸載之後需要執行的腳本:

#!/bin/bash
/opt/nginx/sbin/nginx -s stop
userdel -rf www
rm -rf /opt/nginx
rm -rf /opt/nginx-1.12.2

3.3 FPM打包命令

[root@ntp scripts]# fpm -s dir -t rpm -n nginx -v 1.12.2 -d "pcre pcre-devel openssh openssl-devel" --post-install /service/scripts/nginx_rpm.sh --pre-uninstall /service/scripts/nginx_rpm_rm.sh  -f /opt/nginx-1.12.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.12.2-1.x86_64.rpm"}

第4章 定制MySQL實踐

4.1 安裝MySQL數據庫

cd /usr/local/src
wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.55-linux2.6-x86_64.tar.gz
useradd -s /sbin/nologin mysql -M
tar xf mysql-5.5.55-linux2.6-x86_64.tar.gz
mv mysql-5.5.55-linux2.6-x86_64 /opt/mysql-5.5.55
ln -s /opt/mysql-5.5.55 /opt/mysql
chown -R mysql.mysql /opt/mysql*

4.2 FPM打包腳本

安裝前腳本:

#!/bin/bash
 
#add mysql-server user
useradd -s /sbin/nologin -M mysql
 
#create mysql soft link
ln -s /opt/mysql-5.5.55 /opt/mysql
chown -R mysql.mysql /opt/mysql
chown -R mysql.mysql /opt/mysql-5.5.55
 
#init mysql database
cd /opt/mysql/scripts &&./mysql_install_db --basedir=/opt/mysql/ --datadir=/opt/mysql/data --user=mysql >/dev/null
 
#config file
\cp /opt/mysql/support-files/my-small.cnf /etc/my.cnf
 
#startup scripts
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i 's#/usr/local/mysql#/opt/mysql#g' /etc/init.d/mysqld
sed -i 's#/usr/local/mysql#/opt/mysql#g' /opt/mysql/bin/mysqld_safe
sed -i 's#basedir=$#basedir=/opt/mysql#g' /etc/init.d/mysqld
sed -i 's#datadir=$#datadir=/opt/mysql/data#g' /etc/init.d/mysqld
chmod 777 /etc/init.d/mysqld
 
#set env var
echo 'export PATH=/opt/mysql/bin:$PATH' >> /etc/profile
source /etc/profile

卸載後腳本:

#!/bin/bash
 
#stop mysql service
/etc/init.d/mysqld stop
 
#set env var
sed -i 's#export PATH=/opt/mysql/bin:$PATH##g' /etc/profile
source /etc/profile
 
#remove file
rm -f /etc/init.d/mysqld
rm -f /etc/my.cnf
rm -fr /opt/mysql
rm -rf /opt/mysql-5.5.55
 
#delete mysql user
userdel -r mysql

4.3 FPM打包命令

fpm -s dir -t rpm -n mysql -v 5.5.55 --post-install /service/scripts/mysql_rpm.sh --post-uninstall /service/scripts/mysql_rpm_rpm.sh -f /opt/mysql-5.5.55
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=>"mysql-5.5.55-1.x86_64.rpm"}

第5章 安裝RPM

安裝rpm包的三種方法:

5.1 RPM命令安裝

可以直接使用命令rpm安裝,但此方法需要事先安裝依賴包,有些時候很麻煩,不推薦:

rpm -ivh nginx-1.12.2-1.x86_64.rpm
Preparing...                ########################################### [100%]
   1:nginx                  ########################################### [100%]

5.2 YUM本地安裝

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

yum -y localinstall nginx-1.12.2-1.x86_64.rpm

5.3 YUM倉庫安裝

搭建yum倉庫,然後直接通過命令安裝:

yum -y install nginx


自此,FPM自定義封裝MySQL和Nginx服務完畢!


CentOS6.5系統自定義RPM包實踐