如何从源代码更新 Ubuntu 软件包?

如何从源代码更新 Ubuntu 软件包?

我想在 Ubuntu 中创建 network-manager-openconnect 包的更新版本。显然我需要获取最新的包源:

bzr branch lp:~network-manager/network-manager/openconnect-ubuntu.head

然后呢?该软件包似乎有办法使用 git 从最新的上游代码更新自身。但我该如何让它做到这一点呢?

答案1

从 bzr 分支构建更新的软件包往往会有很大不同,这取决于谁维护分支或软件包的总体工作方式。但是,这里有一些快速更新任何软件包并将其推送到 PPA 的指导原则:

获取分支:

bzr branch lp:~network-manager/network-manager/openconnect-ubuntu.head

然后切换到它,并更新变更日志:

dch -i

dch-i只会在 debian/changelog 中打开一个新条目,将版本修订版增加一个。如果你想添加补丁,这是完美的,但如果你想更新到上游软件的较新版本,你需要更新破折号 (-) 之前的版本号。比如说,1.2-0ubuntu1,如果你开始dch-i它将改变为1.2-0ubuntu2,这对于修补来说很好,但如果你需要一个新版本,你可能需要将其更改为1.3-0ubuntu1

如果需要修补,现在就可以添加更改。在只有Debian/目录,您可以使用bzr bd-do(需要 bzr-builddeb 包)切换到可以进行更改的工作树,使用 quilt 或任何补丁系统,然后“exit 0”将您的更改复制回来。

如果您想要一个新的上游版本,一旦更改日志被更改,您可能会运行类似于以下命令:

debian/rules get-orig-source

这通常会从上游发布者处下载正确的 tarball 以帮助您入门。如果需要进一步更改,请按照上述步骤进行“修​​补”或更改Debian/目录,否则你就快完成了:

bzr bd -S

必应屋将负责构建。不带参数调用它将开始在您的系统上构建,而使用-S告诉它准备一个源包,其中将包括一个..._source.changes你要上传到 PPA 的文件(使用dput ppa:<你的名字>/<你的 ppa 的名字> <更改文件>要做到这一点)。


对于 NetworkManager 包来说,情况有些不同。我们来具体看一下 openconnect:

bzr branch lp:~network-manager/network-manager/openconnect-ubuntu.head network-manager-openconnect

确保您还拥有所有构建依赖项:sudo get-build-deps

检索到分支后,将显示debian/控制文件并尝试下载构建 network-manager-openconnect 所需的一切。不过你可能还需要 git。完成后,运行获取原始来源从 git 获取最新快照的 tarball:

debian/rules get-orig-source

您将看到文本飞过,并出现一个带有长版本号的 tarball。这是您可以获得的最新 nm-openconnect 代码。

然后你需要使用 tarball 中的版本号来更新变更日志,只需保留-0ubuntu1后缀完整。

或者,改变debian/更新日志使用您想要的特定版本号,然后运行:debian/rules get-current-source

由于插件没有太大变化,您应该能够从那里构建包,使用必应屋如上所述。如果不是,请如上所述应用任何必要的更改。

别忘了bzr 提交在您做出更改之后。

我首先忘了补充一点,不要犹豫使用合并提案系统(提议合并当您所做的更改可能使其他人受益时,请将您分支的页面链接到 LP。通常,您可以提议合并您所在的分支(例如,在本例中为 lp:~network-manager/network-manager/openconnect-ubuntu.head)。

答案2

好的,已更新如何从启动板提取代码

bzr 分支 lp:~network-manager/network-manager/openconnect-ubuntu.head

这个命令的作用是从 lp(启动板托管服务)中提取代码。我们需要找到代码所在的位置。

man bzr
343 #当手册页出现时输入 343。

bzr branch FROM_LOCATION [TO_LOCATION]        
       If  the TO_LOCATION is omitted, the last component of the FROM_LOCATION
       will be used.  In other words, "branch ../foo/bar" will attempt to cre‐
       ate  ./bar.   If the FROM_LOCATION has no / or path separator embedded,
       the TO_LOCATION is derived from the FROM_LOCATION by stripping a  lead‐
       ing   scheme   or  drive  identifier,  if  any.  For  example,  "branch
       lp:foo-bar" will attempt to create ./foo-bar.

尝试更改为您想要工作的目录或添加您和代码要去的目录。

cd /home/[你的用户名]/[开发目录路径]
或 bzr branch lp:~network-manager/network-manager/openconnect-ubuntu.head /home/[你的用户名]/[开发目录路径]
例如 bzr branch lp:~network-manager/network-manager/openconnect-ubuntu.head /home/joe/projects/network-manger/dev

如果你已经完成此操作,你的主目录中可能有一个目录

ls ~
./openconnect-ubuntu.head

该目录中应该有一个 README 文件,要查看其中的内容,请查看项目代码,以下是链接README.源

README 应该包含有关构建该单个项目的说明。

其他有用的 bzr 工具需要安装

sudo apt-get 安装 bzr-builddeb bzr-builder bzr-explorer quilt

bzr-explorere 将允许您以 GUI 形式浏览您在机器上创建的 bzr 存储库。

另一点需要注意的是,您可能需要提取整个网络管理器源才能构建一个组件 openconnect。不同组件之间可能存在许多依赖关系。

您需要为当前的 opneconnect 软件包创建一个修复程序,然后使用您使用的每个 diff 工具创建一个补丁。并将其发送给软件包维护者。

或者如果您想在本地使用修复的新包,您需要创建一个.deb 包文件。

创建一个包这相当复杂请阅读以下链接

相关内容