Come faccio ad aggiungere un file binario al mio pacchetto PPA esistente


10

Aggiungere file di testo modificati o nuovi al mio pacchetto PPA è abbastanza semplice:

Passo 1:

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

Passaggio 2: aggiungere o modificare nuovi file di testo contenenti le modifiche

Passaggio 3: aggiorna il log delle modifiche:

dch -i

Passaggio 4: creare una patch

dpkg-source --commit

Passaggio 5: creare un pacchetto sorgente

debuild -S 

Passaggio 6: carica sul launchpad

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

Tuttavia, ora devo aggiungere un nuovo file icona (un file .png) al pacchetto esistente.

Quindi al passaggio 2 - appena copiato nel [pacchetto foo]

Al passaggio 4 - Ottengo i seguenti errori:

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

Se provo a passare al punto 5, ottengo i seguenti errori aggiuntivi a quanto sopra:

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

Qualche idea su come aggiungere un file icona binario al mio pacchetto PPA esistente?


Maggiori informazioni

Eseguendo:

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

Ciò consente quindi di creare il pacchetto sorgente ed è possibile il passaggio 6 .

Tuttavia questa non è davvero la risposta, perché successivamente non posso quindi apportare ulteriori modifiche al codice ( passaggio 2 ) perché sto ancora ottenendo gli stessi errori.

Non sembra che io possa fare dpkg-source --commit --source-option=--include-binariesperché questo dà solo errori:

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

Risposte:


8

Cosa ho fatto:

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

Confermato che spinge e si basa correttamente sulla libertà fossile di Launchpad


1
Skeksi, fratello! <fistbump> È ora di mettere in chiaro quegli uuencoder? ;)
ish

5

Ottieni semplicemente dpkg-source --commit per ignorare i file binari con lo extend-diff-ignoreswitch

Ecco un altro modo più semplice per farlo: in pratica dici a dpkg-source di ignorare ciò che non può comprendere (ad esempio, i file binari) e pensare ai fatti suoi;)

Dopo aver aggiunto un file binario per la prima volta, la chiave è utilizzare dpkg-source --commitcon l' --extend-diff-ignoreopzione, insieme ai percorsi / nomi file appropriati da ignorare (formato regex Perl).

Ad esempio, supponiamo di inserire un gruppo di PNG nella llyricsdirectory e quindi di modificare alcuni file di testo. La chiamata di commit corretta è:

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

Seguilo con:

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

per ottenere il tuo caricamento PPA.


Proviamo questo con il rhythmbox-plugin-llyricspacchetto del PPA "playground" di fossfreedom:

  1. Ottieni fonte: apt-get source rhythmbox-plugin-llyrics

  2. Modifica un file di testo e aggiungi 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 'salvato [243304/243304]
    
  3. Aggiungi al log delle modifiche e alla versione incrementale con dch -v 0.1-3ubuntu6~izx1

  4. Apporta modifiche al testo ignorando il PNG con:

    $ dpkg-source --commit --extend-diff-ignore = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: info: rilevate modifiche locali, i file modificati sono:
    rhythmbox-plugin-llyrics-0.1 / llyrics / README
    Immettere il nome della patch desiderato: PPABinaryTest
    dpkg-source: informazioni: le modifiche locali sono state registrate in una nuova patch: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Crea sorgente / modifiche:

    $ debuild -S --source-option = - include-binaries
    ...
    dpkg-source: info: creazione di rhythmbox-plugin-llyrics usando gli esistenti ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: aggiunta di llyrics / dancemonkeyboy.png a debian / source / include-binaries
    ...
    

E ... voilà! ( Deb integrato nel Launchpad: nota la differenza di dimensioni di ~ 200k ... )


2

Questo è un po 'più difficile della semplice aggiunta di un file.

Innanzitutto, è necessario ricostruire il file .orig.tar.gz con i binari inclusi nel nuovo pacchetto sorgente e probabilmente è necessario incrementare la versione del software ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzo qualcosa del genere) sia nel tar, sia nel file debian/changelog.

Dopo aver modificato orig.tar.gz con i nuovi file (NON includere debian / file in orig.tar.gz), aggiungerebbe una debian/changelogvoce, modificando la versione per incrementarla come si faceva in orig.tar. gz.

Quindi ricostruire il pacchetto sorgente ( debuild -S) e caricare il nuovo pacchetto sorgente su PPA. Quel nuovo pacchetto sorgente sovrascriverà quello "più vecchio" nel PPA.


Dalla 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

Forse questa risposta trarrebbe beneficio dall'essere modificata solo "se non incrementi la versione esploderà"?
Jonas G. Drange,

Puoi sempre proporre una modifica alla risposta Jonas e commentare perché pensi che la modifica sia utile e io e altri potremmo guardarla e considerarla.
Thomas Ward

Purtroppo non ho familiarità con il sistema di packaging Debian, quindi esattamente perché esplode è oltre me. Una modifica fatta da me sarebbe penosamente inadeguata.
Jonas G. Drange,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.