Linux 从已安装的rpm重新打包rpm

Linux 从已安装的rpm重新打包rpm,linux,rpm,Linux,Rpm,在linux上,我们可以重新打包一个已安装的rpm吗?如果可以的话。我记得rpm可以从已安装的二进制文件生成 rpm -??? > my.rpm 同样是后者,也就是说,较新的rpm应该在不同的机器上工作这是可能的,但不能使用rpm命令。我编写了一个perl脚本来实现这一点;它根据rpm-q的输出生成一个spec文件,并执行一个“构建”,它只从系统复制已安装的文件 你可以在这里找到它: 使用示例,重新打包mailxrpm: 查询: $ rpm -ql mailx /bin/mail /

在linux上,我们可以重新打包一个已安装的rpm吗?如果可以的话。我记得rpm可以从已安装的二进制文件生成

  rpm -??? > my.rpm

同样是后者,也就是说,较新的rpm应该在不同的机器上工作

这是可能的,但不能使用
rpm
命令。我编写了一个perl脚本来实现这一点;它根据
rpm-q
的输出生成一个spec文件,并执行一个“构建”,它只从系统复制已安装的文件

你可以在这里找到它:

使用示例,重新打包
mailx
rpm:

查询:

$ 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
重新打包:

$ ./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
代码一点也不优雅,但很实用。它确实复制了很多rpm信息(从
rpm-qi和大多数脚本中的所有内容),但它并不全面。此外,它不能复制GPG签名,也不会具有与原始RPM文件相同的校验和

注意:这不是构建和分发RPM包的“正确”方式,主要是为了故障排除和教育目的而编写的。

还有rpmrebuild

实际上有一个简单但“棘手”的方法;它只是:
rpm-e——重新打包包名
它将在
/var/spool/repackage/
中输出RPM

例如:

# rpm -e --repackage samba3x-client
# file /var/spool/repackage/samba3x-client-3.5.4-0.83.el5_7.2.i386.rpm
/var/spool/repackage/samba3x-client-3.5.4-0.83.el5_7.2.i386.rpm: RPM v3 bin i386 samba3x-client-3.5.4-0.83.el5_7

为什么很棘手?因为它实际上是在打包程序之前将其删除。

这是可能的,但不能使用
rpm
命令。我曾经有一个perl脚本可以做到这一点;它根据
rpm
的输出制作了一个spec文件,并进行了“构建”,只从系统中复制了已安装的文件。我会看看这个周末是否能把它挖出来。谢谢,请让我知道..我找到了这个,这是如何从rpm命令重新打包rpm,但仍在等待您的perl脚本--repackage
在RHEL7中似乎不再可用。
# rpm -e --repackage samba3x-client
# file /var/spool/repackage/samba3x-client-3.5.4-0.83.el5_7.2.i386.rpm
/var/spool/repackage/samba3x-client-3.5.4-0.83.el5_7.2.i386.rpm: RPM v3 bin i386 samba3x-client-3.5.4-0.83.el5_7