程序包管理之yum
yum概念
什么是yum
由yellow dog这一发行版的开发者Terra Soft研发。
使用rpm命令安装软件包时,解决不了依赖关系,就会很麻烦,使用yum可以自行解决依赖关系。
删除某个安装包,如果是用rpm删除,就卸载掉某个依赖关系从而导致其他软件包不能使用。
yum特点
可同时配置多个软件仓库
简洁的配置文件/etc/yum.conf
自动解决安装或者删除RPM软件包时遇到的依赖性问题
使用方便
保持与RPM数据库的一致性
yum repository:yum repo
存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)
yum支持的常见服务器格式
ftp://
http://
nfs://
file:///
yun缓存
数据:程序包
元数据:repodata(请求的安装包及依赖包的名称、大小、版本、依赖关系等属性)执行流程为:第一次访问仓库时请求仓库服务器的元数据并下载到本地缓存目录中,然后检索下载安装包及其相关依赖包并进行安装,安装完成后最后再删除缓存目录中的这些安装包,保留元数据。之后再次下载安装包会先去仓库服务器查询元数据的校验码,并和本地元数据校验码进行比较,如果校验码相同,则直接忽略;如果不同就重新下载元数据并对本地缓存目录中的元数据进行覆盖,从而完成缓存有效性验证。
/etc/yum.conf文件详解
/etc/yum.conf文件是yum主配置文件
yum配置两种方式
一种是直接配置在/etc/yum.conf
为所有仓库提供公共配置
一种是在/etc/yum.repos.d目录下增加repo文件
为仓库的指向提供配置
/etc/yum.repos.d/*.repo文件详解
先看一看/etc/yum.repos.d目录下有哪些软件仓库配置文件
仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0} 表示软件包中定义的源是否启用
gpgcheck={1|0}
gpgkey=URL 定义用于校验的GPG 密钥
enablegroups={1|0}
failovermethod={roundrobin|priority}
默认为:roundrobin,意为随机挑选;
cost=
默认为1000
yum用法
yum [options] [command] [package ...]
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]
显示仓库列表:
repolist [all|enabled|disabled]
显示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
安装程序包:
install package1 [package2] [...]
reinstall package1 [package2] [...] (重新安装)
升级程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
检查可用升级:
check-update
卸载程序包:
remove | erase package1 [package2] [...]
查看程序包information:
info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
makecache
搜索:
search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息;
查看指定包所依赖的capabilities:
deplist package1 [package2] [...]
查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
安装及升级本地程序包:
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
包组管理的相关命令:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
如何使用光盘当作本地yum仓库:
(1) 挂载光盘至某目录,例如/media/cdrom
# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck= 要gpgcheck,就必须要导入key
enabled=
另外配置文件可以用变量替代,变量会自动替换,使一个变量可以多场景使用
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台; i386等
$basearch:基础平台;
$YUM0-$YUM9 自定义
http://mirrors.magedu.com/centos/$releasever/$basearch/os
如何创建yum仓库
yum的命令行选项:
--nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;
$basearch:基础平台;
$YUM0-$YUM9
创建yum仓库:
createrepo [options] <directory>
程序包编译安装:
程序包编译安装:
别人编好的rpm包不适用所有版本,所以要自己编译,如下面的src格式的包,都需要先用rpmbuild命令封装。
testapp-VERSION-release.src.rpm –> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;源代码的组织格式是多文件的,多文件中的代码之间,很可能存在跨文件依赖关系,要解决这种依赖关系,则使用专门的项目管理工具。如下:make,就为项目组织打包管理工具。
源代码 --> 预处理 --> 编译(gcc) (编译器)--> 汇编(汇编器) --> 链接(链接器)--> 执行
这个过程很复杂,所以要是有了项目管理器,就可以自动完成上述过程。
make真的那么强大嘛,是因为make与每个源代码都有配置文件,即为makefile。makefile也不是写死的,makefile由Makefile.in生成,Makefile.in根据用户需求生成。configure脚本可以帮助用户配置这些编译的配置。
那么问题来了,./configure文件、Makefile.in文件以及makefile文件从哪里来?有的自带,有的要生成。用开发工具生成 。
autoconf:生成configure脚本
automake:生成Makefile.in文件建议:安装前查看INSTALL,README
开源程序源代码获取
官方自建站点:
apache.org (ASF)
mariadb.org
...
代码托管:
SourceForge
Github.com
code.google.com
编译安装的过程如下
1.运行configure脚本
(1)让用户通过选项传递参数,指定启用特性、安装路径等,执行时会参考用户的指定以及Makefile.in生成makefile。
(2)检查各指定特性所依赖的外部环境,没有依赖关系,configure会报错。
configure脚本的应用:
–prefix:指定默认安装路径
–sysconfdir:指定配置文件安装路径
–with-CAPABLILITY:依赖的程序包
–without-CAPABILITY:不依赖的程序包
–enable-FEATURE:启用某个特性
–disable:禁用某个特性
2.运行make命令,完成项目构建
根据makefile文件,构建应用程序。
3.运行makeinstall命令,完成安装
示例演示,以apache进行演示
安装后的配置:
(1) 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:
ldconfig [-v]
(3) 导出头文件
基于链接的方式实现:
ln -sv
(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH
实例
1.yum grouplist。查看是否安装好所需要的包组。CentOS 6: “Development Tools”, “Server Platform Development”,Centos7就只有开发工具
2.gcc –version。检查是否有gcc。
3.下载http相关软件包,由于笔者安装到后面发现少安装了3个文件,顾在此一并下载安装。
4.具体情况如下:
wget http://mirrors.aliyun.com/apache/httpd/httpd-2.2.31.tar.gz
wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip
5.将原有安装卸载
yum remove apr-util-devel apr apr-util-mysql apr-docs apr-devel apr-util apr-util-docs
6.具体步骤如下:
a:解决apr not found问题>>>>>>
[root@xt test]# tar -zxf apr-1.4.5.tar.gz
[root@xt test]# cd apr-1.4.5
[root@xt apr-1.4.5]# ./configure --prefix=/usr/local/apr
[root@xt apr-1.4.5]# make && make install
b:解决APR-util not found问题>>>>
[root@xt test]# tar -zxf apr-util-1.3.12.tar.gz
[root@xt test]# cd apr-util-1.3.12
[root@xt apr-util-1.3.12]# ./configure --prefix=/usr/local/apr-util --with- apr=/usr/local/apr/bin/apr-1-config
因为安装apr-util的时候需要编译环境apr存在,故--with-apr指定apr安装路径。
[root@xt apr-util-1.3.12]# make && make install
c:解决pcre问题>>>>>>>>>
[root@xt test]#unzip -o pcre-8.10.zip
[root@xt test]#cd pcre-8.10
[root@xt pcre-8.10]#./configure --prefix=/usr/local/pcre
[root@xt pcre-8.10]#make && make install
可以看到:现在我们都装好了包,并解压,并编译安装完成。
7.cd 到 httpd-2.2.31,ls,less INSTALL。
8../configure –prefix=/usr/local/apache2 –sysconfdir=/etc/httpd2 –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util/
9.make&&make install
10.cd /usr/local/apache2/ 上,ls bin
11.bin/apachectl start
12.netstat -tan
13.看到端口80表示成功了,然后是安装后的配置。
安装后的配置:
(1) 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:
ldconfig [-v]
(3) 导出头文件
基于链接的方式实现:
ln -sv
(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH