Rpm相关

Posted by wsxq2 on 2018-11-05
TAGS:  rpm

本文最后一次编辑时间:2019-07-31 22:56:23 +0800

List the installed RPMs by date of installation/update?

  1. To list all packages and their install dates, latest first:

    rpm -qa --last
    
  2. This should work on any RPM based machine:

    rpm -qa --qf '%{INSTALLTIME} (%{INSTALLTIME:date}): %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -n
    

    (To get a list of all possible tags, use rpm --querytags.)

重建 SRPM

本部分内容主要参考自 zh/HowTos/RebuildSRPM - CentOS Wiki

SRPM 简介

RPM 文件大家都非常熟悉,是基于 RedHat 的 Linux 发行版(如 CentOS )的软件包文件。然而,你可能到目前为止从未听过 SRPM 文件。所谓的 SRPM(Source RPM),顾名思义,即只带有打包的源文件和 SPEC 文件的 RPM。使用file命令查看的结果如下:

root@wsxq21:~/shadowsocks-libev/rpm/SRPMS# ls
shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS# file shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm
shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm: RPM v3.0 src
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS#

使用rpm-qpl参数可得结果如下:

root@wsxq21:~/shadowsocks-libev/rpm/SRPMS# rpm -qpl shadowsocks-libev-3.3.0-1.21.gite3c6c80.src.rpm
shadowsocks-libev-3.3.0-1.21.gite3c6c80.tar.gz
shadowsocks-libev.spec
root@wsxq21:~/shadowsocks-libev/rpm/SRPMS#

温馨提示-qpl也能对 RPM 文件使用

那么,它有什么用呢?不像 RPM 文件,SRPM 文件不能直接使用rpm命令的-i参数安装,它必需配置参数以编译成 RPM 文件。由此可见,其好处自然是可以在编译前自定义参数,修改默认编译配置,提高编译灵活性。即类似于./configure && make && make install系列命令的功能

从 SRPM 得到 RPM

方法一:单一步重建 SRPM

该方法使用默认的编译参数,无需手动修改,直接使用如下命令即可:

rpmbuild --rebuild /tmp/mypackage-1.0.0-1.src.rpm

一切顺利的话,你便会在~/rpmbuild/RPMS/i386目录里产生一个mypackage-1.0.0-1.i386.rpm文件(如果你的架构不是 i386,则相应的文件名称及目录都会发生改变)。

方法二:安装 SRPM 然后以 spec 文件重建

另一个做法就是先安装来自 SRPM 的文件,然后利用rpmbuild按照 spec 文件重建。Fedora >= 11 的 RPM 必须这样处理。

要安装一个 SRPM,请执行rpm -i指令并提供 SRPM 文件的名称作为参数。请留意用没有特殊权限的户口执行 rpm -i,而不是 root。你亦可以利用rpm -qpl来列出 SRPM 文件内的文件。当你安装一个 SRPM 文件时,spec 文件(也就是有.spec扩展名的那个)会被放进你的~/rpmbuild/SPECS目录内,而其它来自 SRPM 的文件(多数是 tar 压缩档及修正档)会被放进你的~/rpmbuild/SOURCES目录内。举个例说,要解压/tmp/mypackage-1.0.0-1.src.rpm这个文件的内容,这执行这个指令:

[user@host ~]$ rpm -i /tmp/mypackage-1.0.0-1.src.rpm

假如是後期 Fedora 的 RPMS,或者出現的錯誤類似 “error: unpacking of archive failed on file /builddir/build/SOURCES/mypackage-1.0.0.tar.gz;4dc983a7: cpio: MD5 sum mismatch”,则可使用如下命令:

[user@host ~]$ rpm --nomd5 -i /tmp/mypackage-1.0.0-1.src.rpm

当你将 SRPM 解压后,你便会留意到在~/rpmbuild/SPECS目录内多了一个 spec 文件(在这个例子里它多数会称为mypackage.spec)。你就是利用这个文件来创建 RPM。要这样做,请使用下列指令:

[user@host ~]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -ba mypackage.spec

rpmbuild -ba这个指令会执行 RPM 创建过程里的所有步骤,然后在完成时创建一个 RPM 文件(它会被存储在~/rpmbuild/RPMS/i386内,或者对应你结构的目录内),与及一个新的 SRPM 文件(它会被存储在~/rpmbuild/SRPMS内)。

进一步阅读

参考链接

  1. CentOS: List the installed RPMs by date of installation/update?