web-dev-qa-db-fra.com

Comment ajouter un fichier binaire à mon paquet PPA existant

Ajouter des fichiers texte modifiés ou nouveaux à mon paquet 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 paquet 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 paquet existant.

Donc, à étape 2 - vient de copier dans le [foo-package]

À étape 4 - Je reçois 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 puis-je ajouter un fichier d'icône binaire à mon paquet PPA existant?


Plus d'information

En exécutant:

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

Cela permet ensuite de construire le paquet source et étape 6 est possible.

Cependant, ce n’est pas vraiment la solution - parce que par la suite, je ne peux plus faire d’autres modifications de code (étape 2) car je reçois toujours les mêmes erreurs.

Il ne semble pas que je puisse faire dpkg-source --commit --source-option=--include-binaries parce que cela ne donne que 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
10
fossfreedom

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 fossfreedomedom

8
RobotHumans

Obtenez juste dpkg-source --commit pour ignorer les fichiers binaires avec le commutateur extend-diff-ignore

Voici une autre façon plus simple de le faire: vous dites fondamentalement à dpkg-source d’ignorer ce qu’il ne peut pas comprendre (c’est-à-dire les fichiers binaires), sa propre entreprise;)

Après avoir ajouté un ou plusieurs fichiers binaires pour la première fois, la clé consiste à utiliser dpkg-source --commit avec le commutateur --extend-diff-ignore, ainsi que les chemins/noms de fichiers à ignorer (format Perl regex).

Par exemple, supposons que vous colliez une série de fichiers PNG dans le répertoire llyrics, puis 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.


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

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

  2. Modifier un fichier texte et ajouter un fichier 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 'sauvé [243304/243304] 
    
  3. Ajouter au changelog et incrémenter la version avec dch -v 0.1-3ubuntu6~izx1

  4. Le texte de validation change en ignorant le fichier PNG avec:

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

     $ debuild -S --source-option = - include-binaries 
     ... 
     dpkg-source: info: construction de rhythmbox-plugin-llyrics à l'aide de l'existant ./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 d'environ 200k ... )

5
ish

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

Tout d’abord, vous devrez reconstruire le fichier .orig.tar.gz avec les fichiers binaires inclus dans le nouveau paquet source et probablement devoir incrémenter la version du logiciel (package_1.0.0.orig.tar.gz -> package_1.0.1.orig.tar.gz ou quelque chose d’autre). dans le goudron et dans le debian/changelog.

Après avoir modifié le fichier orig.tar.gz avec les nouveaux fichiers (n'incluez pas debian/fichiers dans le fichier orig.tar.gz), vous devez ajouter une entrée debian/changelog, en modifiant la version pour l'incrémenter comme vous l'avez fait auparavant. l'orig.tar.gz.

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


Du 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
2
Thomas Ward