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 > epel
yum机制:
要想确保YUM正常工作,要满足以下几点:
2.1.1 确保有yum repo可用
rpm包的文件服务器中, repodta目录所在的父目录,就是一个可用仓库
例如:http://mirrors.sohu.com/centos/6/os/x86_64/ 目录下有repodate目录的就可认定为一个yum仓库
yum仓库可以通过以下三种方式共享:
ftp: ftp://server/path/to/repository
http http://server/path/to/repository
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=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
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: ftp://server/path/to/repository
http http://server/path/to/repository
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=http://mirrors.163.com/centos/6.6/os/x86_64/ #记得检查该目录是否有 repodata目录
enabled=1
gpgcheck=0
然后可以使用命令 yum repolist 查看到此repo配置
4. yum命令详解
这里的yum命令都是指在客户端上使用的,包括列表,清理缓存,安装/重新安装/降级安装/卸载,查询等命令。
4.1 列出所有可用repo
yum repolist {enabled|disabled|all} #列出{已经启用的|已禁用的|所有的}可用的repo
4.2 列出rpm包
yum list {all|installed|available} # 列出{所有|已安装|未安装但repo内有的}
4.3 查看包的描述信息
yum info package_name
4.4 列出所有的包组信息
yum grouplist
4.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_name
4.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_file
CentOS 6,7:
yum localinstall /path/to/package_fiel
5. 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# python
Python 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 createrepo
3.2 对rpm包目录createrepo:
#createrepo /var/www/html/zabbix
# createrepo /var/www/html/zabbix
Spawning worker 0 with 16 pkgs
Workers Finished
Gathering worker results
Saving 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=http://192.168.229.141
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.com
tips: 编译安装的缺点是: 无法自动卸载安装的文件,所以习惯把编译安装的软件放在一个目录下,便于日后升级卸载
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来生成makefile
automake: 生成一个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-FUNCTION
7.5 安装后的配置:
7.5.1 程序运行及维护:
1. 让二进制程序直接运行,而无需输入路径
#vim /etc/profile.d/APPNAME.sh
export PATH=$PATH:/path/to/somewhere
2. 导出手册页:
编辑/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/,不是不能启动,自己写好,就可以和其他软件用同一种风格来运行了。