切换yum软件源
一、問題產生
? ? ? ?Centos 6.5 系統,如何切換yum軟件源,使yum軟件源可以指定互聯網上的軟件源,也可以指定自己設置的服務器上的軟件源。
二、相關知識
? ? 1. yum命令
? ? ? ? ?yum命令是在Fedora和RedHat以及SUSE中基于rpm的軟件包管理器,它可以使系統管理人員交互和自動化地更細與管理RPM軟件包,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
????????Linux的的發行版本可以大體分為兩類,一類是商業公司維護的發行版本,一類是社區組織維護的發行版本,前者以著名的紅帽(RHEL)為代表,后者以Debian的為代表。
?????? Redhat有兩大Linux產品系列,其中開源免費的Fedora Core系列主要用于桌面版本。另外一個產品系列是收費的Enterprise系列,即RHEL(Redhat Enterprise Linux),這個系列分成:AS / ES / WS等分支。
????????CentOS 就是將 收費的RHEL 發行的源代碼重新編譯一次,形成一個可用的二進制版本,由于 LINUX 的源代碼是 GNU,所以從獲得 RHEL 的源代碼到編譯成新的二進制,是合法。只是?REDHAT?是商標,所以必須在新的發行版里將 REDHAT 的商標去掉。CentOS 可以得到 RHEL 的所有功能,甚至是更好的軟件,但 CentOS 并不向用戶提供商業支持,當然也不負上任何商業責任。
? ? ? ? yum提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。
語法
????????yum(選項)(參數)
選項
????????-h:顯示幫助信息;
 ????????-y:對所有的提問都回答“yes”;
 ????????-c:指定配置文件;
 ????????-q:安靜模式;
 ????????-v:詳細模式;
 ????????-d:設置調試等級(0-10);
 ????????-e:設置錯誤等級(0-10);
 ????????-R:設置yum處理一個命令的最大等待時間;
 ????????-C:完全從緩存中運行,而不去下載或者更新任何頭文件。
參數
????????install:安裝rpm軟件包;
 ????????update:更新rpm軟件包;
 ????????check-update:檢查是否有可用的更新rpm軟件包;
 ????????remove:刪除指定的rpm軟件包;
 ????????list:顯示軟件包的信息;
 ????????search:檢查軟件包的信息;
 ????????info:顯示指定的rpm軟件包的描述信息和概要信息;
 ????????clean:清理yum過期的緩存;
 ????????shell:進入yum的shell提示符;
 ????????resolvedep:顯示rpm軟件包的依賴關系;
 ????????localinstall:安裝本地的rpm軟件包;
 ????????localupdate:顯示本地rpm軟件包進行更新;
 ????????deplist:顯示rpm軟件包的所有依賴關系。
? ? 實例
部分常用的命令包括:
自動搜索最快鏡像插件:yum install yum-fastestmirror
 安裝yum圖形窗口插件:yum install yumex
 查看可能批量安裝的列表:yum grouplist
安裝
yum install ? ? ? ? ? ? ?#全部安裝
 yum install package1 ? ? #安裝指定的安裝包package1
 yum groupinsall group1 ? #安裝程序組group1
更新和升級
yum update ? ? ? ? ? ? ? #全部更新
 yum update package1 ? ? ?#更新指定程序包package1
 yum check-update ? ? ? ? #檢查可更新的程序
 yum upgrade package1 ? ? #升級指定程序包package1
 yum groupupdate group1 ? #升級程序組group1
查找和顯示
yum info package1 ? ? ?#顯示安裝包信息package1
 yum list ? ? ? ? ? ? ? #顯示所有已經安裝和可以安裝的程序包
 yum list package1 ? ? ?#顯示指定程序包安裝情況package1
 yum groupinfo group1 ? #顯示程序組group1信息yum search string 根據關鍵字string查找安裝包
刪除程序
yum remove | erase package1 ? #刪除程序包package1
 yum groupremove group1 ? ? ? ? ? ? #刪除程序組group1
 yum deplist package1 ? ? ? ? ? ? ? #查看程序package1依賴情況
清除緩存
yum clean packages ? ? ? #清除緩存目錄下的軟件包
 yum clean headers ? ? ? ?#清除緩存目錄下的 headers
 yum clean oldheaders ? ? #清除緩存目錄下舊的 headers
2.yum源配置文件
(1)什么是repo文件
? ? ? ? repo文件是Fedora中yum源(軟件倉庫)的配置文件,通常一個repo文件定義了一個或者多個軟件倉庫的細節內容,例如我們將從哪里下載需要安裝或者升級的軟件包,repo文件中的設置內容將被yum讀取和應用。/etc/yum.repo.d/xx.repo,其中xxx.repo文件會有多個,每一個文件定義一個軟件倉庫,最終yum會將所有的軟件倉庫集中起來同時起作用。
 ? ??? ???yum的工作原理并不復雜,每一個 rpm軟件的header里面都會記錄該軟件的依賴關系,那么如果可以將該頭的內容進行分析,可以知道每個軟件在安裝之前需要額外安裝哪些基礎軟件。也就是說,在服務器上面先使用分析工具將所有的RPM檔案進行分析,然后將該分析結果記錄下來,只要在進行安裝或升級時先查詢該記錄,就可以知道所有相關聯的軟件。所以YUM的基本工作流程如下:
 ? ?? ???服務器端:在服務器上面存放了所有的RPM軟件包和每個RPM文件的依賴性關系,依賴性關系存放在服務器的特定目錄內。
 ? ??? ??客戶端:如果需要安裝某個軟件時,先下載服務器上面記錄的依賴性關系文件(可通過WWW或FTP方式),通過對服務器端下載的記錄數據進行分析,然后取得所有相關的軟件,一次全部下載下來進行安裝。
(2)yum.conf 文件
? ? ? ? 位置 ? /etc/yum.conf
[main]
 cachedir=/var/cache/yum
 #cachedir:yum緩存的目錄,yum在此存儲下載的rpm包和數據庫,一般是/var/cache/yum。
 debuglevel=2
 #debuglevel:除錯級別,0──10,默認是2 貌似只記錄安裝和刪除記錄
 logfile=/var/log/yum.log
 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
 gpgcheck=1
 #gpgchkeck= 有1和0兩個選擇,分別代表是否是否進行gpg校驗,如果沒有這一項,默認是檢查的。
 reposdir=/etc/yy.rm #默認是 /etc/yum.repos.d/下的 xx.repo后綴文件
 #默認都會被include 進來 也就是說 /etc/yum.repos.d/xx.repo 無論配置文件有多少個 每個里面有多少個[name] 最后其實都被整合到 一個里面看就是了 重復的[name]后面的覆蓋前面的
 exclude=xxx
 #exclude 排除某些軟件在升級名單之外,可以用通配符,列表中各個項目要用空格隔開,這個對于安裝了諸如美化包,中文補丁的朋友特別有用。
 keepcache=[1 or 0]
 #設置 keepcache=1,yum 在成功安裝軟件包之后保留緩存的頭文件 (headers) 和軟件包。默認值為 keepcache=0 不保存
reposdir=[包含 .repo 文件的目錄的絕對路徑]
 #該選項用戶指定 .repo 文件的絕對路徑。.repo 文件包含軟件倉庫的信息 (作用與 /etc/yum.conf 文件中的 [repository] 片段相同)。
(3).repo文件
?位置? /etc/yum.repo.d/xx.repo
這個字段其實也可以在yum.conf里面直接配置
 [serverid]
 #其中serverid是用于區別各個不同的repository(倉庫;貯藏室;博物館;親信),必須有一個獨一無二的名稱。 重復了,后面覆蓋前面。必須有中括號。且必須放在最前面
 name=Some name for this server
 #name,是對repository的描述,支持像$releasever $basearch這樣的變量; name=Fedora Core $releasever - $basearch - Released Updates
baseurl=url://path/to/repository/
#baseurl是服務器設置中最重要的部分,只有設置正確,才能從上面獲取軟件。它的格式是:baseurl=url://server1/path/to/repository/url://server2/path/to/repository/url://server3/path/to/repository/ #其中url支持的協議有 http:// ftp:// file://三種。baseurl后可以跟多個url,你可以自己改為速度比較快的鏡像站, 但baseurl只能有一個,也就是說不能像如下格式:baseurl=url://server1/path/to/repository/baseurl=url://server2/path/to/repository/baseurl=url://server3/path/to/repository/ 其中url指向的是具體的網站,而path/to/repository/指向的是網站上的文件位置,它也支持$releasever $basearch這樣的變量。#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
 #上面的這一行是指定一個鏡像服務器的地址列表,通常是開啟的,本例中加了注釋符號禁用了,我們可以試試,將$releasever和$basearch替換成自己對應的版本和架構,例如10和i386,在瀏覽器中打開,我們就能看到一長串鏡可用的鏡像服務器地址列表。
url之后可以加上多個選項,如gpgcheck、exclude、failovermethod等,比如:
 gpgcheck=1
 exclude=gaim
 #其中gpgcheck,exclude的含義和yum.conf中的部分相同,但只對此服務器起作用,
 failovermethod=priority
 #failovermethode 有兩個選項roundrobin和priority,意思分別是有多個url可供選擇時,yum選擇的次序,roundrobin是隨機選擇,如果連接失 敗則使用下一個,依次循環,priority則根據url的次序從第一個開始。如果不指明,默認是roundrobin。
enabled=[1 or 0]
 #當某個軟件倉庫被配置成 enabled=0 時,yum 在安裝或升級軟件包時不會將該倉庫做為軟件包提供源。使用這個選項,可以啟用或禁用軟件倉庫。
 #通過 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 選項,或者通過 PackageKit 的"添加/刪除軟件"工具,也能夠方便地啟用和禁用指定的軟件倉庫
幾個變量:
 ????????$releasever,發行版的版本,從[main]部分的distroverpkg獲取,如果沒有,則根據redhat-release包進行判斷。
 ????????$arch,cpu體系,如i686,athlon等
 ????????$basearch,cpu的基本體系組,如i686和athlon同屬i386,alpha和alphaev6同屬alpha。
 ????????對yum.conf設定完成,我們就可以好好體驗yum帶來的方便了。
 ????????還有一件事沒有做。那就是導入每個reposity的GPG key,前面說過,yum可以使用gpg對包進行校驗,確保下載包的完整性,所以我們先要到各個repository站點找到gpg key,一般都會放在首頁的醒目位置,一些名字諸如 RPM-GPG-KEY.txt之類的純文本文件,把它們下載,然后用rpm --import xxx.txt命令將它們導入,最好把發行版自帶GPG-KEY也導入,rpm --import /usr/share/doc/redhat-release-*/RPM-GPG-KEY 官方軟件升級用的上。
來源:?http://junxi3q.blog.163.com/blog/static/134138699201141885616567/
三、切換yum源
????????切換yum源后,下載軟件包提示“沒有可用軟件包”,那么需要安裝epel來安裝yum源中沒有的軟件包。
網易yum源
????????163開源鏡像站是國內比較老的一個網站。很多人都在使用。從這里就可以看出來,網易,果然是業界良心啊。網易開源鏡像站:http://mirrors.163.com/
1. 首先備份/etc/yum.repos.d/CentOS-Base.repo
????????mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2. 下載對應版本repo文件, 放入/etc/yum.repos.d/(操作前請做好相應備份)
Centos7:
wget -P /etc/yum.repos.d?http://mirrors.163.com/.help/CentOS7-Base-163.repo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 或 curl -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo > Centos-7.repoCentos6 Centos5只需要將上述url末尾文件名替換即可。文件名稱:
 ? ? Centos6:CentOS6-Base-163.repo
 ? ? Centos5:CentOS5-Base-163.repo?
?3. 運行以下命令生成緩存
? ? ?yum clean all
 ? ? ?yum makecache
阿里云yum源
????????阿里云是最近新出的一個鏡像源。阿里云Linux安裝鏡像源官網教程地址:http://mirrors.aliyun.com/
配置方法
通知:CentOS 8操作系統版本結束了生命周期(EOL),Linux社區已不再維護該操作系統版本。建議您切換到Anolis或Alinux。如果您的業務過渡期仍需要使用CentOS 8系統中的一些安裝包,請根據下文切換CentOS 8的源。
1. 備份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2. 下載新的 CentOS-Base.repo 到 /etc/yum.repos.d/
centos8(centos8官方源已下線,建議切換centos-vault源)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repocentos6(centos6官方源已下線,建議切換centos-vault源)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repoCentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo3. 運行 yum makecache 生成緩存
4. 其他
非阿里云ECS用戶會出現 Couldn't resolve host 'mirrors.cloud.aliyuncs.com' 信息,不影響使用。用戶也可自行修改相關配置: eg:
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo?四、什么是epel
????????通過?yum list|grep xxx ,比如nginx,可以看到很多軟件包在yum源里面是沒有的。那么此時我們可以使用epel源來下載yum源里面沒有的軟件包,EPEL : Extra Packages for Enterprise Linux是基于Fedora的一個項目,為“紅帽系”的操作系統提供額外的軟件包,為 RHEL 及衍生發行版如 CentOS、Scientific Linux 等提供高質量軟件包的項目。
使用心得:
 1. 不用去更換原來yum源,安裝后會產生新repo
(1)安裝epel
sudo yum install epel-release
epel-release會自動配置yum的軟件倉庫。
(2) 更新系統
yum update
如果安裝軟件包提示"沒有可用軟件包 xxx。"我們可以通過命令?yum list | grep xxx?查看yum源列表是否有xxx相關的所有可用安裝包。如果沒有,就需要安裝epel。?
五、常見問題
? ? (1)關于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
? ? ? ? ? 這個錯誤其實很簡單,錯誤信息已經提示你,就是xxxxxx.repo這個文件有問題。
? ? ? ? ? ? ?1. ?打開/etc/yum.repos.d/xxxxxx.repo文件
? ? ? ? ? ? ? 2.enabled=1改成enabled=0
? ? ? ?(2)使用yum安裝計劃任務功能,結果提示:
# yum -y install vixie-cron Loaded plugins: fastestmirror, refresh-packagekit, security Existing lock /var/run/yum.pid: another copy is running as pid 25960. Another app is currently holding the yum lock; waiting for it to exit... 可能是系統自動升級正在運行,yum在鎖定狀態中。? 已經有一個yum進程在運行了,使用kill干掉它:# kill -s 9 25960 # ps aux|grep yum root ? ? ?6744 ?0.0 ?0.0 103260 ? 900 pts/1 ? ?S+ ? 14:59 ? 0:00 grep yum root ? ? 25960 ?0.0 ?0.0 ? ? ?0 ? ? 0 ? ? ? ? ?Z ? ?Sep19 ? 0:01 [yumBackend.py] <defunct> 很遺憾,kill對付不了它,那怎么辦呢?可以通過強制關掉yum進程:#rm -f /var/run/yum.pid 1 然后就可以使用yum了。? ? ?(3)/var/run目錄介紹
/var/run 目錄中存放的是自系統啟動以來描述系統信息的文件。 比較常見的用途是daemon進程將自己的pid保存到這個目錄。 標準要求這個文件夾中的文件必須是在系統啟動的時候清空,以便建立新的文件(1) pid文件的內容:pid文件為文本文件,內容只有一行, 記錄了該進程的ID。用cat命令可以看到。(2) pid文件的作用:防止進程啟動多個副本。只有獲得pid文件(固定路徑固定文件名)寫入權限(F_WRLCK)的進程才能正常啟動并把自身的PID寫入該文件中。其它同一個程序的多余進程則自動退出。? ? ?(4)yum安裝軟件失敗,一直retry mirror
? ? ? ? ? ping www.baicu.com,如果失敗,說明linux連不上網。檢查網絡問題。我的是因為DNS沒有設置,設置即可。
? ? ?/etc/sysconfig/netword-scripts/ifcfg-eth0添加DNS1=8.8.8.8 ?注意等號前后沒有空格。
? ? ? ? ? 如何設置虛擬機網絡環境,參考:Centos7 NAT網絡連接方式以及NetworkManger進行網絡連接管理_fang.lovest.yang的博客-CSDN博客_networkmanager配置文件。
? ? ?(5)如果配置了虛擬機網絡接口,并且在配置文件中加上了DNS,依然ping不同,那么考慮是否是路由設置有問題。
1.ip route list 查看默認路由是否指向NAT模式的網關IP。.如果不是,route del default gw 以前默認路由IP.route add default gw NAT網關IP? ? (6)CentOS報錯:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock32 error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
? ? ? ?報錯原因是“本機無法連接網絡的網絡設置”
總結
                            
                        - 上一篇: Spring系列学习之Spring Mo
 - 下一篇: Waukesha点火模块维修点火器维修7