首先认识一下Linux系统中的rpm包的样子,只以.rpm结尾的包即是。
比如:zsh-4.3.10-4.1.el6.x86_64.rpm
linux系统中软件包的组成:
1、二进制程序,这些一般是命令,存放路径/bin ,/sbin/ , /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
2、库文件:软件的运行和安装都需要库文件的支持,存放路径:/lib , /usr/lib , /usr/local/lib
3、配置文件:用于配置软件的属性,方便用户修改:/etc/
4、帮助文档:对软件程序功能和使用的说明 ,软件程序写好后,需要有解释文档跟随,如果没有,时间长了,这个程序的使用和维护都会不知所从。手册、README 、INSTALL;/usr/share/man、/usr/share/doc
软件工具对软件包的管理,需要提供如下功能:
1、软件包文件的清单
2、软件包安装前后存放的位置
3、软件包功能的说明
4、依赖关系的提示或者解决
rpm管理工具提供的功能:打包、安装、查询、校验、升级、卸载
打包功能后续介绍
安装:
软件包的安装方式:
1、绿色安装:
2、软件工具安装
3、源代码安装
命令格式:
rpm [option] /PATH/TO/RPM_FILE
-i | --install :安装
-v,-vv,-vvv:显示安装详细信息,v越多信息越详细
-h:以#显示安装进度,
合在一起就是-ivh,这个是常用选项
--nodeps:忽略依赖关系,在软件包的安装过程中依赖关系有时很复杂,比方循环依赖,就需要忽略依赖关系
--test:测试安装:
--replacepkgs:重新安装,有的软件包已经安装过了,可是由于某个原因我需要重新安装覆盖一下,可是有时因为原有软件已经安装完成,不让覆盖,就需要这个选项了。
卸载:
rpm -e rpm_name:一般包名不用全名,以便卸载全面
--nodeps:忽略依赖关系:
查询:查询工作非常重要,rpm提供了详细的查询功能
查询所有已经安装的包:
rpm -qa:
小技巧:rpm -qa | grep ‘pattern’
查询包的摘要信息:
rpm -qi rpm_name
查询包安装完成后生成的文件的清单:
rpm -ql rpm_name
查询某个文件是由哪个rpm包安装生成的:
rpm -qf /path/to/some_file
查询安装后,生成的包的配置文件在哪里:
rpm -qc rpm_name
查询包安装完成,生成的帮助文档在哪里:
rpm -qd rpm_name
查询包安装后的相关脚本:
rpm -q --script rpm_name
脚本分为四种:preinstall(安装前运行的脚本)、postinstall(安装后运行的脚本)、preuninstall(卸载前运行的脚本)、postuninstall(卸载后运行的脚本)
查询尚未安装的包的相关信息:
只需要在上述查询命令的选项中添加-p选项即可使用。
校验:
检查软件包的签名是否被修改:
导入:rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-rhx
校验:-K
例如:
# rpm -K zip-2.31-2.el5.i386.rpm
zip-2.31-2.el5.i386.rpm: (sha1) dsa sha1 md5 gpg OK
结果是OK的,就是说,签名是没有问题的。
检查软件包是否被修改:
先导入:rpm --import PUBKEY ...
例如:[root@localhost rpm-gpg]# rpm --import RPM-GPG-KEY-CentOS-6
然后在使用校验命令:rpm -V rpm_name:当包内信息被修改,就可以显示相关内容。
# rpm -V zsh
S.5....T c /etc/zshrc
文件前的信息解释如下:
S file Size differs
M Mode differs (includes permissions and file type)
5 MD5 sum differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
升级:
-U:升级+安装,就是安装并升级到新的版本
-F:只是更新软件包
升级时,依赖关系的解决:
--force:在有冲突的时候,强行升级
--nodeps:不检测依赖关系
rpm软件包工具管理,是依赖rpm包数据库的,如果这个数据库/var/lib/rpm,损坏,就会导致rpm不可使用,这就需要重建数据库:
使用命令如下:
--initdb:新建但保留原有库
--rebuilddb:重新创建,覆盖原有库,不保留
yum工具的使用
yum(全称 Yellow dog Updater Modified)是一个在Fedora和Redhat以及SUSE中的前端软件管理器。能够指定yum源,可以在本地,也可以在网络,下载并安装,可以自动解决依赖关系,并一并安装所依赖的软件包,实现自动管理,不再用手动繁琐的安装。
yum的全局配置文件:
/etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log #安装过程的信息
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1 #自动检查rpm包的签名
plugins=1
# Note: yum-RHN-plugin doesn't honor this.
metadata_expire=1h
# Default.
# installonly_limit = 3
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
客户端:
客户访问yum源的建立:
在/etc/yum.reops.d/下创建*.repo结尾的文件
内容如下:
[repository_ID] #全局唯一
name=
baseusr= # 本地用file://打头
enabled={0 | 1}
gpgcheck={0 | 1}
gpgkey=
cost= #代价,设置优先级别。数字越小优先级越高
yum支持在仓库中使用变量:
$releasever
当前系统版本
$arch
uname -m显示的结果
$basearch
i386或者ix86
例如:http://mirror.sohu.com/centos/$releasever/os/$basearch/
yum使用命令
yum SUBCOMMAND
查询:
list:{all | install | available}列出软件包,全部的、已安装的、可使用的
repolist {all | enable | disabled}repo的使用情况
info packet_name:安装和未安装的包的信息。
search:模糊匹配查询
查询显示包由哪个软件包安装:
provides | whatprovides packet_name
groupinfo “group_name”:包组信息
缓存:
clean [ packages | headers | metadata | dacache | all ] 清理缓存信息
makecache:创建缓存信息
安装:
install packet_name ...
-y:自动回答为yes
reinstall:重新安装
groupinstall:包组安装
localinstall:本地yum安装软件包(rhel5实用),rhel6使用install即可
--nogpgcheck:避开签名检测
升级:
check-update:检查可升级包信息
update packet_name :升级软件包
update-to:把软件包升级到哪个版本
history:查询历史命令
源码包的编译安装,用如下几个步骤即可:
# ./configure 在这里可以指定参数,定制软件的性能
# make 在上一步骤里生成makefile文件后,即可进行这步
# make install 查看README或者INSTALL文档查看安装的步骤,如果有就继续吧,come on
源码包的安装的路径不是系统默认的路径,有四个问题需要解决:
1、软件使用的命令不在PATH中,需要在/etc/profile.d/目录下写入一个脚本,比方:# cat /etc/profile.d/apache.sh
PATH=/usr/local/apache2/bin:$PATH
2、软件的库文件, 不在系统默认的/etc/ld.so.conf/下,只需要在其下写入一个文件,使软件的库可以被重新搜索到即可:# cat /etc/ld.so.conf.d/apache.conf
/usr/local/apache2/lib
3、帮助文档不在系统的搜索范围之内,把帮助文件的路径添加到系统可以搜索到的路径下即可:比方:vim /etc/man.config 添加man路径 MANPATH /usr/local/apache/man
4、头文件:软件安装和运行需要系统的头文件的支持,所以把系统的头文件的路径链接到软件的头文件的路径下即可:比方:ln -sv /usr/local/apache/include/ /usr/include/httpd
源码包的rpm格式,制作成为rpm包:
在这个目录里:
[root@localhost rpmbuild]# ls
SOURCES SPECS
可以看到有两个文件,我们只需要使用在SPECS目录中使用命令就可以创建生成rpm包了。
这个rpmbuild目录是rpm -ivh *.src.rpm包生成的。
在rpmbuild目录里使用命令:rpmbuild -ba package.spec即可生成rpm包和rpm格式的源码包
如果使用-bb即只生成rpm包。
如果上面的步骤遇见依赖关系,使用yum解决即可。