List the installed RPMs by date of installation/update?
-
To list all packages and their install dates, latest first:
1
rpm -qa --last
-
This should work on any RPM based machine:
1
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
命令查看的结果如下:
1
2
3
4
5
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
参数可得结果如下:
1
2
3
4
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
该方法使用默认的编译参数,无需手动修改,直接使用如下命令即可:
1
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
这个文件的内容,这执行这个指令:
1
[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”,则可使用如下命令:
1
[user@host ~]$ rpm --nomd5 -i /tmp/mypackage-1.0.0-1.src.rpm
当你将 SRPM 解压后,你便会留意到在~/rpmbuild/SPECS
目录内多了一个 spec 文件(在这个例子里它多数会称为mypackage.spec
)。你就是利用这个文件来创建 RPM。要这样做,请使用下列指令:
1
2
[user@host ~]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -ba mypackage.spec
rpmbuild -ba
这个指令会执行 RPM 创建过程里的所有步骤,然后在完成时创建一个 RPM 文件(它会被存储在~/rpmbuild/RPMS/i386
内,或者对应你结构的目录内),与及一个新的 SRPM 文件(它会被存储在~/rpmbuild/SRPMS
内)。