Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

แก้ไขข้อผิดพร้อมความพึ่งพา (Unmet Dependencies) บน Ubuntu: คู่มือขั้นตอน

ข้อผิดพลาด "The following packages have unmet dependencies" พบบ่อยใน Ubuntu เกิดขึ้นเมื่อติดตั้งแพ็กเกจด้วย apt ผ่านเทอร์มินัล แล้วล้มเหลวโดยไม่มีสาเหตุชัดเจน ไม่ได้มาจากโปรแกรมที่ติดตั้ง แต่มาจากระบบ apt เอง โดยเฉพาะเมื่อผสมใช้ third-party dependencies

มีหลายวิธีแก้ เรียงจากง่ายไปยาก ทำตามขั้นตอนด้านล่างจะแก้ได้

หมายเหตุ: ก่อนเริ่ม ควรสำรองไฟล์การตั้งค่า:

  1. กด Alt+Ctrl+T เปิดเทอร์มินัล
  2. พิมพ์ sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.original กด Enter

วิธีที่ 1: ใช้พารามิเตอร์ -f

ง่ายที่สุด แค่เพิ่ม -f แทนที่จะพิมพ์ sudo apt-get install PACKAGENAME ให้ใช้:

sudo apt-get install -f

พารามิเตอร์ -f จะพยายามแก้ dependency ที่เสีย แล้วค่อยติดตั้งแพ็กเกจที่ต้องการ

  1. เปิดเทอร์มินัล (Ctrl+Alt+T)
  2. รัน sudo apt-get install -f
  3. รัน sudo dpkg --configure -a แล้วรันคำสั่งข้อ 2 อีกครั้ง

วิธีที่ 2: ใช้ Aptitude

Aptitude เป็น package manager ระดับสูงกว่า apt-get ติดตั้งก่อน:

  1. เปิดเทอร์มินัล (Ctrl+Alt+T)
  2. รัน sudo apt-get install aptitude
  3. รัน sudo aptitude install PACKAGENAME (แทน PACKAGENAME ด้วยชื่อแพ็กเกจ) จะพยายามติดตั้งผ่าน aptitude แทน apt-get

วิธีที่ 3: เปิด restricted/universe repositories และเลือกเซิร์ฟเวอร์ที่ดีกว่า

  1. กด Alt+F2 พิมพ์ software-properties-gtk กด Enter
  2. แท็บ Ubuntu Software: เปิดทุก repository (main, universe, restricted, multiverse)
  3. คลิก "Download from" > Select Best Server
  4. เปิดเทอร์มินัล (Alt+Ctrl+T) รัน sudo apt-get update แล้วลองติดตั้งใหม่

วิธีที่ 4: ล้างฐานข้อมูลแพ็กเกจ

ฐานข้อมูลเสียก็ทำให้ dependencies ไม่ครบ เปิดเทอร์มินัล (Ctrl+Alt+T) รัน:

  1. sudo apt-get clean - ลบไฟล์ .deb ที่ดาวน์โหลดไว้ทั้งหมด (ยกเว้น lock files) จาก /var/cache/apt/archives/ และ /var/cache/apt/archives/partial/
  2. sudo apt-get autoclean - ลบเฉพาะแพ็กเกจที่ดาวน์โหลดไม่ได้แล้ว (เก่าลงตัว)

วิธีที่ 5: กำจัด held packages

Held packages ถูก hold ไว้เพราะ apt แก้ dependency ไม่ได้ การกำจัดอาจแก้ปัญหา

  1. เปิดเทอร์มินัล (Ctrl+Alt+T)
  2. รัน sudo apt-get -u dist-upgrade จะแสดง held packages (ถ้ามี)
  3. ลองรัน sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade ดูแก้ได้ไหม

หากจบด้วย X not upgraded (X = จำนวน held packages) ต้องลบทีละตัว:

  1. sudo apt-get remove --dry-run PACKAGENAME (--dry-run แสดงว่าจะเกิดอะไรขึ้น) ลบครบแล้ว ลองติดตั้งแพ็กเกจที่ทำปัญหาเดิมดู

วิธีที่ 6: Purge/Remove/Disable PPAs

PPA (Personal Package Archives) บน Launchpad ใช้ติดตั้ง/อัปเกรดแพ็กเกจที่ไม่มีใน repo resmi สาเหตุหลักของ unmet dependencies โดยเฉพาะตอนอัปเกรดแพ็กเกจจาก repo Ubuntu

Disable: แพ็กเกจจาก PPA นั้นจะไม่ได้รับอัปเดต

  1. Alt+F2 รัน software-properties-gtk
  2. แท็บ Other Software: แต่ละ PPA มี 2 บรรทัด (source + compiled) ยกติ๊กทั้งคู่เพื่อ disable

Purge: ดาวน์เกรดแพ็กเกจใน PPA กลับเป็นเวอร์ชัน repo resmi และ disable PPA ติดตั้ง ppa-purge:

mkdir ppa-purge && cd ppa-purge && wget https://old-releases.ubuntu.com/ubuntu/pool/universe/p/ppa-purge/ppa-purge_0.2.8+bzr56_all.deb && wget https://ftp.u-picardie.fr/mirror/ubuntu/ubuntu/pool/main/a/aptitude/aptitude_0.8.10-6ubuntu1_i386.deb && sudo dpkg -i ./*.deb

จากนั้น sudo ppa-purge ppa:someppa/ppa เพื่อ purge PPA ที่ต้องการ (ppa-purge ไม่ลบ PPA ให้ต้องลดเอง):

  1. sudo apt-get autoremove --purge PACKAGENAME (ถ้าอยากลบแพ็กเกจที่ติดตั้งด้วย)
  2. sudo add-apt-repository --remove ppa:someppa/ppa
  3. sudo apt-get autoclean

หลังจากนี้ควรติดตั้งแพ็กเกจที่ต้องการได้ แม้มีหลายวิธี แต้องป้องกันดีกว่า: อัปเดตระบบสม่ำเสมอ ใช้ PPA ที่เชื่อถือได้ สำรองข้อมูลตอนทำงานปกติ เพื่อ restore ได้ภายหลัง