在Linux上,我们可以重新打包已安装的rpm吗?我记得可以从已安装的二进制文件生成rpm
rpm -??? > my.rpm
Run Code Online (Sandbox Code Playgroud)
同样,更新的rpm应该在其他机器上运行
这是可能的,但不能通过rpm命令实现。我写了一个 perl 脚本来执行此操作;它根据 的输出制作一个规范文件,rpm -q并进行“构建”,该“构建”仅从系统中复制已安装的文件。
您可以在这里找到它: https: //github.com/cormander/rogue-beret-tools/blob/master/scripts/rpm-repack
使用示例,重新打包mailxrpm:
查询一下:
$ rpm -ql mailx
/bin/mail
/etc/mail.rc
/usr/bin/Mail
/usr/lib/mail.help
/usr/lib/mail.tildehelp
/usr/share/man/man1/Mail.1.gz
/usr/share/man/man1/mail.1.gz
Run Code Online (Sandbox Code Playgroud)
重新包装一下:
$ ./rpm-repack -p mailx
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.9773
+ umask 022
+ cd /usr/src/redhat/BUILD
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip
+ /usr/lib/rpm/brp-strip-static-archive
+ /usr/lib/rpm/brp-strip-comment-note
Processing files: mailx-8.1.1-44.2.2
Provides: mailx
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.4) rtld(GNU_HASH)
Checking for unpackaged file(s): /usr/lib/rpm/check-files /tmp/tlkN4yrYEi
Wrote: ~/rpmbuild/RPMS/i386/mailx-8.1.1-44.2.2.i386.rpm
Run Code Online (Sandbox Code Playgroud)
查询新建的包:
$ rpm -qpl ~/rpmbuild/RPMS/i386/mailx-8.1.1-44.2.2.i386.rpm
/bin/mail
/etc/mail.rc
/usr/bin/Mail
/usr/lib/mail.help
/usr/lib/mail.tildehelp
/usr/share/man/man1/Mail.1.gz
/usr/share/man/man1/mail.1.gz
Run Code Online (Sandbox Code Playgroud)
该代码一点也不优雅,但很实用。它确实复制了大量的 rpm 信息(来自脚本的所有内容rpm -qi和大部分脚本),但它绝不是全面的。此外,它无法复制 GPG 签名,也不具有与原始 RPM 文件相同的校验和。
注意:这不是构建和分发 RPM 包的“正确”方法,主要是为了故障排除和教育目的而编写的。
| 归档时间: |
|
| 查看次数: |
7515 次 |
| 最近记录: |