Wie füge ich meinem vorhandenen PPA-Paket eine Binärdatei hinzu?

10

Das Hinzufügen geänderter oder neuer Textdateien zu meinem PPA-Paket ist einfach genug:

Schritt 1:

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

Schritt 2: Hinzufügen oder Ändern neuer Textdateien mit den Änderungen

Schritt 3 - Aktualisieren Sie das Änderungsprotokoll:

dch -i

Schritt 4 - Erstellen Sie einen Patch

dpkg-source --commit

Schritt 5 - Erstellen Sie ein Quellpaket

debuild -S 

Schritt 6 - Auf Launchpad hochladen

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

Jetzt muss ich jedoch eine neue Symboldatei (eine PNG-Datei) zum vorhandenen Paket hinzufügen.

Also in Schritt 2 - einfach in das [foo-Paket] kopieren

In Schritt 4 erhalte ich folgende Fehler:

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

Wenn ich versuche, mit Schritt 5 fortzufahren, erhalte ich die folgenden zusätzlichen Fehler:

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

Irgendwelche Ideen, wie ich meinem vorhandenen PPA-Paket eine binäre Symboldatei hinzufügen kann?


Mehr Informationen

Durch Ausführen von:

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

Dadurch kann das Quellpaket erstellt werden, und Schritt 6 ist möglich.

Dies ist jedoch nicht wirklich die Antwort - da ich anschließend keine weiteren Codeänderungen vornehmen kann ( Schritt 2 ), da immer noch dieselben Fehler auftreten.

Es sieht nicht so aus, als ob ich es tun könnte, dpkg-source --commit --source-option=--include-binariesweil dies nur Fehler gibt:

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
Fossfreiheit
quelle

Antworten:

8

Was ich getan habe:

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

Bestätigt, dass es die Launchpad- Fossfreiheit frei drückt und darauf aufbaut

RobotHumans
quelle
1
Skeksi, Bruder! <fistbump> Zeit, diese Uuencoder gerade zu stellen? ;)
ish
5

Holen Sie sich einfach dpkg-source --commit , um Binärdateien mit dem extend-diff-ignoreSchalter zu ignorieren

Hier ist eine andere einfachere Möglichkeit: Sie weisen dpkg-source an, zu ignorieren, was es nicht verstehen kann (dh Binärdateien), und sich um seine eigenen Angelegenheiten zu kümmern;)

Nach dem erstmaligen Hinzufügen einer oder mehrerer Binärdateien muss der Schlüssel zusammen mit den entsprechenden zu ignorierenden Pfaden / Dateinamen (Perl-Regex-Format) dpkg-source --commitmit dem --extend-diff-ignoreSwitch verwendet werden.

Angenommen, Sie stecken eine Reihe von PNGs in das llyricsVerzeichnis und ändern dann einige Textdateien. Der richtige Festschreibungsaufruf lautet:

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

Folgen Sie dem mit:

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

um Ihren PPA-Upload zu erhalten.


Testen wir dies mit dem rhythmbox-plugin-llyricsPaket von fossfreedom's "Spielplatz" PPA:

  1. Quelle abrufen: apt-get source rhythmbox-plugin-llyrics

  2. Ändern Sie eine Textdatei und fügen Sie ein PNG hinzu:

    $ 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 'gespeichert [243304/243304]
    
  3. Zum Änderungsprotokoll hinzufügen und Version mit erhöhen dch -v 0.1-3ubuntu6~izx1

  4. Übernehmen Sie Textänderungen, während Sie das PNG ignorieren mit:

    $ dpkg-source --commit --extend-diff-ignore = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: info: lokale Änderungen erkannt, die geänderten Dateien sind:
    Rhythmusbox-Plugin-Llyrics-0.1 / Llyrics / README
    Geben Sie den gewünschten Patchnamen ein: PPABinaryTest
    dpkg-source: info: In einem neuen Patch wurden lokale Änderungen aufgezeichnet: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Quelle erstellen / Änderungen:

    $ debuild -S --source-option = - include-binaries
    ...
    dpkg-source: info: Erstellen von Rhythmbox-Plugin-Llyrics unter Verwendung der vorhandenen ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: Hinzufügen von llyrics / dancemonkeyboy.png zu debian / source / include-binaries
    ...
    

Und ... voila! ( Launchpad-erstelltes Deb - beachten Sie den Größenunterschied von ~ 200k ... )

ish
quelle
2

Dies ist etwas schwieriger als nur das Hinzufügen einer Datei.

Zunächst müssten Sie die .orig.tar.gz mit den im neuen Quellpaket enthaltenen Binärdateien neu erstellen und wahrscheinlich die Softwareversion ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzoder etwas anderes ) sowohl im tar als auch im debian/changelog.

Nachdem Sie die Datei orig.tar.gz mit den neuen Dateien geändert haben (schließen Sie debian / files NICHT in die Datei orig.tar.gz ein), fügen Sie einen debian/changelogEintrag hinzu und ändern die Version, um sie wie in orig.tar zu erhöhen. gz.

Erstellen Sie dann das Quellpaket ( debuild -S) neu und laden Sie das neue Quellpaket auf die PPA hoch. Dieses neue Quellpaket überschreibt das "ältere" in der PPA.


Aus dem Chat:

@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
Thomas Ward
quelle
Vielleicht würde diese Antwort davon profitieren, wenn sie nur auf "Wenn Sie die Version nicht erhöhen, wird sie explodieren" bearbeitet würde?
Jonas G. Drange
Sie können der Antwort Jonas jederzeit eine Bearbeitung vorschlagen und kommentieren, warum Sie die Bearbeitung für nützlich halten und ich und andere sie möglicherweise betrachten und in Betracht ziehen.
Thomas Ward
Leider bin ich mit dem Debian-Verpackungssystem nicht vertraut. Warum genau es explodiert, ist mir ein Rätsel. Eine von mir vorgenommene Bearbeitung wäre schmerzlich unzureichend.
Jonas G. Drange