在linux中要想使用某个软件,我们需要对其源码进行编译、链接库,然后生成二进制可执行程序。程序的编译是有规则的,哪些程序先编译,哪些程序后编译,哪些程序需要重新编译,因此程序员给安装程序提供了一个文件:makefile,里面记录了程序的编译规则,但是当程序文件数目很庞大的时候,Makefile的制作无疑也是个费时的工程,因此,有人专门开发了工具制作它,比如:autotools,具体的可以参考:http://blog.chinaunix.net/uid-20544507-id-3494422.html
有时候我们只需要这个程序所能提供的功能中的一两个,所以一次性把程序所有功能都编译成可执行程序必然是耗时且作用不大的。为了解决这个问题,程序的开发者给程序提供了编译参数,利用configure命令进行选择,可以参考:http://www.chinaz.com/server/2009/0807/85792.shtml
所以一般来说一个完整的程序应该包含以下几种文件:
1.二进制程序:一般是/bin或/sbin下的程序
2.库文件:/lib下的文件
3.头文件:include里面的文件(程序调用函数,这些函数必须在事先声明变量等,头文件存放这些信息)
4.配置文件:一般是/etc里面的内容(编译参数是让你有使用这个功能的能力,而配置文件则是让你选择是否启用这个功能)
5.帮助文件:一般放在share或者man这个目录
因为编译实在是太耗费时间了,当我们硬件架构与某些人编译程序的架构一模一样的时候,此时如果这些人能提供我们编译好的程序,我们就没必要再自己编译一遍,这些人就是redhat或者debian等厂商,这些编译好的程序我们把它们做成rpm或者dkpg格式,所谓rpm包的安装就是把程序里面编译好的程序解压出来,放到相对应的地方,比如二进制程序放在/bin或/sbin等目录,模块放在/lib/module等。但是这样有个缺点,别人编译好的程序并不一定是我们想要的,他们编译出来的程序是大部分人需要的,因此,当我们需要特定功能的时候,我们仍然需要自己编译软件,大部分情况下rpm包已经能满足我们的需要了。
rpm包安装起来很方便,但是除了有可能没有我们需要的功能以外,它还有一个缺点,不能解决包与包之间的依赖关系。因此,有人就想如果我们把rpm包和依赖包收集起来,并记录它们之间的关联关系,放到服务器上以供下载,这样安装rpm包不就不用再辛辛苦苦地找依赖包了吗?这个就是本文要说明的yum(还有其他种 比如debian的apt等)
yum把包与依赖包的信息记录在元数据文件中,主要包含以下几种:
primary.xml.gz:
所有rpm包的列表
依赖关系
每个rpm包安装生成的文件列表
filelists.xml.gz:
当前仓库中所有rpm包的所有文件列表
other.xml.gz:
额外信息,rpm包的修改日志
repomd.xml:
记录的是上面三个文件的时间戳和校验和
comps.xml.gz
rpm包分组信息
客户端要想使用yum服务器所提供的功能,则必须配置/etc/yum.conf文件,或者编辑以.repo结尾的文件,放在/etc/yum.repos.d/目录下
如何为yum定义repo文件
[Repo_ID]
name=Description
baseurl= #yum服务器所在地址,三种格式,指向要指向repodata所在路径
ftp://
http://
file:///
enable={1|0} #这个代表是否启用这个repo
gpgcheck={1|0} #这个代表是否验证包的来源合法性
gpgkey= #这个代表密钥路径
示例:
[root@logstash yum.repos.d]# ls /mnt/
CentOS_BuildTag repodata/
.discinfo RPM-GPG-KEY-CentOS-6
EULA RPM-GPG-KEY-CentOS-Debug-6
GPL RPM-GPG-KEY-CentOS-Security-6
p_w_picpaths/ RPM-GPG-KEY-CentOS-Testing-6
isolinux/ TRANS.TBL
Packages/ .treeinfo
RELEASE-NOTES-en-US.html
[root@logstash yum.repos.d]# ls
bak sys.repo
[root@logstash yum.repos.d]# cat sys.repo
[sys]
name=test repo
baseurl=file:///mnt/
enable=1
gpgcheck=0
[root@logstash yum.repos.d]# ls /mnt/
CentOS_BuildTag Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
p_w_picpaths RPM-GPG-KEY-CentOS-6
isolinux RPM-GPG-KEY-CentOS-Debug-6
[root@logstash yum.repos.d]# yum list
zenity.i686 2.28.0-1.el6 sys
zlib-static.i686 1.2.3-27.el6 sys
zsh.i686 4.3.10-5.el6 sys
zsh-html.i686 4.3.10-5.el6 sys
(太多了..截取后面几行)
yum命令格式:
yum [option] [command] [package ...]
option:
-y:自动选择yes
command:
list:列表
支持glob
all:显示所有
available:可用的,仓库中有但尚未安装的
installed:已经安装的
updates:可用的升级
clean:清理缓存
[packages|headers|metadata|dbcache|all]
repolist:显示repo列表及其简要信息
all:所有
enabled:已经启用的(默认显示这个)
disable:没启用的
install:安装
update:升级
update_to:升级为指定版本
remove|erase:卸载
info:说明
provides|whatprovides:查看指定的文件或特性是由哪个包安装生成的;
groupinfo:组信息
grouplist:
groupinstall:
groupremove:
groupupdate:
如何创建yum仓库
createrepo /PATH/TO/RPM_package's_father_dir
示例:
[root@logstash Packages]# pwd
/yum-test/Packages
[root@logstash Packages]# ls
abrt-2.0.8-6.el6.centos.i686.rpm
abrt-addon-ccpp-2.0.8-6.el6.centos.i686.rpm
abrt-addon-kerneloops-2.0.8-6.el6.centos.i686.rpm
abrt-addon-python-2.0.8-6.el6.centos.i686.rpm
abrt-cli-2.0.8-6.el6.centos.i686.rpm
abrt-desktop-2.0.8-6.el6.centos.i686.rpm
abrt-gui-2.0.8-6.el6.centos.i686.rpm
abrt-libs-2.0.8-6.el6.centos.i686.rpm
abrt-tui-2.0.8-6.el6.centos.i686.rpm
abyssinica-fonts-1.0-5.1.el6.noarch.rpm
[root@logstash Packages]# cd ..
[root@logstash yum-test]# cd /etc/yum
yum/ yum.conf yum.repos.d/
[root@logstash yum-test]# cd /etc/yum.repos.d/
[root@logstash yum.repos.d]# vi
bak/ CentOS-Vault.repo mirrors-rpmforge-testing
CentOS-Base.repo epel.repo rpmforge.repo
CentOS-Debuginfo.repo epel-testing.repo sys.repo
CentOS-fasttrack.repo mirrors-rpmforge
CentOS-Media.repo mirrors-rpmforge-extras
[root@logstash yum.repos.d]# mv ./* bak/
mv: cannot move `./bak' to a subdirectory of itself, `bak/bak'
[root@logstash yum.repos.d]# mv bak/sys.repo .
[root@logstash yum.repos.d]# vi sys.repo
[sys]
name=test repo
baseurl=file:///yum-test/Packages
enable=1
gpgcheck=0
[root@logstash yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
file:///yum-test/Packages/repodata/repomd.xml: [Errno 14] Could not open/read file:///yum-test/Packages/repodata/repomd.xml
Trying other mirror.
repo id repo name status
sys test repo 4,776
repolist: 4,776
[root@logstash yum.repos.d]# yum clean metadata
Loaded plugins: fastestmirror
Cleaning repos: sys
2 metadata files removed
1 sqlite files removed
0 metadata files removed
[root@logstash yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
file:///yum-test/Packages/repodata/repomd.xml: [Errno 14] Could not open/read file:///yum-test/Packages/repodata/repomd.xml
Trying other mirror.
file:///yum-test/Packages/repodata/repomd.xml: [Errno 14] Could not open/read file:///yum-test/Packages/repodata/repomd.xml
Trying other mirror.
repo id repo name status
sys test repo 0
repolist: 0
[root@logstash yum.repos.d]# createrepo /yum-test/Packages/
Spawning worker 0 with 10 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@logstash yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
sys | 2.9 kB 00:00 ...
sys/primary_db | 11 kB 00:00 ...
repo id repo name status
sys test repo 10
repolist: 10
[root@logstash yum.repos.d]# ls /yum-test/Packages/
abrt-2.0.8-6.el6.centos.i686.rpm
abrt-addon-ccpp-2.0.8-6.el6.centos.i686.rpm
abrt-addon-kerneloops-2.0.8-6.el6.centos.i686.rpm
abrt-addon-python-2.0.8-6.el6.centos.i686.rpm
abrt-cli-2.0.8-6.el6.centos.i686.rpm
abrt-desktop-2.0.8-6.el6.centos.i686.rpm
abrt-gui-2.0.8-6.el6.centos.i686.rpm
abrt-libs-2.0.8-6.el6.centos.i686.rpm
abrt-tui-2.0.8-6.el6.centos.i686.rpm
abyssinica-fonts-1.0-5.1.el6.noarch.rpm
repodata/
[root@logstash yum.repos.d]# ls /yum-test/Packages/
abrt-2.0.8-6.el6.centos.i686.rpm
abrt-addon-ccpp-2.0.8-6.el6.centos.i686.rpm
abrt-addon-kerneloops-2.0.8-6.el6.centos.i686.rpm
abrt-addon-python-2.0.8-6.el6.centos.i686.rpm
abrt-cli-2.0.8-6.el6.centos.i686.rpm
abrt-desktop-2.0.8-6.el6.centos.i686.rpm
abrt-gui-2.0.8-6.el6.centos.i686.rpm
abrt-libs-2.0.8-6.el6.centos.i686.rpm
abrt-tui-2.0.8-6.el6.centos.i686.rpm
abyssinica-fonts-1.0-5.1.el6.noarch.rpm
repodata
[root@logstash yum.repos.d]# ls /yum-test/Packages/repodata/
03a9c58549ff25cca1d0f8dd97d82d539a0b11b99c50bc303b3e53a5cddd27b1-other.sqlite.bz2
0c0afd76be4eb9f2170ae47ce261a607966a1123e8980455088b39f224a77549-other.xml.gz
24c2e2ff0624a9c617353bbfe75276b9865e0edc11f2e6ac11af65d6451783b2-filelists.xml.gz
7bc227e5e01412e6179bc1e604bb57f1b4c7a0a9cb0b26b03b47e18a7826fad4-filelists.sqlite.bz2
c4d29babe0205855a823dcb718a51af964409066f5a7b3ffb470bf57f904c727-primary.sqlite.bz2
ef11c37fc89a392df2c366c3a26778993d9207fb04653f54f34839aa6de440aa-primary.xml.gz
repomd.xml
[root@logstash Packages]# yum list available
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
abrt.i686 2.0.8-6.el6.centos sys
abrt-addon-ccpp.i686 2.0.8-6.el6.centos sys
abrt-addon-kerneloops.i686 2.0.8-6.el6.centos sys
abrt-addon-python.i686 2.0.8-6.el6.centos sys
abrt-cli.i686 2.0.8-6.el6.centos sys
abrt-desktop.i686 2.0.8-6.el6.centos sys
abrt-gui.i686 2.0.8-6.el6.centos sys
abrt-libs.i686 2.0.8-6.el6.centos sys
abrt-tui.i686 2.0.8-6.el6.centos sys
abyssinica-fonts.noarch 1.0-5.1.el6 sys