有两台机器,SLES的版本/架构相同。
在#A机器上,安装了一个“ foo”软件,我们可以使用来查看rpm -qa
。
在#B机器上,需要安装“ foo”软件。
在foo.rpm
从任何来源无法使用,从互联网等
题
由于该软件包foo.rpm
已安装在#A机器上,我们可以foo.rpm
根据已经安装的文件在其上构建文件吗?
我认为rpm中也有前置/后置脚本。因此,可以安装foo.rpm
(具有依赖项?)。
有两台机器,SLES的版本/架构相同。
在#A机器上,安装了一个“ foo”软件,我们可以使用来查看rpm -qa
。
在#B机器上,需要安装“ foo”软件。
在foo.rpm
从任何来源无法使用,从互联网等
由于该软件包foo.rpm
已安装在#A机器上,我们可以foo.rpm
根据已经安装的文件在其上构建文件吗?
我认为rpm中也有前置/后置脚本。因此,可以安装foo.rpm
(具有依赖项?)。
Answers:
这样做是可能的,但是非常困难,以便正确完成。如果您不顾一切,可以创建一个新的RPM .spec
文件并构造一个“伪”源RPM(SRPM)文件,然后可以使用该文件来构建最终的RPM文件rpmbuild --rebuild
。
我将继续搜索实际的RPM。您没有说明问题中的哪一个,但是根据我的经验,如果您知道如何搜索,就可以在Internet上找到任何内容。我发现Red Hat发行版的RPM的古老版本已经使用了10多年了,所以我很难相信这个RPM的任何地方都没有。
同样,您经常可以返回到RPM中包含的应用程序源,也可以使用它来重构RPM。通常,源应用程序会包含一个.spec
用于重建RPM 的必要文件。
最后,您可以.spec
从构建服务(例如Koji for Red Hat发行版)中获取源文件和文件。SuSE也维护类似的构建服务,因此您可以搜索这些以获得旧的构建工件。
您可以使用此方法从一个系统中提取实际的可执行文件,并将其压缩以在另一系统上进行部署。
机器A
$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz
机器B
$ tar -zxvf /path/to/your/program.tgz
根据该线程中的帖子之一:Re: rpm
据说如何在SLES上创建RPM fron安装的软件包--repackage
。这在Red Hat版本(在Fedora或CentOS中)不存在。但是根据帖子,您可以这样使用它:
$ rpm -e --repackage <somepackage>
完成后,您将在此处找到可访问的RPM:
/var/spool/repackage
Rpmerizor是您可以安装的第三方工具/脚本,它将源文件重新打包到相应的RPM中。此脚本的用法可在此处访问,标题为:rpmerizor的手册页。
摘抄
Rpmerizor是一个脚本,允许您从已安装的文件创建RPM软件包。您只需在命令行上指定文件,并回答一些交互式问题即可填充rpm元数据(包名称,版本...)。您也可以在批处理模式下将其与元数据的命令行选项一起使用。
不要与构建工具相混淆rpmbuild
,rpmrebuild
是其他第三方的脚本,你可以用做一个已经安装RPM的重新包装。
摘抄
rpmrebuild是从基本使用中已经安装的软件包中构建RPM文件的工具,rpmrebuild的使用不需要任何rpm构建知识。(在debian上,等效产品是dpkg-repack)。
假设我们要重新包装openssh-server。
$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64
现在打包:
$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?...... c /etc/ssh/sshd_config
..?...... c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm
作为一般规则。
幸运的话rpm -qi
,您rpm -q --changelog
可以深入了解包装的来源。
如果它是在系统上运行的,则您可能仍然拥有用于生成实际rpm的spec文件,如果不是两者都没有。
通常,我不建议您复制文件/二进制文件,但是大多数元信息都在RPM数据库中,并且您拥有实际的文件。
rpm -q --list <pkg_name>
显示软件包部署的所有文件。
rpm -q --scripts <pkg_name>
以显示通过安装(或删除)软件包而执行的所有脚本,就其目的而言,其提供的洞察力至少与要部署的文件一样多。
可以使用找到任何必须安装的依赖项rpm -q --requires <pkg_name>
。