自建yum倉庫


 

YUM主要用於自動安裝、升級rpm軟件包,它能自動查找並解決rpm包之間的依賴關系。要成功的使用YUM工具安裝更新軟件或系統,就需要有一個包含各種rpm軟件包的repository(軟件倉庫),這個軟件倉庫我們習慣稱為yum源。網絡上有大量的yum源,但由於受到網絡環境的限制,導致軟件安裝耗時過長甚至失敗。特別是當有大量服務器大量軟件包需要安裝時,緩慢的進度條令人難以忍受。因此我們在優化系統時,都會更換國內的源。

相比較而言,本地YUM源服務器最大優點是局域網的快速網絡連接和穩定性。有了局域網中的YUM源服務器,即便在Internet連接中斷的情況下,也不會影響其他YUM客戶端的軟件安裝和升級。

 

環境說明

系統版本    CentOS 6.9 x86_64

  1. 收集rpm包

收集rpm包的方式:

※ 自己制作rpm包(較復雜)

※ 從光盤鏡像中提供rpm

※ 修改配置文件保留安裝rpm包時的rpm包及依賴包

[root@m01 opt]# vim /etc/yum.conf

[main]

cachedir=/var/cache/yum/$basearch/$releasever    #保存的路徑,可以修改安裝包的存儲目錄為本地yum源的目錄

keepcache=1        #參數為1表示保存安裝時下載的rpm

[root@m01 ~]# find / -name "*.rpm" |xargs mv -t /application/nginx/html/yum/        #將本地所有的rpm包移動到yum源的目錄下

  • yum只下載不安裝

yumdownloader pcre-devel openssl-devel

  • 同步公網yum源

 

2、安裝createrepo生成repodata

[root@m01 yum]# yum install createrepo -y

[root@m01 ~]# cd /application/nginx/html/yum

[root@m01 yum]# createrepo -pdo `pwd` `pwd`    #初始化repodata索引文件,路徑可以更換為自己指定的路徑

 

3、yum客戶端配置

創建本地yum源的repo文件

[root@localhost ~]# cd /etc/yum.repos.d/

[root@localhost yum.repos.d]# mkdir test

[root@localhost yum.repos.d]# mv *.repo test/    #移動系統原有的repo文件

[root@localhost yum.repos.d]# vim local.repo    #創建並編輯本地repo文件

[local]

name=localyum    #名稱

baseurl=http://10.0.0.61/        #yum源的url

enabled=1    #啟用repo1為默認項

gpgcheck=0    #不使用gpg檢查

 

4、更新repodata索引文件

createrepo --update /application/nginx/html/yum

或刪除repodatacreaterepo -pdo `pwd` `pwd`生成一下

注:每次添加或更新完rpm包都需要更新repodata索引文件

 

5、yum緩存

5.1 yum緩存共享

機器很多的時候,每次單獨更新yum緩存需要消耗大量流量,可以采取共享的方式節省流量

共享的方式:傳送緩存文件/var/cache/yum/x86_64/6/或者利用nfs文件共享

5.2修改yum緩存保持的時間

[root@m01 ~]# vim /etc/yum.conf

修改# metadata_expire=90m

(使用公網yum源)

metadata_expire=1d(時間短)

(使用自建yum源)

metadata_expire=365d(時間長)

 

6、yum插件

[root@m01 ~]# vim /etc/yum.conf    #修改配置文件

plugins=1    #默認值為1,開啟插件

 

6.1 yum加速插件fastestmirror

系統默認CentOS-Base.repo文件說明:

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

其中mirrorlist表示列表,后面的表達式我們可以根據系統將其變量替換為實際的值,即

http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=$infra

用瀏覽器訪問,可以發現官網會將上面的地址根據系統的信息以及ip地址匹配出適合本機器的yum源地址

[root@m01 ~]# cat /var/cache/yum/x86_64/6/base/mirrorlist.txt    #通過本地記錄查看地址

[root@m01 ~]# cat /var/cache/yum/x86_64/6/timedhosts.txt    #通過本地記錄查看時間

[root@m01 ~]# cat /etc/yum/pluginconf.d/fastestmirror.conf        #查看插件的配置文件

[main]

enabled=1

verbose=0

always_print_best_host = true

socket_timeout=3

# Relative paths are relative to the cachedir (and so works for users as well

# as root).

hostfilepath=timedhosts.txt

maxhostfileage=10

maxthreads=15

#exclude=.gov, facebook

#include_only=.nl,.de,.uk,.ie

啟用加速插件的要求即開啟插件功能和將地址換為mirrorlist

啟用加速插件后yum安裝的原理是對照上述的各個地址進行ping操作,哪一個的時間相對更短,則此次安裝就通過這個yum源的地址進行安裝

 

6.2 yum安全插件

默認已經安裝並啟用了該插件

[root@m01 ~]# cat /etc/yum/pluginconf.d/security.conf

[main]

enabled=1    #啟用插件

 

6.3 yum優先級插件priorities

Linux 發行版比較多,同時還有很多個人或組織維護了某些特定用途的安裝/升級源。Yum Priorities 插件可以用來強制保護源。它通過給各個源設定不同的優先級,使得系統管理員可以將某些源(比如 Linux 發行版的官方源)設定為最高優先級,從而保證系統的穩定性(同時也可能無法更新到其它源上提供的軟件最新版本)。

6.3.1安裝

[root@m01 ~]# yum install yum-priorities    #安裝插件

6.3.2配置

[root@m01 ~]# cat /etc/yum/pluginconf.d/priorities.conf

[main]

enabled = 1    #默認啟用插件

修改CentOS-Base.repo配置文件,例如本地現在有aliyun和tsinghua的repo文件,配置tsinghua的優先級高

配置方法為將priority=1(高優先級)分別添加到CentOS-tsinghua.repo中 [base], [updates], [extras], [centosplus]和 [contrib]這幾個源記錄模塊名稱的后面,並修改模塊名稱(模塊名稱不能重復)

利用sed命令和正則表達式

sed -r -i 's#(^\[.*$)#\1\npriority=1#g' CentOS-tsinghua.repo    #在模塊名稱下指定優先級值

sed -r -i 's#^(^\[[a-z]+)#\1-tsinghua#g' CentOS-tsinghua.repo    #修改模塊名稱,添加"-tsinghua"后綴

同樣的,將priority=2(低優先級)分別添加到CentOS-aliyun.repo中[base], [updates], [extras], [centosplus]和 [contrib]這幾個源記錄模塊名稱的后面

sed -r -i 's#(^\[.*$)#\1\npriority=2#g' CentOS-aliyun.repo

sed -r -i 's#^(^\[[a-z]+)#\1-aliyun#g' CentOS-tsinghua.repo

6.3.3檢驗

使用yum安裝一個軟件,例如yum install memcached –y

可以發現yum會比較優先級最后通過base-tsinghua的倉庫進行安裝

 

6.4 yum鎖定軟件版本插件versionlock

使用該鎖定指令就可以避免誤升級軟件包到最新版本。特別是在生產環境下的軟件包,版本的更新可以有些配置參數不兼容到服務停止,從而影響正常的訪問

6.4.1 安裝

[root@m01 ~]# yum install yum-plugin-versionlock.noarch -y

[root@m01 ~]# cat /etc/yum/pluginconf.d/priorities.conf

[main]        

enabled = 1    #默認啟用插件

6.4.2 使用,添加鎖定包

例子:將kernel包鎖定到當前版本

[root@m01 ~]# yum versionlock kernel    #添加鎖定包

已加載插件:fastestmirror, priorities, security, versionlock

Adding versionlock on: 0:kernel-2.6.32-696.el6

versionlock added: 1

[root@m01 ~]# yum update kernel    #更新kernel,無法更新,鎖定成功

已加載插件:fastestmirror, priorities, security, versionlock

設置更新進程

Loading mirror speeds from cached hostfile

* base-aliyun: mirrors.aliyun.com

* extras-aliyun: mirrors.aliyun.com

* updates-aliyun: mirrors.aliyun.com

8146 packages excluded due to repository priority protections

不升級任何軟件包

[root@m01 ~]# yum versionlock list    #查看鎖定列表

已加載插件:fastestmirror, priorities, security, versionlock

0:kernel-2.6.32-696.el6.*

versionlock list done

[root@m01 ~]# yum versionlock delete '0:kernel-2.6.32-696.el6.*'    #清除單個鎖定

已加載插件:fastestmirror, priorities, security, versionlock

Deleting versionlock for: 0:kernel-2.6.32-696.el6.*

versionlock deleted: 1

[root@m01 ~]# yum versionlock clear    #清除所有鎖定

已加載插件:fastestmirror, priorities, security, versionlock

versionlock cleared

 

說明:

說明1、yum源過濾指定的rpm包,若不想通過所設置的優先級,通過優先級低的源進行安裝軟件,需要利用配置參數exclude,修改高優先級的repo配置文件CentOS-tsinghua.repo

[root@m01 yum.repos.d]# vim CentOS-tsinghua.repo

[base-tsinghua]

priority=1

name=CentOS-$releasever - Base

baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

exclude=mysql*    #過濾有mysql的軟件,相應軟件要與所在的模塊對應

執行命令安裝mysql,可以發現已經不通過高優先級的tsinghua源安裝,通過aliyun源安裝

說明2、源記錄(repository entry)是由 [ 和 ] 括起來的源名稱。例如,Base 源記錄就標記為 [base] 。

優先級由 1 ~ 99 的 99 個數表示,1 的優先級最高。優先級小的源即使有某軟件的較新版本,如果優先級高的源中沒有,在啟用該插件的情況下,系統也無法安裝/升級到該較新版本。圖形界面的 YUM 工具一般默認就已經包含了優先級插件。

說明3、要禁用 YUM 優先級功能,只需要在/etc/yum/pluginconf.d/priorities.conf 中將 enable=1 改為 enable=0 即可。不建議!

 

7、yum常用參數

yum install             安裝

yum remove         卸載

yum update         更新

yum check-update    檢查是否有可用的更新

yum repolist         獲取當前系統有效的repolist

yum list             獲取當前有效repolist中所能安裝的所有rpm包列表

yum info             顯示指定的rpm軟件包的描述信息和概要信息

yum clean all         清理本地緩存

yum makecache     構建緩存

yum deplist         顯示rpm軟件包的依賴關系

yum localinstall         安裝本地的rpm軟件包

yum list recent         顯示倉庫中最近增加的程序包

yum history         查看yum事務歷史

 

博主原創文章,轉載請務必注明出處


免責聲明!

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



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