Comment ajouter un fichier binaire à mon package PPA existant

10

Ajouter des fichiers texte modifiés ou nouveaux à mon package PPA est assez simple:

Étape 1:

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

Étape 2: ajouter ou modifier de nouveaux fichiers texte contenant les modifications

Étape 3 - Mettez à jour le journal des modifications:

dch -i

Étape 4 - créer un patch

dpkg-source --commit

Étape 5 - créer un package source

debuild -S 

Étape 6 - télécharger sur le tableau de bord

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

Cependant, je dois maintenant ajouter un nouveau fichier d'icône (un fichier .png) au package existant.

Donc à l' étape 2 - juste copié dans le [foo-package]

À l' étape 4 - j'obtiens les erreurs suivantes:

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

Si j'essaie de passer à l'étape 5, j'obtiens les erreurs supplémentaires suivantes:

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

Des idées comment ajouter un fichier d'icône binaire à mon package PPA existant?


Plus d'information

En exécutant:

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

Cela permet alors de construire le paquet source et l' étape 6 est possible.

Cependant, ce n'est pas vraiment la réponse - car je ne peux pas ensuite apporter d'autres modifications de code ( étape 2 ) car je reçois toujours les mêmes erreurs.

Cela ne ressemble pas à ce que je peux faire dpkg-source --commit --source-option=--include-binariescar cela donne juste des erreurs:

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
liberté de fossé
la source

Réponses:

8

Ce que j'ai fait:

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

Confirmé qu'il pousse correctement et s'appuie sur Launchpad fossfreedom

RobotHumains
la source
1
Skeksi, mon frère! <fistbump> Il est temps de redresser ces uuencoders? ;)
ish
5

Obtenez simplement dpkg-source --commit pour ignorer les fichiers binaires avec le extend-diff-ignorecommutateur

Voici une autre façon plus simple de le faire: vous dites essentiellement à dpkg-source d'ignorer ce qu'il ne peut pas comprendre (c'est-à-dire les fichiers binaires) et de s'occuper de ses propres affaires;)

Après avoir ajouté un ou plusieurs fichiers binaires la première fois, la clé est d'utiliser dpkg-source --commitavec le --extend-diff-ignorecommutateur, ainsi que les chemins / noms de fichiers à ignorer (format regex Perl).

Par exemple, supposons que vous colliez un groupe de fichiers PNG dans le llyricsrépertoire, puis que vous modifiez certains fichiers texte. L'appel de validation correct est:

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

Suivez cela avec:

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

pour obtenir votre téléchargement PPA.


rhythmbox-plugin-llyricsTestons cela avec le package du PPA "terrain de jeu" de fossfreedom:

  1. Obtenez la source: apt-get source rhythmbox-plugin-llyrics

  2. Modifiez un fichier texte et ajoutez un 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 'enregistré [243304/243304]
    
  3. Ajouter au journal des modifications et incrémenter la version avec dch -v 0.1-3ubuntu6~izx1

  4. Validez les modifications de texte tout en ignorant le PNG avec:

    $ dpkg-source --commit --extend-diff-ignore = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: info: changements locaux détectés, les fichiers modifiés sont:
    rhythmbox-plugin-llyrics-0.1 / llyrics / README
    Entrez le nom du patch souhaité: PPABinaryTest
    dpkg-source: info: les changements locaux ont été enregistrés dans un nouveau patch: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Générer la source / les modifications:

    $ debuild -S --source-option = - inclure les binaires
    ...
    dpkg-source: info: construction de rhythmbox-plugin-llyrics en utilisant ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: ajout de llyrics / dancemonkeyboy.png à debian / source / include-binaries
    ...
    

Et ... voila! ( Deb construit par Launchpad - notez la différence de taille ~ 200k ... )

ish
la source
2

C'est un peu plus difficile que d'ajouter simplement un fichier.

Tout d'abord, vous devrez reconstruire le .orig.tar.gz avec les fichiers binaires inclus dans le nouveau package source, et vous devrez probablement incrémenter la version du logiciel ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzou quelque chose) à la fois dans le tar et dans le debian/changelog.

Après avoir modifié orig.tar.gz avec les nouveaux fichiers (n'incluez PAS debian / files dans orig.tar.gz), vous ajouteriez alors une debian/changelogentrée, en changeant la version pour l'incrémenter comme vous l'avez fait pour orig.tar. gz.

Reconstruisez ensuite le package source ( debuild -S) et téléchargez le nouveau package source dans le PPA. Ce nouveau package source remplacera le "plus ancien" du PPA.


Depuis le 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
la source
Peut-être que cette réponse gagnerait à être éditée à "si vous n'incrémentez pas la version, elle explosera"?
Jonas G. Drange
Vous pouvez toujours proposer une modification à la réponse Jonas, et expliquer pourquoi vous pensez que la modification est utile et moi-même et d'autres pourraient l'examiner et la considérer.
Thomas Ward
Malheureusement, je ne suis pas familier avec le système d'empaquetage Debian, donc exactement pourquoi il explose me dépasse. Un montage réalisé par moi-même serait douloureusement insuffisant.
Jonas G. Drange