aptitude ที่น่าใช้กว่า apt-get
ขอประเดิมบทความแรกด้วยเรื่องการใช้ aptitude
การติดตั้งแพกเกจใน debian ด้วย apt-get เป็นสิ่งมหัศจรรย์อย่างหนึ่งที่ debian นำมาสู่โลกใบนี้ ระบบที่ติดตั้ง debian ส่วนใหญ่ ติดตั้งกันครั้งเดียว แล้วก็ปรับรุ่นแบบออนไลน์กันไปตลอดอายุขัยของเครื่อง
ในระยะแรก ผู้ใช้อาจเพลิดเพลินกับการ apt-get ที่ทำให้การติดตั้งทดลองใช้โปรแกรมบน debian กลายเป็นเรื่องง่าย แต่ทุกอย่างก็ใช่จะเพอร์เฟ็กต์ เรื่องแรกที่คุณอาจพบคือ แพกเกจที่ดาวน์โหลดมา ทำให้ /var ใหญ่ขึ้นเรื่อยๆ จนอาจทำให้ฮาร์ดดิสก์เต็ม ปัญหานี้ ทางแก้ค่อนข้างเป็นที่รู้จักกันดีอยู่แล้ว:
# apt-get clean
ซึ่งจะลบแพกเกจที่ดาวน์โหลดมาทั้งหมด หรือถ้าคุณอยากเก็บแพกเกจไว้ reinstall:
# apt-get autoclean
จะลบเฉพาะแพกเกจที่เก่า จนไม่อยู่ในแหล่งดาวน์โหลดอีกแล้ว
แต่ปัญหาที่คุณอาจพบตามมาเมื่อใช้ไปนานๆ คือมีแพกเกจเก่าและใหม่ปะปนกัน ไลบรารีบางตัวมีหลายรุ่น อย่างที่ผมพบก็คือ ยังมีแพกเกจของ GNOME 1.x ตกค้างอยู่ในเครื่องอยู่เลย ใช้แพกเกจอย่าง deborphan ตรวจหาไลบรารีหมดอายุเพื่อลบทิ้ง ก็พอกล้อมแกล้ม แต่หลังจากได้พบความสามารถหนึ่งของ aptitude ก็ตกลง migrate มาใช้ aptitude แทน apt-get ดีกว่า
aptitude ไม่ได้เป็นแค่ UI front-end ของ apt-get เท่านั้น แต่ aptitude สามารถเรียกผ่าน command-line แทน apt-get ก็ได้ เช่น คุณอาจจะเรียกแบบนี้:
# aptitude update
# aptitude upgrade
# aptitude install package
แต่ความสามารถที่น่าสนใจของ aptitude ที่ผมว่า ก็คือการติดตามแพกเกจกำพร้า (orphaned package) และลบให้โดยอัตโนมัติ
หลักการก็คือ aptitude จะติดแท็กให้กับแพกเกจที่ถูกลากมาเพิ่มจากการติดตั้งแพกเกจที่เราสั่ง ว่าเป็น auto-installed package ส่วนแพกเกจที่เราสั่งติดตั้งโดยตรง จะเรียกว่า manually-installed package จากนั้น ทุกครั้งที่มีการ resolve dependency จากการ upgrade, install หรือ remove แพกเกจ aptitude จะตรวจสอบแพกเกจ auto-installed ที่ไม่มีใครใช้ และจัดการ remove ให้ด้วย
ตัวอย่างเช่น สมมุติว่าคุณใช้ GNOME อยู่ อยากลองใช้ KDE บ้าง คุณอาจสั่ง "aptitude install kde" จะมีเพียง meta-package kde เท่านั้นที่ถือเป็น manual install ที่เหลือที่ถูกลากมาจะเป็น auto install และเมื่อคุณตัดสินใจลบ kde ออก แพกเกจ auto install ก็ถูกปลดปล่อยตามไปด้วย ซึ่งจะต่างจากการใช้ apt-get ที่จะลบแค่ meta-package kde เท่านั้น
ทีนี้สมมุติว่าในระหว่างที่ใช้ KDE คุณติดตั้งโปรแกรมที่ใช้ Qt เพิ่ม แพกเกจของ Qt ก็จะมีพันธะกับแพกเกจนั้นด้วย เมื่อคุณสั่งลบ kde ก็เพียงปลดพันธะกับ KDE desktop แต่ Qt ซึ่งยังเหลือพันธะกับแพกเกจดังกล่าว ก็จะไม่ถูกลบ
อ้าว! ก็ไม่บอกแต่แรก ตูก็ใช้ apt-get มาตั้งนาน แล้วจะเปลี่ยนไปใช้ aptitude ตอนนี้ จะมีผลอะไรกับแพกเกจเก่าที่ติดตั้งไปแล้วล่ะเนี่ย คุณอาจปรามาสผมในใจ
คำตอบจึงมีผลกับผู้ที่กำลังจะติดตั้ง debian ว่าควรจะตัดสินใจใช้ aptitude แต่แรก แต่ถ้าคุณใช้ apt-get มาเป็นแรมปีแล้ว ก็ยังพอมีทาง โดย aptitude สามารถสั่ง mark auto/manual ได้ โดยใน full-screen interface นั้น คุณสามารถเลื่อนแถบเลือกไปที่แพกเกจที่ต้องการ แล้วกด m ถ้าต้องการ mark manual หรือ M ถ้าต้องการ mark auto (จำง่ายๆ ว่า m คือ manual ไม่อยากให้ manual ก็กด shift เพิ่ม) ถ้าเป็น command line ก็:
# aptitude markauto package
# aptitude unmarkauto package
ผมใช้วิธีนี้แหละ migrate มา aptitude โดยไล่ mark ไปวันละนิดละหน่อย เริ่มจาก section library ก่อน (ใครมีวิธีที่ง่ายกว่านี้ก็ช่วยแนะนำด้วยนะครับ)
อ้อ! ความแตกต่างอีกอย่างของ aptitude ก็คือ มันจะจัดการแพกเกจที่ recommends ให้ด้วยนะครับ โดยถ้าติดตั้งผ่าน command line มันจะติดตั้งแพกเกจที่ recommends เพิ่มให้ด้วย แต่ถ้าสั่งผ่าน full-screen interface มันจะลิสต์เพิ่มให้เลือกเอาก่อนสั่งติดตั้งขั้นสุดท้าย
นอกจากนี้ ใครที่เคยต้องใช้ apt pinning เพื่อ fix version ของแพกเกจบางตัว ใน aptitude คุณสามารถสั่งได้ง่ายๆ โดยสั่ง hold package (=) เอา
แถม trick สำหรับ aptitude command line อีกนิด คือสามารถสั่งแบบรวมมิตรได้:
# aptitude install package1 package2 package3- package4=
จะติดตั้ง package1 และ package2, ลบ package3, และ hold package4
รายละเอียดยังมีอีกเยอะครับ อ่าน man เพิ่มเติมได้ :-)
debian-administration
วันนี้ ที่ debian-administration เพิ่งลงเรื่องนี้ครับ รบกวนฝากคุณเทพย่อยให้หน่อยครับ
Cleaning up a Debian GNU/Linux system
marking auto to all
บังเอิญอะไรขนาดนั้น ถามปุ๊ป ได้ลิงก์คำตอบปั๊บ :)
ที่เขาพยายามทำก็คือ สั่ง mark ทุกแพกเกจให้เป็น auto แล้วค่อยมา mark manual เอาครับผม โดยใช้คำสั่ง:
for pkg in $(aptitude search ~i | grep -v "i A" | cut -d " " -f 4) ; do
echo "-- markauto $pkg --"
aptitude markauto $pkg
done
โดยส่วนแรก
aptitude search ~i
จะค้นหาทุกแพกเกจที่ติดตั้งอยู่ จากนั้น ก็ grep -v "i A" เพื่อตัดตัวที่ mark auto อยู่ก่อนแล้ว แล้ว cut เอาแต่ชื่อแพกเกจ
แล้วเนื้อหาในลูปก็สั่ง markauto ซะ
ว้าว..
เสริมหน่อย
ขอเสริมข้างบนของคุณเทพหน่อย
ส่วนใหญ่เมื่อเราลบแพเเกจออกไปแล้ว ถ้าเป็นการเอาออกแบบไม่ใช่ purge มันก็จะยังมีไฟล์คอนฟิกของแพกเกจเหล่านั้นค้างอยู่ ถ้าจะให้เกลี้ยงสนิทก็ต้อง
aptitude purge packages
หรือ
dpkg -P packages
แต่ถ้า remove ออกไปแล้ว เราสามารถสังเกตุว่าแพกเกจไหนยังมีคอนฟิกค้างอยู่บ้างก็
dpkg -l | grep ^rc
ซึ่งใช้ดูแพกเกจที่ remove ออกไปแล้วแต่ยังมีไฟล์ config ค้างอยู่ (ขึ้นต้นด้วย rc)
ถ้าต้องการล้างบางไปเลย ขี้เกียจมานั่งลบทีละตัวก็
for pkg in $(dpkg -l | grep ^rc | cut -d " " -f 3) ; do
dpkg -P $pkg ;
done
คงเหมาะสำหรับคนที่แก้คอนฟิกผิดแล้วจะลงใหม่นะ....
Debian Repository?
บทความนี้น่าสนใจมากครับ สำหรับคนที่พอจะคุ้นเคยกับ Debian มาบ้างแล้ว ก็คงเข้าใจกันดี
แต่สำหรับมือใหม่ที่เพิ่งจะเริ่มหัดใช้ Debian Package Management ในลักษณะนี้
คงจะงง ๆ กันบ้าง ว่า เราจะใช้ aptitude กันตอนไหน และเจ้า aptitude ไปดึง
package ต่าง ๆ มาจากที่ใด เพราะสิ่งที่เกิดขึ้นก็คือ ทำไมสั่ง aptitude
เพื่อลงโปรแกรมไปแล้ว ต้องนั่งรอนาน ๆ โหลดได้ทีละไม่กี่ KB/s
อะไรประมาณนี้
ก่อนอื่นมาตามหา แหล่งเก็บ package ต่าง ๆ ของ Debian กันนะครับ ... อย่างที่พี่เทพบอกเสมอ ๆ ว่า Debian เป็น Distro ที่ครอบจักรวาล
- มีหลาย Architech ให้เลือกที่จะติดตั้ง ไม่ว่าจะเป็น i386,amd64, powerpc, arm ฯลฯ
- มี package จำนวนมากให้เลือกที่จะติดตั้ง
- เป็น package ที่เรียกได้ว่ามีคุณภาพสูง มีการแก้ไขปรับปรุงแทบจะเรียกได้ว่าตลอดเวลา
ทำให้เครื่องที่จะใช้เก็บ package ต่าง ๆ นี้ ต้องมีเนื้อที่ของฮาร์ดดิสก์ขนาดใหญ่มาก ถ้าจะต้องเก็บทั้งหมด ลองตามหาต่อไป ก็จะพบกับคำที่คุ้นเคยกันดี ในแวดวงลินุกซ์ครับ ก็คือ คำว่า Mirror sites แต่เป็นสมัยก่อนที่อินเตอร์เน็ตในบ้านเรายังไม่ค่อยพัฒนา การใช้งาน Mirror sites ของเราก็จะเป็นในแง่ของการ Download ISO ไฟล์ หรือก็ค อไฟล์ที่เป็นสำเนาของแผ่น CD ที่ใช้ในการติดตั้ง ถึงทุกวันนี้ก็ยังใช้กันอยู่ อาจจะมีรูปแบบอื่น ๆ เพิ่มขึ้นมาเช่นเป็นแผ่น DVD ซึ่งทำให้จำนวนแผ่นในการติดตั้ง Linux ลดลงไปมาก อาจเหลือแค่แผ่นเดียว
แต่อย่างที่กล่าวมาแล้วครับว่า package ของ Debian มีจำนวนมาก ถ้าต้องโหลดมาทั้งหมดแล้วค่อยติดตั้งก็ทำได้ แต่ไม่นิยมทำกัน ดังนั้น Mirror ของ Debian จึงเป็นที่เก็บ package ย่อย ๆ ทั้งหลาย พร้อมทั้งตัว Installer ที่ใช้ในการต ดตั้ง ซึ่งมีหลายตัวให้เลือก แต่ที่ผมชอบก็เห็นจะเป็น Debian Net Installer ครับ เพราะเล็กดี โหลดไม่นานก็ใช้ได้แล้ว ไม่พูดพร่ำทำเพลงมากไปดู Mirror ของ Debian กันเลยครับ
ถ้าเข้าไปดูที่ http://www.debian.org/mirror/list
ก็จะพบกับนิยามของ Debian Mirror คือ
- Primary Mirror: เป็น Mirror หลักที่เปิดให้ใช้ตลอด 24 ชั่วโมง เก็บ package ที่ update ล่าสุด เก็บทุก Architech มีชื่อที่จดจำง่าย ftp..debian.org เช่น ftp.us.debian.org, ftp.jp.debian.org เป็นต้น
- Secondary Mirror: เป็น Mirror ที่เก็บบางส่วน หรืออาจจะทั้งหมดของ Debian Mirror อันเนื่องมาจากข้อจำกัดเรื่องเนื้อที่เก็บข้อมูล และอาจมีข้อมูลไม่ update เท่า Primary Mirror
แต่เท่าที่ดูแล้วของประเทศไทยที่อยู่ ใน Mirror list ของ Debain มีสองที่
TH Thailand
-----------
ftp.nectec.or.th /pub/linux-distributions/Debian/
==> Mirror [alpha amd64 arm hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc]
ftp.coe.psu.ac.th /debian/
==> Mirror [i386]
ซึ่งเท่าที่ทดสอบดู Mirror ที่ PSU ผมลองแล้วแต่ความเร็วไม่เป็นที่น่าพอใจ อาจเป็นเพราะผมอยู่คนละเครือข่ายกับ Server และก็ที่นั่นอาจมีภาระงานมากอยู่แล้ว ส่วนที่ NECTEC ก็ค่อนข้างเร็ว แต่ผมไม่ค่อยได้ใช้ที่นี่เพราะมีที่หลัก ๆ ใช้แล้ว แต่ว่าไม่ได้อยู่ใน list คือ
linux.thai.net /debian
mirror.in.th /debian
ซึ่งความเร็วก็ค่อนข้างดี
หลังจากที่รู้จัก Debian Mirror กันไปแล้ว มาลองตั้งค่าเพื่อจะใช้ Mirror ที่ต้องการกันครับ
ไฟล์ที่เก็บข อมูลเกี่ยวกับ Debian Mirror ที่เราเลือกไว้แล้วคือ
/etc/apt/sources.list
โดยใช้ โปรแกรมแก้ไขข้อความที่คุณถนัด (ผมถนัดใช้ Vim) และเพิ่มข้อความข้างล่างเข้าไป
deb ftp://linux.thai.net/debian/ [sid/etch/sarge] main contrib non-free deb-src ftp://linux.thai.net/debian/ [sid/etch/sarge] main contrib non-free
โดยที่
- deb และ deb-src คือ package และ source code package ตามลำดับ หากไม่ต้องการจะใช้ source code ก็ไม่จำเป็นต้องใส่ deb-src ลงใน sources.list อาจจะใช้วิธี comment ไว้ โดยเพิ่มเครื่องหมาย "#" ไว้ข้างหน้า deb-src
- [sid/etch/sarge] เป็นชื่อเรียก distribution ของ Debian โดยเลือกอย่างใดอย่างหนึ่ง ซึ่งความหมายของแต่ละชื่อเป็นอย่างนี้คือ
sarge :stable - รุ่นที่มีความเสถียร
etch :testing - คือ รุ่นที่อยู่ในการทดสอบ หากไม่มี Bugs ก็พร้อมที่จะเปลี่ยนเป็น stable รุ่นถัดไป
sid :unstable - รุ่นที่อยู่ในระหว่างพัฒนา มีการเปลี่ยนแปลง และยังมี Bugs ให้ตามแก้ เหมาะสำหรับนักพัฒนา และผู้ที่สนใจใน package ใหม่ ๆ ของ Debian
ส่วน main, contrib, non-free เป็น Package Section Debian ไม่ต้องเลือกทั้งหมดก็ได้ หากไม่ได้ใช้ แต่ต้องมีหลัก ๆ คือ main
*** รายละเอียดเพิ่มเติมที่ Debian Technology โดย เทพพิทักษ์ การุญบุญญานันท์
หลังจากที่เลือก distribution และ section ที่ต้องการเป็นที่เรียบร้อยแล้ว เราก็มาทำการ update list ในเครื่องเรา โดยการสั่งคำสั่งนี้ต้องมีสิทธิเป็น root หรือเทียบเท่าก่อนนะครับ
# aptitude update netgate:~# aptitude update Get:1 ftp://linux.thai.net etch Release.gpg [189B] Get:2 ftp://linux.thai.net etch Release [74.4kB] Get:3 ftp://linux.thai.net etch/main Packages [4218kB] Get:4 ftp://linux.thai.net etch/contrib Packages [51.1kB] Get:5 ftp://linux.thai.net etch/non-free Packages [76.0kB] Fetched 4419kB in 2m50s (25.9kB/s) Reading package lists... Done #
แค่นี้ก็เป็นอันเรียบร้อยแล้ว หลังจากนั้นก็ใช้คำสั่ง aptitude เพื่อทำการลงโปรแกรมต่าง ๆ ต่อไป แต่ตอนนี้เราเลือก Mirror ที่ใกล้เราที่สุด ก็จะทำให้ความเร็วในการดึงข้อมูลน่าจะดีขึ้น :)
___________________________________________________________________
Key ID: D4CEFD37
Fingerprint: 1ED3 27F6 48C8 5C9D 4285 F24D D64E C0AF D4CE FD37
ตั้งหัวข้อใหม่?
ตอบละเอียดจริงๆ ความจริงตั้งเป็นหัวข้อใหม่ได้เลยนะนี่ :-)
gibj.=hc]h;,yj'
aptitude เนี่ยก็ work เอามากๆเลย
deborphan ช่วยประหยัดเนื้อที่ไปเยอะเลย









Recent comments
2 days 14 hours ago
3 days 6 hours ago
1 week 5 days ago
3 weeks 1 hour ago
3 weeks 6 days ago
4 weeks 15 hours ago
4 weeks 1 day ago
4 weeks 1 day ago
4 weeks 2 days ago
4 weeks 4 days ago