ไม่ให้ apt-get อัปเกรดบางแพ็กเกจ

อัดรูปดิจิตอล ทำสมุดภาพของคุณเอง
รอรับได้. ท่องเที่ยว แต่งงาน ฯลฯ

www.tanabutr.co.th/photobook


มีคำถามทางเว็บบอร์ดเห็นมาสองครั้งแล้วว่าจะทำอย่างไรไม่ให้ apt-get อัปเกรดแพ็กเกจบางตัว. ปัญหาจริงที่เกิดขึ้นคือใช้ Firefox ที่ตัดคำภาษาไทยจาก LTN' APT ซึ่งมีชื่อแพ็กเกจเป็น mozilla-firefox. ทีนี้ถ้า apt-get update แล้วมีแพ็กเกจ mozilla-firefox ภาษาอังกฤษที่ใหม่กว่า, เวลาสั่ง apt-get install mozilla-firefox หรือ apt-get upgrade มันก็จะติดตั้งทับ mozilla-firefox เดิมที่ตัดคำภาษาไทย.

การแก้ปัญหาตรงนี้อาจจะใช้การแก้ไขไฟล์ /etc/apt/preferences. ไฟล์นี้เป็นไฟล์ที่กำหนด preferences เวลาใช้ apt-get จะตรวจสอบดูไฟล์นี้เสมอ. ถ้าไม่มีไฟล์นี้ก็สร้างขึ้นมาแล้วใส่เนื้อหาให้ตามตัวอย่าง

Package: mozilla-firefox
Pin: version 1.0.6-1thai1
Pin-Priority: 999 

บรรทัด Package ต้องเขียนชื่อแพ็กเกจซึ่งในกรณีนี้คือ mozilla-firefox. ถ้าเรารู้ชื่อโปรแกรมเช่นเรารู้ว่ามีโปรแกรมชื่อ firefox แต่ไม่รู้ว่าอยู่ในแพ็กเกจชื่ออะไรก็ใช้คำสั่ง dpkg -S ชื่อไฟล์ ก็จะบอกชื่อแพ็กเกจที่มีไฟล์นั้น.

$ dgpk -S `which firefox`
mozilla-firefox

บรรทัดที่สองเป็นข้อมูลเกี่ยวกับเวอร์ชัน. จะเขียนเลขรุ่นของ mozilla-firefox ที่ใช้อยู่และไม่ต้องการให้อัปเกรด. เลขเวอร์ชันนี้หาได้โดยคำสั่ง dpkg -p ชื่อแพ็กเกจ.

$ dpkg -p mozilla-firefox | grep Version
Version: 1.0.4-3thai1

ในกรณีของเครื่องผมมี mozilla-firefox รุ่น 1.0.4-3thai1 อยู่. ถ้าเอาไปใส่ในไฟล์ /etc/apt/preferences ตามตัวอย่างข้างบนก็จะคงเวอร์ชันนี้ไว้.

บรรทัดสุดท้ายคือ Pin-Priority: 999 ตรงนี้คือจุดสำคัญเพราะเวลาใช้ apt-get จัดการแพ็กเกจและต้องมีการอัปเกรดหรือติดตั้งแพ็กเกจจะดูจากค่าของ Pin-Priority. ค่ายิ่งสูงจะถือว่าแพ็กเกจนั้นยิ่งใหม่. โดยปรกติแพ็กเกจที่ติดตั้งอยู่แล้วจะมีค่าเป็น 100. ส่วนแพ็กเกจรุ่นใหม่กว่าและไม่ได้อยู่ใน release (stable, testing, unstable) เดียวกันจะมีค่า 500. และแพ็กเกจที่รุ่นใหม่กว่าและอยู่ใน release เดียวกันจะมีค่าเป็น 990. ดังนั้นถ้าตั้งค่าแพ็กเกจที่ไม่ต้องการให้อัปเกรดเป็น 999 ก็จะมีค่ามากกว่า 990 ทำให้เวลา apt-get upgrade ยังคงแพ็กเกจเดิมไว้.

ในกรณีเครื่องของผม. mozilla-firefox ที่ใช้อยู่เป็นรุ่น 1.0.4-3thai1 และในไฟล์ /etc/apt/preferences มีบรรทัด

Package: mozilla-firefox
Pin: version 1.0.6-1thai1
Pin-Priority: 999

เวลา apt-get upgrade ก็จะติดตั้งรุ่น 1.0.6-1thai1 ให้เพราะค่า Pin-Priority สูงที่สุด.

สรุป:

  1. มีการตั้ง LTN' APT ในไฟล์ /etc/apt/sources.list
  2. apt-get update
  3. หาเลขรุ่นของ mozilla-firefox ล่าสุดที่เป็นภาษาไทย
    $ apt-cache showpkg mozilla-firefox
    ...
    Provides:
    1.0.6-1thai1 - www-browser
    1.0.6-1 - www-browser
    1.0.4-3thai1 - www-browser
    1.0.4-2thai1 - www-browser
    1.0.4-1thai1 - www-browser
    1.0.3-2thai1 - www-browser
    1.0.3-1thai1 - www-browser
    1.0.2-3thai1 - www-browser
    1.0.2-2thai1 - www-browser
    1.0+dfsg.1-5thai1 - www-browser
    Reverse Provides:
    

    ในกรณีนี้คือ 1.0.6-1thai1

  4. ตั้งค่าในไฟล์ /etc/apt/preferences ตามตัวอย่างข้างบนโดยใช้เลขรุ่นที่ได้จากขั้นตอนที่แล้ว.
  5. apt-get upgrade หรือ apt-get install mozilla-firefox ก็จะติดตั้ง mozilla-firefox ที่เป็นภาษาไทยตลอด.

ขอโทษนะครับที่ขั้นตอนออกเป็น manual ลุยด้วยมือซะหน่อย (โดยเฉพาะตรงสร้างไฟล์ preferences) ใครมีวิธีอื่นก็บอกด้วยแล้วกันครับ.

อ้างอิง: man apt_preferences

Comments: blogger