CentOS6.5系統自定義RPM包實踐
第1章 RPM的原理及應用
1.1 RPM介紹
RPM全稱是 Red Hat Package Manager(Red Hat包管理器)。幾乎所有的 Linux 發行版本都使用這種形式的軟件包管理安裝、更新和卸載軟件。
RPM是一個開放的軟件包管理系統。它工作於Red Hat Linux以及其它Linux和UNIX 系統,可被任何人使用。redhat軟件公司鼓勵其它廠商來了解RPM並在自己的產品中使用它。RPM的發布基於GPL協議。對於最終用戶來說,使用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
FPM的github:https://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工具
fpm是ruby寫的,因此系統環境需要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包實踐