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


8

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

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

那呢 该软件包似乎可以使用git从最新的上游代码中进行更新。但是我该怎么做呢?


我以为bzr的意思是义卖市场-bazaar.canonical.com/en
保罗

Answers:


6

从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软件包)切换到可以进行更改的工作树,使用被子或任何修补程序系统,然后“退出0”以将您的更改复制回去。

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

debian/rules get-orig-source

通常,这将从上游发行商那里下载正确的tarball,以帮助您入门。如果需要进一步更改,请按照上述步骤进行“修​​补”或更改debian /目录中的其他文件,否则,您差不多完成了:

bzr bd -S

bzr bd将负责建筑。不带任何参数的调用开始在您的系统上构建,而使用-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 / control文件并尝试下载构建network-manager-openconnect所需的所有内容。您可能也需要git。完成后,运行get-orig-source从git中获取最新快照的压缩包:

debian/rules get-orig-source

您会看到文本飞过,并出现带有长版本号的压缩包。那是您可以获得nm-openconnect的最新代码。

然后,您需要使用tarball中的版本号更新changelog,只需保持-0ubuntu1后缀完整即可。

或者,将debian / changelog更改为所需的特定版本号,然后运行:debian / rules get-current-source

由于插件变化不大,因此您应该能够使用上述bzr bd从那里构建软件包。如果没有,请进行上述必要的任何更改。

进行更改后,不要忘记进行bzr提交

当您所做的更改可以使其他人受益时,我首先忘记添加,不要犹豫使用合并提议系统(提议合并链接LP上分支机构的页面)。通常,您可以只建议与您所基于的分支合并(例如,在本例中为lp:〜network-manager / network-manager / openconnect-ubuntu.head)。


想通了,我不得不忘记一些事情:如果是打包修订(也包括补丁),不要害怕提出要合并到主打包分支的更改,以便每个人都能从更改中受益!:)
Mathieu Trudel-Lapierre

2

确定更新了如何从启动板中提取代码

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

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

man bzr
343 #type 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分支lp:〜network-manager / network-manager / openconnect-ubuntu.head / home / [您的用户名] / [开发目录的路径]
例如bzr分支lp:〜network-manager / network-manager / openconnect-ubuntu.head / home / joe / projects / network-manger / dev

如果您已经完成此操作,则可能在主目录中有一个目录

LS〜
./openconnect-ubuntu.head

该目录中应该有一个README字段,以查看项目代码,这是README.source的链接

自述文件应具有有关构建该单个项目的说明。

其他有用的bzr工具安装

sudo apt-get install bzr-builddeb bzr-builder bzr-explorer被子

通过bzr-explorere,您可以在gui中浏览在计算机上创建的bzr存储库。

另一个说明。您可能需要提取整个网络危险源才能构建一个组件openconnect。在不同组件之间可能存在许多依赖关系。

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

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

创建一个包非常复杂,请阅读以下链接


谢谢。但是我仍然不确定如何从git中提取最新的network-manager-openconnect代码。我使用bzr提取的文件在debian / rules中有一个脚本,该脚本似乎可以执行git pull,但我不知道如何正确运行该脚本。
詹姆斯·沃德

@james launchpad从gnome社区托管的nework -manager项目的git存储库中提取上游资源。因此,您无需使用git即可提取存储库。阅读bzr文档并进行一些教程,以了解bzr的工作原理。其他明智的检查git over stackoverflow
nelaaro 2011年

@james更简单的方法可能是直接下载此页面底部的.tar.gz文件,也可以直接使用此链接
nelaaro 2011年

看来bzr有一个简单的方法来分支然后更新到最新的原始源。
詹姆斯·沃德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.