問題:當領導給你 100 臺已經安裝好系統的服務器,而後讓優化,讓你提出一個快速部署方案。
解答:
1.tar 打包 先編譯安裝 打包--》分發--》解包(好比 mysql 打包後直接就可使用
2.SaltStack,puppet
3.定製 rpm yum 倉庫 yum 安裝
4.openstack 虛擬機鏡像和 docker 容器分發
php
回顧下安裝軟件的三種方式:
一、編譯安裝軟件,優勢是能夠定製化安裝目錄、按需開啓功能等,缺點是須要查找並實驗出適合的編譯參數,諸如MySQL之類的軟件編譯耗時過長。
二、yum安裝軟件,優勢是全自動化安裝,不須要爲依賴問題發愁了,缺點是自主性太差,軟件的功能、存放位置都已經固定好了,不易變動。===>若是你如今還爲是使用編譯安裝軟件仍是使用yum安裝軟件發愁,那你就out了。
三、編譯源碼,根據本身的需求作成定製RPM包–>搭建內網yum倉庫–yum安裝。結合前二者的優勢,暫未發現什麼缺點。可能的缺點就是RPM包的通用性差,只能適用於本公司的環境。另一般人不會定製RPM包。這是中大型互聯網企業運維自動化的必要技能。
html
一:YUM 安裝
優勢:簡單,便捷,解決源碼包安裝依賴問題,全自動化安裝
缺點:沒有辦法定製,須要網絡,網絡環境差的狀況話,下載速度慢
二:編譯安裝
優勢:能夠定製軟件包(定製安裝目錄和軟件功能),必定狀況下不須要網絡,可自由選擇軟件版本
缺點:安裝過程慢,安裝複雜,須要查找編譯參數(對於一些編譯錯誤,找人求助也討人嫌),軟件編譯依賴性強
三:二進制安裝
優勢:簡單,快捷
缺點:不能定製,包容量大(mysql 的二進制包 200M 左右)
四:定製 rpm 包 yum 倉庫 yum 安裝
優勢:能夠根據本身的需求編譯軟件>>製做 rpm 包>>搭建 yum 倉庫>>上傳 rpm 包到 yum倉庫>>客戶端安裝軟件
缺點:第一步編譯安裝複雜,打包完成之後沒法更改,通常人不會這個方法node
這裏也不介紹rpm的概念,想了解的朋友能夠查看http://www.ibm.com/developerworks/cn/linux/l-rpm/。
python
rpmbuild 是 redhat 系統原生打包命令,這個命令的使用複雜不推薦使用此方法打包 rpm 包,太複雜啦,有想了解到的朋友能夠參考:http://dreamway.blog.51cto.com/1281816/1110874或者自行百度,咱們這裏使用一個簡單的FPM工具定製RPM包mysql
主機環境:CentOS 6.5linux
FPM打包工具
FPM的做者是jordansissel
FPM的github:https://github.com/jordansissel/fpm
FPM功能簡單說就是將一種類型的包轉換成另外一種類型。nginx
1. 支持的源類型包git
dir 將目錄打包成所須要的類型,能夠用於源碼編譯安裝的軟件包 rpm 對rpm進行轉換 gem 對rubygem包進行轉換 python 將python模塊打包成相應的類型
2. 支持的目標類型包github
rpm 轉換爲rpm包 deb 轉換爲deb包 solaris 轉換爲solaris包 puppet 轉換爲puppet模塊
3. FPM參數 (使用 fpm --help 查看更多幫助)
sql
-s 指定源類型 -t 指定目標類型,即想要製做爲何包 -n 指定包的名字 -v 指定包的版本號 -C 指定打包的相對路徑 Change directory to here before searching forfiles -d 指定依賴於哪些包 -f 第二次打包時目錄下若是有同名安裝包存在,則覆蓋它 -p 輸出的安裝包的目錄,不想放在當前目錄下就須要指定 --post-install 軟件包安裝完成以後所要運行的腳本;同--after-install --pre-install 軟件包安裝完成以前所要運行的腳本;同--before-install --post-uninstall 軟件包卸載完成以後所要運行的腳本;同--after-remove --pre-uninstall 軟件包卸載完成以前所要運行的腳本;同--before-remove
4.安裝FPM工具
fpm 是 ruby 寫的,所以系統環境須要 ruby,且 ruby 版本號大於 1.8.5。 # 安裝 ruby 模塊 yum -y install ruby ruby-devel rubygems rpm -qa ruby rubygems ruby-devel # 添加阿里雲的 Rubygems 倉庫,外國的源慢 gem sources -a http://mirrors.aliyun.com/rubygems/ gem sources 查看 Rubygems 倉庫信息 # 移除原生的 Ruby 倉庫 gem sources --remove http://rubygems.org/ # 安裝 fpm gem install fpm
***在安裝ruby包時,可能沒法使用yum的方式安裝上rubygems包,只能下載rubygems的rpm包進行安裝***
下載地址:http://rpmfind.net/linux/rpm2html/search.php?query=rubygems
rpm -ivh rubygems-1.3.7-5.el6.noarch.rpm --nodeps //這種方式安裝會忽略runygems的依賴包,不建議使用
或者
yum -y localinstall rubygems-1.3.7-5.el6.noarch.rpm //建議使用這種方式安裝,它會先安裝依賴包,再安裝rubygems包,須要配置yum源
安裝 fpm 打包工具時提示如下錯誤:
ERROR: Error installing fpm: ruby-xz requires Ruby version >= 1.9.3.
上面的提示表示您 Ruby 版本太低,須要安裝 1.9.3 的版本,解決思路只需安裝低版本的 fpm工具便可
解決方法:
gem install json -v 1.8.3 gem install fpm -v 1.3.3
或者
gem install fpm //先直接安裝一次,再安裝一個低版本的
gem install fpm -v 1.3.3
1. 編譯安裝Nginx服務
yum -y install pcre-devel openssl-devel //安裝Nginx依賴包 useradd -M -s /sbin/nologin nginx //添加Nginx運行用戶 tar zxvf nginx-1.8.1.tar.gz -C /usr/src/ //編譯安裝Nginx cd /usr/src/nginx-1.8.1/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module make && make install ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ //優化Nginx程序執行路徑 nginx //啓動Nginx服務,並驗證
2.開始定製Nginx服務的RPM包
(1)中止Nginx服務
[root@aery ~]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 8439 root 6u IPv4 38775 0t0 TCP *:http (LISTEN) nginx 8440 nginx 6u IPv4 38775 0t0 TCP *:http (LISTEN) [root@aery ~]# killall -9 nginx [root@aery ~]# lsof -i :80
(2)編寫腳本,用來 nginx 打包完成後,安裝後自動執行的腳本
[root@aery ~]# mkdir -p /server/scripts [root@aery ~]# vim /server/scripts/nginx.sh #!/bin/bash useradd -M -s /sbin/nologin nginx ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
(3)將 nginx 服務打包成 rpm 包,並指定須要安裝的依賴包
[root@aery ~]# fpm -s dir -t rpm -n nginx -v 1.8.1 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx.sh -f /usr/local/nginx/ 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.8.1-1.x86_64.rpm"}
(4)將打包完成的 rpm 包下載下來,上傳到須要安裝的服務器上便可實現 yum 安裝,或者是上傳到 yum 倉庫中提供給 yum 客戶端安裝
安裝 RPM包的三種方法
1) rpm命令安裝
[root@aery ~]# rpm -ivh nginx-1.8.1-1.x86_64.rpm error: Failed dependencies: pcre-devel is needed by nginx-1.8.1-1.x86_64
但會報如上依賴錯誤,須要先 yum 安裝依賴才能安裝 rpm 包
2) yum命令安裝
yum -y localinstall nginx-1.8.1-1.x86_64.rpm
這個命令會自動先安裝 rpm 包的依賴,而後再安裝 rpm 包。
3)咱們能夠將打包完成的 rpm 上傳 YUM 倉庫。而後進行 yum 安裝便可
YUM倉庫搭建參考:http://www.cnblogs.com/zhichaoma/p/7581957.html
#服務端 [root@aery ~]# cp nginx-1.8.1-1.x86_64.rpm /yum_source/ //將nginx的rpm包放到yum倉庫中 [root@aery ~]# createrepo --update /yum_source/ //更新域名倉庫 #客戶端 [root@aery ~]# yum clean all //清除 yum 之前的緩存 [root@aery ~]# yum makecache //更新 YUM 緩存 [root@aery ~]# yum list | grep nginx //檢查是否能夠從yum源中找到Nginx的rpm包 nginx.x86_64 1.8.1-1 @inside [root@aery ~]# yum -y install nginx //安裝Nginx [root@aery ~]# nginx //啓動Nginx服務 [root@aery ~]# lsof -i :80 //檢查 Nginx服務是否啓動 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 3900 root 6u IPv4 29101 0t0 TCP *:http (LISTEN) nginx 3901 nginx 6u IPv4 29101 0t0 TCP *:http (LISTEN)
最後使用客戶機驗證客戶機的服務是否能夠訪問(關閉客戶機的iptables)
對mysql數據庫進行定製RPM時的思路是,不要初始化數據庫
man rpm #查看 rpm 幫助 rpm -qpi nginx-1.6.3-1.x86_64.rpm #查看 rpm 包信息 rpm -qpl nginx-1.6.3-1.x86_64.rpm #查看 rpm 包內容 rpm -qpR nginx-1.6.3-1.x86_64.rpm #查看 rpm 包的依賴 rpm -qp --scripts nginx-1.6.3-1.x86_64.rpm #查看 rpm 包帶的執行腳本,執行腳 本以文件形式存在 rpm 包中 rpm -ivh nginx-1.6.3-1.x86_64.rpm #安裝 rpm 包 rpm -ivh --aid *.rpm #--aid 參數解決 rpm 包 循環依賴的問題,即當前目錄有全部相互依賴的 rpm 包,就能夠用這種方法。 rpm -Uvh *.rpm #若是依賴版本有更新的則自動更新 yum localinstall *.rpm #自動安裝 rpm 的依賴包