1. yum简介
2. yum组成结构3. yum配置使用4. yum命令详解5. yum源变量6. yum仓库创建7.进阶源码编译安装 1. yum简介YUM: Yellowdog Updater Modifed, 是由Duke University团队修改Yellow Dog Linux的Yellow Dog Updater开发而来的,是一个基于RPM包管理器的字符前端软件管理器(依赖于RPM包)。能够从指定的服务器自动下载RPM包并且安装,可以处理RPM包的依赖关系,并且一次安装所有依赖的软件包,无须繁琐的一次次下载、安装。被Fedora、Red Hat Enterprise Linux、CentOS所使用。 2. yum的组成结构
简单的说: YUM就是一个RPM包管理工具,而且YUM是C/S结构,服务端就是一个文件服务器,都是rpm包;而YUM客户端可以配置多个YUM服务端来使用。
2.1 YUM服务端
yum repository: 称之为yum仓库,存在于yum服务器端,分成两部分:
a. 仓库数据: 各个数据包 b. 元数据(meta data) 数据文件信息在centos5是xml格式,在centos6,7上用的是sqlite,基于文件来实现关系型数据库 元数据包括: 包名,版本信息,各包所包含的文件列表,依赖关系,包分组信息 我们可以使用createrepo命令来给rpm包创建仓库 yum仓库 主要有以下几类: base库 #基础库 update库 #更新版本库 extra库 #格外库 epel库 #fedora维护的库#如果某软件base库里有,update库里也有,则应该使用update库中的包,因为update库中是更新的版本
以上库的优先顺序应为: base > update > extra > epelyum机制:
要想确保YUM正常工作,要满足以下几点: 2.1.1 确保有yum repo可用 rpm包的文件服务器中, repodta目录所在的父目录,就是一个可用仓库 例如: 目录下有repodate目录的就可认定为一个yum仓库yum仓库可以通过以下三种方式共享:
ftp:
http nfs nfs://server/nfs_path file file:///path/to/repository #本地文件系统,挂载光盘后直接就可以用 file:///media/cdrom 即可3. yum配置使用 在客户端上必须要提供repo配置文件,指明仓库访问路径及各种属性信息
主配置文件(中心配置文件): /etc/yum.conf (此配置文件的参数作用可以通过 man yum.conf查看), 内容如下:
[main]
cachedir=/var/cache/yum/$basearch/$releasever #缓存目录 keepcache=0 #是否保存缓存数据? 0 不保存 debuglevel=2 #debug信息等级 logfile=/var/log/yum.log #yum的日志信息保存地址 exactarch=1 #exact arch match? 是否要精确匹配平台? obsoletes=1 #是否要检查过期仓库? gpgcheck=1 plugins=1 installonly_limit=5 bugtracker_url= distroverpkg=centos-release# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to # download the new metadata and "pay" for it by yum not having correct # information. # It is esp. important, to have correct metadata, for distributions like # Fedora which don't keep old packages around. If you don't like this checking # interupting your command line usage, it's much better to have something # manually check the metadata once an hour (yum-updatesd will do this). # metadata_expire=90m# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d 一个或多个相关仓库的配置信息可保存在一个文件,文件名都以.repo结尾,存放在/etc/yum.repos.d 目录下 在.repo文件定义一个yum repo指向的格式:[REPOID] #这个REPOID可以自己设定任意字符
name=Some name for this repository #此行等号两侧不能有空格,右侧可以加空格,不写此字段使用yum会报warning baseurl=file:///media/cdrom #baseurl可以有多个,用来指定真正仓库的所在地 ftp: http nfs nfs://server/nfs_path #多个baseurl 必须按照上面格式书写,第二个baserul不能出现在行首 enabled={0,1} #1为启用此repo gpgcheck={0,1} #是否检查GPG(GNU Private Guard),一种密钥方式签名。 gpgkey=URL #当配置gpgcheck选项时,要加上gpgkey来验证 例如:gpgkey=file:///media/cdrom/GPG-RPM-KEY-centos-6 mirrorlist=URL to a file #这个文件指向多个baseurl,不定义baseurl的时候可以用这个指定多个仓库 cost={1..n} #默认值为1000, 指定访问此仓库的开销
例如在yum客户端创建一个新的repo,首先定位到/etc/yum.repos.d下创建一个文件 163.repo
内容如下:[163]
name=CentOS 6 from 163 mirror baseurl= #记得检查该目录是否有 repodata目录 enabled=1 gpgcheck=0然后可以使用命令 yum repolist 查看到此repo配置
4. yum命令详解
这里的yum命令都是指在客户端上使用的,包括列表,清理缓存,安装/重新安装/降级安装/卸载,查询等命令。
4.1 列出所有可用repo
yum repolist {enabled|disabled|all} #列出{已经启用的|已禁用的|所有的}可用的repo4.2 列出rpm包
yum list {all|installed|available} # 列出{所有|已安装|未安装但repo内有的}4.3 查看包的描述信息
yum info package_name4.4 列出所有的包组信息
yum grouplist4.5 显示包组的信息, 指定某个包组的程序包列表和功能
yum groupinfo "GROUP NAME" 例如: yum groupinfo "Server Platform Development"4.6 清理缓存
yum clean {all|packages|metadata|expire-cache|rpmdb|plugins} #清理{所有|特定rpm包|元数据|过期缓存|repo数据库|插件}的缓存只有yum clean all比较常用,其他用的到的在来翻看笔记吧
#注,清理缓存并不会删除目录结构,只是结构内的数据被清除
可以用 tree /var/cache/yum来对比 清理缓存后的文件列表对比
4.7 安装程序包
yum install package_name重新安装程序包
yum reinstall package_name4.8 升级程序
检查可用的升级包 yum check-update #并不会执行安装 升级包 yum update package_name 例如: 我们要升级一个程序 x-1.3.1 当前repo中存在x-1.3.2, x-1.3.3, x-2.0.1 三个版本,我们只想安装特定的x-1.3.2 而直接运行 yum update x ,会直接将x升级到最新版本 x-2.0.1 这时候,我们可以加上rpm包的版本,指定升级版本升级到特定版本
yum update package_name-version降级包
yum downgrade package_name 4.9 卸载包 yum remove|erase package_name #如果卸载一个软件被其他软件依赖, 那会连同所用的依赖包一同卸载掉。4.10 查询某配置文件是由哪个包生成的?
yum whatprovides | provides /path/to/somefile #whatprovides和provides两个参数都可以4.11 安装包组
yum groupinstall "GROUP NAME" #可以用yum gourplist来查看都支持哪些包组4.12 卸载包组
yum groupremove "GROUP NAME" 4.1.3 安装仓库外rpm包假设: 从其他处获得一个rpm包, 如果此包依赖于其他包(在仓库中), 如何安装?
如果只是单次安装需要: CentOS 5: yum install /path/to/package_fileCentOS 6,7:
yum localinstall /path/to/package_fiel5. yum源变量
在使用在线的repo源的时候, 客户端yum配置文件中中可以使用4个变量
$releasever: 程序的版本 #可以根据系统来替换成相应的主版本号,5,6,7,而主版本号下的连接是当前发行版的最新版本5.6,6.5,7.1等
$arch: 系统架构$basearch: 系统基本架构,如i686, i586等的基本架构为i386$uuid:$YUM0-9: 在系统中定义的环境变量, 可以在yum中使用:ps: 实际环境中,baseurl中常用$releasever和$basearch来替换本地架构和linux版本来让仓库的配置文件更具有通用性,让不同的平台版本可以使用同一个配置文件。
5.1 获取yum源变量值
获取当前系统相应变量替换结果的办法:
-bash-4.1# pythonPython 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2>>> import yum,pprint>>> yb = yum.YumBase()>>> pprint.pprint(yb.conf.yumvar,width=1)Loaded plugins: fastestmirror, refresh-packagekit{'arch': 'ia32e', 'basearch': 'x86_64', 'infra': 'stock', 'releasever': '6', 'uuid': '54298ec4-d059-4bfe-a967-cce66eb95513'}>>> quit()6. yum仓库创建
yum仓库可以分为本地仓库和在线仓库两种:
6.1 自建本地yum仓库:
1. 如何自建基于光盘镜像的yum repo 挂载光盘 mount /dev/cdrom /media/cdrom 在/etc/yum.repo.d/下创建一个.repo文件 内容为: [base] name=Local Media baseurl=file:///media/cdrom pgpcheck=0 enabled=1 2. 自简提供yum仓库的中心服务器 ftp, http, nfs 三种常用的文件服务器以http为例:,步骤:
1. 安装httpd程序 #rpm -ivh http-x-x-x-x.rpm 1.2 启动httpd服务 #service httpd start #chkconfig httpd on #centos7 不适用2. httpd的文档根目录为/var/www/html
创建子目录,存放某相关的所有rpm包 3. 为仓库生成元数据文件,以使其能够作为仓库使用 3.1 安装 craeterepo rpm -ivh createrepo-xxx.xxx.xxx.rpm 或者 #yum install createrepo3.2 对rpm包目录createrepo:
#createrepo /var/www/html/zabbix # createrepo /var/www/html/zabbix Spawning worker 0 with 16 pkgs Workers Finished Gathering worker resultsSaving Primary metadata
Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete 则该目录下会自动生成一个repodata目录,该目录/var/www/html/zabbix就可以当repo用了4. 配置yum客户端
[zabbix] name=zabbix repo baseurl= gpgcheck=0 enabled=1 然后就可以使用这个repo了7.进阶源码编译安装
7.1 编译安装,依赖于开发环境
程序源码: c/c++ 底层,无跨平台能力 perl python别人制作好的rpm包,都是编译过的,而当源码包的功能有20个,
主包:6个功能 分包1: 2个功能 分包2: 4个功能也就是说别人会根据需求订制功能,编译后rpm包功能会比源码功能少,并且也会比源码包慢几个版本
可能出现你需要的功能,在别人编译好的rpm上没办法使用,这时候就需要我们自己来根据源代码来自己编译安装开源的源代码有如下两个方式来提供:
1.开源应用程序:
自建站点: #一般都是比较大型的项目会有自己的站点 apache, ASF mysql drbd 2. 代码托管: #一些中小型项目的源代码一般都使用代码托管的方式,寄存在以下的代码托管网站 Sourceforge github.com code.google.comtips: 编译安装的缺点是: 无法自动卸载安装的文件,所以习惯把编译安装的软件放在一个目录下,便于日后升级卸载
7.2 编译工具:gcc
gnu c complier 只能用来编译c程序 gcc-c++ 用来编译c++程序 使用 rpm -qa| grep gcc 可以看到本机有很多种针对不同语言的编译工具,编译是很耗时的 7.3 源代码的组织格式: 多文件: 文件中的代码有依赖关系 项目管理工具: GNU make(gcc) 定义好多文件之间的编译关系,处理多文件内源码的依赖关系项目: 50文件
项目的制作者: 利用make工具,为make提供一个配置文件 make不是编译工具,是编译的管理工具autoconf: 生成编译环境检查(检查开发环境是否满足编译需求)及编译功能配置(选择源码内的功能)脚本
生成configure 当configure脚本执行的时候,会结合automake工具生成的Makefile.in来生成makefileautomake: 生成一个Makefile.in --> makefile
7.4 编译源程序的步骤:
# tar xf testapp-version.tar.{xz|bz|gz} # cd testapp-version # ./configure 还需要通过许多选项指定编译特性,选取功能 # make # make install ./configure 脚本的使用: 1. 获取帮助 ./configure --help #基于每个项目内的配置选项是不同的,需要查看2. 通用一些选项
安装路径相关: --prefix=/path/to/somewhere: 指定安装路径 --sysconfdir=/path/to/somewhere: 指定配置文件安装路径的, 路径应该为/etc/下某个目录指定启用/禁用的特性
--enable-FEATURE 例如 --enable-fpm ,但是启用一个功能,就会依赖另外的开发环境包 --disable-FEATURE 例如 --disable-socket指定所依赖的功能、程序或文件
--with-FUNCTION[=/path/to/somewhere] --without-FUNCTION7.5 安装后的配置:
7.5.1 程序运行及维护:
1. 让二进制程序直接运行,而无需输入路径
#vim /etc/profile.d/APPNAME.sh export PATH=$PATH:/path/to/somewhere2. 导出手册页:
编辑/etc/man.config 配置文件,添加一项MANPATH,路径为新安装的程序的man目录 或者 #man -M /path/to/somewhere KEYWORD 就可以找KEYWORD的帮助手册了3. 自己编写/etc/init.d/的启动脚本
ps: 如果只是为了编译安装,并运行软件,则到此就可以结束了。
下面的步骤是为了解决其他应用程序依赖开发环境,和针对编译安装程序的二次开发准备环境使用的。========================================================================================== 7.5.2 程序开发: 如果其他应用程序依赖此程序的开发环境,或针对此程序做二次开发 1. 导出库文件 第一步: 指定让系统搜索定制的路径 编辑/etc/ld.so.conf.d/APPNAME.conf 一行一个库文件路径例如: vim /etc/ld.so.conf.d/nginx.conf
#/usr/local/ngxin/lib 第二步:触发系统重新搜索所有的库文件并生成缓存 #ldconfig -v 显示过程2. 导出头文件
/usr/local/ngxin/include系统找头文件的路径是 /usr/include
导出方式: 创建链接进行 ln -sv /usr/local/ngxin/include /usr/include/nginx
启动程序得自己写,在/etc/init.d/,不是不能启动,自己写好,就可以和其他软件用同一种风格来运行了。