CentOs之yum詳解
yum的地位:yum是rpm的前端管理工具,而且依賴於rpm。
yum倉庫:yum repository,倉庫裏存儲了衆多rpm包,以及包的相關的元數據文件.yum倉庫裏會有個repodata目錄存在.
yum支持的文件服務器類型:
ftp:// http:// file:///(本地服務器,例光盤) /nfs://
查看yum的信息:
[[email protected]]# rpm -q yum ------查看yum命令的安裝包是哪個
yum-3.4.3-125.el7.centos.noarch
[[email protected]]# rpm -qc yum ------查看yum命令的配置文件
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf
yum的配置文件:
/etc/yum.conf:此文件爲所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置。配置一個或多個倉庫指向,如果多個倉庫都有需要的那個程序包包,就選擇最近的倉庫,或者選擇成本低的倉庫。
用man 5 yum.conf可以查看對yum.conf文件的讀取幫助。
yum.conf文件的內容及格式
[[email protected]]# cat /etc/yum.conf [main]----------指公共區 cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 debuglevel=2 logfile=/var/log/yum.log exactarch=1 爲1表示精確匹配,如果要的是centos7的包,centos6.7的就默認不匹配 obsoletes=1 gpgcheck=1 爲1表示檢測來源合法性及內容完整性 plugins=1 installonly_limit=5 ………………………………………此處省略……字 # PUT YOUR REPOSHERE OR IN separate files named file.repo # in /etc/yum.repos.d
倉庫的指向的定義:
[repositoryID] 倉庫ID
name=Some namefor this repository等號右邊是自己定義的文件名
baseurl=url://path/to/repository/ 等號右邊是要下載的程序包的url
enabled={1|0}是否啓用倉庫,1表示啓用,默認爲1
gpgcheck={1|0}安裝前是否檢查來源合法性及完整性,1爲默認表示是
gpgkey=URL指明祕鑰文件的路徑
enablegroups={1|0}是否支持在此倉庫上使用組來批量管理包,1爲默認,表示是
failovermethod={roundrobin|priority};默認爲:roundrobin,意爲隨機挑選;
cost=1000,表示開銷,默認爲1000
創建yum倉庫:
請自行查看/etc/yum.repos.d/CentOs-Base.repo這個文件,然後我們仿照這個yum源倉庫文件的格式寫一個我們自己的倉庫文件。注意:有repodata所在的路徑才能是yum源指定的路徑。
創建之前先把原倉庫重命名一下。mv CentOS-Base.repo CentOS-Base.repo.bak
下面我們來自己創建本地yum源倉庫文件centos-local.repo,內容如下:
[base]
name=Base Repo172.16.0.1 ----------自己定義的名字
baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-7-x86_64-1503/ ----下載程序包的路徑
gpgcheck=0---------------不檢查來源合法性及內容完整性
[epel]
name=Fedora EPELfor EL6 x86 64
baseurl=http://172.16.0.1/fedora-epel/7/x86_64/
gpgcheck=0
這是兩個不同的倉庫,雖然寫在同一個文件。如果是相同的倉庫,裏面的文件是鏡像,就可以把多個url寫在同一個“baseurl”下面。
yum命令的用法:詳細信息請manyum
yum [options][command] [package ...]
顯示倉庫列表:默認顯示已啓用的,即enabled
repolist[all|enabled|disabled]
[[email protected]]# yum repolist enabled 顯示可用的倉庫列表
[[email protected]]# yum repolist all 顯示可用的和不可用的倉庫列表
[[email protected]]# yum repolist disabled 顯示不可用的倉庫列表
顯示程序包:
yum list [all |glob_exp1] [glob_exp2] [...]基於文件名通配查找:
[root@yph7 yum.repos.d]# yum list | wc –l 15651 -----------------一共有15651個程序包 [root@yph7 yum.repos.d]# yum list php* | wc –l 657 -------------------一共657個php開頭的程序包
yum list{available|installed|updates} [glob_exp1] [...]
[root@yph7 yum.repos.d]# yum list available顯示可以用的包
[root@yph7 yum.repos.d]# yum list installed顯示已安裝的包
[root@yph7 yum.repos.d]# yum list updates顯示可更新的包
[root@yph7 yum.repos.d]# yum list updates xorg* | wc–l
13 -------------------------一共有13個可更新的並且以xorg開頭的程序包
安裝程序包:
install package1[package2] [...]
[root@yph7 ~]# yum install phpwapmail.noarch
[root@yph7 ~]# yum install gcc-4.5.4 如果不想安裝最新程序包,可以這樣指明要安裝程序包的版本
reinstall package1 [package2] [...] 重新安裝程序包
[root@yph7~]# yum reinstall zsh 在安裝zsh之後,要重新安裝一次
升級程序包:
update [package1][package2] [...]
[root@yph7 ~]#yum update xorg-x11-drv-fbdev
……………………………………………………….
更新完畢:
xorg-x11-drv-fbdev.x86_64 0:0.4.3-16.el6
完畢!
downgrade package1 [package2] [...]降級安裝
檢查可用升級:
check-update
[root@yph7 ~]#yum check-update | wc –l
71 ------------------有71個可用升級包
卸載程序包:
remove package1 [package2] [...]
[root@yph7 ~]#yum remove zsh ------會默認把依賴cpp的gcc也卸載掉 ………………………………………………….. 刪除: zsh.x86_64 0:4.3.11-4.el6.centos 完畢!
查看程序包information:
info [...]
[root@yph7 ~]#yum info zsh 名稱 :zsh 架構 :x86_64 版本 :4.3.11 發佈 :4.el6.centos 大小 :2.2 M 源 :base 簡介 :A powerful interactive shell 網址 :http://zsh.sunsite.dk/ 協議 : BSD
查看指定的特性或者文件是由哪個程序包所提供:類似 rpm -qf
provides |whatprovides feature1 [feature2] [...]
[root@yph7~]# yum provides zsh
[root@yph7~]# yum provides /etc/zshrc Loadingmirror speeds from cached hostfile zsh-4.3.11-4.el6.centos.x86_64: A powerful interactive shell 源 :base 匹配來源: 文件名 :/etc/zshrc zsh-4.3.11-4.el6.centos.x86_64: A powerful interactive shell
清理本地緩存:
clean [ packages| metadata | expire-cache | rpmdb | plugins | all ]
(對應於上面的單詞分別是)包,元數據,過期緩存,rpmdb ,插件,所有緩存
[root@yph7 ~]#yum clean expire-cache 正在清理軟件源: base epel extra 3 metadata 文件已移除
[root@yph7 ~]#yum clean metadata 正在清理軟件源: base epel extra 9 metadata 文件已移除 6 sqlite 文件已移除 0 metadata 文件已移除
[root@yph7 ~]#yum clean packages 正在清理軟件源: base epel extra 0 package 文件已移除
構建緩存:makecache
[root@yph7 ~]#yum makecache …………………………………………………. (13/13):extra/7/x86_64/other_db | 417kB 00:00:00 Loading mirrorspeeds from cached hostfile 元數據緩存已建立
搜索:以指定的關鍵字或字符串搜索程序包名及概要信息;
search string1[string2] [...]
[root@yph7 ~]# yum search bash -------由於結果比較多,只截取一部分內容 bash-argsparse.noarch: An high level argument parsing library for bash bash-completion.noarch: Programmable completion for Bash bash-doc.x86_64 :Documentation files for bash python-argcomplete.noarch: Bash tab completion for argparse -------這個包名沒有“bash”,但概要信息裏有。
查看指定包所依賴的capabilities:
deplist package1[package2] [...]
[root@yph7 ~]#yum deplist zsh ----------- 查看zsh與其他包的依賴關係 軟件包:zsh.x86_64 4.3.11-4.el6.centos 依賴:/bin/sh provider: bash.x86_64 4.1.2-33.el6 依賴:/sbin/install-info provider: info.x86_64 4.13a-8.el6 依賴:coreutils provider: coreutils.x86_64 8.4-37.el6 ……………………………………………………….
查看yum事務歷史:在什麼時候,有誰執行過哪些yum的安裝或卸載等操作
history
[info|list |summary| stats|packages-list|packages-info|addon-info|redo|undo|rollback|new|sync]
[root@yph7 ~]#yum history ID | 登錄用戶 | 日期和時間 | 操作 | 變更數 ------------------------------------------------------------------------------- 1 | 系統<空> |2015-12-08 19:14 | Install | 1137 [root@yph7 ~]#yum remove zsh [root@yph7 ~]#yum history ID | 登錄用戶 | 日期和時間 | 操作 | 變更數 ------------------------------------------------------------------------------- 2 | root<root> | 2015-12-2405:53 | Erase | 1 < 1 | 系統<空> |2015-12-08 19:14 | Install | 1137>
[root@yph6 yum.repos.d]# yum history summary Loaded plugins: fastestmirror, refresh-packagekit, security Login user | Time | Action(s) | Altered ------------------------------------------------------------------------------- root <root> | Last day | Install | 4 root <root> | Last week | Install | 41 System <unset> | Last 3 months | Install | 997 history summary
安裝及升級本地程序包:
安裝本地包時,如果有依賴關係的包在網站上,yum會自動下載安裝依賴包,rpm無此功能
localinstall rpmfile1 [rpmfile2] [...] localinstall只是爲了兼容,建議用install
[root@yph7 ~]#yum install booth-0.2.0-31.1.x86_64.rpm -----從下面可以看到會自動安裝依賴的包 ---> 軟件包 booth.x86_64.0.0.2.0-31.1 將被 安裝 --> 正在處理依賴關係 cluster-glue-libs >= 1.0.6,它被軟件包 booth-0.2.0-31.1.x86_64 需要 ---> 軟件包 clusterlib.x86_64.0.3.0.12.1-73.el6 將被 安裝 ---> 軟件包corosync.x86_64.0.1.4.7-2.el6 將被 安裝
localupdate rpmfile1 [rpmfile2] [...];同理,建議用update,而不是localupdate
[root@yph7 ~]#yum update zsh-5.0.2-7.el7_1.2.x86_64.rpm -------可以看到也是可以自動解決依賴關係的 正在檢查zsh-5.0.2-7.el7_1.2.x86_64.rpm: zsh-5.0.2-7.el7_1.2.x86_64 zsh-5.0.2-7.el7_1.2.x86_64.rpm將作爲zsh-5.0.2-7.el7_1.1.x86_64 的更新 正在解決依賴關係 --> 正在檢查事務 ---> 軟件包 zsh.x86_64.0.5.0.2-7.el7_1.1 將被 升級 ---> 軟件包 zsh.x86_64.0.5.0.2-7.el7_1.2 將被 更新 --> 解決依賴關係完成
包組管理的相關命令:
grouplist [hidden] [groupwildcard] [...]
[root@yph7 ~]#yum grouplist | wc –l
96 ----------------------------一共96個包組
groupinstall group1 [group2] [...] ---安裝包組內的包,而且自動安裝依賴包
[root@yph6 ~]#yum groupinstall "Server Platform" (15/18):openssl-1.0.1e-42.el6_7.1.x86_64.rpm | 1.5 MB 00:05 (16/18):pam-1.1.1-20.el6_7.1.x86_64.rpm | 658kB 00:01 (17/18):redhat-lsb-4.0-7.el6.centos.x86_64.rpm | 11 kB 00:00 (18/18):redhat-lsb-compat-4.0-7.el6.centos.x86_64.rpm | 10 kB 00:00
groupupdate group1 [group2] [...] 升級包組內包
[root@yph7 ~]#yum groupupdate "Server Platform"
groupremove group1 [group2] [...] 卸載包組內的包
[root@yph7 ~]#yum groupremove "XWindow System " ------------卸載圖形界面包組
groupinfo group1 [...] 查看包組的信息
[root@yph7 ~]#yum groupinfo "X Window System" 可以列出包組內的所有包,包含下列三大類。
MandatoryPackages:必須安裝的包
Default Packages:默認安裝的包
OptionalPackages:可選擇安裝的包
yum的命令行選項:
--nogpgcheck:安裝時禁止進行gpgcheck,即便倉庫中定義爲檢測。
-y: 對安裝過程的交互自動回答爲“yes”。
-q:靜默模式;
--disablerepo=repoidglob:臨時禁用此處指定的repo;
--enablerepo=repoidglob:臨時啓用此處指定的repo;
--noplugins:禁用所有插件;
repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號;比如centos7中的"7"
$basearch:基礎平臺;無論i386,i486,還是i586都理解爲i386
$arch: 平臺
$YUM0-$YUM9:
例如:http://mirrors.magedu.com/centos/$releasever/$basearch/os
用光盤做本地倉庫:
[root@yph6 media]# mkdir /media/cdrom
[root@yph6 media]# mount -r -t iso9660 /dev/cdrom /media/cdrom
---"-r"爲只讀,"-t"指明類型,如iso9660;
或者用下面的方法掛載光盤:
[root@yph6 media]# mount -o loop /dev/cdrom /media/cdrom
新建或者添加yum倉庫指向:
[cdrom]
name=cdrom
baseurl=file:///media/cdrom
gpgcheck=0
通過光盤做的倉庫安裝zsh
[root@yph6 yum.repos.d]# yum install zsh ................................................ Dependencies Resolved ==================================================================================================================== Package Arch Version Repository Size ==================================================================================================================== Installing: zsh i686 4.3.11-4.el6 cdrom 2.2 M Transaction Summary ==================================================================================================================== Install 1 Package(s) .................................................................. Installed: zsh.i686 0:4.3.11-4.el6 Complete!
創建本地yum倉庫:
[root@yph7 repo]# createrepo ./ -把當前目錄創建爲本地yum倉庫,會讀取包的元數據,並創建repodata目錄 Spawning worker 0 with 54 pkgs Spawning worker 1 with 54 pkgs Spawning worker 2 with 54 pkgs Spawning worker 3 with 53 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete
[root@yph7 repo]# ls repodata ---出現repodata目錄說明倉庫創建成功,看看repodata裏的文件 1dc98dfa72c7eeabd25aa5288acf222d46270bf25e4c4695fc929ecbb2bf7c1f-primary.sqlite.bz2 64e03fa19b70d01b9dc3618a3967993d9edc2107d1522f78684538f90424c5b6-other.xml.gz 78ca5492b1c3eedb45c50f6d97f63724f1fb2e2ff8d5dc05f1d2c024c786d513-primary.xml.gz ae734d43ef5877bfb1d913c516f1bf0c62035bd9d15d3eaeebce92960ffcdd40-filelists.xml.gz baf986873befe7ab4b59e3a01a3fbd6d8fb69c061ba36869e17b769e860302a4-filelists.sqlite.bz2 dfb93d132de8da0c3c622c8fe8d3ddcb18d5e0c7cd8e2a4501b3ab69ce4641d1-other.sqlite.bz2 repomd.xml
repodata目錄下有個repomd.xml文件,這裏存儲同目錄下其他文件的特徵碼,指紋信息
[root@yph7 yum.repos.d]# vim centos-xen.repo 新建倉庫指向 [xen4centos] name=Xen 4 centos 6 baseurl=file:///yum/repo gpgcheck=0
或者在/etc/repos.d/centos-local.repo裏添加新的倉庫指向
[root@yph7 yum.repos.d]# yum repolist ------查看剛纔創建的倉庫是否可用 base | 3.6 kB 00:00:00 Not using downloaded repomd.xmlbecause it is older than what we have: Current : Wed Aug 5 05:49:56 2015 Downloaded: Wed Apr 1 08:19:442015 epel | 4.3kB 00:00:00 extra |3.4 kB 00:00:00 xen4centos |2.9 kB 00:00:00 xen4centos/primary_db | 134 kB 00:00:00 Loading mirror speeds from cachedhostfile 源標識 源名稱 狀態 base Base Repo 172.16.0.1 6,575 epel Fedora EPEL forEL6 x86 64 8,508 extra/7/x86_64 CentOS 7x86_64 extras 277 xen4centos Xen 4 centos 6 215 repolist: 15,575
[root@yph7 yum.repos.d]# yum install xen ------利用本地倉庫安裝xen程序,本地倉庫創建完成
程序包編譯安裝:
源代碼編譯安裝過程.
源代碼--> 預處理 --> 編譯(gcc)--> 彙編(需要彙編器) --> 鏈接(需要鏈接器) --> 執行
make會自動調動預處理器做預處理,再調動編譯器
C代碼編譯安裝三步驟:
第一步: ./configure
(1) 通過選項傳遞參數,指定啓用特性、安裝路徑等;執行./configure時會參考用戶的指定以及Makefile.in文件生成makefile;makefile是編譯安裝時的必須依賴的引導文件。
(2) 檢查依賴到的外部環境;
第二步:make
make不是編譯器,它是管理器,調用編譯器完成編譯的,只是個項目管理工具,依賴於mkafile這個文件完成對程序的安裝等操作。
第三步:make install
其實這是一些腳本,把二進制放到指定的二進制的安裝路徑下去,庫文件放到指定的庫文件路徑下去,作用大致就這些。
開發工具:
autoconf: 能生成configure腳本
automake:能生成Makefile.in
建議:安裝前查看INSTALL,README
開源程序源代碼的獲取:
1、官方自建站點:
apache.org (ASF)
mariadb.org
2、代碼託管:
SourceForge
Github.com
code.google.com
程序包編譯安裝的過程:
下載httpd-2.2.29源碼包,解壓後查看裏面的文件
[[email protected]]# ls ABOUT_APACHE buildconf emacs-style INSTALL LICENSE os srclib acinclude.m4 CHANGES httpd.dep InstallBin.dsp Makefile.in README support Apache.dsw config.layout httpd.dsp LAYOUT Makefile.win README.platforms test build configure httpd.mak libhttpd.dep modules README-win32.txt VERSIONING BuildAll.dsp configure.in httpd.spec libhttpd.dsp NOTICE ROADMAP BuildBin.dsp docs include libhttpd.mak NWGNUmakefile server
在INSTALL文件裏可以看到安裝提示信息如下
$ ./configure--prefix=PREFIX ---------第一步
$ make ----------------第二步
$ make install -------------------第三步
$PREFIX/bin/apachectl start ---------------第四步
然後可以查看configure命令的選項:
[[email protected]]# ./configure –help
安裝之前先安裝好需要用到的工具,即一個包組
[[email protected]]# yum groupinstall "Server Platform Development"
另外gcc也是個必須編譯的工具,也要裝上。
[[email protected]]# yum install gcc
然後需要選擇安裝路徑,因爲我們沒有通過rpm包安裝,所以不能通過rpm管理器卸載,所以我們只能手動卸載並刪除其配置文件,所以要指定並記住安裝路徑。
[[email protected]]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2 ---第一步
[[email protected]]# make --------------第二步
[[email protected]]# make install -----------第三步
[[email protected]]# cd /usr/local/apache2
[root@yph6apache2]# ls
bin build cgi-bin error htdocs icons include lib logs man manual modules
[root@yph6apache2]# ls bin ab apr-1-config apxs dbmmanage envvars-std htdbm htpasswd httxt2dbm rotatelogs apachectl apu-1-config checkgid envvars htcacheclean htdigest httpd logresolve
[root@yph6apache2]# ./bin/apachectl start -----------第四步
安裝後的配置:
(1) 導出二進製程序目錄至PATH環境變量中;否則只能用絕對路徑
新建建文件/etc/profile.d/apache2.sh,寫入下行代碼
export PATH=/usr/local/apache2/bin:$PATH
(2) 導出庫文件路徑
新建文件/etc/ld.so.conf.d/apache2.conf
把這個路徑/usr/local/apache2/lib添加至文件中,即添加新的庫文件所在目錄至此新建文件中;
讓系統重新生成緩存:ldconfig -v,否則只能下次開機才生效
(3) 導出頭文件
本來include目錄應該在/usr/include 中才對,但現在卻在當前目錄下,可以
可以連接整個目錄過去,也可以連接每一個文件過去,可以導出整個目錄爲一個符號鏈接,也可以導出所有文件爲一個符號鏈接
基於鏈接的方式實現:
[root@yph6apache2]# ln -sv include /usr/include/apache2
[root@yph6 apache2]# ln -sv /uar/local/apache2/include /usr/include/apache2
`/usr/include/apache2' -> `/uar/local/apache2/include'
(4) 導出幫助手冊
編輯/etc/man.config文件
MANPATH /usr/man
MANPATH/usr/share/man
MANPATH/usr/local/man
MANPATH/usr/local/share/man
MANPATH/usr/X11R6/man --------------------前面幾行是/etc/man.config本來就有內容
MANPATH/usr/local/apache2/man ----------在MANPATH的行下面添加一行man路徑
注意:安裝過程的選項:
安裝路徑的設定:
--prefix=/PATH/TO/SOMEWHERE:指定默認安裝位置;默認爲/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置;
有需要的話可以加上下面的選項:
System types:
OptionalFeatures: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
OptionalPackages: 可選包
--with-PACKAGE[=ARG]依賴關係
--without-PACKAGE不允許依賴
附加:
CentOS 6上通過提供開發組件的兩個重要包組爲:
"Development Tools", "ServerPlatform Development",