AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1448149
Accepted
Daniel Krajnik
Daniel Krajnik
Asked: 2023-01-01 10:29:56 +0800 CST2023-01-01 10:29:56 +0800 CST 2023-01-01 10:29:56 +0800 CST

修改包的源代码,以便未来的安全更新在运行“apt update && apt upgrade”时继续应用包含的修改?

  • 772

我认为 Ubuntu 尊重“修改软件的自由”,但是应该如何在不破坏系统的情况下修改 Ubuntu 软件包的源代码?通过破坏它,我的意思是例如创建无法解决的依赖关系或阻止未来的apt update更新,尤其是安全更新。

有没有办法保存修改的“补丁”并将其应用于任何未来的适当更新?我宁愿避免完全“分叉”一个包。

这是“适当固定”的目的吗?或者 Ubuntu 的“稳定性模型”(我不确定这是不是正确的术语)只是不支持用户修改?如果其他发行版以不同方式处理它(Arch/Gentoo),我将不胜感激。

apt
  • 1 1 个回答
  • 54 Views

1 个回答

  • Voted
  1. Best Answer
    HuHa
    2023-01-01T10:59:15+08:002023-01-01T10:59:15+08:00

    这通常是如何工作的,发行版的包维护者从官方来源(GitHub、SourceForge 等;上游代码)获取原始来源,这些原始来源通常以 tarball(压缩的 tar 存档)形式出现。那些保持原样;原汁原味,因为它被称为。

    但通常需要进行一些调整,以便一切都与整体分布一起工作。因此,包维护者将这些原始源解压缩到一个工作目录中,并根据需要更改源;然后使用diff命令生成变更集,即原始版本和现在修改(“修补”)版本之间真正发生变化的少数地方。

    此更改集称为diff或patch。对于每个包,可以有一个,也可以有多个;通常它们是按主题组织的;即一个用于目标分布上不同的路径,另一个用于解决该软件调用的另一个程序的怪癖等;你明白了。

    然后将原始 tarball 和差异/补丁放入另一个存档(源包),但保持足够的独立性,因此一切都保持透明。

    现在构建包时,这意味着首先解压缩原始 tarball,然后应用第一个补丁(使用patch程序),然后是第二个等等;当修补阶段完成时,编译过程才真正开始(调用make和make install其他任何必要的)。

    我所知道的所有 Linux 发行版都是这样做的;Ubuntu、Debian、SUSE、Red Hat,应有尽有。可能对所有人都一样,可能对 BSD 变体也是如此。

    所以,有源码包;这就是您的切入点。没有什么能阻止您获取源代码包并在其上添加一两个补丁;并以此为基础生成你自己的源码包。

    需要注意的是,现在您必须自己重建包;并确保在发布新版本时将补丁添加到新版本的源包中,即每次更新包时。

    这可以做到,但是很乏味。很有可能你一直没有动力去做这件事;取决于包真正改变的频率。

    一种减轻痛苦的工具是openSUSE 构建系统(OBS),它支持至少部分自动化。但是你仍然需要注意重新导入源包和添加你自己的补丁。它可以在网络上免费获得,并且可以为各种发行版构建软件包,不仅包括 openSUSE,还包括 Ubuntu、Debian 和其他发行版。

    因此,如果您有一个普遍感兴趣的更改,如果他们不想将您的更改包含在他们的源包中,您可能想要联系您的发行版的包维护者。或者,如果上游作者(最初编写该软件的人)不想为所有人发布您的更改,您可以联系他们。

    如果它对您的用例来说是非常具体的,那显然是行不通的。在这种情况下,请考虑不同的策略。

    • 3

相关问题

  • 如何编写 shell 脚本来安装应用程序列表?

  • 如何查看存档中可用的软件包的所有版本?

  • 是否可以说出我安装的哪些软件包不在原版安装中?

  • 如何删除 PPA?

  • 使用 apt-get upgrade 时如何强制安装内核更新?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve