การแตกรุ่นเดเบียนแบบเดียวกันต่าง ๆ


11

มีวิธีใดที่จะได้รับแหล่งที่แตกต่างระหว่างแพ็คเกจที่ติดตั้งในเครื่องกับแพ็คเกจที่อัปเดตหรือไม่ สิ่งนี้จะเป็นประโยชน์ในการตรวจสอบว่าชิ้นส่วนใดได้รับการแก้ไขเปลี่ยนแปลงหรือเพิ่มเติมอย่างแน่นอน

ตัวอย่างเช่นสมมติว่าคุณมีแพ็คเกจ linux-libc-dev ติดตั้งอยู่ในระบบของคุณและ

sudo apt-get update && sudo apt-get upgrade

แสดงให้เห็นว่า

The following packages will be upgraded:
  linux-libc-dev 

แต่คุณต้องการตรวจสอบก่อนที่จะทำการอัพเกรดการเปลี่ยนแปลงที่เกิดขึ้นจริงเมื่อเทียบกับแพ็คเกจท้องถิ่นของคุณ

เราจะทำอย่างไร

คำตอบ:


5

นี่คือทางออกอื่นผมแฮ็กด้วยกันwhatchanged

ใช้ชื่อของแพ็คเกจไบนารีที่คุณสนใจเป็นอาร์กิวเมนต์เท่านั้น ในการใช้ SRU ล่าสุดเป็นตัวอย่าง:

./whatchanged python_papyon

นี่คือสิ่งที่มันทำ:

  1. ตรวจสอบว่ามีผู้สมัครที่อัปเดตหรือไม่ ออกหากไม่มี
  2. หากมีตัวเลือกให้สร้างไดเร็กทอรีชั่วคราวและดึงแพ็กเกจซอร์สสำหรับทั้งเวอร์ชันที่ติดตั้งและตัวเลือกลงในไดเร็กทอรีเหล่านั้น
  3. เปรียบเทียบทั้งสองด้วยdebdiffและเอาท์พุทกับ stdout (คุณอาจต้องการเปลี่ยนเส้นทางเพื่อให้อ่านง่ายขึ้น)
  4. ทำความสะอาดไดเร็กทอรีชั่วคราว

อาจต้องจัดการสิ่งต่าง ๆ ที่อาจผิดพลาดระหว่างการดึงข้อมูลแหล่งที่มาดีกว่าการควบคุมการไหลอาจเป็นบิตและต้องมีวิธีที่สวยงามกว่าสำหรับการตรวจสอบเวอร์ชัน สำหรับตอนนี้ให้พิจารณาว่าเป็นแฮ็คด่วนที่ใช้งานได้และการปรับปรุงยินดีต้อนรับมากที่สุด ฉันจะผลักดันมันไปยังที่เก็บ bzr และ / หรือสร้างโครงการ Launchpad หากเป็นประโยชน์กับคนไม่กี่คน

แก้ไข : แทนที่จะปล่อยให้เน่าเปื่อยลงบน pastebin ฉันได้เริ่มโครงการ Launchpadแล้ว bzr branch lp:whatchangedคุณจะได้รับการแก้ไขลำใหม่ล่าสุดกับ อย่าลังเลที่จะรายงานข้อบกพร่องสาขามันเขียนมันใน Perl ฯลฯ


ดีแค่ไหน! การพัฒนาเครื่องมือเป็นคำตอบ;) เช่นคุณเข้ารหัสรูปแบบ แต่อย่างถูกต้องจะได้รหัสใน Perl ..
LassePoulsen

ขอบคุณ; หวังว่ามันจะใช้งานได้ วิธีการบรรจุภัณฑ์และการเผยแพร่ในบางครั้งการทำให้โค้ดแบบเปิดดูเหมือนว่าทึบแสงเป็นสิ่งที่อยู่ในใจของฉันและฉันไม่ได้พบเครื่องมือง่ายๆที่จะเอาชนะสิ่งนั้นด้วยดังนั้นบางคนที่แสดงความต้องการสิ่งเดียวกันนั้นเป็นแรงจูงใจที่ดี ทำแบบดั้งเดิมด้วยตัวเอง
mgunes

7

Afaik วิธีเดียวที่จะทำเช่นนี้คือการได้รับแหล่งที่มาและทำให้ความแตกต่างของตัวคุณเอง คุณสามารถรับแหล่งที่มาจริงที่ใช้ในการรวบรวมแพคเกจด้วย apt-get FX:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

นี่จะพิมพ์ความแตกต่างทั้งหมดระหว่างไฟล์ทั้งหมดในรูปแบบแพตช์มาตรฐาน


1
อันนี้ค่อนข้างดี สิ่งเดียวที่ฉันเปลี่ยนแปลงในตัวอย่างคือใช้“ debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc” มากกว่า diff ดิบ
RAOF

1
มันเหมือนกันในทางปฏิบัติ แต่คุณสามารถใช้ diff กับทุกแพ็คเกจ / tarball ได้ บางทีบางคนต้องการเห็นความแตกต่างระหว่าง svn-trunk และ pkg ปัจจุบัน
LassePoulsen

คำตอบที่สองของฉัน (whatchanged) โดยอัตโนมัตินี้เป็นหลัก
mgunes

2

นี่เป็นวิธีหนึ่งของUDD (อาจไม่เหมาะสม) :

ดึงสาขาอัปเดตสำหรับการเปิดตัวของคุณ (สมมติว่าสุวิมล) ที่ (การสันนิษฐานต่อไปนี้) ควรมี SRU ล่าสุด:

bzr branch lp:ubuntu/lucid-updates/package_name

รับการเปลี่ยนแปลงที่ได้รับการแนะนำโดยการแก้ไขล่าสุดซึ่ง (ตามสมมติฐาน) ควรสอดคล้องกับ SRU ล่าสุด:

bzr diff -c`bzr revno`

2
อืมมม เป็นสิ่งที่น่าสนใจแม้ว่ามันอาจจะครอบคลุมน้อยกว่า Source Lab ในแง่ที่ว่าชื่อแพ็กเกจอาจไม่ตรงกันหรือมีอยู่ในแผนผังต้นไม้ bzr
Gödel

ตราบใดที่คุณรู้ชื่อแพ็คเกจต้นทางมันจะตรงกัน apt-cache show package_name | grep Source:คุณสามารถค้นหาแหล่งที่มาซึ่งแพคเกจแพคเกจไบนารีที่ผลิตโดยมี
mgunes

@Murat ดี<package_name>ดังนั้นจึงไม่สามารถใช้งานได้กับบางแพ็คเกจ: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ข้อผิดพลาด: URL ไม่ถูกต้องที่ส่งไปยังการขนส่ง: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : ไม่มีแผนการรองรับ
Gödel

นั่นเป็นเพราะไม่มี Ubuntu สาขาสำหรับเคอร์เนลเลยฉันกลัว อาจเป็นข้อยกเว้นเฉพาะเนื่องจากความจริงที่ว่าเคอร์เนลถูกดูแลรักษาใน git (kernel.ubuntu.com) แต่ฉันไม่แน่ใจเกี่ยวกับขอบเขตที่แน่นอนของแพคเกจ bzr สาขาในเวลานี้ คุณอาจต้องการถาม # ubuntu-devel
mgunes

@ ร่างฉันรู้ นั่นเป็นเหตุผลที่วิธีการนั้นครอบคลุมน้อยกว่าของ Source Lab แต่อีกครั้งมันเป็นสิ่งที่น่าสนใจ
Gödel

0

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


-1

อาจไม่ใช่การเปลี่ยนแปลง "ที่แน่นอน" แต่apt-listchangesแสดงรายการการเปลี่ยนแปลงสำหรับการเปลี่ยนแปลงที่เกิดขึ้นตั้งแต่เวอร์ชันที่ติดตั้ง

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

sudo apt-get install apt-listchanges

จากนั้นตั้งค่าด้วย

sudo dpkg-reconfigure apt-listchanges

อีกครั้งคำถามไม่ได้เกี่ยวกับการแสดงการเปลี่ยนแปลง ChangeLog
Gödel

D'oh พลาดบรรทัดแรกที่คุณพูดว่า "source diffs"
Ken Simon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.