YUM主要用於自動安裝、升級rpm軟件包,它能自動查找並解決rpm包之間的依賴關係。要成功的使用YUM工具安裝更新軟件或系統,就須要有一個包含各類rpm軟件包的repository(軟件倉庫),這個軟件倉庫咱們習慣稱爲yum源。網絡上有大量的yum源,但因爲受到網絡環境的限制,致使軟件安裝耗時過長甚至失敗。特別是當有大量服務器大量軟件包須要安裝時,緩慢的進度條使人難以忍受。所以咱們在優化系統時,都會更換國內的源。相比較而言,本地YUM源服務器最大優勢是局域網的快速網絡鏈接和穩定性。有了局域網中的YUM源服務器,即使在Internet鏈接中斷的狀況下,也不會影響其餘YUM客戶端的軟件安裝和升級。php
RPM全稱是 Red Hat Package Manager(Red Hat包管理器)。幾乎全部的 Linux 發行版本都使用這種形式的軟件包管理安裝、更新和卸載軟件。html
RPM是一個開放的軟件包管理系統。它工做於Red Hat Linux以及其它Linux和UNIX 系統,可被任何人使用。redhat軟件公司鼓勵其它廠商來了解RPM並在本身的產品中使用它。RPM的發佈基於GPL協議。對於最終用戶來講,使用RPM所提供的功能來維護系統是比較容易和輕鬆的。安裝、卸載和升級RPM軟件包只需一條命令就能夠搞定。RPM維護了一個全部已安裝的軟件包和文件的數據庫,可讓用戶進行查詢和驗證工做。在軟件包升級過程當中,RPM會對配置文件進行特別處理,絕對不會丟失以往的定製信息。對於程序員RPM可讓咱們連同軟件的源代碼打包成源代碼和二進制軟件包供最終用戶使用。python
RPM擁有功能強大的查詢選項。咱們能夠搜索數據庫來查詢軟件包或文件。也能夠查出某個文件屬於哪一個軟件包或出自哪兒。RPM軟件包中的文件是以壓縮格式存放的,擁有一個定製的二進制頭文件,其中包含有關包和內容的信息,可讓咱們對單個軟件包的查詢簡便又快速。mysql
RPM另外一個強大的功能是進行軟件包的驗證。若是咱們擔憂誤刪了某個軟件包中的某個文件,咱們就能夠對它進行驗證。任何非正常現象將會被通知。若是須要的話還能夠從新安裝該軟件包。在從新安裝過程當中,全部被修改過的配置文件將被保留。linux
RPM設計目標之一就是要保持軟件包的原始特徵, 就象該軟件的原始發佈者發佈軟件時那樣。經過使用RPM咱們能夠擁有最初的軟件和最新的補丁程序,還有詳細的軟件構建信息。nginx
歸納的說:RPM有五種基本的操做功能(不包括建立軟件包):安裝、卸載、升級、查詢、和驗證。關於rpm命令的使用咱們能夠用如下命令:程序員
[root@hostname root]rpm -help
1) 安裝web
rpm -i ( or --install) options file1.rpm ... fileN.rpm 經過rpm -ivh能夠把rpm軟件包安裝到系統中,固然也可使用不一樣的參數選項,筆者建議使用-ivh ,使用該選項能夠解決大部分rpm軟件包的安裝,至於詳細的參數說明可用查看rpm的man 文檔。
2 )刪除sql
rpm -e ( or --erase) options pkg1 ... pkgN 若是某個軟件包你不再想使用了,那就用以上這個命令完全的把你指定的rpm軟件包清除掉把。
3 )升級數據庫
rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm 因爲開源軟件更新速度快,用戶固然要使用最新版本的軟件包,此時最合適的就是rpm升級功能,固然最理想的參數選項就是-Uvh。
4 )查詢
rpm -q ( or --query) options 實際上咱們一般使用rpm工具最多的功能仍是它的查詢功能,好比查看軟件包的版本、依賴關係等軟件包的詳細說明都要用到。最有用的參數選項是-qpi。
5 )校驗已安裝的軟件包
rpm -V ( or --verify, or -y) options 通常咱們可用經過該命令來驗證已安裝軟件包,根據筆者的經驗該命令通常沒什麼用途,只作一個瞭解就ok了。
參考:https://www.ibm.com/developerworks/cn/linux/l-rpm/
簡單說就是將一種類型的包轉換成另外一種類型。
dir #將目錄打包成所須要的類型,能夠用於源碼編譯安裝的軟件包 rpm #對rpm進行轉換 gem #對rubygem包進行轉換 python #將python模塊打包成相應的類型
rpm #轉換爲rpm包 deb #轉換爲deb包 solaris #轉換爲solaris包 puppet #轉換爲puppet模塊
fpm是ruby寫的,所以系統環境須要ruby,且ruby版本號大於1.8.5。 # 安裝ruby模塊 yum -y install ruby rubygems ruby-devel # 查看當前使用的rubygems倉庫 gem sources list # 添加淘寶的Rubygems倉庫,外國的源慢,移除原生的Ruby倉庫 gem sources -a http://mirrors.aliyun.com/rubygems/ --remove http://rubygems.org/ # 安裝fpm,gem從rubygem倉庫安裝軟件相似yum從yum倉庫安裝軟件。首先安裝低版本的json,高版本的json須要ruby2.0以上,而後安裝低版本的fpm,夠用。 gem install json -v 1.8.3 gem install fpm -v 1.3.3 # 上面的2步安裝僅適合CentOS6系統,CentOS7系統一步搞定,即gem install fpm [root@m01 tools]# gem install fpm Fetching: cabin-0.9.0.gem (100%) Successfully installed cabin-0.9.0 Fetching: backports-3.11.1.gem (100%) Successfully installed backports-3.11.1 Fetching: arr-pm-0.0.10.gem (100%) Successfully installed arr-pm-0.0.10 Fetching: clamp-1.0.1.gem (100%) Successfully installed clamp-1.0.1 Fetching: ffi-1.9.21.gem (100%) Building native extensions. This could take a while... ....... Parsing documentation for pleaserun-0.0.30 Installing ri documentation for pleaserun-0.0.30 Parsing documentation for fpm-1.9.3 Installing ri documentation for fpm-1.9.3 14 gems installed [root@m01 tools]# echo $? #不知道有沒有安裝好的話,能夠檢測這條命令是否執行成功 0 說明:過程可能會有點慢
1.Need executable 'rpmbuild' to convert dir to rpm {:level=>:error} 解決方法: [root@m01~]# yum install -y rpm-build 2.若是裏面有gcc make的錯誤. 解決方法: yum install -y gcc
詳細使用見fpm –help
經常使用參數 -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
lsof -i:80
[root@cs tools]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead)
[root@cs tools]# grep 'SELINUX' /etc/selinux/config # SELINUX= can take one of these three values: SELINUX=disabled # SELINUXTYPE= can take one of three two values: SELINUXTYPE=targeted
yum -y install pcre-devel openssl-devel useradd nginx -M -s /sbin/nologin tar xf nginx-1.12.2.tar.gz cd nginx-1.12.2 ./configure --prefix=/application/nginx-1.12.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module make && make install ln -s /application/nginx-1.12.2/ /application/nginx
[root@oldboy ~]# cd /server/scripts/ [root@oldboy scripts]# vim nginx_rpm.sh # 這是安裝完rpm包要執行的腳本 #!/bin/bash useradd nginx -M -s /sbin/nologin ln -s /application/nginx-1.12.2/ /application/nginx
[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.12.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.12.2/ Created package {:path=>"nginx-1.12.2-1.x86_64.rpm"} fpm #固定命令 -t #指定目標類型,即想要製做爲何包 -s #指定源類型 rpm #對rpm進行轉換 dir #將目錄打包成所須要的類型,能夠用於源碼編譯安裝的軟件包 -n #指定包名 -v #指定包的版本號 -d #指定依賴哪些包 -f #第二次打包時目錄下若是有同名安裝包在,則覆蓋它 --post-install #軟件包安裝完成以後所要運行的腳本;同--after-install libiconv-devel (打包php的時候5.5以上的php不要安裝這個依賴包,不然你打包好以後,yum安裝會報錯) [root@m01 server]# ll -h nginx-1.12.2-1.x86_64.rpm -rw-r--r-- 1 root root 2.6M Feb 21 03:13 nginx-1.12.2-1.x86_64.rpm
[root@cs tools]# rpm -qp --scripts nginx-1.12.2-1.x86_64.rpm postinstall scriptlet (using /bin/sh): #!/bin/bash useradd nginx -M -s /sbin/nologin ln -s /application/nginx-1.12.2/ /application/nginx
[root@cs tools]# rpm -qpR nginx-1.12.2-1.x86_64.rpm pcre-devel openssl-devel /bin/sh rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
[root@cs tools]# rpm -qpl nginx-1.12.2-1.x86_64.rpm /application/nginx-1.12.2/conf/fastcgi.conf /application/nginx-1.12.2/conf/fastcgi.conf.default /application/nginx-1.12.2/conf/fastcgi_params /application/nginx-1.12.2/conf/fastcgi_params.default /application/nginx-1.12.2/conf/koi-utf /application/nginx-1.12.2/conf/koi-win /application/nginx-1.12.2/conf/mime.types ....
[root@cs tools]# rpm -qpi nginx-1.12.2-1.x86_64.rpm Name : nginx Version : 1.12.2 Release : 1 Architecture: x86_64 Install Date: (not installed) Group : default Size : 5686816 License : unknown Signature : (none) Source RPM : nginx-1.12.2-1.src.rpm Build Date : Wed 21 Feb 2018 01:24:36 PM CST Build Host : cs Relocations : / Packager : <root@cs> Vendor : root@cs URL : http://example.com/no-uri-given Summary : no description given Description : no description given
rpm命令安裝 [root@LB-nginx-01 ~]# rpm -ivh nginx-1.12.2-1.x86_64.rpm error: Failed dependencies: pcre-devel is needed by nginx-1.12.2-1.x86_64 openssl-devel is needed by nginx-1.12.2-1.x86_64 但會報如上依賴錯誤,須要先yum安裝依賴才能安裝rpm包。 yum命令安裝rpm包 yum -y localinstall nginx-1.12.2-1.x86_64.rpm 這個命令會自動先安裝rpm包的依賴,而後再安裝rpm包。 搭建內網yum倉庫YUM倉庫搭建
[root@m01 application]# fpm -s dir -t rpm -n mysql -v 5.6.34 -f /application/mysql-5.6.34-linux-glibc2.5-x86_64 --post-install /server/scripts/mysql_rpm.sh All flags should be before the first argument (stray flags found: ["--post-install"] {:level=>:warn} Invalid package configuration: Cannot package the path './--post-install', does it exist? {:level=>:error} 解決方法: --post-install不能放到最後,選項的順序最好不要隨意變換
yum -y install createrepo
mkdir -p /application/nginx/html/CentOS7/ #將保存好的rpm包放入/application/nginx/html/CentOS7/
createrepo -pdo /application/nginx/html/CentOS7/ /application/nginx/html/CentOS7/
createrepo --update /application/nginx/html/CentOS7/
cat >/application/nginx/conf/nginx.conf<<EOF worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html/CentOS7; autoindex on; ##開啓目錄瀏覽功能,默認是不支持的 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } EOF
/application/nginx/sbin/nginx -t /application/nginx/sbin/nginx
yum install yum-utils -y #安裝yum包相關軟件 yumdownloader pcre-devel openssl-devel
createrepo --update/application/nginx/html/CentOS7
#訪問ip能夠查看yum倉庫內容,下面會多個一個repodata/目錄,是createrepo生成的。
#這是一個簡單的yum倉庫就搭建完成了,可是如今只有nginx的功能,之後能夠增長更多的內容,放進來目錄便可
cd /etc/yum.repos.d/ mkdir yum_bak #把以前的yum源移動到剛建立的目錄作備用 mv *.repo yum_bak
cat >/etc/yum.repos.d/local.repo<<EOF [local] name=Server baseurl=http://10.0.0.61 enabled=1 gpgcheck=0 EOF
yum clean all
[root@web01 yum.repos.d]# yum install nginx
[root@web01 yum.repos.d]# netstat -lntup|grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2022/nginx [root@web01 yum.repos.d]# ps -ef|grep nginx root 2022 1 0 21:52 ? 00:00:00 nginx: master process/application/nginx/sbin/nginx www 2023 2022 0 21:52 ? 00:00:00 nginx: worker process root 2027 1947 0 21:52 pts/1 00:00:00 grep nginx
cachedir=/var/cache/yum //yum 緩存的目錄,yum 在此存儲下載的rpm 包和數據庫,默認設置爲/var/cache/yum keepcache=0 //安裝完成後是否保留軟件包,0爲不保留(默認爲0),1爲保留 debuglevel=2 //Debug 信息輸出等級,範圍爲0-10,缺省爲2 logfile=/var/log/yum.log //yum 日誌文件位置。用戶能夠到/var/log/yum.log 文件去查詢過去所作的更新。 exactarch=1 //有1和0兩個選項,設置爲1,則yum 只會安裝和系統架構匹配的軟件包,例如,yum 不會將i686的軟件包安裝在適合i386的系統中。默認爲1。 obsoletes=1 //這是一個update 的參數,具體請參閱yum(8),簡單的說就是至關於upgrade,容許更新陳舊的RPM包。 gpgcheck=1 // 有1和0兩個選擇,分別表明是不是否進行gpg(GNU Private Guard) 校驗,以肯定rpm 包的來源是有效和安全的。這個選項若是設置在[main]部分,則對每一個repository 都有效。默認值爲0。 plugins=1 //是否啓用插件,默認1爲容許,0表示不容許。咱們通常會用yum-fastestmirror這個插件。 installonly_limit=5 #容許保留多少個內核包。 distroverpkg=redhat-release //指定一個軟件包,yum 會根據這個包判斷你的發行版本,默認是redhat-release,也能夠是安裝的任何針對本身發行版的rpm 包。
rpm的經常使用命令
rpm -qpi your.rpm #查看rpm包信息 rpm -qpl your.rpm #查看rpm包內容 rpm -qpR your.rpm #查看rpm包的依賴 rpm -qp --scripts your.rpm #查看rpm包要執行的腳本,存的不是文件了。 rpm -ivh your.rpm #安裝rpm包
老男孩參考文檔http://blog.oldboyedu.com/autodeploy-rpm/