AGMS#1: ทำ .deb ใน 2 นาที.part1

เห็นคุณสมเจตน์อยากให้เขียน เลยเปิด series บ้างครับ "A geek man story :P" ลอกเขามาเลยครับง่ายดี
นำเสนอเรื่่อง geek นิดๆครับ

ตอนนี้คิดว่าจะว่าด้วยเรื่องการทำ deb เช่นเดียวกันครับ แต่ผมจะใช้วิธีง่ายกว่าคือ checkinstall ลงมันซะก่อน

$ sudo apt-get install checkinstall

ทีนี้หาอะไรมาลอง build ครับ คิดว่า fluxbox เขาออกรุ่นใหม่แล้ว ubuntu ไม่ได้อัป(ตอนนี้เขาอัปแล้วนี่นา เพิ่งเช็คเมื่อสักครู่ครับ) ลองเอามาทำ deb เองดีกว่า(จริงๆแล้วผมทำ php script จิ้มจากเว็บได้โดยใช้ checkinstall นี่แหละครับ) 

$ sudo apt-get build-dep fluxbox

ไอ้คำสั่ง build-dep เนี่ยครับ มันต้องใส่ source ไว้ใน sources.list ด้วยนะครับไม่งั้นมันจะบอกให้เราใส่ ถ้าใส่อยู่แล้ว มันจะไปดึงเอาอะไรต่อมิอะไรที่จะใช้ build fluxbox มาทั้งหมด แบบว่าไม่น่าจะมีปัญหา dependencies เลยแหละครับ
หลังจากเครื่องมือพร้อมแล้วผมไปโหลด fluxbox มาดีกว่าครับที่ fluxbox.sf.net (sf.net เป็นเว็บย่อของ sourceforge.net นั่นแหละครับ) ก็จะได้ source code มาเป็น .tar.{gz,bz2} ครับ แตกมันซะเลย

$ tar xf fluxbox-1.0.0.tar.*

จากนั้นก็เข้าไป folder ที่แตกออกมาครับ

$ cd fluxbox* #(เล่น wildcard ดีกว่าขี้เกียจจำชื่อ folder ครับ)

แล้วก็ compile ตามปกติครับ

$ ./configure && make #(รวบคำสั่งเลยครับ)

สังเกตนะครับว่าผมไม่ได้รวบ make install ไว้ เพราะว่าเราไม่ใช้ครับ หลัง compile ตามคำสั่งข้างบนเสร็จแล้ว ก็ได้เวลา checkinstall ครับ

$ sudo checkinstall #(อันนี้จริงๆแล้วน่าจะใช้ fakeroot($ sudo apt-get install fakeroot) แทน sudo ได้ แต่รู้สึกว่าใช้ sudo จะ error น้อยกว่าครับ)

มันก็จะถามว่าจะสร้าง doc-pak ไหมก็ enter ผ่านครับ(เหมือนกด y แล้ว enter) จากนั้นก็จะมีให้ตั้งค่าครับ โดยกดหมายเลขหน้าข้อเพื่อแก้ข้อนั้น

0. ชื่อผู้ดูแลแพคเกจ(ปกติแล้วจะใส่แบบนี้ครับ ชื่อ สกุล <อีเมล์> โดยไม่ต้องไปเปลี่ยน @, . ใดๆทั้งสิ้น แต่ถ้ากลัวสแปมจริงๆใส่แค่ชื่อก็พอครับ)
1. รายละเอียด ตรงนี้จะเป็นรายละเอียดของแพคเกจครับ ซึ่งถ้าใช้ gdebi-gtk ก็คือบรรทัดตัวหนาครับ
2. ชื่อ ตรงนี้เป็นชื่อแพคเกจเลยครับ ต้องเป็นไปตามข้อกำหนด deb นะครับ ถ้าแพคเกจไม่ออกลองตรวจดูครับว่าชื่อถูกรูปแบบหรือเปล่า
3. รุ่น อันนี้ก็เป็นรุ่น ซึ่งก็ต้องเป็นไปตามข้อกำหนด deb นะครับ(ไม่งั้นแพคเกจไม่ออก)
4. release อันนี้ไม่แน่ใจว่าคืออะไร อาจจะเป็นค่าของฝั่ง rpm, pkg(solaris) หรือ tgz(slackware) ก็ได้ครับ เพราะว่า checkinstall รองรับ deb,rpm,pkg,tgz ครับ
5. License อันนี้จะต้องมีไฟล์ license ในระบบซึ่งผมก็ไม่รู้วิธีใส่ ปกติก็ใช้แต่ gpl นี่แหละครับ
6. Group อันนี้เป็นหมวดของแพคเกจ ควรจะใส่ตามหมวดเดิมของ ubuntu ครับ(อันนี้บางทีผมทำแพคเกจเองจะเติม whs/ หน้าหมวดเดิมเพื่อให้รู้ว่าผมเป็นคนทำ เหมือนแพคเกจใน universe ที่จะมี universe/  แต่ตรงนี้ไม่ได้กำหนดไว้ว่าต้องใส่เสมอนะครับ))
7. Architecture สถาปัตยกรรม ที่ใช้บ่อย i386, i686, x64(อันนี้ผมไม่แน่ใจว่าเขาใช้อะไร น่าจะเป็นตัวนี้ครับ), all(ใช้กับพวกไอคอน ฟอนต์เพื่อให้รู้ว่ารันได้ทั้งหมดครับ)
8-9. Source location อันนี้ผมก็ไม่แน่ใจว่าคืออะไร ปกติก็ปล่อยข้ามไปครับ
10. Requires ก็คือ dependencies นั่นแหละครับ แต่ลองใส่ดู checkinstall จะไม่ยอม  จากที่ผมตรวจพบว่ามันจะยอมแค่ทำ rpm เท่าันั้นครับ ไว้ในตอนหน้าผมจะมาบอกวิธี "แฮค" เอาตรงนี้ออกครับ(ลองแล้วได้ผลครับ)

หลังจากกรอกครบแล้วก็กด enter แล้วมันจะ make install และจะติดตั้งแพคเกจที่ทำเสร็จแล้วให้เลยครับ โดยแพคเกจจะอยู่ใน folder เดียวกับที่สั่ง checkinstall นะครับ

 

ปล. ถ้าแพคเกจไม่ได้ใช้ make install สมมุติว่าเป็น ./setup install นะครับ ให้เรียก checkinstall แบบนี้ครับ sudo checkinstall "./setup install"

Comments

TrendyTeddy's picture

อีกหน่อยจะมีซีรีย์แบบไหนเกิดขึ้นอีกล่ะเนี่ย อืมส์ =_= AGMS - A Geek Man Story ชปดป - ใช้ไปด่าไป อิๆ อีกหน่อยจะมีซีรีส์แบบนี้ไหมนะ ประมาณว่า บั๊กวุ่นวายกับเจ้านายเย็นชา - สำหรับนักพัฒนาลีนุกซ์ แต่ยังไง๊ เจ้านายก็เย็นชา เพราะเป็นบริษัทพัฒนาโปรแกรมทางฝั่ง M$ ปิ๊งรักสลับขั้ว - ยูสเซอร์ที่หลงไหลโอเพ่นซอร์ส เลยพยามยัดโอเพ่นซอร์สต่างๆ บนแพลตฟอร์มต่างๆ ไม่ว่า M$ หรือ OSX .... นี่แหล่ะ โอเพ่นซอร์ส ก่อให้เกิดการพัฒนาอย่างกว้างขวาง แม้ชื่อซีรียส์ ยังมีการพัฒนาเลย เิอิ๊กๆ :-D
TrendyTeddy's picture

จริงๆ แล้วไว้ใช้เพื่อแืทนคำสั่ง make install ซึ่งมีมาตรฐานไม่เหมือนกัน แล้วแต่ผู้เขียน source นั้น บางคนก็เขียนได้ดีรัดกุม มีวิธีการ uninstall ด้วย แต่บางคนก็ไม่มีการเขียน uninstall ที่นี้ พอ source เอาไปใช้ กับ เรดแฮทบ้าง เดเีบี้ยนบ้าง สแลคแวร์บ้าง ก็เลยมีคนคิดว่า "ทำไมไม่ทำให้เเป็นรูปแบบแพกเกจ หรือพอร์ตที่เขาใช้อยู่่ละ" จะได้คอนโทรลการจัดการแพกเกจได้ ทั้งการ install, uninstall, การ query ต่างๆ ตามมาตรฐานของแต่ละเจ้า ซึ่งกลายเป็นวิธีทำ .deb อย่างหนึ่ง ถึงอย่างไรก็ดีต้องเข้าใจมาตรฐานของแพกเกจหรือพอร์ตนั้นๆ เช่นถ้าทำของ ubuntu ก็ต้องเข้าใจโครงสร้าง แพกเกจของ debian ด้วย ปัญหาอย่างหนึ่งที่น่าปวดหัว ที่เหมือนๆ กันของการทำแพกเกจ หรือพอร์ต เช่นเรื่องการหา Dependencies ของ sources (ที่ไม่ได้มาตรฐาน)ทำให้ไม่สามารถคอมไพล์ได้ อยากรู้เหมือนกันครับน้อง willwill จะรออ่านนะครับ
willwill's picture

เรื่องการหานี่ก็ไม่ทราบเหมือนกันครับ ปกติก็จะเอาจากเว็บผู้ผลิตมาหาดู เพราะถ้าไม่มีส่วนมาก compile ไม่ออกครับ ถ้าออกมาเวลาทำ deb ก็จะไม่ได้ระบุ deps ครับ(ใน repo เยอะเลยแหละครับที่ผมทำไม่ติด deps)

//man ... เข้ามาดู

GreenApple's picture

ชื่อเรื่องนี่ ตัดราคากันสุดๆ คนนึง 5 นาที คนนึง 2 นาที กรี๊ดดดดดดด (แล้วจะกรี๊ดดดทำไมนิ)
willwill's picture

น่าจะเปลี่ยนเป็น 3 นาทีเผื่อ compile+มาม่าสุกครับ :P ใช้คำสั่งนิดเดียวเอง

//man ... เข้ามาดู

snappy's picture

สำหรับผม อ่านอย่างเดียว... หุหุ อ่าน อ่าน และ อ่าน -------------------------- You'll never walk alone!!! http://snappy.bloggoo.com

--------------------------
You'll never walk alone!!!
http://snappytux.com

GreenApple's picture

คนอื่นเค้ามีซีรีย์กันจริง งั้นขอจองชื่อซีรีย์ "รุ่นใหญ่ใจต้องนิ่ง"นะ หุหุ ไว้สำหรับ การแก้ปัญหาล้วนๆ ซีรีย์ผมต้องมีคุณภาพ(ความฮา) ส่วนสาระ ไม่ต้องมี แป่ว เรื่องพรรณอื่นๆ ปล่อยคนอื่นเขียนไป เราต้องมีคอนเซปของตัวเอง หุหุ
p008's picture

หง่าาา ไม่รุเรื่องเลยอ่ะ -*-
peatbuntu's picture

ใช้ปุ๊บโดนด่าปั๊บ ทำเป็นรายเดือนดีไหมเนี่ย 555 ที่ตั้งงี้ เพราะทุกทีที่ใช้ลินุกซ์ ก็มีเรื่องให้โดนด่าทุกที่ T_T อ้อ วิธีนี้ ผมใช้กับตัวติดตั้งที่มีคำถามได้ไหมครับ เช่น VMware Tool แบบ .tar.gz
JForJoe's picture

linda: Debian package checker, not unlike lintian ทำแพคเก็จ deb แล้วลองใช้ linda เช็คดูครับว่ามี error อะไรมั่งมั้ย ตัวอย่าง: ***************** $ linda gnomesword_2.3.3-1~joe1_amd64.deb E: gnomesword; The component Applications in the Section header is unknown to me. E: gnomesword; Package is in section Productivity, which is unknown. E: gnomesword; No manual page for binary gnomesword2. E: gnomesword; Package does not contain a copyright file. W: gnomesword; File /usr/share/doc/gnomesword/COPYING is considered to be an extra license file. W: gnomesword; File /usr/share/doc/gnomesword/COPYING-DOCS is considered to be an extra license file. W: gnomesword; File /usr/share/gnome/help/gnomesword/C/license.xml is considered to be an extra license file. W: gnomesword; File /usr/share/gnome/help/gnomesword/de/license.xml is considered to be an extra license file. W: gnomesword; File /usr/share/gnome/help/gnomesword/fr/license.xml is considered to be an extra license file. E: gnomesword; The package contains no changelog.Debian. E: gnomesword; Changelog /usr/share/doc/gnomesword/ChangeLog is not compressed. E: gnomesword; Binary /usr/bin/gnomesword2 contains unneeded section comment. W: gnomesword; Binary /usr/bin/gnomesword2 compiled with an RPATH of /usr/lib:/usr/lib/firefox. ***************** ฮาๆๆ error เพียบเลยแต่ยังใช้งานได้นะ
willwill's picture

เขียนเ็ป็นบทความเลยสิครับ ปล. เตรียมมุข AGMS มาแค่นี้คิดไม่ออกแล้วครับ --

//man ... เข้ามาดู