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


10

将修改后的文本文件或新文本文件添加到我的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

Answers:


8

我做了什么:

apt-get source rhythmbox-plugin-llyrics
cd rhythmbox-plugin-llyrics-0.1/
echo '#Junk commit' >> llyrics/ChartlyricsParser.py
sed -i 's/Maintainer: fossfreedom <somewhere@xmail.com>/Maintainer: Andrew King (No comment) <newplace@ymail.com>/g' debian/control
sed -i 's/fossfreedom <somewhere@xmail.com>/Andrew King (No comment) <newplace@ymail.com>/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 fossfreedom 构建


1
Skeksi,兄弟!<fistbump>是时候设置这些uuencoder了吗?;)
ish 2012年

5

只需获取dpkg-source --commit即可忽略带有extend-diff-ignore开关的二进制文件

这是另一种简单的方法:您基本上告诉dpkg-source忽略它无法理解的内容(即二进制文件),并注意它自己的事;)

首次添加二进制文件后,关键是dpkg-source --commit--extend-diff-ignore交换机一起使用,以及要忽略的适当路径/文件名(Perl regex格式)。

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

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

遵循以下要求:

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

获取您的PPA上传。


让我们使用rhythmbox-plugin-llyricsfossfreedom的“游乐场” PPA 的软件包对此进行测试:

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

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

    $ cd rhythmbox-plugin-llyrics-0.1
    $ echo FORCE-A-DIFF >>歌词/自述文件 
    $ 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-plugin-llyrics-0.1 / llyrics / README
    输入所需的补丁程序名称:PPABinaryTest
    dpkg-源:信息:本地更改已记录在新补丁中: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的大小差异...


2

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

首先,您需要使用新的源包中包含的二进制文件重建.orig.tar.gz,并且可能需要在tar和tar中同时增加软件版本(package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gz或类似版本)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

也许将此答案编辑为“如果不增加版本就会爆炸”,将对您有所帮助?
乔纳斯·格兰杰

您总是可以对乔纳斯的答案提出修改建议,并评论为什么您认为该修改很有用,而我和其他人可能会对此加以考虑并加以考虑。
托马斯·沃德

可悲的是,我不熟悉Debian的包装系统,所以究竟为什么它炸毁了我。我自己进行的编辑会令人痛苦地不足。
乔纳斯·格兰杰
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.