คำสั่งหลักในการจัดการกับแพคเกจ deb dpkg-deb
เป็น
หากต้องการคลายแพ็กเกจให้สร้างไดเร็กทอรีว่างและสลับไปยังแพ็กเกจจากนั้นรันdpkg-deb
เพื่อแตกข้อมูลการควบคุมและไฟล์แพ็กเกจ ใช้dpkg-deb -b
เพื่อสร้างแพ็คเกจใหม่
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
ระวังว่าหากสคริปต์ของคุณทำงานในฐานะรูทการอนุญาตและความเป็นเจ้าของไฟล์จะเสียหายในขั้นตอนการแตกไฟล์ fakeroot
วิธีหนึ่งที่จะหลีกเลี่ยงปัญหานี้คือการเรียกใช้สคริปต์ของคุณภายใต้ โปรดทราบว่าคุณต้องเรียกใช้ทั้งลำดับภายใต้fakeroot
ไม่ใช่แต่ละdpkg-deb
รายการเนื่องจากเป็นfakeroot
กระบวนการที่เก็บหน่วยความจำของสิทธิ์ของไฟล์ที่ไม่สามารถสร้างได้ตามที่เป็นอยู่
fakeroot sh -c '
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
'
แทนที่จะยุ่งกับสิทธิ์คุณสามารถเก็บข้อมูลถาวรและแก้ไขเฉพาะการควบคุมการเก็บถาวร dpkg-deb
ไม่ได้ให้วิธีการทำเช่นนั้น โชคดีที่แพ็คเด็มอยู่ในรูปแบบมาตรฐาน: เป็นar
ไฟล์เก็บถาวร ดังนั้นคุณสามารถใช้ar
เพื่อแยกไฟล์เก็บถาวรของตัวควบคุมแก้ไขไฟล์และใช้ar
อีกครั้งเพื่อแทนที่ไฟล์เก็บถาวรของตัวควบคุมด้วยเวอร์ชันใหม่
mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz
คุณควรเพิ่มรายการการเปลี่ยนแปลงและเปลี่ยนหมายเลขรุ่นหากคุณแก้ไขอะไรในแพ็คเกจ โครงสร้างพื้นฐานเพื่อจัดการกับแพคเกจ Debian สันนิษฐานว่าถ้าสองแพ็คเกจมีชื่อและรุ่นเดียวกันมันเป็นแพ็คเกจเดียวกัน เพิ่มคำต่อท้ายไปยังส่วนdebian_revisionที่ท้ายหมายเลขรุ่น สำหรับการจัดเรียงเหตุผลต่อท้ายควรเริ่มต้นด้วย~
เช่นกลายเป็น1.2.3-4.1
1.2.3-4.1~johnjumper1
แทนที่จะใช้เครื่องมือเชลล์คุณสามารถใช้ Emacs dpkg-dev-el
แพคเกจ (ซึ่งก็คือต้นน้ำของตัวเองเช่นนี้เป็นแพคเกจ Debian พื้นเมือง) มีโหมดการแก้ไข.deb
ไฟล์และแก้ไข changelogs Debian Emacs สามารถใช้แบบโต้ตอบหรือสคริปต์
-e
สวิทช์ของFPMfpm -e -s deb -t deb ../old.deb
การเปลี่ยนไฟล์ควบคุม: นี่จะเป็นการเปิดไฟล์ควบคุมในโปรแกรมแก้ไขของคุณ