前端工具YUM管理程序包:
rpm管理软件虽然方便,但是需要手工解决软件包的依赖关系;很多时候安装一个软件需要首先安装一个或多个(有时多达上百个)其它软件,手工解决很复杂;使用yum可以解决这个问题
注意:yum并不是rpm的取代者,只是rpm包管理器的前端工具,是依赖于rpm包管理器的,使用yum来解决安装问题
yum(Yellowdog Updater Modified)是一个RPM包的前端管理工具,主要目的是用来自动解决RPM安装的依赖关系。其特点:自动解决依赖关系、可以对RPM进行分组,并基于组进行安装操作(一次性安装一类软件)、引入仓库概念,支持多个仓库、配置简单。
yum引入了仓库(repository)概念,仓库用来存放所有现有的rpm软件包以及包的相关的元数据文件(元数据文件放置于特定目录repodata下),当使用yum安装一个rpm软件时候,如果存在依赖关系,会自动在仓库中查找依赖软件并安装;仓库可以是本地的,也可以通过http、ftp或nfs形式。
yum的工作原理:
yum的工作需要两部分来,一部分是yum服务器,还有就是client的yum工具。
yum服务器
所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,ftp或者http的形式都可以。yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号,conf文件,binary信息,以及很关键的依赖信息。在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张"清单",这张"清单"就是xml格式的文件,这些xml文件会存放在repodata目录下,服务器端的repository(仓库)就建立好了。注意repodata目录所在的位置,就是yum仓库的位置
yum 客户端
client每次调用yum //代码效果参考:http://hnjlyzjd.com/xl/wz_24777.html
install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。yum会定期去"更新"yum服务器上的rpm包"清单",然后把"清单"下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum下面),每次调用yum装包的时候都会去这个cache目录下去找"清单",根据"清单"里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,然后再去yum服务器下载rpm包安装。yum配置文件:
为所有仓库提供公共配置和yum软件自身的配置:
/etc/yum.conf
【main】主配置文件
cachedir=/var/cache/yum/$basearch/$releaseveryum下载后的缓存目录
keepcache=0? 缓存是否保存
debuglevel=2 调试级别
logfile=/var/log/yum.log?yum安装日志文件
exactarch=1?是否严格检查程序包对应硬件平台与当前硬件平台是否匹配,匹配才安装
obsoletes=1?这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新旧的RPM包
gpgcheck=1? 默认是否检查软件包的来源合法性和完整性
plugins=1是否支持插件功能
installonly_limit=3?同时能安装几个包
仓库指向配置:
/etc/yum.repos.d/.repo?
【repositoryID】 仓库ID自己指定,不要与其它配置同名
name=Some name for this repository?仓库名字自己指定
mirrorlist= 指定获取镜像服务器地址列表的url(需要支持插件yum-fastestmirror)
baseurl= 仓库的网络路径
enabled={1|0}? 是否启用该配置(没配置enabled属性默认是开启的)
gpgcheck={1|0}?是否检查软件包的来源合法性和完整性
gpgkey=URL 指定检查来源合法性所需秘钥文件的网络路径
enablegroups={1|0}?是否支持组批量管理程序包
cost={1..1000} 该配置的访问优先级,较小的优先(默认为1000)
failovermethod={roundrobin|priority}?如果配置了多个仓库地址,配置选用哪个地址的选择方式,默认为roundrobin(轮询)就是随机挑选一个地址;priority(优先级)从上到下顺序选择;
yum的repo配置文件中可用的变量:
$releasever?当前OS的发行版的主版本号;如RedHat 6.5,则替换为6
$arch 系统架构平台
$basearch基础平台,如i686,i586等的基本架构为i386
$YUM0-$YUM9?在系统中定义的环境变量,可以在yum中使用
yum命令使用:
显示仓库列表:all显示所有,enabled显示启用的,disabled显示停用的
yum repolist 【all|enabled|disabled】
显示程序包:
yum list 【all | glob_exp1】 【glob_exp2】 【...】显示所有程序包,可以使用通配符过滤
yum list {available|installed|updates} 【glob_exp1】 【...】
安装程序包:
yum install package1 【package2】 【...】
yum reinstall package1 【package2】 【...】 (重新安装)
升级程序包:
yum update 【package1】 【package2】 【...】升级程序
yum downgrade package1 【package2】 【...】降级程序
检查可用升级:
yum check-update
卸载程序包:
yum remove | erase package1 【package2】 【...】
查看程序包描述信息:
yum info 【package1】 【...】
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 【feature2】 【...】
清理本地缓存:
yum clean 【 packages | metadata | expire-cache | rpmdb | plugins | all 】
构建缓存:
yum makecache
搜索:以指定的关键字搜索程序包名及summary(摘要)信息
yum search string1 【string2】 【...】
查看指定包所依赖的capabilities(功能):
yum deplist package1 【package2】 【...】
查看yum事务历史:只有变化时才记录事物,如安装、卸载、更新数据包
yum history 【info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats】
安装及升级本地程序包:本地下载了rpm包,通过yum安装该rpm包;这样的好处是可以解决安装该rpm包的依赖关系;不过新版本的yum工具通过install和update就可以直接安装升级rpm包
yum localinstall rpmfile1 【rpmfile2】 【...】
(maintained for legacy reasons only - use install)
yum localupdate rpmfile1 【rpmfile2】 【...】
(maintained for legacy reasons only - use update)
包组管理的相关命令:
yum groupinstall group1 【group2】 【...】
yum groupupdate group1 【group2】 【...】
yum grouplist 【hidden】 【groupwildcard】 【...】
yum groupremove group1 【group2】 【...】
yum groupinfo group1 【...】
yum的命令行选项:在执行yum命令时,以命令指定的选项为准,忽略配置文件中的配置
--nogpgcheck?禁止进行gpgcheck
-y?分析完依赖关系,自动安装,不在提示用户是否安装
-q?静默模式,不在输出详细信息
--disablerepo=repoidglob?临时禁用此处指定的repo(如果某个repo在配置文件中为启用的,可以在这里临时禁用,不用改repo配置,通过repoid标识)
--enablerepo=repoidglob 临时启用此处指定的repo(如果某个repo在配置文件中为禁用的,可以在这里临时启用该repo配置,通过repoid标识)
--installroot=/path/to指定软件的安装路径
--noplugins?禁用所有插件
演示:
显示库列表
【root@centos7 ~】# yum repolist all
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源标识 源名称 状态
CDROM CentOS 7 Release 7.2 启用: 9,007
bash Base Repo 启用: 9,363
epel Fedora-epel/7/x86_64 启用: 11,263
查看程序包摘要信息
【root@centos7 ~】# yum info httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
已安装的软件包
名称 :httpd
架构 :x86_64
版本 :2.4.6
发布 :40.el7.centos
大小 :9.4 M
源 :installed
来自源 :CDROM
简介 :Apache HTTP Server
网址 :
协议 :ASL 2.0
描述 :The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
查看指定的特性(可以是某文件)是由哪个程序包所提供:
【root@centos7 ~】# yum provides httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
httpd-2.4.6-40.el7.centos.x86_64 : Apache HTTP Server
源 :CDROM
httpd-2.4.6-45.el7.centos.x86_64 : Apache HTTP Server
源 :bash
httpd-2.4.6-40.el7.centos.x86_64 : Apache HTTP Server
源 :@CDROM
查看指定包所依赖的capabilities(依赖关系分析):
【root@centos7 ~】# yum deplist httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包:httpd.x86_64 2.4.6-45.el7.centos
依赖:/bin/sh
provider: bash.x86_64 4.2.46-20.el7_2
依赖:/etc/mime.types
provider: mailcap.noarch 2.1.41-2.el7
依赖:/usr/sbin/groupadd
provider: shadow-utils.x86_64 2:4.1.5.1-24.el7
依赖:/usr/sbin/useradd
provider: shadow-utils.x86_64 2:4.1.5.1-24.el7
依赖:httpd-tools = 2.4.6-45.el7.centos
provider: httpd-tools.x86_64 2.4.6-45.el7.centos
依赖:libapr-1.so.0()(64bit)
provider: apr.x86_64 1.4.8-3.el7
依赖:libaprutil-1.so.0()(64bit)
provider: apr-util.x86_64 1.5.2-6.el7
依赖:libc.so.6(GLIBC_2.14)(64bit)
provider: glibc.x86_64 2.17-157.el7
依赖:libcrypt.so.1()(64bit)
provider: glibc.x86_64 2.17-157.el7
依赖:libdb-5.3.so()(64bit)
provider: libdb.x86_64 5.3.21-19.el7
依赖:libdl.so.2()(64bit)
provider: glibc.x86_64 2.17-157.el7
依赖:libexpat.so.1()(64bit)
provider: expat.x86_64 2.1.0-8.el7
依赖:liblua-5.1.so()(64bit)
provider: lua.x86_64 5.1.4-15.el7
依赖:libm.so.6()(64bit)
provider: glibc.x86_64 2.17-157.el7
依赖:libpcre.so.1()(64bit)
provider: pcre.x86_64 8.32-15.el7_2.1
依赖:libpthread.so.0()(64bit)
provider: glibc.x86_64 2.17-157.el7
依赖:systemd-units
provider: systemd.x86_64 219-30.el7
查看yum事务历史:
【root@localhost ~】# yum history
Loaded plugins: product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
2 | root | 2018-07-14 05:42 | Install | 1
1 | System | 2018-07-12 23:14 | Install | 636
history list
创建本地yum仓库:
如何使用光盘当作本地yum仓库:
1、挂载光盘至某目录,例如/media/cdrom
mount -r -t iso9660 /dev/cdrom /media/cdrom
2、创建配置文件
【CentOS7】
name=Centos 7 source
baseurl=
gpgcheck=0
enabled=1
创建yum仓库:
createrepo 【options】
可以通过以下方式手工创建yum仓库
1、将所有rpm文件拷贝到一个文件夹中
2、通过rpm命令手工安装createrepo工具
3、运行命令creatrepo -v /rpm-dirctory(在第一步拷贝的文件夹rpm-dirctory下创建索引信息文件rapodata文件)
4、在/etc/ yum.repos.d/目录下面创建一个.repo结尾的yum仓库文件,文件示例如下:
【king】
name=this is my yumrepo
baseurl= #rapodata目录所在的目录
enabled=1
gpgcheck=0
5、如果有分组信息则在运行命令的时候使用-g参数指定分组文件
creatrepo -g /tmp/comps.xml /rpm-directory
CentOS/RHEL的分组信息保存在光盘repodata目录下,文件名以comps.xml结尾的xml文件
创建好之后本机可以通过file方式直接使用,如果用作为对外的yum仓库服务器,可以通过http、ftp或nfs协议共享出去
程序包管理之编译安装:
因此,用户首先得获得程序源码包(SRPM, Source RPM)。RPM包的命名格式为:name-VERSION-release.arch.rpm,而程序源码包(SRPM)的命名格式为:name-VERSION-release.src.rpm。可以发现,SRPM与RPM相比,将arch替换为src,说明SRPM包去掉了arch这一平台类型限制,因此经过用户自己编译安装可以编译成适合自己平台的程序包。
我们知道,程序源代码一般为多文件组织格式,因此文件中的代码文件之间很有可能存在跨文件的依赖关系,这将给用户自行编译安装带来了极大麻烦,因为对先编译哪些文件、后编译哪些文件根本无从知晓,因此这就需要项目管理器(或者项目构建器)。
C/C++的项目管理器为make,make工具可以在编译过程中指定使用哪个预处理器进行预处理、使用哪个编译器进行编译以及先编译什么程序文件、后编译什么程序文件,甚至完成更为复杂的操作等,能帮助用户快速地编译安装。make工具的执行依赖于makefile配置文件,因此make执行的所有操作皆由makefile文件指定。而makefile文件是通过执行configure脚本生成,在执行configure脚本时,configure脚本会结合用户通过命令行指定的选项以及各个Makefile.in模板文件来生成makefile文件。编译完成之后即可使用make install命令将编译好的程序包复制到用户指定的各个目录下。
源代码—> 预处理—> 编译(gcc)—> 汇编—> 链接—> 执行
C、C++: make(configure + Makefile.in—>makefile)
java:maven
开发工具:autoconf生成configure脚本;automake生成Makefile.in文件
开源程序源代码的获取:
官方自建站点:
apache.org (ASF)
mariadb.org
代码托管站点:
sourceforge.net
github.com
code.google.com
c/c++程序源代码编译器为gcc (GNU C Complier)
C源代码编译安装三步骤:
编译安装前:提供开发工具及开发环境
安装相关工具:make、gcc等
准备相关文件:开发库(glibc标准库)、头文件
通过安装"包组"提供开发组件
?CentOS 6安装:"Development Tools", "Server Platform Development"
CentOS 7安装:"Development Tools"
注意:各程序在编译安装过程中可能有所不同,安装前可以先查看INSTALL、README文件
第一步:执行configure脚本
1、通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定选项以及Makefile.in文件生成makefile;
2、检查依赖的外部环境(环境是否满足安装该程序,检查依赖的库文件、检查系统平台是否满足、检查头文件);
选项:指定安装位置、指定启用的特性
--help获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE 指定程序默认安装位置,默认为/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE?配置文件安装位置
System types?指定系统类型,可以进行交叉编译
Optional Features 可选特性
--disable-FEATURE 关闭指定特性,默认关闭时无须指定
--enable-FEATURE【=ARG】?开启指定特性以及安装路径,默认开启时无须指定
Optional Packages 可选包
--with-PACKAGE【=ARG】?安装指定依赖包以及其安装路径
--without-PACKAGE 不安装指定依赖包
第二步:make
make会执行真正的编译操作,但make本身并不是编译器,它只是一个项目构建工具,make程序会根据执行configure脚本所生成的makefile文件,并调用所需要用到的编译器来构建应用程序
第三步:make install
在前面的make程序执行之后,在当前目录下会创建出已编译完成的目标二进制格式的应用程序(包括二进制程序、库文件、配置文件及帮助文档等),而make install则会执行安装操作,实际上就是把当前目录下已编译好的程序包(二进制程序、库文件、配置文件及帮助文档等)复制到用户指定的各个目录当中去。
第四步:编译安装后的配置(如果在编译安装时指定了相关的安装路径)
1、导出二进制程序目录到PATH环境变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
2、导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成库缓存:执行ldconfig 【-v】命令
3、导出头文件
有些程序安装后会生成对自己拥有库文件调用接口相关的头文件,系统查找头文件的路径为/usr/include,导出独立安装应用程序的头文件方法:创建链接至/usr/include下即可
例如:/usr/local/nginx/include
# ln -sv /usr/local/nginx/include/* /usr/include/
# ln -sv /usr/local/nginx/include /usr/include/nginx
4、导出帮助手册
在CentOS 6上:编辑/etc/man.config文件,添加一个MANPATH
# MANPATH /PATH/TO/MAN
这里'/PATH/TO/MAN'为目标程序的安装路径下的帮助手册目录
在CentOS 7上:编辑/etc/man_db.conf文件,添加一个MANPATH_MAP
# MANPATH_MAP /PATH/TO/BIN /PATH/TO/MAN
这里/PATH/TO/BIN是目标二进制程序所在目录,/PATH/TO/MAN则是该程序的帮助手册所在目录。
案例:编译安装apache 2.2源码包,并启动此服务
1、首先获取源代码,下载到当前主机,并展开归档压缩文件。
【root@CentOS6 Downloads】# ls
httpd-2.2.29.tar.bz2
# 展开归档压缩文件,并进入展开的目录中,可以看到目录中的文件
【root@CentOS6 Downloads】# tar xf httpd-2.2.29.tar.bz2
【root@CentOS6 Downloads】# ls
httpd-2.2.29 httpd-2.2.29.tar.bz2
【root@CentOS6 Downloads】# cd httpd-2.2.29
【root@CentOS6 httpd-2.2.29】# ls
ABOUT_APACHE BuildAll.dsp config.layout emacs-style httpd.spec LAYOUT LICENSE NOTICE README.platforms srclib
acinclude.m4 BuildBin.dsp configure httpd.dep include libhttpd.dep Makefile.in NWGNUmakefile README-win32.txt support
Apache.dsw buildconf configure.in httpd.dsp INSTALL libhttpd.dsp Makefile.win os ROADMAP test
build CHANGES docs httpd.mak InstallBin.dsp libhttpd.mak modules README server VERSIONING
2、进到目录当中,可以看到有configure脚本,是可执行的,但不要着急执行,先看一下安装的说明,及步骤,INSTALL,README和configure脚本帮助文档;
# 查看 INSTALL 文档
【root@CentOS6 httpd-2.2.29】# less INSTALL
APACHE INSTALLATION OVERVIEW
Quick Start - Unix
------------------
For complete installation documentation, see 【ht】docs/manual/install.html or
$ ./configure --prefix=PREFIX
$ make
$ make install
$ PREFIX/bin/apachectl start
# 查看 configure 的帮助文档
【root@CentOS6 httpd-2.2.29】# ./configure --help
`configure' configures this package to adapt to many kinds of systems.
Usage: ./configure 【OPTION】... 【VAR=VALUE】...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit