Bagaimana cara menambahkan file biner ke paket PPA saya yang ada

10

Menambahkan file teks yang dimodifikasi atau baru ke paket PPA saya cukup sederhana:

Langkah 1:

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

Langkah 2: menambah atau memodifikasi file teks baru yang berisi perubahan

Langkah 3 - perbarui changelog:

dch -i

Langkah 4 - buat tambalan

dpkg-source --commit

Langkah 5 - buat paket sumber

debuild -S 

Langkah 6 - unggah ke launchpad

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

Namun, sekarang saya perlu menambahkan file ikon baru (file .png) ke paket yang ada.

Jadi pada langkah 2 - cukup salin ke [paket foo]

Pada langkah 4 - Saya mendapatkan kesalahan berikut:

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

Jika saya mencoba untuk pindah ke langkah 5 saya mendapatkan kesalahan tambahan berikut untuk yang di atas:

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

Adakah ide bagaimana cara menambahkan file ikon biner ke paket PPA saya yang ada?


Informasi lebih lanjut

Dengan menjalankan:

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

Ini kemudian memungkinkan paket source untuk dibangun dan langkah 6 dimungkinkan.

Namun ini benar-benar bukan jawaban - karena saya kemudian tidak bisa membuat perubahan kode lebih lanjut ( langkah 2 ) karena saya masih mendapatkan kesalahan yang sama.

Sepertinya tidak bisa saya lakukan dpkg-source --commit --source-option=--include-binarieskarena ini hanya memberikan kesalahan:

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
kebebasan fosil
sumber

Jawaban:

8

Apa yang saya lakukan:

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

Mengonfirmasi bahwa ia mendorong dan membangun dengan benar pada Launchpad fossfreedom

RobotHumans
sumber
1
Skeksi, kawan! <fistbump> Saatnya untuk meluruskan pengguna uuencoder? ;)
ish
5

Dapatkan saja dpkg-source --commit untuk mengabaikan file biner dengan extend-diff-ignoresakelar

Berikut cara lain yang lebih mudah untuk melakukannya: Anda pada dasarnya memberi tahu dpkg-source untuk mengabaikan apa yang tidak dapat dipahami (yaitu, file biner), dan memikirkan urusannya sendiri;)

Setelah menambahkan file biner (s) pertama kali, kuncinya adalah menggunakan dpkg-source --commitdengan --extend-diff-ignoreswitch, bersama dengan jalur / nama file yang sesuai untuk diabaikan (format Perl regex).

Misalnya, anggap Anda menempelkan sekelompok PNG di llyricsdirektori, dan kemudian Anda memodifikasi beberapa file teks. Panggilan komit yang benar adalah:

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

Ikuti itu dengan:

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

untuk mendapatkan unggahan PPA Anda.


Mari kita uji ini dengan rhythmbox-plugin-llyricspaket dari PPA "taman bermain" fossfreedom:

  1. Dapatkan sumber: apt-get source rhythmbox-plugin-llyrics

  2. Ubah file teks dan tambahkan 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 'disimpan [243304/243304]
    
  3. Tambahkan ke changelog dan versi kenaikan dengan dch -v 0.1-3ubuntu6~izx1

  4. Komit teks berubah saat mengabaikan PNG dengan:

    $ dpkg-source --commit --extend-diff-diabaikan = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: info: perubahan lokal terdeteksi, file yang dimodifikasi adalah:
    rhythmbox-plugin-llyrics-0.1 / llyrics / README
    Masukkan nama tambalan yang diinginkan: PPABinaryTest
    dpkg-source: info: perubahan lokal telah direkam dalam tambalan baru: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Bangun sumber / perubahan:

    $ debuild -S --source-option = - termasuk-binari
    ...
    dpkg-source: info: membangun rhythmbox-plugin-llyrics menggunakan ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: menambahkan llyrics / dancemonkeyboy.png ke debian / source / include-binaries
    ...
    

Dan ... voila! ( Debit buatan Launchpad - perhatikan perbedaan ukuran ~ 200k ... )

ish
sumber
2

Ini sedikit lebih sulit daripada hanya menambahkan file.

Pertama, Anda perlu membangun kembali .orig.tar.gz dengan binari yang disertakan dalam paket sumber baru, dan kemungkinan akan perlu untuk meningkatkan versi perangkat lunak ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzatau sesuatu) baik di tar, dan di debian/changelog.

Setelah memodifikasi orig.tar.gz dengan file baru (JANGAN menyertakan debian / file di orig.tar.gz), Anda kemudian akan menambahkan debian/changelogentri, mengubah versi untuk menambahnya seperti yang Anda lakukan pada orig.tar. gz.

Kemudian bangun kembali paket sumber ( debuild -S), dan unggah paket sumber baru ke PPA. Paket sumber baru itu akan menimpa yang "lama" di PPA.


Dari Obrolan:

@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
sumber
Mungkin jawaban ini akan mendapat manfaat dengan diedit menjadi hanya "jika Anda tidak menambah versi itu akan meledak"?
Jonas G. Drange
Anda selalu dapat mengajukan suntingan ke jawaban Jonas, dan berkomentar mengapa menurut Anda suntingan itu berguna dan saya dan orang lain mungkin melihatnya dan mempertimbangkannya.
Thomas Ward
Sayangnya saya tidak terbiasa dengan sistem pengemasan Debian, jadi mengapa itu meledak di luar saya. Hasil edit yang saya buat sendiri akan sangat tidak memadai.
Jonas G. Drange