如何将二进制文件添加到现有的 PPA 包中

如何将二进制文件添加到现有的 PPA 包中

将修改过的或新的文本文件添加到我的 PPA 包非常简单:

步骤1:

apt-get source [foo-package]
cd [foo-package]

第2步: 添加或修改包含更改的新文本文件

步骤 3——更新变更日志:

dch -i

步骤 4 - 创建补丁

dpkg-source --commit

步骤 5——创建源包

debuild -S 

步骤 6 - 上传至启动板

cd ..
dput [myppa]/[foo_source.changes]

但是,我现在需要向现有包中添加一个新的图标文件(.png 文件)。

因此第2步- 只需复制到 [foo-package]

步骤4- 我收到以下错误:

dpkg-source: error: cannot represent change to foo-package/foo-icon.png: binary file contents changed
dpkg-source: error: unrepresentable changes to source

如果我尝试转到步骤 5,则会收到以下附加错误:

dpkg-source: error: add foo-package/foo-icon.png in debian/source/include-binaries if you want to store the modified binary in the Debian tar-ball
...
dpkg-buildpackage -rfakeroot -d -us -uc -S failed

有什么想法可以让我如何将二进制图标文件添加到我现有的 PPA 包中吗?


更多信息

通过运行:

debuild -S --source-option=--include-binaries

这样就可以构建源包并第 6 步是可能的。

然而这并不是真正的答案 - 因为我随后无法进行进一步的代码更改(第2步),因为我仍然收到同样的错误。

我似乎做不到,dpkg-source --commit --source-option=--include-binaries因为这只会导致错误:

dpkg-source --commit --source-option=--include-binaries
dpkg-source: warning: --source-option=--include-binaries is not a valid option for Dpkg::Source::Package::V3::quilt
dpkg-source: error: cannot represent change to foo-package/foo-icon.png: binary file contents changed
dpkg-source: error: unrepresentable changes to source

答案1

我做了什么:

apt-get source rhythmbox-plugin-llyrics
cd rhythmbox-plugin-llyrics-0.1/
echo '#Junk commit' >> llyrics/ChartlyricsParser.py
sed -i 's/Maintainer: fossfreedom <[email protected]>/Maintainer: Andrew King (No comment) <[email protected]>/g' debian/control
sed -i 's/fossfreedom <[email protected]>/Andrew King (No comment) <[email protected]>/g' debian/changelog
dpkg-source --commit

debuild -S -sa
mkdir debian/icons
cp ~/Pictures/awesome-cat.jpg ./debian/icons/
echo 'debian/icons/awesome-cat.jpg' > debian/source/include-binaries
cd ..
dpkg-source --include-binaries -b rhythmbox-plugin-llyrics-0.1
cd -
debuild -S

echo '#Junk commit' >> llyrics/ChartlyricsParser.py
dpkg-source --commit

#so now it's still allowing commits and in the deb-src...add it to install
echo 'debian/icons/* /usr/share/icons/hicolor/' >> debian/install
echo '' >> debian/install
debuild -S

#note that you should have the proper subfolders here e.g. 32x32/myicon.png or whatever
#also note that per packaging guidelines it should be one entry per file, not a wildcard

确认其在 Launchpad 上正确推送和构建 福斯自由

答案2

刚刚明白dpkg-source --commit使用开关忽略二进制extend-diff-ignore文件

这是另一种更简单的方法:你基本上告诉dpkg-源忽略它不能理解的内容(即二进制文件),并关心自己的事;)

第一次添加二进制文件后,关键是使用dpkg-source --commit开关--extend-diff-ignore以及要忽略的适当路径/文件名(Perl 正则表达式格式)。

例如,假设你在目录中粘贴了一堆 PNG llyrics,然后修改了一些文本文件。正确的提交调用是:

dpkg-source --commit --extend-diff-ignore="(^|/)(llyrics/.*\.png)$"

接下来是:

debuild -S --source-option=--include-binaries

获取你的 PPA 上传。


让我们使用rhythmbox-plugin-llyrics来自 fossfreedom 的“playground”PPA 的包来测试一下:

  1. 获取源码:apt-get source rhythmbox-plugin-llyrics

  2. 修改文本文件并添加 PNG:

    $ cd rhythmbox-plugin-llyrics-0.1
    $ echo FORCE-A-DIFF >> llyrics/README
    $ wget -Ollyrics/dancemonkeyboy.png \
       http://www.samrethsingh.com/wp-content/uploads/2009/02/untitled-image.png
    ...“llyrics/dancemonkeyboy.png”已保存 [243304/243304]
    
  3. 添加到变更日志并增加版本dch -v 0.1-3ubuntu6~izx1

  4. 提交文本更改并忽略 PNG:

    $ dpkg-source --commit --extend-diff-ignore="(^|/)(llyrics/.*\.png)$"
    dpkg-source:信息:检测到本地更改,修改的文件为:
    rhythmbox-插件-llyrics-0.1/llyrics/README
    输入所需的补丁名称:PPABinaryTest
    dpkg-source:信息:本地更改已记录在新补丁中:rhythmbox-plugin-llyrics-0.1/debian/patches/PPABinaryTest
    
  5. 构建源/更改:

    $ debuild -S --source-option=--include-binaries
    ...
    dpkg-source:信息:使用现有的./rhythmbox-plugin-llyrics_0.1.orig.tar.gz 构建 rhythmbox-plugin-llyrics
    dpkg-source:信息:将 llyrics/dancemonkeyboy.png 添加到 debian/source/include-binaries
    ...
    

然后...瞧!(Launchpad 构建的 deb——请注意~200k 的大小差异......

答案3

这比仅仅添加文件要困难一些。

首先,您需要使用新源包中包含的二进制文件重建 .orig.tar.gz,并且可能需要package_1.0.0.orig.tar.gzpackage_1.0.1.orig.tar.gztar 和debian/changelog.

在使用新文件修改 orig.tar.gz 后(不要在 orig.tar.gz 中包含 debian/ 文件),您将添加一个debian/changelog条目,更改版本以使其增加,就像您对 orig.tar.gz 所做的那样。

然后重建源包(debuild -S),并将新的源包上传到 PPA。新的源包将覆盖 PPA 中的“旧”源包。


来自聊天:

@LordofTime ... wouldnt launchpad complain that its just received a different original source file


@fossfreedom not if you increment the version
new version, new source
@fossfreedom if you don't increment the version it'll explode
so you must increment the version
also, make individual debian packages for each release of ubuntu
and it'll not yell as much (it'll still enforce original version)
i.e.
"I am updating the NGINX PPA from 1.2.2 to 1.2.3. I need to get the 1.2.3 source, and work from that."
"I change the package, and the .orig.tar.gz, and upload the new package to Launchpad."
"If there are no build errors, then i'm done. If there is a build error, then I damned well better fix that error."
(then reupload with 1.2.3-2 or something)
but generally i do build testing in a staging repo

相关内容