Sunday, June 7, 2009

aptitude ที่น่าใช้กว่า apt-get

ที่มา: http://debianclub.org/~thep/debclub-backup/02.html

การติดตั้งแพกเกจใน 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

No comments:

Post a Comment

Popular Posts