前面我们说了rpm的使用,但开始安装以后产生的依赖关系却是最难搞定的。安装x,依赖y,安装y,依赖z,安装z,依赖x。循环依赖。何止难搞啊。
所以在这种情况下就出现了各种包管理器的前端工具:
可以自动解决依赖关系;
yum:rhel系列系统上rpm包管理器的前端工具;
apt-get (apt-cache):deb包管理器的前端工具;
apt-get是用来安装卸载的,apt-cache可以用来基于关键词的搜索和管理本地缓存的元数据。
dnf:Fedora 22+系统上rpm包管理器的前端工具;或许会成为yum的下一版本。
目录
一、yum
1、简介
2、yum客户端配置和仓库的设置
3、yum命令的使用
系统:CentOS_7.1
总结: 应用的安装方式
1、 使用包管理器:便捷、易用;
2、 包管理器的前端工具;yum, apt-get,zypper。
3、 源代码编译;
4、 简单打包的二进制格式;绿色软件,解压,配置即可运行。
一、yum。
1、简介。
YUM: Yellowdog Update Modifier
yum的实现有两部分,一是本地的yum工具,二是yum仓库。
文件服务器(共享rpm包): 通过yum所支持的文件共享机制将各rpm包通过文件服务共享。
仓库存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)
本地yum安装软件的过程:
yum会根据yum配置中所指定的yum仓库,把yum仓库中的元数据文件,缓存到本地,然后分析元数据文件。yum会根据yum仓库中的元数据文件,来分析是否存在所要安装的rpm包所依赖的还未在本机安装的各个rpm包文件,和这些rpm包所依赖的rpm包文件。一切就绪以后,就去yum仓库下载本机还未安装的rpm包,完成安装。
yum判断包是否已存在,是检测rpm的数据库。 不检测别的路径之类的。yum解决依赖关系是用包来判断的。而不是像编译安装源码的时候,由ld程序来判断库是否存在。所以如果rpm数据库坏了的话,会要安装很多包。
2、yum客户端配置和仓库的设置
要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
配置文件格式:由两段组成,类似windows的ini配置文件。
[main] : 主配置段
[repo] : 仓库配置段
其中/etc/yum.conf中一般是[main]配置段的设置,/etc/yum.repos.d/下面的各以.repo结尾的文件一般都是配置[repo]仓库段的。当然也可以把仓库段写到yum.conf文件中。不过这样分开设置的原因就是为了清晰,容易配置。
我们看下/etc/yum.conf文件中的一些配置:
[main] : 主配置段 cachedit 缓存目录 keepcache 是否缓存二进制文件。 0 不缓存, 1 缓存。 debuglevel 调试级别 logfile 日志文件 exactarch 精确匹配与当前系统的版本号 1 匹配 0是 不用匹配 gpgcheck 校验包完整性,来源合法性。 1 校验 0 不校验。 plugins 支持插件
这个文件不用我们的过多关心。我们主要关心yum.repos.d目录下的仓库文件就好。
配置repo: [repo_ID] #注意,所有设置的仓库ID都不能相同。 name=string #仓库名称 baseurl=url://path/to/repository/ #仓库的访问路径 enabled={1|0} #1表示启用 0表示禁用 没有这一项默认也是启用。 gpgcheck={1|0} #1表示启用,还要指定gpgkey. 0表示禁用 如本地的话无所谓了。 gpgkey=URL #公钥文件(可以在本地,也可以在服务器端路径), enablegroups={1|0} #是否启用组,如果仓库端支持组,可以开启。默认就是开启的。 failovermethod={roundrobin|priority} #在baseurl指向多个路径的时候,如何选择路径。 #默认为:roundrobin,意为随机挑选; cost= #定义此仓库的开销,默认为1000。 值越小,优先级越高。
一个repo文件可以设置多个仓库信息。 baseurl指定仓库的的方式:
客户端配置文件指定对应服务器访问方式:
ftp ftp://****/repo
http http://****/repo
nfs ntf://****/nts_path
file file:///****/repository 三个斜线是因为一个是本地的根目录路径。
所指向的目的就是有repodata目录的目录。
我们这里举个例子,就以我们系统的光盘为例,它就是一个仓库。
这个光盘的根目录下就有repodata目录,所以我们的路径只要指向光盘的根目录就行。
用系统光盘配置本地的yum源:
[root@localhost cdrom]# vim /etc/yum.repos.d/local.repo
[local] name=local-ISO-local baseurl=file:///mnt/cdrom cost=100 gpgcheck=0
配置完了,怎么样,是不是太简单了。不过事实也就这样,如果是网络的yum仓库,可以再加上gpgkey。再提醒一下,上面的[local]是仓库ID,设置的所有ID都不能相同。
我们来试一下:
[root@localhost yum.repos.d]# yum clean all Loaded plugins: fastestmirror, langpacks Cleaning repos: local Cleaning up everything Cleaning up list of fastest mirrors [root@localhost yum.repos.d]# yum repolist Loaded plugins: fastestmirror, langpacks local | 3.6 kB 00:00:00 (1/2): local/group_gz | 154 kB 00:00:00 (2/2): local/primary_db | 5.1 MB 00:00:00 Determining fastest mirrors repo id repo name status local local-ISO-local 8,652 repolist: 8,652 [root@localhost yum.repos.d]#
看一下这个的:
[base] name=CentOS-$releasever - Base baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-7-x86_64-1503/ file:///media/cdrom gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=0
这里多了key的设置,而且这个库是没有启用的。其中我们看到baseurl有两个地址,failovermethod就是用来如何选择这两个地址的。
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;
$basearch:基础平台;
$YUM0-$YUM9 提供的10个可以自定义的变量$YUM0-$YUM10。
[epel] name=Fedora EPEL baseurl=http://172.16.0.1/fedora-epel/$releasever/$basearch/ gpgcheck=0 enabled=0
来两张图看一下。我打开的http://172.16.0.1/fedora-epel/。里面显示的就是$releasever。
我这里是CentOS7的,主版本为7,点开以后。显示的就是$basearch。我这里是x86_64。所以在我的主机上,yum所找的路径就是http://172.16.0.1/fedora-epel/7/x86_64/的路径。
创建yum仓库:
createrepo [options] <directory>
我们在只有一部分包的时候,可以自己用这个命令来生成repodata目录,里面都是元数据。
只不过如查想做关于包组的设置就很复杂了,还要编辑xml文档。 不过我们这里可搞不了这么复杂的东西,只是简单的做一个仓库而已。
[root@localhost Packages]# pwd /var/Tomcat/Packages [root@localhost Packages]#
现在我在Packages的目录下放了一些程序包。如果想把repodata的目录生成到Packages的目录里面,与程序包在一起,就执行createrepo Packages /var/Tomcat/Packages就可以。如果想把repodata的目录生成在Tomcat的目录中,就写/var/Tomcat。总之想把repodata目录在哪生成,就把路径写到哪。
[root@localhost Tomcat]# createrepo /var/Tomcat Spawning worker 0 with 6 pkgs Spawning worker 1 with 5 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete [root@localhost Tomcat]# ls Packages repodata [root@localhost Tomcat]# ll repodata/ total 72 -rw-r--r-- 1 root root 21530 Dec 25 21:56 282d63e759701587df0e25f630bf0da57cd43e03dbe8fc1a82c2d55ddf3f4eec-filelists.sqlite.bz2 -rw-r--r-- 1 root root 4795 Dec 25 21:56 8f7537e789f91b7341edc73c5b292490c3f3ae0e858dbcc246efa0a258c0e6ea-other.sqlite.bz2 -rw-r--r-- 1 root root 3251 Dec 25 21:56 a5ab93ffbc767157518f1645ae0aa99085b1fe68d1c247a039b8cd5df9e02234-primary.xml.gz -rw-r--r-- 1 root root 7067 Dec 25 21:56 b0ec609f795a0170b5076f3a0364b5e838ed809577b3a6918f368aaa10b2b184-primary.sqlite.bz2 -rw-r--r-- 1 root root 2226 Dec 25 21:56 d5b90d9abf14281cc9c10cc8509b6a5a5eb5fab43cc26a8339cb7fe715ddc7fb-other.xml.gz -rw-r--r-- 1 root root 17957 Dec 25 21:56 f49edcdd8e44b5b61542bf4323695d76dbe4b05f710fded09f0a3457db5c8f7f-filelists.xml.gz -rw-r--r-- 1 root root 2979 Dec 25 21:56 repomd.xml [root@localhost Tomcat]#
软件仓库这就完成了。来做个源的配置看看:
[root@localhost Tomcat]# vim /etc/yum.repos.d/tomcat.repo [tomcat] name=tomcat_local baseurl=file:///var/Tomcat gpgcheck=0 cost=10 [root@localhost Tomcat]# yum repolist Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile repo id repo name status local local-ISO-local 8,652 epel/7/x86_64 Fedora EPEL 8,508 tomcat tomcat_local 11 repolist: 17,171 [root@localhost Tomcat]#
有了,我们的tomcat有11个包,包是有点少,但我们设置成功了。
[root@localhost Tomcat]# yum install tomcat ======================================================================================================= Package Arch Version Repository Size ======================================================================================================= Installing: tomcat noarch 7.0.54-1.el7 tomcat 85 k Installing for dependencies: apache-commons-collections noarch 3.2.1-21.el7 local 506 k apache-commons-daemon x86_64 1.0.13-6.el7 local 54 k python-lxml x86_64 3.2.1-4.el7 local 758 k tomcat-el-2.2-api noarch 7.0.54-1.el7 tomcat 76 k tomcat-jsp-2.2-api noarch 7.0.54-1.el7 tomcat 90 k tomcat-lib noarch 7.0.54-1.el7 tomcat 3.7 M tomcat-servlet-3.0-api noarch 7.0.54-1.el7 tomcat 207 k ttmkfdir x86_64 3.0.9-41.el7 local 47 k .....
可以看到tomcat的源已经可以正常使用了。结果也安装成功了。
3、yum命令的使用。
yum [options] [command] [package ...]
yum的命令行选项:
--nogpgcheck:禁止进行gpg check;
在用yum安装本地包的时候可能会用到。不然没有key是无法安装的。
-y: 自动回答为“yes”;不用确认,自动安装。
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
command is one of:
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* check
* help [command]
常用到的:
显示仓库列表:默认只显示enabled的仓库。
repolist [all|enabled|disabled]
显示程序包:最常使用的就是 yum list all | grep ****。来查找某个不确定名称的包。
list
# yum list [all | glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
[root@localhost yum.repos.d]# yum list zs* php* Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Installed Packages php-common.x86_64 5.4.16-23.el7_0.3 installed zsh.x86_64 5.0.2-7.el7 @local
用通配符来匹配包名称。对应于上面glob_exp1...的部分。
而available那部分,只列出可以安装的,已安装的,有更新的,再加通配符。
[root@localhost yum.repos.d]# yum list installed zs* Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Installed Packages zsh.x86_64 5.0.2-7.el7 @local [root@localhost yum.repos.d]#
安装程序包:
install package1 [package2] [...]
reinstall package1 [package2] [...] (重新安装)
[root@localhost yum.repos.d]# yum reinstall zsh
升级程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
我这里的yum源里没有可升级的包,但是有一个单独的rpm包。我们可以这样升级,yum会自动解决依赖关系,如果是被依赖,可能就失败了,没有尝试过。
[root@localhost ~]# yum update zsh-5.0.2-7.el7_1.2.x86_64.rpm Updating: zsh x86_64 5.0.2-7.el7_1.2 /zsh-5.0.2-7.el7_1.2.x86_64 5.6 M [root@localhost ~]# rpm -q zsh zsh-5.0.2-7.el7_1.2.x86_64
然后降级:
[root@localhost ~]# rpm -q zsh [root@localhost ~]# rpm -q zsh zsh-5.0.2-7.el7.x86_64
yum升级需谨慎,注意要指明程序包,如果不指会全部升级的。
如果有多个版本可升级:
要升级到指定的版本,要加上版本号 yum update 版本号 package_name
检查可用升级:
check-update
[root@localhost Packages]# yum check-update zsh
卸载程序包:
remove | erase package1 [package2] [...]
[root@localhost Packages]# yum erase zsh
查看程序包information:
info [...]
[root@localhost Packages]# yum info zsh
与rpm -qi的意思差不多。
查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] [...]
[root@localhost Packages]# yum provides /etc/fstab
查看/etc/fstab是由哪个程序包所生成的。差rpm -qf差不多。
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
all:所有; packages:下载的rpm包;metadata:元数据,;expire-cache:过期缓存;
rpmdb :rpm数据库;plugins :插件。
构建缓存:
makecache
也不用专门运行这个,yum repolist 的时候就自动缓存过了。
搜索:
search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息;
[root@localhost ~]# yum search zsh
查看指定包所依赖的capabilities:
deplist package1 [package2] [...]
查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
每一次yum的安装删除,只要是修改类的操作,都会以一个事务记录下来。
[root@localhost ~]# yum history list
我们可以用上面这个来查看有多少事务。还可以用info来查看各个事务的信息。
[root@localhost ~]# yum history info 10
安装及升级本地程序包:
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
在老的版本中,要用localinstall才能用yum安装本地的程序包,现在直接用install也一样。
所需要的依赖,会自动在yum源中解决。
[root@localhost ~]# yum install zsh-5.0.2-7.el7_1.2.x86_64.rpm
这是从本地安装的包文件,不是从源里面安装的。 而升级的那个,我们在上面升级部分用的就是。
包组管理的相关命令:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
直接安装包组,如开发组,解决开发环境,只不过安装的包可能多点。
[root@localhost ~]# yum group list [root@localhost ~]# yum groupinstall "Development Tools" [root@localhost ~]# yum groupremove "Development Tools" [root@localhost ~]# yum groupinfo "Development Tools"
第一个,查看有哪些包组。第二安装包组,因为有空格,组名要用引号引起来。每四个查看一个组的信息,如组内有哪些包,哪些是必须要安装的,哪些是默认的,哪些是可选的。
谢谢浏览,没想到笔记东拼西凑这么多,大家看的也累了吧,如果发现问题可要提出来啊,大家一起讨论讨论。