มันอันตรายเสมอที่จะไม่เห็นด้วยกับ Emmet ดังนั้นให้ฉันเริ่มต้นด้วยการยอมรับว่าคำตอบของเขาอาจจะถูกต้องมากกว่านี้ อย่างไรก็ตามฉันพบว่าผู้ใช้ pbuilder ใช้งานง่ายและมีประสิทธิภาพมากขึ้น
หากคุณอยู่บน Ubuntu 12.10 หรือใหม่กว่าให้แน่ใจว่าได้ติดตั้งสคริปต์ pbuilder ที่ยอดเยี่ยมซึ่งเป็นชุดของตัวห่อหุ้มที่เป็นมิตรอย่างยิ่งเกี่ยวกับตัวสร้างแบบดิบ
หากคุณอยู่ใน Ubuntu 12.04 คุณอาจติดตั้งสคริปต์ pbuilder จากที่เก็บ backports
ตอนนี้เรามาเปรียบเทียบและเปรียบเทียบความแตกต่างที่เป็นมิตรกับผู้ใช้ของการปฏิบัติการที่เทียบเท่ากัน ในตัวอย่างเหล่านี้ฉันจะอธิบายการใช้ ARM chroot ที่โฮสต์บน x86 แต่แนวคิดยังคงมีผลกับ x86 chroot ที่โฮสต์บน x86 เช่นกัน จำไว้ว่าฉันใช้โปรแกรมเสริมสคริปต์ pbuilder
สิ่งหนึ่งที่ควรทราบคือ pbuilder-สคริปต์ใช้การประชุมเล็กน้อยคล้ายกับวิธี Ruby on Rails ที่ทำให้คุณตัดสินใจบางอย่างเพื่อให้คุณสามารถไปได้อย่างรวดเร็ว ฉันจะลองและชี้สิ่งเหล่านี้เมื่อเราไป
สร้าง chroot
mk-sbuild --arch=armhf quantal
VS
# in addition to the chroot, creates a new, empty directory named ~/Projects/quantal-armhf
pcreate -a armhf -d quantal quantal-armhf
verdict: tieทั้งสองบรรทัดคำสั่งนั้นค่อนข้างง่ายและทั้งคู่สามารถใช้ตัวเลือกเพิ่มเติมสำหรับกรณีที่นักเล่นใช้งานได้ถ้าจำเป็น อย่างไรก็ตามอย่าลืมไดเรกทอรีใหม่เพิ่มเติมที่สร้างโดย pcreate
ดาวน์โหลดแพ็คเกจต้นทาง
# standard debian/ubuntu method, works in any directory
apt-get source casper
เมื่อเทียบกับ
# 'quantal-armhf' is the name of the chroot created earlier
# results in downloading package to: ~/Projects/quantal-armhf/casper/
pget quantal-armhf casper
คำตัดสิน: ขอบเล็กน้อยสำหรับ sbuildเพราะคุณใช้แนวปฏิบัติที่ดีที่สุดเดเบียน / อูบุนตู การประชุมที่ใช้โดย pget อาจดูแปลกในตอนแรก แต่เนื่องจากฉันทำงานกับหลายแพ็คเกจใน Ubuntu หลายรุ่นฉันจึงชอบองค์กรที่กำหนดไว้ โปรดทราบว่าแหล่งที่มา apt-get ยังดึงแหล่งที่มาทุกที่ที่คุณเรียกใช้คำสั่งทำให้คุณมี * .orig.tar.gz, * .debian.tar.gz, * .dsc และไดเรกทอรีขยายซึ่งฉันพบว่าเป็นการส่วนตัว เลอะเทอะ ความสวยงามขององค์กรกำลังจะมาถึงในไม่ช้าฉันสัญญา
ป้อน chroot เวอร์ชันชั่วคราว
schroot -c quantal-armhf
เมื่อเทียบกับ
ptest quantal-armhf
คำตัดสิน: ขอบเล็กน้อยสำหรับ pbuildอักขระที่จะพิมพ์น้อยลงคืออักขระที่น้อยลง โปรดทราบว่าในรุ่นนี้ของการป้อน chroot การเปลี่ยนแปลงใด ๆ ที่คุณทำที่นี่จะหายไปเมื่อคุณออกจาก chroot นอกจากนี้โปรดทราบว่าใน schroot คุณจะยังคงเป็นผู้ใช้ปกติในขณะที่ด้วย ptest คุณจะอยู่ใน chroot ในฐานะผู้ใช้รูท
ป้อน chroot บันทึกการเปลี่ยนแปลงเวอร์ชัน
sudo schroot -c quantal-armhf-source -u root
เมื่อเทียบกับ
ptest quantal-armhf --save
คำตัดสิน: ขอบเล็กน้อยสำหรับ pbuildตัวละครน้อยลงและอาร์กิวเมนต์บรรทัดคำสั่งที่ใช้งานง่ายมากขึ้นในความคิดของฉัน ในรุ่นนี้ของการป้อน chroot การเปลี่ยนแปลงใด ๆ ที่คุณทำในนั้นจะถูกบันทึกไว้สำหรับการเรียกใช้ในอนาคต
สร้างแพ็คเกจภายใน chroot
debuild -S -sa -I -i
sbuild -A --arch armhf -d quantal-armhf /path/to/casper-1.315.dsc
เมื่อเทียบกับ
# must be invoked when pwd is ~/Projects/quantal-armhf/casper/casper-1.315
pbuild
คำตัดสิน: pbuildตอนนี้เราเห็นชัยชนะครั้งแรกที่สำคัญเมื่อใช้ระเบียบของ pbuild นี่เป็นคำสั่งแบบง่ายที่ไม่มีอะไรให้จดจำเมื่อเทียบกับการระบุสถาปัตยกรรมชื่อของ chroot และต้องการพา ธ ไปยังไฟล์ * .dsc ที่ sbuild ต้องการ นอกจากนี้คุณต้องอย่าลืมสร้างไฟล์ * .dsc ใหม่ด้วย sbuild ในขณะที่ pbuild จะทำโดยอัตโนมัติสำหรับคุณ
สร้างแพ็คเกจเดียวกันใน chroot ครั้งที่สอง
ในตัวอย่างด้านบนทั้ง sbuild และ pbuild จะดาวน์โหลดและติดตั้ง build-deps ใน chroots ที่เกี่ยวข้อง อย่างไรก็ตาม pbuild จะบันทึกไฟล์. deb ที่ดาวน์โหลดไว้ใน / var ดังนั้นหากคุณเรียกใช้ pbuild เป็นครั้งที่สองคุณไม่จำเป็นต้องดาวน์โหลดบิลด์ทั้งหมดอีกครั้ง (แม้ว่าไฟล์เหล่านั้นจะต้องติดตั้งใน chroot ก็ตาม) sbuild ไม่ได้แคชไฟล์. deb (อย่างน้อยก็ไม่ใช่ตามค่าเริ่มต้น) ดังนั้นคุณต้องดาวน์โหลดบิลด์ทั้งหมดอีกครั้งนอกเหนือจากการรอให้ติดตั้งใน chroot
คำตัดสิน: สร้างโดยยิงนาน การแคช build-deps เป็นการตั้งค่าเริ่มต้นที่ยอดเยี่ยมและ pbuild นั้นฉลาดพอที่จะตรวจสอบว่ามี build-dep เวอร์ชันใหม่กว่าในไฟล์เก็บถาวรและจะดึงเวอร์ชันใหม่ลงหากจำเป็น สำหรับแพ็คเกจที่ซับซ้อนที่มีบิลด์จำนวนมากการตั้งค่าแบบง่าย ๆ นี้จะช่วยให้คุณประหยัดเวลาไม่กี่นาที
สรุป
ออกจากกล่องฉันพบ pbuilder-สคริปต์ที่จะเป็นมิตรและเร็วกว่า sbuild ที่เทียบเท่า แน่นอนมีวิธีที่จะทำให้ pbuilder เร็วขึ้น (สร้างใน tmpfs ปิดการใช้งานบางส่วนของ chroot hooks) และอาจมีเทคนิคเหมือนกันสำหรับการสร้างด้วย แต่ฉันก็ไม่รู้
หวังว่านี่จะช่วยได้
sbuild
จะใช้ในการสร้างแพคเกจของ Ubuntu แม้ว่า Launchpad (จากสิ่งที่ฉันเข้าใจ) ทำงานpbuilder
...