什么是rpm包?
rpm 相当于windows中的安装文件,它会自动处理软件包之间的依赖关系。
rpm优点:
包管理系统简单,通过几个命令就可以实现包的安装、升级、卸载。
安装速度比源码包快的多。
缺点:
经过编译,不能看到源代码,功能选择不如源码灵活。依赖性强。
包名称
一个rpm包的名称分为包全名和包名,包全名如httpd-2.2.15-39.el6.centos.x86_64.rpm,包全名中各部分的意义如下:
1 | httpd 包名 |
使用rpm工具管理包时,如果要操作未安装的包,则使用包全名,如安装包,查看未安装包的信息等;如果要操作已安装的rpm包,则只需要给定其包名即可,如查询已装包生成了哪些文件,查看已装包的信息等。
而对于yum工具来说,只需给定其包名即可,若有需要,再指定版本号,如明确指明要安装1.6.10版本的tree工具,yum install tree-1.6.10。
rpm管理包
rpm包被安装后,会在/var/lib/rpm下会建立已装rpm数据库,以后有任何rpm的升级、查询、版本比较等包的操作都是从这个目录下获取信息并完成相应操作的。
1 | root@xuexi ~]# ls /var/lib/rpm/ |
rpm安装完成后,相关的文件会复制到多个目录下(具体复制的路径是在制作rpm包时指定的)。一般来说,分布形式差不多如下表。
1 | /etc 放置配置文件的目录 |
rpm安装、升级、卸载
1 | rpm -ivhUe --nodeps --test --force --prefix |
rpm查询功能
1 | -q[p] -q查询已安装的包,-qp查询未安装的包。它们都可接下面的参数 |
yum管理包
/etc/yum.conf是yum的默认文件,里面配置的也是全局默认项。1
2
3
4
5
6
7
8
9
10
11
12
13
14[root@server2 ~]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever # 缓存目录
keepcache=0 # 是否保留缓存,设置为1时,安装包时所下载的包将不会被删除
debuglevel=2 # 调试信息的级别
logfile=/var/log/yum.log # 日志文件位置
exactarch=1 # 设置为1将只会安装和系统架构完全匹配的包
obsoletes=1 # 是否允许更新旧的包
gpgcheck=1 # 是否要进行gpg check
plugins=1 # 是否允许使用yum插件
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release # 指定基准包,yum会根据这个包判断发行版本
配置yum仓库
首先配置yum仓库,配置文件为/etc/yum.conf和/etc/yum.repos.d/中的”.repo”文件,其中/etc/yum.conf配置的是仓库的默认项,一般配置yum源都是在/etc/yum.repos.d/*.repo中配置。注意,该目录中任意repo文件都会被读取。
默认/etc/yum.repos.d/下会有以下几个仓库文件,除了CentOS-Base.repo,其他的都可以删掉,基本没用。
1 | [root@xuexi yum.repos.d]# vim CentOS-Base.repo |
1 | 安装epel-release-noarch.rpm |
yum命令
1 | Usage: yum [options] COMMAND |
制作rpm 包
安装rpmbuild1
2
3
4
5
6
7$yum install rpmbuild
$yum install rpmdevtools
$rpmdev-setuptree
此时rpmbuild已经安装好了,可以查看一下
rpmbuild --showrc | grep topdir
进入rpmbuild 目录文件夹如下:
各个文件夹的用途:
整理源码
rpmbuild安装完成以后我门就需要将我们的源码放到 SOURCE 文件夹下。我门的源码可能是一个tar.gz 的包、也可能是几个文件。
tar.gz源码包的名字格式应该为 helloword-1.0.0.tar.gz (其实就是名字-版本号.tar.gz)
编写spec文件
在SPECS文件夹下新建 xxx.spec 打包脚本,其实也就是把我门的源码编译打包成rpm 的一个过程。
1 | vi xxx.spec |
注意:
以上阶段如果没有操作的话,为空,但是不能有空行,例如build阶段为空应写为
1 | %build |
rpm包制作阶段
打包
spec 文件编写好以后就可以进行打包了。
在SPECS文件夹下执行命令:
1 | rpmbuild -bb xxx.spec |
如果出错了可以通过 不同的命令来看是在打包的那一步出了问题。
1 | rpmbuild |