鏡像下載、域名決議、時間同步請點擊 阿里云開源鏡像站
1 YUM簡介
1.1 YUM簡介
CentOS使用yum和dnf 解決rpm的包依賴關系,
YUM:rpm的前端程式,可解決軟體包相關依賴性,可在多個庫之間定位軟體包,up2date的替代工具,CentOS 8 使用dnf代替了yum,不過保留了和yum的兼容性,配置也是通用的,
YUM 的前身是 YUP(Yellow dog Updater,Yellow dog Linux 的軟體更新器),最初由 TSS 公司(Terra Soft Solutions,INC.)使用 Python 語言開發而成,后來由杜克大學(Duck University)的 Linux 開發隊伍進行改進,命名為 YUM(Yellow dog Updater,Modified), 要成功使用 YUM 機制來更新系統和軟體,需要有一個包含各種 rpm 安裝包檔案及其依 賴軟體的軟體倉庫(repository),提供軟體倉庫的服務器也稱為“源”服務器,在客戶機中只 要正確指定軟體倉庫的地址等資訊,就可以通過對應的“源”服務器來安裝或更新軟體,
YUM(Yellow dog Updater,Modified):
- 基于RPM包構建的軟體更新機制
- 可以自動解決依賴關系
- 所有軟體包由集中到YUM軟體倉庫提供

1.2 yum作業原理
yum依賴于環境,依賴于服務端和客戶端,允許跨網路,
Yum基于C/S模式:
- yum 服務器存放rpm包和相關包的元資料
- yum客戶端訪問yum服務器進行安裝或查詢等
Yum實作程序:
先在yum服務器上創建 yum repository(倉庫),在倉庫中事先存盤了眾多rpm包,以及包的相關的元資料檔案(放置于特定目錄repodata下),當yum客戶端利用yum/dnf工具進行安裝時包時,會自動下載repodata中的元資料,查詢遠資料是否存在相關的包及依賴關系,自動從倉庫中找到相關包下載并安裝,

服務器(RPM包和元資料缺一不可):
- RPM包 (存放在包檔案夾Packages中)
- 元資料(存放在元資料檔案夾repodata中,其中包含:目錄(軟體的目錄),軟體的依賴關系,軟體的分組)
#查看光碟中自帶的Yum倉庫,可以看到Packages檔案夾和repodata檔案夾:
?
[root@localhost ~]# mount /dev/sr0 /mnt //將光碟掛載到/mnt/目錄下
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@localhost ~]# ls /mnt //查看光碟內的包檔案夾和元資料檔案夾
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL

本地倉庫型別:
- 光碟的倉庫(基本倉庫)
- epel 擴展倉庫
1.3 如何實作安裝服務

2 yum客戶端配置
yum客戶端組態檔
/etc/yum.conf #為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo #每個倉庫的組態檔
2.1 yum主組態檔
位置:/etc/yum.conf
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever //yum下載的RPM包的快取目錄, $basearch代表硬體架構,$releasever系統版本比如7
keepcache=0 //是否保存快取 0代表不保存,1代表保存
debuglevel=2 //除錯級別(0-10),默認為2
logfile=/var/log/yum.log //日志檔案位置
exactarch=1 //是否允許不同版本的rpm安裝
obsoletes=1 //這是一個update的引數,是否允許舊版本的運行
gpgcheck=1 //是否驗證GPG(GNU Private Guard)密鑰,1表示驗證
plugins=1 //是否允許插件,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
?
?
# yum的repo組態檔中可用的變數:
$releasever: 當前OS的發行版的主版本號,如:8,7,6
$arch: CPU架構,如:aarch64, i586, i686,x86_64等
$basearch:系統基礎平臺;i386, x86_64
$contentdir:表示目錄,比如:centos-8,centos-7
$YUM0-$YUM9:自定義變數

2.2 yum倉庫組態檔
2.2.1 倉庫組態檔說明
位置:/etc/yum.repos.d/*.repo
系統內默認的yum倉庫,是centos官方的yum源(國外源),需要連通外網才可以使用,
[root@localhost yum.repos.d]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
?
[root@localhost yum.repos.d]# vim yuji.repo //yum倉庫組態檔格式
[yuji]
name=yuji #設定名稱
baseurl=file:///mnt #設定鏈接地址,file://是本地源的固定格式
enabled=1 #開啟此yum源
gpgcheck=0 #是否驗證公鑰,0表示無需驗證
yum倉庫組態檔中baseurl的幾種形式:
# 本地源
本地目錄 file://
?
# 網路源
FTP服務 ftp://
HTTP服務 http://
外網環境 https://
2.2.2 baseurl 指向的路徑
CentOS系統的yum源
#阿里云
https://mirrors.aliyun.com/centos/$releasever/
EPEL的yum源
#阿里云
https://mirrors.aliyun.com/epel/$releasever/x86_64
更新源
http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
2.3 日志檔案
位置:/var/log/yum.log
[root@localhost yum.repos.d]# head -5 /var/log/yum.log //查看日志檔案
Jan 19 10:55:29 Installed: tree-1.6.0-10.el7.x86_64
Feb 21 23:21:53 Installed: finger-0.17-52.el7.x86_64
Mar 19 17:10:29 Updated: 32:bind-license-9.11.4-26.P2.el7_9.9.noarch
Mar 19 17:10:30 Updated: 32:bind-libs-lite-9.11.4-26.P2.el7_9.9.x86_64
Mar 19 17:10:30 Updated: 32:bind-libs-9.11.4-26.P2.el7_9.9.x86_64
3 yum命令詳解
| 命令 | 不加關鍵字 | 加入關鍵詞、軟體包、軟體包組 |
|---|---|---|
| yum list | 顯示所有可用包 | 單個的可安裝包 |
| yum info | 顯示所有可用包的資訊 | 單個具體的資訊 |
| yum search | \ | 模糊查找所有的相關資訊 |
| yum whatprovides | \ | 精確查找 |
| yum install | \ | 安裝具體軟體包 |
| yum update | 所有軟體升級,更新內核 | 具體軟體升級 |
| yum upgrade | 只更新軟體包,但不更新內核 | 具體軟體更新 |
| yum remove | \ | 卸載具體軟體 |
| yum history | 查看當前yum操作歷史 | \ |
| yum history info | \ | 加序號列出某次事務的詳細資訊 |
| yum history undo | \ | 加序號卸載序號里安裝的軟體 |
| yum history redo | \ | 加序號重新執行序號里的操作 |
包組:
| 命令 | 不加關鍵字 | 加入關鍵詞、軟體包、軟體包組 |
|---|---|---|
| yum grouplist | 顯示所有可用包組 | 顯示具體的包組 |
| yum groupinfo | 顯示所有的包組具體資訊 | 顯示具體的包組的具體資訊 |
| yum groupinstall | \ | 安裝具體軟體包組 |
| yum group update | 所有包組升級 | 具體包組升級 |
| yum groupremove | \ | 卸載具體包組軟體 |
小貼士:
當使用 “yum remove 軟體名” 未將軟體包卸載干凈時,可以使用“yum history undo 序號”進行卸載,可以完整卸載整個軟體包,沒有殘留,
4 yum倉庫搭建方式
軟體倉庫的提供方式:
- 本地目錄:file://絕對路徑
- FTP服務:ftp://ip地址/站點里的路徑
- HTTP服務:http://域名或者ip地址/站點里的路徑
4.1 搭建本地yum倉庫
搭建步驟:
步驟1、掛載光碟(/dev/sr0或/dev/cdrom都可以,/dev/cdrom是/dev/sr0的軟鏈接)
[root@localhost ~]# mount /dev/sr0 /mnt //將光碟掛載到/mnt目錄下
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@localhost ~]# df -Th //查看掛載是否成功
檔案系統 型別 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root xfs 10G 4.0G 6.1G 40% /
devtmpfs devtmpfs 897M 0 897M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 9.1M 903M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sdb5 xfs 2.0G 33M 2.0G 2% /data/bb
/dev/sda1 xfs 1014M 179M 836M 18% /boot
/dev/sdb1 xfs 10G 33M 10G 1% /data/aa
/dev/mapper/vg01-lvmail xfs 13G 33M 13G 1% /data/mail
tmpfs tmpfs 183M 12K 183M 1% /run/user/42
tmpfs tmpfs 183M 0 183M 0% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
注意:mount命令是一次性掛載,退出當前終端或重啟后就不存在了,永久掛載需要修改組態檔/etc/fstab,

步驟2、切換到 /etc/yum.repo.d/目錄,將自帶的倉庫檔案移走,
[root@localhost ~]# cd /etc/yum.repos.d/ //切換至/etc/yum.repos.d/目錄
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@localhost yum.repos.d]# mkdir aaa //創建一個名為aaa的新目錄
[root@localhost yum.repos.d]# mv *.repo aaa //將yum倉庫中以.repo結尾的檔案移動到aaa中
[root@localhost yum.repos.d]# ls
aaa

步驟3、新建yum倉庫檔案,
[root@localhost yum.repos.d]# vim yuji.repo //新建yum倉庫檔案
[yuji]
name=yuji #設定名稱
baseurl=file:///mnt #設定鏈接地址,file://是固定格式,指向/mnt
enabled=1 #開啟此yum源
gpgcheck=0 #無需驗證公鑰

步驟4、清理快取并安裝軟體,
[root@localhost yum.repos.d]# yum clean all //清理yum快取
[root@localhost yum.repos.d]# yum makecache //重新建立元資料
[root@localhost yum.repos.d]# yum list //查看可安裝的軟體串列
[root@localhost yum.repos.d]# yum install dhcp -y //yum安裝dhcp測驗是否成功

4.2 搭建阿里云倉庫(http方式外網環境)
默認的倉庫檔案是國外云倉庫,速度比較慢,可以使用阿里云倉庫代替,
操作步驟:
步驟1、切換到 /etc/yum.repo.d/目錄,將自帶的倉庫檔案移走,
[root@localhost ~]# cd /etc/yum.repos.d/ //切換至/etc/yum.repos.d/目錄
[root@localhost yum.repos.d]# mkdir aaa
[root@localhost yum.repos.d]# mv *.repo aaa //將yum倉庫中以.repo結尾的檔案移動到aaa中
[root@localhost yum.repos.d]# ls
aaa
步驟2、新建阿里云倉庫,
[root@localhost yum.repos.d]# vim ali.repo
[ali]
name=aliyun
#baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/ //開啟哪個版本都可以正常使用,這邊主要解釋變數的作用
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=0
?
[epel] //epel源倉庫
name=epel
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
gpgcheck=0
?
[update] //更新包倉庫
name=update
baseurl=https://mirrors.aliyun.com/centos/7/updates/x86_64/
gpgcheck=0
步驟3、清理快取并安裝軟體,
[root@localhost yum.repos.d]# yum clean all //清理yum快取
[root@localhost yum.repos.d]# yum makecache //重新建立元資料
[root@localhost yum.repos.d]# yum list //查看可安裝的軟體串列
[root@localhost yum.repos.d]# yum install tree -y //yum安裝tree測驗是否成功
4.3 http方式搭建云倉庫
http方式搭建云倉庫,在外網和內網的環境下都可以使用,但多用于內網,
服務端:192.168.72.10
客戶端:192.168.72.129
搭建步驟:
步驟1、服務端安裝hhtpd服務程式,
[root@localhost ~]# yum install httpd -y

步驟2、服務端切換到/var/www/html/ 目錄,新建子目錄centos7,并將光驅掛載到centos7目錄下(也可以將光驅中的所有軟體包拷貝到該目錄下),
[root@localhost ~]# cd /var/www/html //切換目錄
[root@localhost html]# ls
[root@localhost html]# mkdir centos7 //新建目錄centos7
[root@localhost html]# mount /dev/sr0 ./centos7 //將光驅掛載到centos7目錄下
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@localhost html]# ls ./centos7
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL

步驟3、服務端關閉防火墻和selinux,啟動httpd服務,
[root@localhost html]# systemctl stop firewalld
[root@localhost html]# setenforce 0
setenforce: SELinux is disabled
[root@localhost html]# systemctl start httpd

步驟4、客戶端切換到/etc/yum.repos.d/目錄,新建檔案夾,將默認的yum倉庫檔案移動到該目錄下,撰寫新的倉庫檔案
[root@192 ~]# cd /etc/yum.repos.d //客戶端切換目錄
[root@192 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@192 yum.repos.d]# mkdir bak //新建檔案夾
[root@192 yum.repos.d]# mv *.repo bak //將默認的倉庫檔案移動到該檔案夾下
[root@192 yum.repos.d]# ls
bak
[root@192 yum.repos.d]# vim http.repo //撰寫新的倉庫檔案
[http]
name=http
baseurl=http://192.168.72.10/centos7
enabled=1
gpgcheck=0


步驟5、清理yum快取,重新建立元資料,并測驗使用yum能否成功安裝軟體包,
[root@192 yum.repos.d]# yum clean all && yum makecache
已加載插件:fastestmirror, langpacks
正在清理軟體源: ftp
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
已加載插件:fastestmirror, langpacks
ftp | 3.6 kB 00:00:00
(1/4): ftp/group_gz | 156 kB 00:00:00
(2/4): ftp/primary_db | 3.1 MB 00:00:00
(3/4): ftp/other_db | 1.2 MB 00:00:00
(4/4): ftp/filelists_db | 3.1 MB 00:00:00
Determining fastest mirrors
元資料快取已建立
?
[root@192 yum.repos.d]# yum install ftp -y //測驗yum安裝,可以成功安裝,


4.4 ftp方式搭建云倉庫
ftp方式搭建云倉庫,在外網和內網的環境下都可以使用,但多用于內網,
服務端:192.168.72.10
客戶端:192.168.72.129
搭建步驟:
步驟1、服務端安裝vsftpd服務程式,
[root@localhost html]# yum install vsftpd -y

步驟2、服務端切換到 /var/ftp/ 目錄下新建一個子目錄centos,并將光驅掛載到centos目錄下(也可以將光驅內的所有檔案包復制到centos目錄下),
[root@localhost html]# cd /var/ftp //切換到/ftp/var/目錄
[root@localhost ftp]# ls
pub
[root@localhost ftp]# mkdir centos //創建centos目錄
[root@localhost ftp]#
[root@localhost ftp]# mount /dev/sr0 ./centos //將光驅掛載到centos目錄下
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@localhost ftp]# ls ./centos
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL

步驟3、服務端開啟vsftpd服務,關閉防火墻和selinux,
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

步驟4、客戶端安裝ftp程式,測驗ftp服務是否正常,
[root@192 ~]# yum install ftp -y //安裝ftp程式
?
[root@192 ~]# ftp 192.168.72.10 //測驗ftp服務能否正常訪問服務端
Connected to 192.168.72.10 (192.168.72.10).
220 (vsFTPd 3.0.2)
Name (192.168.72.10:root): ftp
331 Please specify the password.
Password:
230 Login successful. //可以正常訪問
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,72,10,85,22).
150 Here comes the directory listing.
drwxr-xr-x 8 0 0 2048 Sep 05 2017 centos
drwxr-xr-x 2 0 0 6 Jun 09 2021 pub
226 Directory send OK.
ftp> bye
221 Goodbye.

步驟5、客戶端撰寫yum倉庫檔案,
[root@192 ~]# cd /etc/yum.repos.d //切換目錄
[root@192 yum.repos.d]# ls
bak2 CentOS-Debuginfo.repo CentOS-Sources.repo
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo
[root@192 yum.repos.d]# mkdir bak1 //新建檔案夾
[root@192 yum.repos.d]# mv *.repo bak1 //將默認的倉庫檔案移動到該目錄下
[root@192 yum.repos.d]# ls
bak1 bak2
[root@192 yum.repos.d]# vim ftp.repo //撰寫新的倉庫檔案
[ftp]
name=ftp
baseurl=ftp://192.168.72.10/centos //路徑指向服務端的/var/ftp/centos/目錄
enabled=1
gpgcheck=0


步驟6、清理yum快取,重新建立元資料,并測驗使用yum能否成功安裝軟體包,
[root@192 yum.repos.d]# yum clean all && yum makecache
已加載插件:fastestmirror, langpacks
正在清理軟體源: ftp
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
已加載插件:fastestmirror, langpacks
ftp | 3.6 kB 00:00:00
(1/4): ftp/group_gz | 156 kB 00:00:00
(2/4): ftp/primary_db | 3.1 MB 00:00:00
(3/4): ftp/other_db | 1.2 MB 00:00:00
(4/4): ftp/filelists_db | 3.1 MB 00:00:00
Determining fastest mirrors
元資料快取已建立
?
[root@192 yum.repos.d]# yum install httpd -y //測驗yum安裝,可以成功安裝,


4.5 搭建本地epel源倉庫
本地epel源倉庫的應用場景:
- 在可以連外網的情況下,可以使用國外源或阿里云倉庫等,
- 但實際作業中,公司內網常常無法連接外網,這時可以提前搭建本地epel源倉庫,即在一臺可連通外網的服務器中提前下載好epel源的所有軟體包,撰寫好倉庫檔案后,在離線的情況下也可以使用yum安裝軟體包,
- 之后其他主機可以通過http方式或ftp方式使用服務端的epel源倉庫,
操作步驟:
步驟1、安裝epel源,并下載epel源的所有軟體包,
[root@localhost ~]# yum install epel-release //安裝epel源
[root@localhost ~]# mkdir centos7 //新建centos7目錄
[root@localhost ~]# reposync -r epel -p /centos7/ & //下載同步epel源軟體包,下載到/centos7/目錄下,&表示放到后臺下載
[root@localhost ~]# ls /centos7
epel
步驟2、安裝createrepo命令(建立元資料的命令),之后使用createrepo命令建立元資料,
[root@localhost ~]# yum -y install createrepo //安裝createrepo命令
[root@localhost ~]# createrepo -v /centos7/epel //建立元資料(軟體目錄、依賴關系)
[root@localhost ~]# cd /centos7/epel //切換到centos7/epel 目錄下
[root@localhost epel]# ls //查看軟體包和元資料
Packages repodata
步驟3、切換到/etc/yum.repos.d目錄,移走默認倉庫檔案,撰寫新的倉庫檔案,
[root@localhost ~]# cd /etc/yum.repos.d/ //切換至/etc/yum.repos.d/目錄
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[root@localhost yum.repos.d]# mkdir aaa //創建一個名為aaa的新目錄
[root@localhost yum.repos.d]# mv *.repo aaa //將yum倉庫中以.repo結尾的檔案移動到aaa中
[root@localhost yum.repos.d]# ls
aaa
[root@localhost yum.repos.d]# vim epellocal.repo //新建yum倉庫檔案
[epellocal]
name=epellocal #設定名稱
baseurl=file:///centos7/epel #設定鏈接地址,路徑指向/centos7/epel目錄
enabled=1 #開啟此yum源
gpgcheck=0 #無需驗證公鑰
其他主機如果想使用這臺機器中的epel倉庫,可以在本地使用http或ftp方式搭建:
baseurl=http://192.168.72.10/centos7/epel //http方式
?
baseurl=ftp://192.168.72.10/centos7/epel //ftp方式
5 小貼士
5.1 使用命令方式生成倉庫檔案
以上四種方式都是都是通過手動撰寫yum倉庫檔案來配置,也可以直接通過命令來搭建,
命令的方式配置原理和上面的檔案配置原理一樣,都是寫入/etc/yum.repos.d中,只是命令列是自動生成倉庫檔案 ,
1、外網環境搭建
命令格式:
wget -O /etc/yum.repos.d/name.repo(自定義以repo結尾的檔案名) 源路徑
wget 命令配置阿里云倉庫:
wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2、內網環境搭建
命令格式:
yum-config-manager --add-repo=file://
yum-config-manager --add-repo=ftp://
示例:
yum-config-manager --add-repo=file:///mnt //使用本地源
yum-config-manager --add-repo=ftp://192.168.72.10/centos7 //ftp方式搭建
5.2 下載依賴包到本地(但不安裝)
當內網的一臺主機安裝某個軟體包卻缺少依賴包時,可以先由一臺可連接外網的服務器下載依賴包,之后共享給這臺主機,
這時可以使用“yum install --downloadonly”命令,該命令可以僅下載所需軟體及其依賴包、而不安裝軟體,大大減少了無外網安裝時找依賴包的問題,命令格式如下:
yum install --downloadonly +軟體名稱 --downloaddir=指定rpm包存放路徑
例如,下載nginx所需要的依賴包到/mnt/nginx目錄內:
yum install nginx --downloadonly --downloaddir=/mnt/nginx
本文轉自:https://juejin.cn/post/7078172295302217735
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/449020.html
標籤:Linux
上一篇:Centos7 找回root密碼
