1. 程式人生 > >CentOS下rpm與yum的應用

CentOS下rpm與yum的應用

linux

在我們學習和生產的環境中,經常需要安裝現有系統中沒有的軟件來滿足相應的需求。debian裏管理deb文件的是 dpkg包管理器,而redhat管理rpm文件的rpm包管理器,就是我們的主角了。今天阿拉就CentOS6.9與CentOS7.3的環境,跟大夥嘮一下紅帽經典的包管理器——rpm。當然,要說rpm,當然離不開他的老夥計yum。自然,阿拉提及的未必全面,歡迎各位補充喲。科科。


因為linux開源軟件提供的都是源碼。編譯源碼雖然並不復雜,但在生產環境中,編譯後的軟件包無疑更為普及,也更方便安裝和使用。為了生產效率,也為了提高Linux的通用性,就有了方便安裝的編譯後的二進制應用包。好吧,以上這些都是阿拉信口胡扯的。總之,二進制應用程序由二進制文件、庫文件、配置文件、幫助文件組成

。為了管理程序包,紅帽推出了名為rpm的編輯器,這也就是我們今天的話題來由。


rpm包的命名如下:

name-VERSION-release.arch.rpm


舉個例子的話就比如:

tree-1.6.0-10.el7.x86_64.rpm


VERSION是源碼的版本號,release對應e17,是編譯號,一啊不能用來指編譯的次數。arch指平臺,常見的有x86_64,指64位系統,i386代表32位系統,noarch則與平臺無關,即適用於任何系統。很多程序的包不止一個。按其形式大致有如下幾種:

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm 開發子包

Application-utils-VERSION-ARHC.rpm 其它子包

Application-libs-VERSION-ARHC.rpm 其它子包


因為rpm自身也是個包,我們可以以此為例:

[[email protected] Packages]# ls rpm-* 
rpm-4.11.3-21.el7.x86_64.rpm
rpm-apidocs-4.11.3-21.el7.noarch.rpm
rpm-build-4.11.3-21.el7.x86_64.rpm
rpm-build-libs-4.11.3-21.el7.i686.rpm
rpm-build-libs-4.11.3-21.el7.x86_64.rpm
rpm-cron-4.11.3-21.el7.noarch.rpm
rpm-devel-4.11.3-21.el7.i686.rpm
rpm-devel-4.11.3-21.el7.x86_64.rpm
rpm-libs-4.11.3-21.el7.i686.rpm
rpm-libs-4.11.3-21.el7.x86_64.rpm
rpm-plugin-systemd-inhibit-4.11.3-21.el7.x86_64.rpm
rpm-python-4.11.3-21.el7.x86_64.rpm
rpm-sign-4.11.3-21.el7.x86_64.rpm


對了,使用rpm之前記得光盤或iso要掛載呦。科科,不會的小夥伴自行百度啦!光是rpm就夠嗆,阿拉實在無力兼顧這個啦!

總之,我們可以從上對rpm的包名有個大體的認知。一般情況下,第一個直接軟件名-版本號的就夠我們用的啦!但是其他的,我們也有了解,不然以後耍帥都不夠格吶!


鑒於我們的廢話還要再說一會,接下來我們先小窺門徑,安裝個軟件包試試看:

[[email protected] Packages]# rpm -ivh gcc-4.8.5-11.el7.x86_64.rpm 
warning: gcc-4.8.5-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
        cpp = 4.8.5-11.el7 is needed by gcc-4.8.5-11.el7.x86_64
        glibc-devel >= 2.2.90-12 is needed by gcc-4.8.5-11.el7.x86_64
        libmpc.so.3()(64bit) is needed by gcc-4.8.5-11.el7.x86_6


看運行結果,第一行看著有點懵,我們後面說,第二行,清晰晰寫著error。error後面Failed dependencies是說由於依賴關系,當前軟件需要安裝以下幾個包後才能安裝。這裏就要提到一個概念了。

包之間可能存在依賴關系,甚至循環依賴。


不懂,好,讓我們繼續剛才的。既然安裝gcc需要cpp,那我們就幹脆裝一下好了。

[[email protected] Packages]# rpm -ivh cpp-4.8.5-11.el7.x86_64.rpm 
warning: cpp-4.8.5-11.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
        libmpc.so.3()(64bit) is needed by cpp-4.8.5-11.el7.x86_64


這樣下去要裝到什麽時候啊!正常人都會這樣想的。

關鍵是,哪個libmpc.so.3的又是個什麽鬼啊!裝一下試試。誒,tab補全不了。嗯~硬敲!

[[email protected] Packages]# rpm -ivh libmpc.so.3
error: open of libmpc.so.3 failed: No such file or directory


作為和linux鬧脾氣的結果,丫果然給報了個錯。

好吧,還記得我們提過的二進制應用程序由二進制文件、庫文件、配置文件、幫助文件組成的概念嗎?這個libmpc開頭的,是一個庫文件啦!庫文件裏一般存放算法和函數、變量或類之類可供程序調用的信息。你可以簡單的將其理解為倉庫。


包的依賴關系很是麻煩,於是解決依賴包的管理工具yum也就應運而生了。類似的linux常用包管理器有:

yum:rpm包管理器的前端工具

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具


關於庫文件相關的命令則如下:

ldd /PATH/TO/BINARY_FILE 查看二進制程序所依賴的庫文件

ldconfig 加載庫文件

/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件 名及文件路徑映射關系

相關配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

相關緩存文件:/etc/ld.so.cache


現在再來重申概念實在微妙。不過我們事先熟悉了部分理念,現在不來總結實在浪費。嘛嘛,阿拉會用盡量精簡的言語啦!

包管理器的功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、 升級和校驗等管理操作

包文件組成 (每個包獨有):RPM包內的文件;RPM的元數據,如名稱版本依賴性描述等;安裝或卸載時運行的腳本

數據庫(公共):/var/lib/rpm (程序包名稱及版本、依賴關系、功能說明、包安裝後生成的各文件路徑及校驗碼信息)

[[email protected] Packages]# ls /var/lib/rpm 
Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
Conflictname  __db.003  Installtid  Packages      Sha1header
__db.001      Dirnames  Name        Providename   Sigmd5


要獲取rpm可直接安裝的包非常容易啦!我們可以從本地ISO鏡像直接安裝,當然鏡像可以自官網得到,地址為https://www.centos.org/download/。官網上提供有阿裏雲、搜狐等的國內鏈接,在國內下載更快呦。 另外Fedora-EPEL和Rpmforge也是官方及其推廣的網站。不過第三方的包還是要仔細檢查下其合法性及完整性喲,不然丟失數據就得不償失啦!

同時,rpm我們是可以自己制作的,此處不再細說。其實阿拉還沒學到啦,科科。


終於要真實的說到rpm啦!啦啦啦,讓我們先瞅瞅這個能夠進行安裝、卸載、升級、查詢、校驗、數據庫維護的家夥的用法!

安裝: rpm {-i|--install} [install-options] PACKAGE_FILE…

-v: verbose

-vv:

-h: 以#顯示程序包管理執行進度

rpm -ivh PACKAGE_FILE ...

rpm包安裝 [install-options]

--test: 測試安裝,但不真正執行安裝,即dry run模式

--nodeps:忽略依賴關系

--replacepkgs | replacefiles

--nosignature: 不檢查來源合法性

--nodigest:不檢查包完整性

--noscripts:不執行程序包腳本

%pre: 安裝前腳本; --nopre

%post: 安裝後腳本; --nopost

%preun: 卸載前腳本; --nopreun

%postun: 卸載後腳本; --nopostun


升級: rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

rpm {-F|--freshen} [install-options] PACKAGE_FILE...

upgrade:安裝有舊版程序包,則“升級” 如果不存在舊版程序包,則“安裝”

freshen:安裝有舊版程序包,則“升級” 如果不存在舊版程序包,則不執行升級操作

rpm -Uvh PACKAGE_FILE ...

rpm -Fvh PACKAGE_FILE ...

--oldpackage:降級

--force: 強制安裝


升級註意項 註意: (1) 不要對內核做升級操作;Linux支持多內核版本並存,因此 ,對直接安裝新版本內核 (2) 如果原程序包的配置文件安裝後曾被修改,升級時,新版本 的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而 把新版本的文件重命名(FILENAME.rpmnew)後保留 21 包查詢 rpm {-q|--query} [select-options] [query-options] [select-options] -a: 所有包 -f: 查看指定的文件由哪個程序包安裝生成 -p rpmfile:針對尚未安裝的程序包文件做查詢操作 --whatprovides CAPABILITY:查詢指定的CAPABILITY 由哪個包所提供 --whatrequires CAPABILITY:查詢指定的CAPABILITY被 哪個包所依賴 rpm2cpio 包文件|cpio –itv 預覽包內文件 rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件 22 包查詢 [query-options] --changelog:查詢rpm包的changelog -c: 查詢程序的配置文件 -d: 查詢程序的文檔 -i: information -l: 查看指定的程序包安裝後生成的所有文件 --scripts:程序包自帶的腳本 --provides: 列出指定程序包所提供的CAPABILITY -R: 查詢指定的程序包所依賴的CAPABILITY 23 包查詢 常用查詢用法: -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ... -qa 包卸載: rpm {-e|--erase} [--allmatches] [--nodeps] [-- noscripts] [--notriggers] [--test] PACKAGE_NAME ... 24 包校驗 rpm {-V|--verify} [select-options] [verify-options] S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P capabilities differ 25 包校驗 包來源合法性驗正及完整性驗正 完整性驗正:SHA256 來源合法性驗正:RSA 公鑰加密 對稱加密:加密、解密使用同一密鑰 非對稱加密:密鑰是成對兒的 public key: 公鑰,公開所有人 secret key: 私鑰, 不能公開 導入所需要公鑰 rpm -K|checksig rpmfile 檢查包的完整性和簽名 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7 rpm -qa “gpg-pubkey*” 26 rpm數據庫 數據庫重建: /var/lib/rpm rpm {--initdb|--rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之 否則,不執行任何操作 rebuilddb:重建已安裝的包頭的數據庫索引目錄 27 yum CentOS: yum, dnf YUM: Yellowdog Update Modifier,rpm的前端程序,可解 決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date 的替代工具 yum repository: yum repo,存儲了眾多rpm包,以及 包的相關的元數據文件(放置於特定目錄repodata下) 文件服務器: http:// https:// ftp:// file:// 28 yum配置文件 yum客戶端配置文件: /etc/yum.conf:為所有倉庫提供公共配置 /etc/yum.repos.d/*.repo:為倉庫的指向提供配置 倉庫指向的定義: [repositoryID] name=Some name for this repository baseurl=url://path/to/repository/ enabled={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} failovermethod={roundrobin|priority} roundrobin:意為隨機挑選,默認值 priority:按順序訪問 cost= 默認為1000 29 yum倉庫 yum的repo配置文件中可用的變量: $releasever: 當前OS的發行版的主版本號 $arch: 平臺,i386,i486,i586,x86_64等 $basearch:基礎平臺;i386, x86_64 $YUM0-$YUM9:自定義變量 實例: http://server/centos/$releasever/$basearch/ http://server/centos/7/x86_64 http://server/centos/6/i384 30 yum源 阿裏雲repo文件: http://mirrors.aliyun.com/repo/ CentOS系統的yum源 阿裏雲: https://mirrors.aliyun.com/centos/$releasever/os/x86_64/ 教學環境: http://172.16.0.1/cobbler/ks_mirror/$releasever/ EPEL的yum源: 阿裏雲: https://mirrors.aliyun.com/epel/$releasever/x86_64 教學環境: http://172.16.0.1/fedora-epel/$releasever/x86_64/ 3131 生成172.16.0.1_cobbler_ks_mirror_CentOS-Xx86_64_.repo yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/ yum-config-manager --disable “倉庫名" 禁用倉庫 yum-config-manager --enable “倉庫名” 啟用倉庫 yum-config-manager 32 yum命令 yum命令的用法: yum [options] [command] [package ...] 顯示倉庫列表: yum repolist [all|enabled|disabled] 顯示程序包: yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1] [...] 安裝程序包: yum install package1 [package2] [...] yum reinstall package1 [package2] [...] (重新安裝) 33 yum命令 升級程序包: yum update [package1] [package2] [...] yum downgrade package1 [package2] [...] (降級) 檢查可用升級: yum check-update 卸載程序包: yum remove | erase package1 [package2] [...]

yum命令 查看程序包information: yum info [...] 查看指定的特性(可以是某文件)是由哪個程序包所提供: yum provides | whatprovides feature1 [feature2] [...] 清理本地緩存: 清除/var/cache/yum/$basearch/$releasever緩存 yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 構建緩存: yum makecache 35 yum命令 搜索:yum search string1 [string2] [...] 以指定的關鍵字搜索程序包名及summary信息 查看指定包所依賴的capabilities: yum deplist package1 [package2] [...] 查看yum事務歷史: yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats] yum history yum history info 6 yum history undo 6 日誌 :/var/log/yum.log 36 yum命令 安裝及升級本地程序包: yum localinstall rpmfile1 [rpmfile2] [...] (用install替代) yum localupdate rpmfile1 [rpmfile2] [...] (用update替代) 包組管理的相關命令: yum groupinstall group1 [group2] [...] yum groupupdate group1 [group2] [...] yum grouplist [hidden] [groupwildcard] [...] yum groupremove group1 [group2] [...] yum groupinfo group1 [...] 37 yum命令 yum的命令行選項: --nogpgcheck:禁止進行gpg check -y: 自動回答為“yes” -q:靜默模式 --disablerepo=repoidglob:臨時禁用此處指定的repo --enablerepo=repoidglob:臨時啟用此處指定的repo --noplugins:禁用所有插件 38 系統光盤yum倉庫 系統安裝光盤作為本地yum倉庫: (1) 掛載光盤至某目錄,例如/media/cdrom # mount /dev/cdrom /media/cdrom (2) 創建配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= 創建yum倉庫: createrepo [options]

首先放一張看起來很好玩的泡泡圖。

http:/10681.html

好玩的泡泡圖


olkit/LATEST/




三:

pt

功間。

環境介紹:192.168.56.132主庫,192.168.56.133從庫


操作如下:

在主庫上執行:

12[[email protected] bin]# ./pt-heartbeat --database test --update --create-table --daemonize -uroot -proot123

test為我監控同步的庫,在該庫下創建一張監控表heartbeat,後臺進程會時時更新這張表。


在從庫上執行監控主從同步延遲時間的語句:

master-server-id是主庫的server-id, -h(主庫ip)

gjkl

時間是0s,目前沒有延遲的出現。



錦囊妙計四:

pt-table-checksum

功能檢查主從復制一致性

原理:在主上否一致。

比較test庫的差異情況,在主庫上面執行:

hhjkl

可見diff都為0,證明主從的test庫沒有差異情況。


比較test庫哪些表有差異(需要添加replicate-check-only),在主庫上面執行:

ghjkl

可見test庫下面t這張表主從數據不一致。



錦囊妙計六:

pt-ioprofile

功能:方便定位IO問題,可通過IO吞吐量來定位。



通過這個報告我們可以看到,哪個文件占用IO的時間比較多,跟磁盤交互最為繁忙,便於鎖定IO問題。


因為這個工具集命令很多,今兒先給大家介紹這些比較常用的,其他的一些大家感興趣可以私下去研究下。

官方地址:https://www.percona.com/doc/percona-toolkit/LATEST/index.html


最近學習的知識點又多又碎,但看到老師最後非但


本文出自 “RightNow” 博客,謝絕轉載!

CentOS下rpm與yum的應用