1. 程式人生 > >配置本地 YUM 源

配置本地 YUM 源

       在企業中,除過DMZ堡壘機之外,大部分伺服器都是無法訪問外網的,這就出現一個問題,如果我們要對伺服器中某軟體進行升級怎麼辦?拿到我們要把軟體下載下來放進U盤,在跑到機房去,一個個升級?這顯然是不科學。第一,不具有時效性,第二,浪費了時間成本,當然還有其他原因,這裡就不一一列舉。
       因此,為了避免上述問題的存在,我們一般都會在區域網中配置自己的 yum 倉庫。下面我們就來介紹下 yum 倉庫的配置方法。

一、YUM 源是什麼?

       所謂 YUM 源,其實它就是一個目錄項,它是為了解決 Linux 中的依賴關係而存在的。當我們使用 yum 來安裝安裝軟體的時候,如果該軟體又需要的依賴軟體,則 yum 機制會根據在 YUM 源中定義好的路徑查詢依賴軟體,並自動將依賴軟體安裝。

二、YUM 的工作原理

       伺服器端:我們在伺服器端存放了大量的 RPM 軟體包,然後以相關的功能去分析每個 RPM 包的依賴關係,並將這些資料記錄成檔案存放在伺服器的某個特定的目錄中。

       客戶端:如果我們需要安裝某個軟體時,會先下載伺服器上面記錄的依賴性關係檔案,通過 對伺服器端下載的記錄資料進行分析,然後取得所有相關軟體,一次性全部下載下來進行安裝。

三、YUM 源配置檔案解析

       1、XXX.repo檔案

       [Centos]                      #yum 倉庫名稱,獨一無二的
       name=CentOS-$releasever - Media                       #yum 倉庫的描述,支援$releaseve    $basearch這樣的變數,如 name= Centos Core $releasever - $basearch - Released Updates
       baseurl=ftp://media/CentOS/                                #baseurl 是 yum 源中最重要部分,它支援三個協議的格式,分別為:http://、ftp://、file:///,後面可以跟多個url,但是隻能有一個 baseurl
                     http://media/cdrom/
                     file:///media/cdrecorder/
       mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch         #指定一個映象伺服器的地址列表,通常是開啟的,我們可以將$releasever、$basearch替換成自己對應的版本和架構
       gpgcheck=1                                   #是否開啟校驗,預設為1,設定為 0 是,表示不開啟校驗

       enabled=1                                      #是否啟用此 yum 源,1:啟用   0:禁用

       failovermethod=priority     #failoveermethod 有兩個選項,分別為 roundrobin(當有多個 url 可供選擇時,yum隨機選擇)和priority(當有多個 url 可供選擇時,yum依次選擇), 如果不止明,預設是roundrobin      

       priority=1         #yum 源的優先順序,數值越低,表示優先順序越高。

       gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7       #如果開啟yum源包校驗,則需要匯入RPM公鑰,此處只是在系統沒有匯入rpm公鑰時候進行安裝

       2、yum.conf

       [main]
       cachedir=/var/cache/yum/$basearch/$releasever                  #yum 下載後的快取目錄
       keepcache=0                                             #是否快取,0:不快取     1:快取
       debuglevel=2                                            #debuglevel:除錯級別,0──10,   預設是:2   表示只記錄安裝和刪除記錄
       logfile=/var/log/yum.log                          #yum 安裝日誌
       pkgpolicy=newest                                    #pkgpolicy: 包的策略。一共有兩個選項,newest和last,這個作用是如果你設定了多個repository,而同一軟體在不同的repository中同時存在,yum應該安裝哪一個,如果newest,則yum會安裝最新的那個版本。如果是last,則yum會將伺服器id以字母表排序,並選擇最後的那個伺服器上的軟體安裝。一般都是選newest。
       distroverpkg=centos-release                   #指定一個軟體包,yum會根據這個包判斷你的發行版本,預設是redhat-release,也可以是安裝的任何針對自己發行版的rpm包。
       tolerant=1                                                #tolerent,也有1和0兩個選項,表示yum是否容忍命令列發生與軟體包有關的錯誤,比如你要安裝1,2,3三個包,而其中3此前已經安裝了,如果你設為1,則yum不會出現錯誤資訊。預設是0。
       exactarch=1                                             #exactarch,有兩個選項1和0,代表是否只升級和你安裝軟體包cpu體系一致的包,如果設為1,則如你安裝了一個i386的rpm,則yum不會用1686的包來升級。   
       retries=20                                                #retries,網路連線發生錯誤後的重試次數,如果設為0,則會無限重試。                                        
       obsoletes=1                                            #此選項僅對更新有影響,它啟用yum的過時處理邏輯。 參閱 update
       gpgcheck=1                                            #是否進行 gpg 校驗,1:校驗     0:不校驗
       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

四、yum源配置

       1、安裝 apache 服務,做為 yum 源伺服器的服務系統

       [[email protected] ~]# yum -y install httpd

       將 /Package 目錄設定為 apache 的站點目錄,具體設定方式,這裡就不再贅述了,請參閱小弟的博文  http://blog.51cto.com/4746316/2326614

       2、啟動 anache 服務

       [[email protected] ~]# systemctl start httpd

       [[email protected] ~]# systemctl enable httpd

       3、建立 yum 倉庫

       [[email protected] ~]# createrepo -pdo /Package/ /Package/

       執行該命令後,會在 /Package/ 目錄下生成一個 repodata 目錄,進入該目錄

       [[email protected] ~]# cd /Package/repodata

       [[email protected] ~]# ll

       如圖,為目錄中的檔案

       圖片.png

       4、配置 repo 檔案

       進入 /etc/yum.repos.d 目錄

       [[email protected] repodata]# cd /etc/yum.repos.d/

       刪除或者移動或者重新命名其他的 yum 源配置檔案,編輯我們自己的 yum 源配置檔案

       [[email protected] yum.repos.d]# mv * /opt

       [[email protected] yum.repos.d]# vim Localhost.repo

       複製貼上一下內容到該檔案中

       #阿里雲
       [aliyun-base]
       name=CentOS-$releasever - Base - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #released updates

       [aliyun-updates]
       name=CentOS-$releasever - Updates - mirrors.aliyun.com
       failovermethod=priority
       baseurl=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/
       gpgcheck=1
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #additional packages that may be useful
       [aliyun-extras]
       name=CentOS-$releasever - Extras - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #additional packages that extend functionality of existing packages

       [aliyun-centosplus]
       name=CentOS-$releasever - Plus - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
       gpgcheck=1
       enabled=0
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #contrib - packages by Centos Users

       [aliyun-contrib]
       name=CentOS-$releasever - Contrib - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
       gpgcheck=1
       enabled=0
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
  
       #163.com
       [163-base]
       name=CentOS-$releasever - Base - 163.com
       #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
       baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7  
       #released updates

       [163-updates]
       name=CentOS-$releasever - Updates - 163.com
       #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
       baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7     
       #additional packages that may be useful

       [163-extras]
       name=CentOS-$releasever - Extras - 163.com
       #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
       baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
       #additional packages that extend functionality of existing packages

       [163-centosplus]
       name=CentOS-$releasever - Plus - 163.com
       baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
       gpgcheck=1
       enabled=0
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
    
       #Ceph
       [ceph-noarch]
       name=Ceph noarch packages
       baseurl=http://download.ceph.com/rpm-mimic/el7/noarch
       enabled=1
       gpgcheck=1
       type=rpm-md
       gpgkey=https://download.ceph.com/keys/release.asc
    
       [ceph-x86_64]
       name=Ceph noarch packages
       baseurl=http://download.ceph.com/rpm-mimic/el7/$basearch/
       enabled=1
       gpgcheck=1
       type=rpm-md
       gpgkey=https://download.ceph.com/keys/release.asc
     
       #清華大學
       [tsinghua]
       name=tsinghua
       baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/$basearch/
       enabled=1
       gpgcheck=0
      
       #zabbix
       [zabbix]
       name=zabbix
       baseurl=http://repo.zabbix.com/zabbix/4.1/rhel/$releasever/$basearch/
       enable=1
       gpgcheck=0
     
       #上海交大
       [centos-sh]
       name=centos-sh
       baseurl=http://ftp.sjtu.edu.cn/centos/$releasever/os/$basearch/
       enable=1
       gpgcheck=1
       gpgkey=http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-7
      
       #中國科技大學
       #[centos-zk]
       #name=centos-zk
       #baseurl=http://centos.ustc.edu.cn/centos/$releasever/os/$basearch/
       #enable=1
       #gpgcheck=1
       #gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-7

       #[ceph-zk]
       #name=ceph-zk
       #baseurl=http://centos.ustc.edu.cn/ceph/rpm-mimic/$releasever/$basearch/
       #enable=1
       #gpgcheck=1
       #gpgkey=http://centos.ustc.edu.cn/ceph/keys/release.asc

       #[epel-zk]
       #name=epel-zk
       #baseurl=http://centos.ustc.edu.cn/epel/$releasever/$basearch/
       #enable=1
       #gpgcheck=1
       #gpgkey=http://centos.ustc.edu.cn/epel/RPM-GPG-KEY-EPEL-7
      
       #搜狐開源映象
       [souhu]
       name=souhu
       baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch/
       enable=1
       gpgcheck=1
       http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-7       

       說明:這裡整理了國內比較常用的 yum 源

       儲存並退出,重建 yum 元資料快取。

       [[email protected] repodata]# yum clean all

       [[email protected] repodata]# yum makecache

       如果沒有報錯,說明正常,如果有報錯,請仔細檢查配置是否正確,由於地域原因,中國科技大學的 yum 經常會超時,所以在此,我進行登出。

       檢視我們自己配置的 yum 源是否存在

       [[email protected] yum.repos.d]# yum repolist

       如圖:

       圖片.png

      如果,得到的結果跟上圖差不多,說明 yum 源配置正確。

      5、同步公網 yum 源到本地

      使用命令:reposync -p /Package/

      [[email protected] ~]# reposync -p /Package/

      此命令可自動將公網 yum 源同步到本地,雖然較慢,但可同步所有源,具體的其他使用引數,請參考幫助。同步完之後,我們的 yum 倉庫就算建立完成。

      6、同步公網 yum 到本地是也可使用命令 wget 和 rsync,使用 rsync 時,需要公網的 yum 源支援才行。


      說明:以上配置時通過 http 協議來完成 yum 倉庫的搭建,同時我們也可以使用 ftp 協議、https協議以及 file 來搭建。ftp 和 https 協議搭建 yum 倉庫和 http 協議方法基本一樣,這裡就不介紹了,而 file ,則需要將 rpm 包上傳到指定目錄,或者掛載安裝光碟來完成,其他步驟基本和 http 協議一樣,這裡也不贅述,各位大佬可以舉一反三。

五、客戶端驗證

      在客戶端配置我們剛才搭建的 yum 倉庫

      [[email protected] ~]# cd /etc/yum.repos.d/

      [[email protected] yum.repos.d]# vim Package.repo

      [system]
      name=system
      baseurl=http://192.168.20.138
      enable=1
      gpgcheck=0

      儲存退出,重建 yum 元資料快取。

      [[email protected] repodata]# yum clean all

      [[email protected] repodata]# yum makecache

      然後,我們使用 yum 隨便安裝一個 yum 倉庫中存在的軟體,看是否能安裝成功,如果成功,說明我們配置沒問題,如果失敗,則需要我自回頭檢查一下配置。