linux系統rpm和yum軟件包管理


軟件安裝方式總結

安裝軟件方式有如下幾種:

方式1:編譯安裝
將源碼程序按照需求進行先編譯,后安裝
缺點:裝過程復雜,而且很慢
優點:安裝過程可控,真正的按需求進行安裝(安裝位置、安裝的模塊都可以選擇)

方式2:rpm安裝(用rpm來安裝rpm后綴的安裝包)
優點:安裝和卸載過程非常方便
缺點:安裝過程不可控(安裝位置,安裝那些功能模塊),rpm包的依賴關系非常復雜

方式3:yum安裝
yum安裝,其實就是自動分析rpm包的依賴關系,然后按照需要的順序依次安裝

方式4:綠色安裝

rpm

作用:rpm是一個數據庫管理工具,可以通過讀取數據庫,判斷軟件是否已經安裝,如果已經安裝可以讀取出來所有文件的所在位置等,並可以實現刪除這些文件。
rpm可以完成安裝軟件、卸載軟件、查詢軟件信息、升級、降級、檢驗、打包程序的操作。
rpm僅僅能管理符合rpm格式的程序包,不能管理源碼格式的程序。

程序的格式
源碼格式的程序:都是以壓縮方式呈現的(后綴都是.tar.gz|bz2)
rpm格式的程序:這都是編譯以后的程序 (后綴都是.rpm)

安裝rpm包

語法:rpm -ivh 軟件包名

option:
-i:安裝軟件
-v:顯示安裝過程
-h:用#表示安裝進度(# 2%)
-vv:顯示更詳細的安裝過程信息
-vvv:顯示更更詳細的安裝過程信息

卸載rpm包

語法:rpm -e 軟件名

option:
-e:卸載軟件

查詢已經安裝的rpm包(常用)

語法:rpm -q 軟件名

option:
-q:查看一個已經安裝的軟件
-f: --file
-a:查看所有已經安裝的軟件all (-qa)
-l:顯示軟件安裝完成以后生成文件列表(所有文件)list (-ql)
-i:查看軟件包的相關信息 info
-d:顯示該軟件所生成的說明性質的文檔列表docfiles
-c:查看軟件所生成的配置文件列表configfiles
--scripts:查看軟件相關的腳本

rpm -V 用來檢查已安裝rpm包的完整性。所謂“完整性”,這里就是指安裝rpm包產生的所有文件和原始rpm包中的信息是否一致。

補充:
preinstall scriptlet (using /bin/sh)::安裝前執行腳本
postinstall scriptlet (using /bin/sh)::安裝后執行腳本
preuninstall scriptlet (using /bin/sh)::卸載前執行腳本
postuninstall scriptlet (using /bin/sh)::卸載后執行腳本

如果安裝過程中,不想執行其中一個腳本,可以指定:
--nopre:不執行安裝前腳本
--nopost:不執行安裝后腳本
--nopreun :不執行卸載前腳本
--nopostun:不執行卸載后腳本

查看文件是哪個軟件生成的

rpm -qf /path/to/file

升級軟件

option:
-U:升級或安裝軟件
-F:僅僅是升級操作

語法:
rpm -Fvh 軟件包名
rpm -Uvh 軟件包名


yum

作用:yum是一個rpm包的管理工具,可以實現自動解決rpm包的依賴關系(自動安裝依賴順序進行rpm包的安裝)

為何rpm包會有依賴關系?
制作rpm的人,在制作rpm包的時候,就將這個rpm的所依賴的軟件的信息保存在這個rpm包的內部

下載軟件

yum install redis -y
yum localinstall -y  gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm 

#只下載不安裝
yum install  tree --downloadonly --downloaddir /root/   

##說明:如果該服務器已經安裝了需要下載的軟件包,那么使用 install下載就不行,可以使用reinstall下載  

軟件包組下載

yum grouplist    #查看軟件包組
yum groupinstall  "某個組"   #下載軟件包組

卸載軟件

yum remove redis -y

查詢

yum list     #查看rpm包
yum list all    #查看所有rpm包
yum list installed   #查看已安裝的rpm包
yum list available   #查看未安裝的rpm包
yum search 命令   #查看該命令依賴哪個包

清空緩存

yum clean all

查看所有倉庫源

yum repolist

yum的工作原理

①需要首先創建一個yum倉庫(rpm包倉庫、軟件倉庫)

倉庫其實就是一個目錄;
倉庫中存放的是rpm包;
倉庫中還保存了一個文件,文件中記錄了該倉庫中所有rpm包的元數據信息;
元數據信息包括:軟件名、軟件版本、軟件是否已經安裝、軟件的依賴關系;

②用 yum 來從倉庫中找軟件進行安裝的過程(比如要安裝軟件A,A依賴B 和C, B依賴C D)

yum首先會掃描保存元數據信息的文件,檢查A是否已經安裝,如果已經安裝,那提示已經安裝;
如果A尚未安裝,那么掃描A的依賴關系信息,會發現A 依賴B 和C;
yum會再次掃描元數據文件,檢測B C 是否安裝,如果都已經安裝,那么會開始開始安裝A;
如果B C尚未安裝,那么會檢測 B C的依賴關系,會發現B依賴C D;
yum會再次掃描元數據文件,檢測C D是否安裝,如果都已經安裝,那么會開始開始安裝B,然后安裝C,,然后安裝A;

yum倉庫

本地:將本地的一個目錄做成yum倉庫,只有當前系統可以使用
網絡:通過網絡將服務器上的一個目錄作為yum倉庫,網絡中的全部主機都可以使用

使用yum倉庫的方式,就是修改yum的配置文件

  • yum的配置文件
    主:/etc/yum.conf
    子:/etc/yum.repos.d/*.repo
╭─root@localhost.localdomain ~  
╰─➤  cat /etc/yum.conf
[main]          
cachedir=/var/cache/yum/$basearch/$releasever   //指定緩存文件的保存位置,默認:/var/cache/yum/x86_64/7/
keepcache=0       //指定是否保留緩存文件
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release


#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

用yum安裝軟件過程中會從yum倉庫下載並緩存多個資源
1)會將yum倉庫的元數據文件緩存到配置文件所指定的路徑中
2)會將要安裝的軟件及其依賴的軟件一並緩存到配置文件指定的目錄中

yum倉庫制作

yum配置文件的編寫
[localRpm] <<< 指定yum倉庫的id,可以隨便寫,但是中間不能有空格
name=xxx <<< 指定yum倉庫的名稱,可以隨便寫
enabled=0|1 <<< 指定是否使用該yum倉庫,0表示不使用;1表示使用
gpgcheck=0|1 <<< 指定是否對rpm包做完整性和來源合法性驗證,0表示不做驗證;1表示必須做驗證
gpgkey= <<< 指定公鑰文件(如果gpgcheck=1,那么該項不能省略)
baseurl= <<< 指定yum倉庫的url
cost=1 <<< 優先級等於1

  • 注意:在指定yum倉庫的時候,其實不是指向rpm包的目錄,而是執行repodata所在目錄

yum倉庫制作演示:

#第一步:編輯yum倉庫子文件

╭─root@localhost.localdomain ~  
╰─➤  cd /etc/yum.repos.d      #進入到子配置文件夾
╭─root@localhost.localdomain /etc/yum.repos.d  
╰─➤  vim mnt.repo       #創建並編輯配置文件  (文件名要求:*.repo)

#yum文件編輯內容:
...
[local]   
name=local1
enabled=1
gpgcheck=0
baseurl=file:///mnt        #本地yum倉庫文件內容
[aliyun]
name=aliyun1
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/     #網絡源yum倉庫文件內容
...

#第二步:掛在光盤

╭─root@localhost.localdomain ~  
╰─➤  mkdir /mnt
╭─root@localhost.localdomain /etc/yum.repos.d  
╰─➤  mount /dev/cdrom /mnt       #掛載光盤
mount: /dev/sr0 is write-protected, mounting read-only
mount: /dev/sr0 is already mounted or /mnt busy
       /dev/sr0 is already mounted on /yummnt
       /dev/sr0 is already mounted on /mnt

#第三步:查看yum倉庫

╭─root@localhost.localdomain /etc/yum.repos.d  
╰─➤  yum clean all     #清空yum緩存的全部數據
Loaded plugins: fastestmirror
Repository 'local': Error parsing config: Error parsing "baseurl = 'file///mnt'": URL must be http, ftp, file or https not ""
Cleaning repos: local aliyun
Cleaning up everything
Cleaning up list of fastest mirrors
╭─root@localhost.localdomain /etc/yum.repos.d  
╰─➤  yum repolist       # 檢查yum倉庫中有多少個可用的rpm包
Loaded plugins: fastestmirror
Repository 'local': Error parsing config: Error parsing "baseurl = 'file///mnt'": URL must be http, ftp, file or https not ""
local                                                                                                             | 3.6 kB  00:00:00     
aliyun                                                                                                            | 4.7 kB  00:00:00     
(1/5): local/group_gz                                                                                             | 155 kB  00:00:00     
(2/5): local/primary_db                                                                                           | 3.0 MB  00:00:00     
(3/5): aliyun/group_gz                                                                                            |  88 kB  00:00:06     
(4/5): aliyun/updateinfo                                                                                          | 998 kB  00:00:11     
(5/5): aliyun/primary_db                                                                                          | 6.7 MB  00:00:58     
Determining fastest mirrors
repo id                                            repo name                                     status
local                                               local1                                               3,831
aliyun                                              aliyun1                                          13,190
repolist: 17,021


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM