【问题标题】:How to reduce the size of an rpm?如何减小 rpm 的大小?
【发布时间】:2016-01-17 08:34:19
【问题描述】:
我正在创建一个 rpm,它将在安装时将一些文件分散在不同/特定位置。我面临的问题是 rpm 的大小,接近 1.5 GB。有没有一种方法可以将我的文件放在 aws s3 中并在 rpm 安装期间下载。到目前为止,我将所有文件都包含在 SOURCE 目录中。
感谢任何帮助。
谢谢。
巴拉塞卡·内利
【问题讨论】:
标签:
rpm
rpmbuild
rpm-spec
【解决方案1】:
对于这么多数据,不要将其放入一个 rpm,甚至不能放入 100 个(例如 mypgm-data-1.rpm、mypgm-data-2.rpm、... )。就个人而言,当我在运行 yum 时看到一些程序将 foobar-langpack-1.rpm 更新为 foobar-langpack-300.rpm,我讨厌它。
考虑使用 rsync [通过 http 隧道连接?] 而不是 AWS。它非常适合这项工作。
你为什么要把它们“四处散布”???为什么不将它们放在 /home/mypgm 或 /usr/share/mypgm 下?
rpm 安装应该很快。您可以让 rpm 帖子执行 rsync,但在用户第一次运行程序和/或配置之前我不会这样做。它会问:“启用自动/后台数据更新?”
给用户一个选择。当程序运行时,它可以检测到需要从 AWS 刷新本地数据并 [再次] 提示用户:“我需要更新程序数据才能运行。现在就做?需要 X 分钟”
对于如此庞大的东西,让用户选择更新政策。例如,在 Android 上,您可以选择“仅通过 wifi 更新”。
【解决方案2】:
您可以使用 deltas 生成 yum/dnf 存储库:
createrepo_c --deltas
它将针对旧的 rpm 文件创建二进制差异。它不会帮助您进行初始下载,但会加快升级速度。
别忘了yum.conf
deltarpm=2
查看 man yum.conf 了解此值的含义。
您还可以在构建 rpm 时更改压缩参数。看到这个答案:
rpmbuild change compression format