ฉันจะเพิ่มไฟล์ไบนารีลงในแพ็คเกจ PPA ที่มีอยู่ของฉันได้อย่างไร


10

การเพิ่มหรือแก้ไขไฟล์ข้อความใหม่ในแพ็คเกจ PPA ของฉันนั้นง่ายพอ:

ขั้นตอนที่ 1:

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

ขั้นตอนที่ 2: เพิ่มหรือแก้ไขไฟล์ข้อความใหม่ที่มีการเปลี่ยนแปลง

ขั้นตอนที่ 3 - อัปเดตรายการเปลี่ยนแปลง:

dch -i

ขั้นตอนที่ 4 - สร้างแพทช์

dpkg-source --commit

ขั้นตอนที่ 5 - สร้างแพ็คเกจแหล่งที่มา

debuild -S 

ขั้นตอนที่ 6 - อัปโหลดไปยัง launchpad

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

อย่างไรก็ตามตอนนี้ฉันต้องเพิ่มไฟล์ไอคอนใหม่ (ไฟล์. png) ลงในแพ็คเกจที่มีอยู่

ดังนั้นในขั้นตอนที่ 2 - คัดลอกลงใน [foo-package]

ในขั้นตอนที่ 4 - ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

หากฉันพยายามย้ายไปยังขั้นตอนที่ 5 ฉันได้รับข้อผิดพลาดเพิ่มเติมดังต่อไปนี้:

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

แนวคิดใดที่ฉันจะเพิ่มไฟล์ไอคอนไบนารีลงในแพ็คเกจ PPA ที่มีอยู่ของฉันได้อย่างไร


ข้อมูลมากกว่านี้

โดยวิ่ง:

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

สิ่งนี้อนุญาตให้สร้างซอร์สแพ็กเกจและขั้นตอนที่ 6เป็นไปได้

อย่างไรก็ตามนี่ไม่ใช่คำตอบจริงๆ - เพราะในภายหลังฉันไม่สามารถทำการเปลี่ยนแปลงรหัสเพิ่มเติมได้ ( ขั้นตอนที่ 2 ) เพราะฉันยังคงได้รับข้อผิดพลาดเดียวกัน

ดูเหมือนว่าฉันจะทำไม่ได้dpkg-source --commit --source-option=--include-binariesเพราะนี่เป็นเพียงข้อผิดพลาด:

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

คำตอบ:


8

ฉันทำอะไรลงไป:

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

ยืนยันว่าถูกต้องผลักดันและสร้างบน Launchpad fossfreedom


1
Skeksi, พี่ชาย! <fistbump> ถึงเวลาตั้งค่า uuencoders เหล่านั้นแล้วหรือยัง ;)
ish

5

เพิ่งได้รับdpkg-source - คำสั่งเพื่อละเว้นไฟล์ไบนารีด้วยextend-diff-ignoreสวิตช์

นี่เป็นอีกวิธีที่ง่ายกว่าในการทำ: โดยทั่วไปคุณบอกให้dpkg-sourceละเว้นสิ่งที่ไม่สามารถเข้าใจได้ (เช่นไฟล์ไบนารี) และคำนึงถึงธุรกิจของตัวเอง;)

หลังจากเพิ่มไฟล์ไบนารีในครั้งแรกกุญแจจะใช้dpkg-source --commitกับ--extend-diff-ignoreสวิตช์พร้อมกับพา ธ / ชื่อไฟล์ที่เหมาะสมเพื่อละเว้น (รูปแบบ Perl regex)

ตัวอย่างเช่นสมมติว่าคุณติด PNG หลายกลุ่มในllyricsไดเรกทอรีแล้วคุณจะแก้ไขไฟล์ข้อความบางไฟล์ การเรียกที่ถูกต้องคือ:

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

ติดตามด้วย:

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

เพื่อรับการอัปโหลด PPA ของคุณ


ลองทดสอบด้วยrhythmbox-plugin-llyricsแพ็คเกจจาก "playground" PPA ของ fossfreedom:

  1. รับแหล่งที่มา: apt-get source rhythmbox-plugin-llyrics

  2. แก้ไขไฟล์ข้อความและเพิ่ม 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 'บันทึก [243304/243304]
    
  3. เพิ่มลงในการเปลี่ยนแปลงและรุ่นที่เพิ่มขึ้นด้วย dch -v 0.1-3ubuntu6~izx1

  4. คอมมิทเปลี่ยนแปลงข้อความโดยไม่สนใจ PNG ด้วย:

    $ dpkg-source - คำสั่ง --extend-diff-ละเว้น = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: ข้อมูล: ตรวจพบการเปลี่ยนแปลงในท้องถิ่น, ไฟล์ที่แก้ไขคือ:
    Rhythmbox-ปลั๊กอิน llyrics-0.1 / llyrics / README
    ป้อนชื่อโปรแกรมแก้ไขที่ต้องการ: PPABinaryTest
    dpkg-source: ข้อมูล: การเปลี่ยนแปลงในท้องถิ่นได้รับการบันทึกในแพทช์ใหม่: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. สร้างที่มา / การเปลี่ยนแปลง:

    $ debuild -S --source-option = - include-binaries
    ...
    dpkg-source: ข้อมูล: การสร้าง rhythmbox-plugin-llyrics โดยใช้. / rhythmbox-plugin-llyrics_0.1.orig.tar.gz ที่มีอยู่
    dpkg-source: ข้อมูล: การเพิ่ม llyrics / dancemonkeyboy.png ให้กับ debian / source / include-binaries
    ...
    

และ ... voila! ( deb-launchpad deb - จดบันทึกความแตกต่างของขนาด ~ 200k ... )


2

นี่ยากกว่าการเพิ่มไฟล์นิดหน่อย

ครั้งแรกที่คุณจะต้องสร้าง .orig.tar.gz กับไบนารีรวมในแพคเกจที่มาใหม่และมีแนวโน้มที่จะต้องมีการเพิ่มรุ่นซอฟแวร์ ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzหรือบางอย่าง) debian/changelogทั้งในน้ำมันดินและใน

หลังจากแก้ไข orig.tar.gz ด้วยไฟล์ใหม่ (ไม่รวมเดเบียน / ไฟล์ใน orig.tar.gz) จากนั้นคุณจะต้องเพิ่มdebian/changelogรายการเปลี่ยนเวอร์ชันเพื่อเพิ่มตามที่คุณทำกับ orig.tar GZ

จากนั้นสร้างแพ็คเกจซอร์ส ( debuild -S) อีกครั้งและอัปโหลดแพ็กเกจซอร์สใหม่ไปยัง PPA แพ็คเกจแหล่งข้อมูลใหม่นั้นจะเขียนทับแพคเกจ "รุ่นเก่า" ใน PPA


จากการแชท:

@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

บางทีคำตอบนี้อาจได้รับประโยชน์จากการแก้ไขเพียงแค่ "ถ้าคุณไม่เพิ่มรุ่นมันจะระเบิด"?
Jonas G. Drange

คุณสามารถเสนอการแก้ไขคำตอบของโจนัสและแสดงความคิดเห็นว่าทำไมคุณคิดว่าการแก้ไขนั้นมีประโยชน์และฉันและคนอื่น ๆ อาจพิจารณาและพิจารณา
Thomas Ward

น่าเศร้าที่ฉันไม่คุ้นเคยกับระบบบรรจุภัณฑ์ของเดเบียนดังนั้นทำไมมันถึงระเบิดเกินกว่าฉัน การแก้ไขด้วยตนเองจะไม่เพียงพออย่างเจ็บปวด
Jonas G. Drange
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.