ดาวน์โหลด source package แบบ debian
วันนี้ขอพูดถึงเรื่องเล็ก ๆ ที่หลายคนมองไม่เห็น เกี่ยวกับการดาวน์โหลดและแตกซอร์สของ debian package ที่อยู่นอก apt repository ซึ่งไม่สามารถใช้คำสั่ง apt-get source <package>
ได้
ซอร์สสำหรับ debian package นั้น โดยปกติจะแยก upstream tarball กับ debian patch ออกจากกัน เป็นแฟ้ม *.orig.tar.gz และ *.diff.gz ตามลำดับ และใช้แฟ้ม *.dsc ในการสรุปรายการแฟ้มทั้งหมดที่ต้องใช้ พร้อม MD5 sum ของแต่ละแฟ้มด้วย
ดังนั้น เวลาที่เตรียมซอร์สในแหล่งดาวน์โหลด จึงมักต้องมีอย่างน้อย 2-3 แฟ้มสำหรับแต่ละแพกเกจ ที่ต้องมีแน่ ๆ คือ *.dsc และ upstream tarball และอีกแฟ้มหนึ่งที่ต้องมีสำหรับแพกเกจทั่วไปที่ไม่ใช่ debian native คือ *.diff.gz ซึ่งเก็บส่วนต่างจาก upstream
แต่เวลาดาวน์โหลด ก็ไม่ใช่ว่าต้องแยกสั่งดาวน์โหลดทีละแฟ้มด้วย wget ในเมื่อ debian มีเครื่องมือสำหรับดาวน์โหลด source package มาให้อยู่แล้ว คือ dget
อยู่ในแพกเกจ devscripts
เวลาจะดาวน์โหลด ก็แค่สั่ง dget
ตามด้วย URL ของแฟ้ม *.dsc เช่น
$ dget http://linux.thai.net/debian/pool/main/libt/libthai/libthai_0.1.9-3.dsc dget: retrieving http://linux.thai.net/debian/pool/main/libt/libthai/libthai_0.1.9-3.dsc % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 949 100 949 0 0 2989 0 --:--:-- --:--:-- --:--:-- 0 dget: retrieving http://linux.thai.net/debian/pool/main/libt/libthai/libthai_0.1.9.orig.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 479k 100 479k 0 0 91784 0 0:00:05 0:00:05 --:--:-- 103k dget: retrieving http://linux.thai.net/debian/pool/main/libt/libthai/libthai_0.1.9-3.diff.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6806 100 6806 0 0 18999 0 --:--:-- --:--:-- --:--:-- 75973 libthai_0.1.9-3.dsc: Good signature found validating libthai_0.1.9.orig.tar.gz validating libthai_0.1.9-3.diff.gz All files validated successfully. $ ls -F libthai_0.1.9-3.diff.gz libthai_0.1.9-3.dsc libthai_0.1.9.orig.tar.gz
สำหรับ devscripts ตั้งแต่รุ่น 2.10.17 ขึ้นไป dget
จะแตก source package พร้อม apply debian patch ให้ด้วยโดยปริยาย แต่สำหรับรุ่นที่เก่ากว่านั้น ต้องใช้ตัวเลือก -x ถ้าจะให้แตกด้วย หรือมิฉะนั้น ก็ใช้คำสั่ง dpkg-source
ตัวเลือก -x
ในการแตก โดยระบุแฟ้ม *.dsc ของแพกเกจที่ต้องการเช่น
$ dpkg-source -x libthai_0.1.9-3.dsc dpkg-source: extracting libthai in libthai-0.1.9 dpkg-source: unpacking libthai_0.1.9.orig.tar.gz dpkg-source: applying ./libthai_0.1.9-3.diff.gz $ ls -F libthai-0.1.9/ libthai_0.1.9-3.dsc libthai_0.1.9-3.diff.gz libthai_0.1.9.orig.tar.gz
การแตกซอร์สด้วย dpkg-source
นี้ แตกต่างจากการแตก tarball แล้ว patch ด้วยแฟ้ม *.diff.gz ตรง ๆ ในบางกรณี เช่น ในกรณีที่ upstream tarball ใช้ชื่อไดเรกทอรีที่รูปแบบผิดปกติ เช่น ไม่ได้ระบุเลขรุ่นในไดเรกทอรีที่แตก หรือระบุเลขรุ่นด้วย *-v2.0 หรือแม้แต่ไม่ใช้ไดเรกทอรีเลย แต่แตกแฟ้มต่าง ๆ ออกมาตรง ๆ ในไดเรกทอรีปัจจุบัน ฯลฯ ซึ่งในกรณีเหล่านี้ dpkg-source
จะเปลี่ยนชื่อไดเรกทอรีให้อยู่ในรูปแบบปกติของ debian คือ <package>-<version>
ให้ ก่อนที่จะ patch ด้วย *.diff.gz
ตัวเลือกอื่น ๆ ที่น่าสนใจของ dget
:
-
-d
(สำหรับ devscripts 2.10.17 ขึ้นไป) ดาวน์โหลดเท่านั้น ไม่ต้องแตกซอร์ส -
-x
แตกซอร์สหลังดาวน์โหลดด้วย -
-u
(สำหรับ devscripts 2.10.17 ขึ้นไป) ไม่ต้องตรวจสอบลายเซ็น GPG ของเจ้าของแฟ้ม *.dsc -
--build
ดาวน์โหลดแล้ว แตกซอร์สและ build deb ให้ด้วย
รายละเอียดอื่น ๆ อ่านได้จาก manpage ของ dget(1)
ครับ
- thep's blog
- Log in to post comments
![]() |
ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้ |
Comments
Re: ดาวน์โหลด source package แบบ debian
on 4 March, 2008 - 19:54 Permalink
โอ้ ความรู้ใหม่จ้า ขอบคุณครับ
Re: ดาวน์โหลด source package แบบ debian
on 8 March, 2008 - 17:01 Permalink
มีประโยชน์มากครับผม
ขอบคุณครับ
Re: ดาวน์โหลด source package แบบ debian
on 31 March, 2008 - 14:52 Permalink
ลองใช้ดูแล้วสะดวกดีครับ
แต่เพิ่งพบว่า มัน resume file แบบ wget ไม่ได้ - -'