ใช้ apt-get แบบ 5ส
เริ่มการกู้บทความเก่าจากเรื่องของ aptitude ก่อน แต่ใน lenny/sid นี้ ข้อจำกัดเดิมของ apt-get ได้หมดไปแล้ว จึงถือโอกาสปรับแก้ไปในตัว
การติดตั้งแพกเกจใน debian ด้วย apt-get เป็นสิ่งมหัศจรรย์อย่างหนึ่งที่ debian นำมาสู่โลกใบนี้ ระบบที่ติดตั้ง debian ส่วนใหญ่ ติดตั้งกันครั้งเดียว แล้วก็ปรับรุ่นแบบออนไลน์กันไปตลอดอายุขัยของเครื่อง
ในระยะแรก คุณอาจเพลิดเพลินกับการ apt-get install โน่นนี่สนุกสนาน แต่ก็ควรทำ 5ส ไปด้วยเหมือนกัน เรื่องแรกที่คุณอาจพบคือ แพกเกจที่ดาวน์โหลดมา ทำให้ /var ใหญ่ขึ้นเรื่อยๆ จนอาจทำให้ฮาร์ดดิสก์เต็ม ปัญหานี้ ทางแก้ค่อนข้างเป็นที่รู้จักกันดีอยู่แล้ว:
# apt-get clean
ซึ่งจะลบแพกเกจที่ดาวน์โหลดมาทั้งหมด หรือถ้าคุณอยากเก็บแพกเกจไว้ reinstall:
# apt-get autoclean
จะลบเฉพาะแพกเกจที่เก่า จนไม่อยู่ในแหล่งดาวน์โหลดอีกแล้ว
แต่อีกปัญหาที่คุณอาจพบเมื่อใช้ไปนาน ๆ คือมีแพกเกจเก่าและใหม่ปะปนกัน ไลบรารีบางตัวมีหลายรุ่น เพราะโปรแกรมรุ่นใหม่ ๆ ได้เปลี่ยนมาใช้ไลบรารีรุ่นใหม่ (ที่มีการเปลี่ยนชื่อแพกเกจตามรุ่นของอินเทอร์เฟซ) แม้ไลบรารีเก่าจะไม่มีใครใช้แล้ว แต่ก็ยังตกค้างอยู่
ใน debian รุ่นก่อน ๆ นั้น มีการพัฒนาเครื่องมือขึ้นมาจัดการเรื่องนี้ เช่น deborphan ใช้ตรวจหาไลบรารีหมดอายุเพื่อลบทิ้ง หรือ aptitude ที่มีการแยกแยะแพกเกจที่ผู้ใช้สั่งติดตั้งโดยตรง (manual install) กับแพกเกจที่ถูกลากมาโดยอัตโนมัติ (auto install) โดยแพกเกจที่เป็น auto install นั้น ถ้าเมื่อไรที่ไม่มีใครใช้ aptitude ก็จะลบให้โดยอัตโนมัติ ทำให้ระบบสะอาดขึ้น ไม่มีสิ่งตกค้าง นั่นทำให้ผมย้ายมาใช้ aptitude แทน apt-get
ข่าวดีก็คือ apt ตั้งแต่รุ่น 0.7.0 ขึ้นไป (ใน lenny/sid) มีคำสั่งใหม่ที่ช่วยจัดการเรื่องนี้ได้แล้ว:
# apt-get autoremove
จะลบแพกเกจ auto install ที่ไม่มีใครใช้ทิ้ง นอกจากนี้ คุณสามารถใช้คำสิ่ง autoremove นี้ แทนคำสั่ง remove ปกติได้เลย ซึ่งจะได้ผลเหมือนการ remove ด้วย aptitude:
# apt-get autoremove package
ตัวอย่างเช่น สมมุติว่าคุณใช้ GNOME อยู่ อยากลองใช้ KDE บ้าง คุณอาจสั่ง "apt-get install kde" จะมีเพียง meta-package kde เท่านั้นที่ถือเป็น manual install ที่เหลือที่ถูกลากมาจะเป็น auto install และเมื่อคุณตัดสินใจลบ kde ออกด้วย apt-get autoremove แพกเกจ auto install ก็ถูกปลดปล่อยตามไปด้วย ซึ่งจะต่างจากการใช้ apt-get remove ที่จะลบแค่ meta-package kde เท่านั้น
ทีนี้สมมุติว่าในระหว่างที่ใช้ KDE คุณติดตั้งโปรแกรมที่ใช้ Qt เพิ่ม แพกเกจของ Qt ก็จะมีพันธะกับแพกเกจนั้นด้วย เมื่อคุณสั่งลบ kde ก็เพียงปลดพันธะกับ KDE desktop แต่ Qt ซึ่งยังเหลือพันธะกับแพกเกจดังกล่าว ก็จะไม่ถูกลบ
แต่ทั้งนี้ เรื่องนี้ยังไม่มีผลกับการ upgrade กล่าวคือ สมมุติว่าแพกเกจ p รุ่นเก่าใช้ libx1 แต่แพกเกจ p รุ่นใหม่เปลี่ยนมาใช้ libx2 แทน โดยที่ libx1 ไม่มีแพกเกจอื่นใช้อีกแล้ว หลัง apt-get dist-upgrade คุณจะมีทั้ง libx1 และ libx2 ในระบบ แต่ apt จะเตือนว่ามีแพกเกจ auto install ที่ไม่จำเป็นอีกแล้วเหลืออยู่ คุณสามารถสั่งลบได้โดยสั่ง apt-get autoremove
นี่ช่วยให้ทำความสะอาดระบบได้ง่าย โดยอาจไม่ต้องใช้ aptitude อีกแล้ว แต่ใครที่ใช้ aptitude มานานแล้ว อาจจะยังชอบความสามารถอื่น ๆ ของ aptitude ที่สามารถสั่งปรับการติดตั้งต่าง ๆ อย่างละเอียดได้ เช่น:
- เลือก alterative dependency ได้ เช่น apache2 ที่ Depends: apache2-mpm-worker | apache2-mpm-prefork หากติดตั้งด้วย command line คือ "apt-get install apache2" หรือ "aptitude install apache2" จะได้ตัวเลือกแรก คือ apache2-mpm-worker เสมอ แต่ถ้าคุณอยากเลือก apache2-mpm-prefork แทน ก็ต้องสั่งเพิ่มเป็น "apt-get install apache2 apache2-mpm-prefork" ซึ่งจะทำให้ apache2-mpm-prefork กลายเป็น manual install ไปด้วย แต่ถ้าใช้ aptitude แบบ full-screen แล้ว คุณสามารถปรับละเอียดก่อนลงมือติดตั้งได้
- จัดการกับแพกเกจ Recommends: และ Suggests: ได้ การ install ด้วยคำสั่ง command line นั้น จะเลือกให้โดยอัตโนมัติ คือ apt-get จะไม่ติดตั้งแพกเกจ Recommends: และ Suggests: เลย ส่วน aptitude (command line) จะติดตั้งแพกเกจ Recommends: ให้ด้วย แต่ในกรณีที่คุณรู้ ว่าไม่จำเป็นต้องใช้แพกเกจไหน หรืออยากติดตั้งแพกเกจ Suggests: ด้วย ก็สามารถปรับแก้ก่อนลงมือติดตั้งได้
- เลือกแก้ปัญหา dependency ได้หลายทาง ไม่ใช่เฉพาะทางที่ดีที่สุดที่ apt คำนวณให้เท่านั้น
แถม trick สำหรับ apt-get และ aptitude command line อีกนิด คือสามารถสั่งแบบรวมมิตรได้:
# aptitude install package1 package2- package3=
หรือ
# apt-get install package1 package2- package3=
จะติดตั้ง package1, ลบ package2, และ hold package3
รายละเอียดยังมีอีกเยอะครับ อ่าน man เพิ่มเติมได้ :-)
- thep's blog
- Log in to post comments
![]() |
ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้ |