創(chuàng)建本地倉庫 createrepo
#createrepo /shared/local
yum常用命令
yum –disable "*" –enable "rpmforge" list available
yum install ooobasis3.1-zh-CN* –disablerepo \* –enablerepo c5-media–nogpgcheck
[CentOS]Create Local Repos
yum只下載rpm包而不自動安裝
# yum install yum-downloadonly
兩個命令參數(shù),分別是:
* –downloadonly
* –downloaddir=/path/to/dir
添加兩個倉庫
RPM Fusion
redhat-club repo (包含一些影音工具)
rpm -ihv http://repo.redhat-club.org/redhat/5/i386/redhatclub-repository-release-5-3.el5.rhc.noarch.rpm
使用 yum 工具更新系統(tǒng)
yum 簡介
為什么使用 yum
Linux系統(tǒng)維護中令管理員很頭疼的就是軟件包之間的依賴性了,往往是你要安裝A軟件,但是編譯的時候告訴你X軟件安裝之前需要B軟件,而當你安裝Y軟件的時候,又告訴你需要Z庫了,好不容易安裝好Z庫,發(fā)現(xiàn)版本還有問題等。由于歷史原因,RPM軟件包管理系統(tǒng)對軟件之間的依存關系沒有內(nèi)部定義,造成安裝RPM軟件時經(jīng)常出現(xiàn)令人無法理解的軟件依賴問題。其實開源社區(qū)早就對這個問題嘗試進行解決了,不同的發(fā)行版推出了各自的工具,比如YellowDog的YUM(Yellow dog Updater, Modified),Debian的APT(Advanced PackagingTool)等。開發(fā)這些工具的目的都是為了要解決安裝RPM時的依賴性問題,而不是額外再建立一套安裝模式。這些軟件也被開源軟件愛好者們逐漸移植到別的發(fā)行版上。目前,APT和YUM都可以運行在Red Hat系統(tǒng)上。目前 yum 是Red Hat/Fedora系統(tǒng)上默認安裝的更新系統(tǒng)。
什么是 yum
yum(http://linux.duke.edu/projects/yum/),是 Yellow dog Updater, Modified 的簡稱,起初是由yellow dog 發(fā)行版的開發(fā)者 Terra Soft研發(fā),用 python 寫成,那時叫做 yup (yellow dog updater),后經(jīng)杜克大學的 Linux@Duke 開發(fā)團隊進行改進,遂有此名。yum的宗旨是自動化地升級,安裝/移除rpm包,收集rpm包的相關信息,檢查依賴性并自動提示用戶解決。yum 的關鍵之處是要有可靠的repository,顧名思義,這是軟件的倉庫,它可以是 http 或 ftp 站點,也可以是本地軟件池,但必須包含 rpm 的header,header 包括了rpm 包的各種信息,包括描述,功能,提供的文件,依賴性等.正是收集了這些header并加以分析,才能自動化地完成余下的任務。
yum 具有如下特點:
自動解決包的倚賴性問題能更方便的添加/刪除/更新RPM包
便于管理大量系統(tǒng)的更新問題
可以同時配置多個資源庫(Repository)
簡潔的配置文件(/etc/yum.conf)
保持與RPM數(shù)據(jù)庫的一致性
有一個比較詳細的log,可以查看何時升級安裝了什么軟件包等
使用方便
yum是CentOS/Fedora系統(tǒng)自帶的,因此它能使用CentOS官方的軟件源,完成各種官方發(fā)布的各種升級。對于第三方軟件源的支持,yum也不差,大多數(shù)支持 apt 的 repository,也能支持 yum,比如說 freshrpms、fedora.us、livna、dag 等。
CentOS 的鏡像和倉庫
CentOS 的鏡像站點
完整的 CentOS 軟件庫非常大。CentOS 的軟件包位于 CentOS 的鏡像站點 的目錄樹中,可通過 FTP 或 HTTP 訪問它們。
在 http://mirror-status.centos.org/可以看到各鏡像的狀態(tài)。
在 http://www.centos.org/modules/tinycontent/index.php?id=22可以看到如何進行鏡像的知識。
鏡像站點的第一級目錄是發(fā)行版本號,如 3、4、5 等。下列目錄存在于任何 CentOS 鏡像站點的版本號為5的目錄下:
addons/ : 本目錄包含 CentOS 的 addons 倉庫
centosplus/ : 本目錄包含 CentOS 的 centosplus 倉庫
extras/ : 本目錄包含 CentOS 的 extras 倉庫
fasttrack/ : 本目錄包含 CentOS 的 fasttrack 倉庫
isos-dvd/ : 本目錄包含發(fā)行版的 DVD iso 下載文件
isos/ : 本目錄包含發(fā)行版的 CD isos 下載文件
os/ : 本目錄包含發(fā)行版(distributions)的倉庫
updates/ : 本目錄包含 CentOS 的 updates 倉庫
CentOS 的倉庫
倉庫(repository)是一個預備好的目錄,或是一個網(wǎng)站,包含了軟件包和索引文件。 yum 可以在倉庫中自動地定位并獲取正確的 RPM軟件包。這樣,您就不必手動搜索和安裝新應用程序和升級補丁了。只用一個命令,您就可以更新系統(tǒng)中所有軟件,也可以根據(jù)指定搜索目標來查找安裝新軟件。
鏡像服務器為每個版本的 CentOS 分別提供了一些倉庫。CentOS 5 中的軟件管理工具 yum 已經(jīng)預先配置為使用下列四個倉庫:
base : 構成 CentOS 發(fā)行版(distributions)的軟件包,和光盤上內(nèi)容相同
updates : base 倉庫中軟件包的更新版本
addons : 已編譯的但不在發(fā)行版(distributions)中的軟件包
extras : 一大批附加的軟件包
還可以使用下面的倉庫,但在 CentOS 5 默認情況下未被啟用
centosplus/ : 用于增強一些現(xiàn)有軟件包的功能
CentOS 倉庫的目錄結構
下面以 CentOS 5 的 updates 倉庫為例說明其在鏡像站點上的目錄結構(其他倉庫結構類似):
updates/
|– SRPMS # 源代碼目錄
| |– *.src.rpm # 源代碼包文件
| `– repodata/ # 源代碼的索引文件
|– i386 # Intel 32位平臺目錄
| |– RPMS # Intel 32位平臺的RPMS目錄
| | |– *.i386.rpm # 在Intel 32位平臺上編譯的包文件
| | `– *.centos.noarch.rpm # 與平臺無關的已編譯的包文件
| `– repodata/ # Intel 32位平臺的索引文件
`– x86_64 # 64位平臺目錄
|– RPMS # 64位平臺的RPMS目錄
| |– *.x86_64.rpm # 在64位平臺上編譯的包文件
| `– *.centos.noarch.rpm # 與平臺無關的已編譯的包文件
`– repodata/ # 64位平臺的索引文件配置 yum 客戶的更新源
yum 使用 reposdir (/etc/yum.repos.d) 目錄下的一系列 .repo文件列出可獲得軟件包倉庫的鏡像站點地址。默認情況下有如下兩個文件:
CentOS-Base.repo :用于設置遠程倉庫
CentOS-Media.repo :用于設置本地倉庫
在 .repo 文件中,配置語法是分段的,每一段配置一個軟件倉庫,配置語法如下:
[repositoryid]
name=Some name for this repository
baseurl=url://server1/path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
mirrorlist=url://path/to/mirrorlist/repository/
enabled=0/1
gpgcheck=0/1
gpgkey=A URL pointing to the ASCII-armoured GPG key file for therepository其中:
repositoryid : 用于指定一個倉庫
name : 用于指定易讀的倉庫名稱
baseurl : 用于指定本倉庫的 URL,可以是如下的幾種類型:
http — 用于指定遠程 HTTP 協(xié)議的源
ftp — 用于指定遠程 FTP 協(xié)議的源
file — 用于本地鏡像或 NFS 掛裝文件系統(tǒng)
mirrorlist : 用于指定倉庫的鏡像站點
enabled : 用于指定是否使用本倉庫,默認值為1,即可用
gpgcheck : 用于指定是否檢查軟件包的 GPG 簽名
gpgkey : 用于指定 GPG 簽名文件的 URL
在 name baseurl 中經(jīng)常使用如下的變量:
$releasever — 當前系統(tǒng)的版本號
$basearch — 當前系統(tǒng)的平臺架構
文件中以“#”開頭的行是注釋行
若指定 mirrorlist,系統(tǒng)將從 CentOS 的鏡像站點中選擇離您最近的倉庫
并非所有的國內(nèi)鏡像都在 CentOS 的鏡像站點列表中,所以我們可以直接使用 baseurl 直接指定離您最近的倉庫
baseurl 可以指定多個 URL,系統(tǒng)會依次檢查您列出的倉庫,以便在某個服務器宕機時可以使用另外的服務器
為了加快更新,在確保更新服務器及線路良好的情況下,在 baseurl 中只指定一個 URL 既可
設置網(wǎng)絡更新源
下面是一個 CentOS-Base.repo 文件的實例,在此文件中沒有設置 mirrorlist ,使用 baseurl 只指定了一個URL。
[base] name=CentOS-$releasever – Base
baseurl=http://centos.candishosting.com.cn/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
[updates]
name=CentOS-$releasever – Updates
baseurl=http://centos.candishosting.com.cn/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
[addons]
name=CentOS-$releasever – Addons
baseurl=http://centos.candishosting.com.cn/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
[extras]
name=CentOS-$releasever – Extras
baseurl=http://centos.candishosting.com.cn/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
[centosplus]
name=CentOS-$releasever – Plus
baseurl=http://centos.candishosting.com.cn/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
設置本地更新源
為了使用安裝光盤作為更新源,可以修改 CentOS-Media.repo 文件,下面是一個配置實例。
[c5-media]
name=CentOS-$releasever – Media
baseurl=file:///media/CentOS/
file:///media/cdrom/
file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta
為了使用 c5-media 倉庫,需將 CentOS-Base.repo 文件中的 base 倉庫使用 enabled=0 設置成不可用。
若本地磁盤空間有足夠空間,您也可以將安裝光盤復制到本地磁盤的一個目錄中
設置非官方更新源
設置使用 DAG 第三方倉庫
下面以安裝 rpmforge 軟件包為例添加非官方更新源。
到 http://dag.wieers.com/rpm/packages/rpmforge-release/查找適用于 RHEL5/CentOS5 的軟件包
下載適用于 RHEL5/CentOS5 的軟件包
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-*安裝了rpmforge-release 軟件包之后可以看到 /etc/yum.repos.d/rpmforge.repo 文件。以后使用 yum就可以使用這個更新源了。
您也可以使用如下的手工方法添加 DAG 的倉庫。
建立 dag.repo,定義非官方庫:
# vi /etc/yum.repos.d/dag.repo[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt/etc/yum.repos.d/dag.repo
設置使用 ATrpms 第三方倉庫
# rpm –import http://ATrpms.net/RPM-GPG-KEY.atrpms
# cd /etc/yum.repos.d/
# vi ATrpms.repo
[atrpms]
name=CentOS-$releasever – $basearch – ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
gpgcheck=1/etc/yum.repos.d/ATrpms.repo
設置使用 EPEL 第三方倉庫
Fedora project 提供了 Extra Packages for Enterprise Linux (EPEL) 。
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm安裝了 epel-release 軟件包之后可以看到 /etc/yum.repos.d/ 目錄下的 epel.repo 和epel-testing.repo 文件。以后使用 yum 就可以使用這個更新源了。
使用 yum 命令工具
yum 命令工具簡介
yum 完整語法參見其命令手冊,下面只列出較常見的用法。
命令 功能
yum check-update 檢查可更新的所有軟件包
yum update 下載更新系統(tǒng)已安裝的所有軟件包
yum upgrade 大規(guī)模的版本升級,與yum update不同的是,連舊的淘汰的包也升級
yum install <packages> 安裝新軟件包
yum update <packages> 更新指定的軟件包
yum remove <packages> 卸載指定的軟件包
yum groupinstall <groupnames> 安裝指定軟件組中的軟件包
yum groupupdate <groupnames> 更新指定軟件組中的軟件包
yum groupremove <groupnames> 卸載指定軟件組中的軟件包
yum grouplist 查看系統(tǒng)中已經(jīng)安裝的和可用的軟件組
yum list 列出資源庫中所有可以安裝或更新以及已經(jīng)安裝的rpm包
yum list <regex> 列出資源庫中與正則表達式匹配的可以安裝或更新以及已經(jīng)安裝的rpm包
yum list available 列出資源庫中所有可以安裝的rpm包
yum list available <regex> 列出資源庫中與正則表達式匹配的所有可以安裝的rpm包
yum list updates 列出資源庫中所有可以更新的rpm包
yum list updates <regex> 列出資源庫中與正則表達式匹配的所有可以更新的rpm包
yum list installed 列出資源庫中所有已經(jīng)安裝的rpm包
yum list installed <regex> 列出資源庫中與正則表達式匹配的所有已經(jīng)安裝的rpm包
yum list extras 列出已經(jīng)安裝的但是不包含在資源庫中的rpm包
yum list extras <regex> 列出與正則表達式匹配的已經(jīng)安裝的但是不包含在資源庫中的rpm包
yum list recent 列出最近被添加到資源庫中的軟件包
yum search <regex> 檢測所有可用的軟件的名稱、描述、概述和已列出的維護者,查找與正則表達式匹配的值
yum provides <regex> 檢測軟件包中包含的文件以及軟件提供的功能,查找與正則表達式匹配的值
yum clean headers 清除緩存中的rpm頭文件
yum clean packages 清除緩存中rpm包文件
yum clean all 清除緩存中的rpm頭文件和包文件
yum deplist <packages> 顯示軟件包的依賴信息
當?shù)谝淮问褂脃um或yum資源庫有更新時,yum會自動下載所有所需的headers放置于 /var/cache/yum目錄下,所需時間可能較長。
還可以使用 yum info 命令列出包信息,yum info 可用的參數(shù)與 yum list 的相同。
yum 命令還可以使用 -y 參數(shù)用于用 yes 回答命令運行時所提出的問題。
yum 命令工具使用舉例
1、升級系統(tǒng)
# yum update
2、安裝指定的軟件包
# yum install w3m lync
3、升級指定的軟件包
# yum update w3m lync
4、卸載指定的軟件包
# yum remore w3m lync
5、查看系統(tǒng)中已經(jīng)安裝的和可用的軟件組
# yum grouplist
6、安裝指定軟件組中的軟件包
# yum groupinstall "Virtualization"
7、更新指定軟件組中的軟件包
# yum groupupdate "Virtualization"
8、卸載指定軟件組中的軟件包
# yum groupremore "Virtualization"
9、清除緩存中的rpm頭文件和包文件
# yum clean all
10、搜索相關的軟件包
# yum search python
11、顯示指定軟件包的信息
# yum info python
12、查詢指定軟件包的依賴信息
# yum deplist python
13、列出所有以 yum 開頭的軟件包
# yum list yum\*
14、列出已經(jīng)安裝的但是不包含在資源庫中的rpm包
# yum list extras
如果您安裝了并非來自倉庫的軟件,當它有新版時,yum update 無法自動更新它。為保證您總是用著最新的軟件,可以訂閱一份電子郵件或RSS 服務,這樣當有新版時可以得到通知。
加速 yum 的下載
使用全局代理
要設置所有 yum 操作都使用代理服務器,可以在 /etc/yum.conf 中設置代理服務器的信息。例如:
# 代理服務器:端口號
proxy=http://mycache.mydomain.com:3128
# 設置用于yum 連接的帳戶細節(jié)
proxy_username=yum-user
proxy_password=password為單個用戶配置代理服務器
要為一個特定的用戶啟用代理訪問,只要將實例框中的文本行加入這個用戶的 shell 配置中。對于默認的 bash shell,配置是在~/.bash_profile 中。例如:
# 當前用戶使用的匿名代理服務器
http_proxy="http://mycache.mydomain.com:3128"
export http_proxy
或
# 當前用戶使用的代理服務器
http_proxy="http://yum-user:password@mycache.mydomain.com:3128"
export http_proxy使用 yum 的擴展插件 yum-fastestmirror
當倉庫配置文件(*.repo)使用 mirrorlist 或在 baseurl 中指定多個URL 時,yum-fastestmirror可以自動選擇最快的鏡像站點。要想使用 yum-fastestmirror 加快下載速度,使用如下命令安裝即可。
# yum -y install yum-fastestmirroryum-fastestmirror 的配置文件是/etc/yum/pluginconf.d/fastestmirror.conf,一般無需修改。
系統(tǒng)自動更新
yum-updatesd
CentOS 系統(tǒng)默認安裝了 yum-updatesd 軟件包。
$ rpm -ql yum-updatesd
/etc/dbus-1/system.d/yum-updatesd.conf
/etc/rc.d/init.d/yum-updatesd
/etc/yum/yum-updatesd.conf
/usr/sbin/yum-updatesd
/usr/share/man/man5/yum-updatesd.conf.5.gz
/usr/share/man/man8/yum-updatesd.8.gz由此可見,系統(tǒng)在啟動過程中運行了 yum-updatesd守護進程。這個守護進程讀取 /etc/yum/yum-updatesd.conf 配置文件。
[main]
# 設置檢查更新的時間間隔 (單位為秒)
run_interval = 3600
# 為了避免過于頻繁的訪問更新服務器設置檢查更新的最小時間間隔 (單位為秒)
updaterefresh = 600
# 設置如何發(fā)送更新通知(有效值: dbus, email, syslog)
emit_via = dbus
# should we listen via dbus to give out update information/check for
# new updates
dbus_listener = yes
# 配置是否自動安裝更新
do_update = no
# 配置是否自動下載更新
do_download = no
# 配置是否自動下載有依賴關系的更新
do_download_deps = noyum-cron
還可以使用 yum-cron 自動安排 cron 任務。要使用 yum-cron 需要使用如下命令安裝:
# yum -y install yum-cron
使用如下命令可知 yum-cron 包安裝的文件:
$ rpm -ql yum-cron
/etc/cron.daily/yum.cron # 每日更新腳本
/etc/cron.weekly/yum.cron # 每周更新腳本
/etc/rc.d/init.d/yum # 啟動腳本
/etc/yum/yum-daily.yum
/usr/share/doc/yum-cron-0.1
/usr/share/doc/yum-cron-0.1/COPYING
/usr/share/doc/yum-cron-0.1/README
要激活自動更新,輸入如下命令:# chkconfig –level 345 yum on
# service yum start
------------------------------------------
List all installed packages, enter:
# rpm -qa
# yum list installed
Find out if httpd package installed or not, enter:
# rpm -qa | grep httpd*
# yum list installed httpd
Check for and update specified packages
# yum update {package-name-1}
Search httpd and all matching perl packages, enter:
# yum list {package-name}
# yum list {regex}
# yum list httpd
# yum list perl*
# yum grouplist
Install all 'Development Tools' group packages, enter:
# yum groupinstall "Development Tools"
Update all 'Development Tools' group packages, enter:
# yum groupupdate "Development Tools"
Remove all 'Development Tools' group packages, enter:
# yum groupremove "Development Tools"
If you are using 64 bit RHEL version it is possible to install 32packages:
# yum install {package-name}.{architecture}
# yum install mysql.i386
Display what package provides the file
# yum whatprovides /etc/passwd
You can use same command to list packages that satisfy dependencies:
# yum whatprovides {dependency-1} {dependency-2}
yum-complete-transaction
a program which finds incomplete or aborted yum transactions on asystem and attempts to complete them. It looks at the transaction-all*
and transaction-done* files which can normally be found in /var/lib/yumif a yum transaction aborted in the middle of execution.
If it finds more than one unfinished transaction it will attempt tocomplete the most recent one first. You can run it more than once toclean up all unfinished transactions.