博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rpm的使用入门
阅读量:5135 次
发布时间:2019-06-13

本文共 3145 字,大约阅读时间需要 10 分钟。

rpm的使用入门

1. rpm是什么

rpm: Red Hat Package Manager,但是现在是RPM Package Manage的递归缩写。主要是给类redhat liux系统使用,如Fedora/CentOS(yum),openSUSE/SUSE(zypper),Mandriva Linux/Mageia(urpmi),括号后面分别是对应linux发行版的自动安装命令,实际上底层最总还是调用了rpm命令。

本文主要rpm的打包以及rpm的常用命令来阐述。

2. rpm的打包

虽然我们不是配管,但是有时候还是需要了解一些是怎么打包的,毕竟有时候需要将自己写的一些运维工具下发到相应的机器上。

  • 首先需要安装rpm命令包,rpm的打包命令是rpmbuild。常用的用法为:

    $ rpmbuild -bb xxx.spec

    spec文件就是打包要用到的配置文件,这个才是打包的精髓所在。

  • rpm打包的工作环境

    也就是rpm打包的时候是默认将那些文件打成一个rpm包的。

    $ rpm --showrc | grep topdir-14: _builddir  %{_topdir}/BUILD-14: _buildrootdir  %{_topdir}/BUILDROOT-14: _rpmdir    %{_topdir}/RPMS-14: _sourcedir %{_topdir}/SOURCES-14: _specdir   %{_topdir}/SPECS-14: _srcrpmdir %{_topdir}/SRPMS-14: _topdir    %{getenv:HOME}/rpmbuild

    上面的这些变量都是在/usr/lib/rpm/macros定义的。具体每个变量的意思为:

    BUILD: 编译rpm包的临时目录

    BUILDROOT: 编译后生成的软件临时安装目录
    RPMS: 最终生成的可安装rpm包的所在目录
    SOURCES: 所有源代码和不定文件的存放目录
    SPECS: 存放SPEC文件的目录(很重要
    SRPMS: 软件最终的rpm源码格式存放路径(暂时)

    如果用户想要改变这个路径,只要改变topdir这个变量就可以了,应为其他的变量都是依赖这个变量的,但是,官网文档不建议这么做,可以在用户的目录下建一个.rpmmacros

    $ cat .rpmmacros %_topdir /home/jackson/rpmbuild$ rpm --showrc | grep _topdir-14: _builddir  %{_topdir}/BUILD-14: _buildrootdir  %{_topdir}/BUILDROOT-14: _rpmdir    %{_topdir}/RPMS-14: _sourcedir %{_topdir}/SOURCES-14: _specdir   %{_topdir}/SPECS-14: _srcrpmdir %{_topdir}/SRPMS-14: _topdir    /home//root/rpmbuild

    但是,现在是没有rpmbuild目录,已经rpmbuild下面其他的目录,可以手动建,也可以通过执行rpmdev-setuptree可以自动生成这些文件:

    $ rpmdev-setuptree$ tree rpmbuild/rpmbuild/|-- BUILD|-- RPMS|-- SOURCES|-- SPECS`-- SRPMS5 directories, 0 files

    这样基本的打包环境就弄好了,只需要将用于生成rpm包的源代码,shell脚本,配置文件等拷贝到SOURCES目录下,在SPEC目录下编写好spec文件,执行开头的那条命令即可。

  • SPEC文件的编写

    上面说到,spec文件才是rpm打包的核心所在,那怎么写spec配置文件呢。下面慢慢道来。

    首先可以通过 rpmdev-newspec -o Name-version.spec命令来生成一个spec文件的模板。

    (1) 关键字

    Name: 软件包的名称。 用%{name}的方式引用

    Summary: 软件包的内容概要

rpm的常用命令

1. 安装rpm包

$ rpm -ivh hello-0.1.i386.rpm

之后会显示包名,并且打印一连串的#号以表示安装进度。如果包已经有了,可以通过下面的命令来升级

$ rpm -Uvh hello-0.1.i386.rpm

实际上,上面的命令也是可以用来安装新包的。

注意: 使用rpm -ivh hello-0.1.i386.rpm安装包的时候会出现:

(1)软件包已经被安装。解决方式:

$ rpm -ivh --replacepkgs hello-0.1.i386.rpm

(2)安装的软件包中有文件冲突。解决方式:

$ rpm -ivh --replacefiles hello-0.1.i386.rpm

(3)未解决依赖关系:

$ rpm -ivh hello-0.1.i386.rpmfailed dependencies:world is needed by hello-0.1#

可以忽略依赖关系,强制安装,可以利用--nodeps参数:

$ rpm -ivh --nodeps hello-0.1.i386.rpm

2. 卸载rpm包

$ rpm -e rpm_name

同样卸载的时候也会出现 依赖关系的错误,如果要强制卸载,也可以用--nodeps参数,但是会出现和它有依赖关系的软件包未必能正常运行。

3. 升级rpm包

$ rpm -Uvh hello-0.1.i386.rpm

这个前面已经提到过,这个过程是,RPM会自动卸载老的软件包,实际上,升级就是卸载和安装的过程,因此也会出现上面的两个操作所遇到的问题。此外就是用低的rpm版本包来升级高的rpm版本的时候,就会出现

error: hello-0.1.i386.rpm cannot be installed

如果要强制升级,可以用–-oldpackage

$ rpm -Uvh –-oldpackage hello-0.1.i386.rpm

4. 更新rpm包

$ rpm -Fvh –-oldpackage hello-0.1.i386.rpm

5. 查询

常用操作

$ rpm -qa                  #列出本机上安装所有的rpm包$ rpm -q hello             #找出本机上以hello开头的rpm包

除此之外,还有以下的选项可以和-q连用,来指明要查询软件包的信息。

  • -f 查询包含有的软件包
  • -p 查询软件包名
  • -i 显示软件包的信息,就是SPEC文件中的一些内容给显示出来
  • -l 列出软件包包含的文件
  • -s 显示软件包中所有文件的状态
  • -d 列出被标注为文档的文件(document)
  • -c 列出被标注为配置文件的文件(config)

6. rpm校验

$ rpm -V

7. rpmdb

rpmdb 命令用户初始化和重建rpm数据库

$ rpmdb 

option:

  • --initdb: 初始化RPM数据库
  • --rebuilddb: 从已安装的包头文件中,反向重建RPM数据库

常常在安装的时候需要,修复RPM数据库

$ rm -rf /var/lib/rpm/__db.* && sudo rpm --rebuilddb

转载于:https://www.cnblogs.com/zk47/p/4709153.html

你可能感兴趣的文章
Codeforces 576D. Flights for Regular Customers(倍增floyd+bitset)
查看>>
字符串操作
查看>>
项目中报错Cannot read property 'getAttribute' of undefined解决
查看>>
jQuery插件之ajaxFileUpload使用小结
查看>>
JAVA H5微信分享
查看>>
SDN第六次作业
查看>>
java--面对对象之构造方法
查看>>
Rime中州韵导入极点五笔词库(附:自制词库)
查看>>
反射之取类中类的属性、变量名称及其值
查看>>
JUC包中多线程之读写锁
查看>>
kafka官方的kafka-server-start.sh不能关闭kafka进程解决办法
查看>>
Access sql语句创建表及字段类型
查看>>
受限玻尔兹曼机(RBM)
查看>>
鼠标滚轮动画
查看>>
linux简介
查看>>
在页面里写个动态本地时间
查看>>
启动另一个app
查看>>
Redis开启远程登录连接
查看>>
当初为蜂巢样式实验过的方法
查看>>
跨域几种解决方法
查看>>