ใช้ 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 เพิ่มเติมได้ :-)

Topic: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้