![如何修改现有的 RPM 文件以在 Fedora 11 系统上安装](https://linux22.com/image/1530166/%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9%E7%8E%B0%E6%9C%89%E7%9A%84%20RPM%20%E6%96%87%E4%BB%B6%E4%BB%A5%E5%9C%A8%20Fedora%2011%20%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%AE%89%E8%A3%85.png)
我有一个安装在生产系统上的 RPM,我想修改它,以便 OS 安装程序在安装后不必对系统进行任何更改。该发行版相当旧(遗憾的是我们无法将其更新为较新的版本)- Fedora 11。
有没有什么方法可以让我解压 RPM、更改文件,然后重新打包?
我见过的其他解决方案参考了我没有的实用程序“mock”和“mc”。
答案1
如果您要解压的 rpm 包适用于 Fedora 11 或更早版本,则 Fedora 11 {rpm, rpm2cpio} 可以使用以下命令提取文件unPack_rpm.sh
:
#!/bin/bash
# Purpose: Unpack RPM archives (by @unSpawn)
# Args: /path/to/archive
# Deps: Bash, GNU utils, RPM
rpmDetails() { for Q in changelog provides requires scripts triggers triggerscripts; do
rpm -q -p --${Q} "${f}" 2>&1 | grep -v NOKEY > "${Q}.log"; done; }
rpmUnpack() { f=$(readlink -f "${f}"); file "${f}"|grep -q "RPM.v" && \
{ d=$(basename "${f}" .rpm); d="./${d:=ERROR_$$}"; mkdir -p "${d}" && \
{ cd "${d}" && rpm2cpio "${f}" | cpio -idmv && rpmDetails "${f}"; }; }; }
for f in $@; do rpmUnpack "${f}"; done
exit 0
编辑完解压的文件后,将顶层目录复制到 BUILDROOT/ 。如果rpmbuild -bb name.spec
报告“未找到”,请在 BUILDROOT/ 内创建具有所需应用程序名称的文件夹,并将文件复制到那里。然后rpmbuild -bb name.spec
再次运行。
我推荐的 rpmbuild 设置:http://www.linuxquestions.org/questions/linux-software-2/need-rpm-package-for-php-version-5-2-7-and-up-on-redhat-5-1-a-766486/#13