Linux網路服務之部署YUM倉庫

哈哈哈hh發表於2022-03-24

映象下載、域名解析、時間同步請點選  阿里雲開源映象站

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軟體倉庫提供

file

1.2 yum工作原理

yum依賴於環境,依賴於服務端和客戶端,允許跨網路。

Yum基於C/S模式:

  • yum 伺服器存放rpm包和相關包的後設資料
  • yum客戶端訪問yum伺服器進行安裝或查詢等

Yum實現過程:

先在yum伺服器上建立 yum repository(倉庫),在倉庫中事先儲存了眾多rpm包,以及包的相關的後設資料檔案(放置於特定目錄repodata下),當yum客戶端利用yum/dnf工具進行安裝時包時,會自動下載repodata中的後設資料,查詢遠資料是否存在相關的包及依賴關係,自動從倉庫中找到相關包下載並安裝。

file

伺服器(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

file

本地倉庫型別:

  • 光碟的倉庫(基本倉庫)
  • epel 擴充套件倉庫

1.3 如何實現安裝服務

file

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=
 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:自定義變數

file

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源

 #阿里雲
 

EPEL的yum源

 #阿里雲
 

更新源

 

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。

file

步驟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

file

步驟3、新建yum倉庫檔案。

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

file

步驟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測試是否成功

file

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=開啟哪個版本都可以正常使用,這邊主要解釋變數的作用
 baseurl=os/$basearch/    
 gpgcheck=0
 
 [epel]                                                         //epel源倉庫
 name=epel
 baseurl=
 gpgcheck=0
 
 [update]                                                        //更新包倉庫
 name=update
 baseurl=
 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

file

步驟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

file

步驟3、服務端關閉防火牆和selinux,啟動httpd服務。

 [root@localhost html]# systemctl stop firewalld
 [root@localhost html]# setenforce 0
 setenforce: SELinux is disabled
 [root@localhost html]# systemctl start httpd

file

步驟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

file

file

步驟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安裝,可以成功安裝。

file

file

4.4 ftp方式搭建雲倉庫

ftp方式搭建雲倉庫,在外網和內網的環境下都可以使用,但多用於內網。

服務端:192.168.72.10

客戶端:192.168.72.129

搭建步驟:

步驟1、服務端安裝vsftpd服務程式。

 [root@localhost html]# yum install vsftpd -y

file

步驟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

file

步驟3、服務端開啟vsftpd服務,關閉防火牆和selinux。

 [root@localhost ~]# systemctl start vsftpd
 [root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0

file

步驟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.

file

步驟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

file

file

步驟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安裝,可以成功安裝。

file

file

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  

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

本文轉自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2883695/,如需轉載,請註明出處,否則將追究法律責任。

相關文章