ดาวน์โหลด 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.t... % 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... % 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) ครับ













Re: ดาวน์โหลด source package แบบ debian
โอ้ ความรู้ใหม่จ้า ขอบคุณครับ
Re: ดาวน์โหลด source package แบบ debian
มีประโยชน์มากครับผม
ขอบคุณครับ
Re: ดาวน์โหลด source package แบบ debian
ลองใช้ดูแล้วสะดวกดีครับ
แต่เพิ่งพบว่า มัน resume file แบบ wget ไม่ได้ - -'
Post new comment