วันอาทิตย์ที่ 27 มิถุนายน พ.ศ. 2553

ความแตกต่างของ aptitude กับ apt-get

หลัง จากที่ใช้ ubuntu มานานยังไม่ค่อยเข้าใจเรื่องนี้เท่าไหร่ ก็ลอง search จาก Google ดู เนื่องจาก Ubuntu มี Core เดียวกันกับ Debian บทความนี้จึง่นาจะมีประโยชน์แก่ใครหลายๆ คนที่ยังไม่ทราบ สำหรับใครที่ทราบแล้วก็ไม่ว่ากันเนาะ ส่วนตัวผมเองยังต้องเรียนรู้อีกเยอะ

การ ติดตั้งแพกเกจใน debian ด้วย apt-get เป็นสิ่งมหัศจรรย์อย่างหนึ่งที่ debian นำมาสู่โลกใบนี้ ระบบที่ติดตั้ง debian ส่วนใหญ่ ติดตั้งกันครั้งเดียว แล้วก็ปรับรุ่นแบบออนไลน์กันไปตลอดอายุขัยของเครื่อง

ใน ระยะแรก ผู้ใช้อาจเพลิดเพลินกับการ apt-get ที่ทำให้การติดตั้งทดลองใช้โปรแกรม บน debian กลายเป็นเรื่องง่าย แต่ทุกอย่างก็ใช่จะเพอร์เฟ็กต์ เรื่องแรกที่คุณอาจพบคือ แพกเกจที่ดาวน์โหลดมา ทำให้ /var ใหญ่ขึ้นเรื่อยๆ จนอาจทำให้ฮาร์ดดิสก์เต็ม ปัญหานี้ ทางแก้ค่อนข้างเป็นที่รู้จักกันดีอยู่แล้ว:

# apt-get clean

# 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 dependenc y จากการ 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 unmarkaut o package

ผม ใช้วิธีนี้แหละ migrate มา aptitude โดยไล่ mark ไปวันละนิดละหน่อย เริ่มจาก section library ก่อน (ใครมีวิธีที่ง่ายกว่านี้ก็ช่วยแนะนำด้วยนะครับ)

อ้อ! ความแตกต่างอีกอย่างของ aptitude ก็คือ มันจะจัดการแพกเกจที่ recommend s ให้ด้วยนะครับ โดยถ้าติดตั้งผ่าน command line มันจะติดตั้งแพกเกจที่ recommend s เพิ่มให้ด้วย แต่ถ้าสั่งผ่าน 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

ซึ่งจะลบแพกเกจที่ดาวน์โหลดมาทั้งหมด หรือถ้าคุณอยากเก็บแพกเกจไว้ reinstall:

กรณีต้องการลบแพกเกจท์ออกจากเครื่องให้สมบูรณ์และไม่กระทบต่อแพทเกจท์อื่นให้ใช้คำสั่ง
sudo aptitude purge แพกเกจที่จะลบ


ที่มา : Blog.A-Days.com

1 ความคิดเห็น:

  1. ไม่ระบุชื่อ16 พฤษภาคม 2554 เวลา 01:16

    - - ผมว่ารอลงใหม่แล้วใช้ดีกว่า 55+

    ตอบลบ