ในขณะที่ทำงานบำรุงรักษาอื่น ๆ ฉันสังเกตเห็นว่า dpkg -l ระบุไว้ประมาณ 90 แพ็คเกจพร้อมสถานะ รี แทนที่จะคาดหวัง ii.
ฉันรักษาแพ็คเกจเพียงอย่างเดียวด้วย ฉลาด และ ความถนัด และฉันไม่ได้บังคับแพ็คเกจใด ๆ แต่ฉันทำเป็นประจำ apt install --no-install-recommends ... เพื่อหลีกเลี่ยงการรับแพ็คเกจที่ไม่จำเป็น ฉันยังพยายามรักษาการตั้งค่าสถานะ "ติดตั้งโดยอัตโนมัติ" อย่างระมัดระวัง และฉันมีแพ็คเกจ 2914 ที่มีสถานะ "ติดตั้งโดยอัตโนมัติ" (ค้นหาความถนัด '~i~M') และ 422 แพ็คเกจที่มีสถานะ "ติดตั้งด้วยตนเอง" (ค้นหาความถนัด '~i!~M').
อะไรเป็นสาเหตุที่ทำให้แพ็คเกจมีสถานะ ลบ + Inst (รี) ใน dpkg -l รายการเมื่อฉันไม่ได้ร้องขอให้ลบแพ็คเกจเหล่านั้น? ดูเหมือนว่าแพ็คเกจที่มีสถานะนี้เป็นแพ็คเกจที่ฉันต้องการเก็บไว้ในระบบ อาจเช่น sudo apt dist-อัพเกรด ทำให้เกิดสิ่งนี้โดยที่ฉันไม่ทันสังเกต?
(ฉันรู้ว่าฉันสามารถติดตั้งแพ็คเกจเหล่านั้นใหม่ด้วย apt install --reinstall ชื่อแพ็คเกจ เพื่อรับสถานะกลับเป็น ii. ฉันมักจะล้างแพ็คเกจที่ลบออกและ ค้นหาความถนัด '~c' รายการไม่มีแพ็คเกจ)
รายละเอียดเพิ่มเติมจากระบบอื่นที่มีปัญหาเดียวกัน:
$ sudo apt dist-upgrade && sudo apt autoremove && dpkg -l | เกรป ^ri | สุขา -l
กำลังอ่านรายการแพ็กเกจ...เสร็จแล้ว
สร้างต้นไม้พึ่งพา
กำลังอ่านข้อมูลสถานะ...
กำลังคำนวณการอัปเกรด... เสร็จสิ้น
แพ็คเกจต่อไปนี้ถูกเก็บกลับ:
virtualbox-6.0
0 อัพเกรด, 0 ติดตั้งใหม่, 0 ที่จะลบและ 1 ไม่ได้อัพเกรด
กำลังอ่านรายการแพ็กเกจ...เสร็จแล้ว
สร้างต้นไม้พึ่งพา
กำลังอ่านข้อมูลสถานะ...
0 อัพเกรด, 0 ติดตั้งใหม่, 0 ที่จะลบและ 3 ไม่ได้อัพเกรด
171
ดังนั้น dist-อัพเกรด ก็ไม่เช่นกัน ลบอัตโนมัติ อย่าแตะ 171 แพ็คเกจด้วย รี สถานะ.
ตัวอย่างแพ็คเกจกับ รี สถานะ:
$ dpkg -l ca-ใบรับรอง-java
Desired=Unknown/Install/Remove/Purge/Hold
| สถานะ=ไม่/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (สถานะ,Err: ตัวพิมพ์ใหญ่=ไม่ดี)
||/ ชื่อ เวอร์ชัน สถาปัตยกรรม คำอธิบาย
+-============================================== =============================-==================== ========-======================================== ================================================== =========
ri ca-certificates-java 20160321ubuntu1 ใบรับรอง CA ทั่วไปทั้งหมด (ที่เก็บคีย์ JKS)
และข้อมูลเพิ่มเติมสำหรับแพ็คเกจเดียวกัน:
$ ความถนัดแสดง ca-certificates-java
แพ็คเกจ: ca-certificate-java
สถานะ: ติดตั้งแล้ว
ติดตั้งอัตโนมัติ: ไม่
Multi-Arch: ต่างประเทศ
รุ่น: ...
ความถนัด $ ทำไม ca-certificates-java
ฉันเริ่มต้น jre-หัวขาด ขึ้นอยู่กับ openjdk-8-jre-หัวขาด
iBA openjdk-8-jre-headless ขึ้นอยู่กับ ca-certificates-java
$ apt-mark โชว์โฮลด์
virtualbox-6.0
ข้อมูลเพิ่มเติมหลังจากอ่านเกี่ยวกับสาเหตุที่เป็นไปได้:
ตามที่อธิบายไว้ในคำตอบ https://askubuntu.com/a/802612/50254 สถานะของแพ็คเกจเหล่านี้สามารถแก้ไขให้ตรงกับแพ็คเกจที่ติดตั้งในปัจจุบันได้โดยการเรียกใช้ (โปรดทราบว่าการป้อนบรรทัดหลัง ไอเอฟเอส ไม่ใช่การพิมพ์ผิด แต่คำสั่งนี้ต้องมีการตั้งค่า ไอเอฟเอส เพื่อป้อนบรรทัดเดียว):
ส่งออก IFS='
'
สำหรับ i ใน $(dpkg -l |egrep '^[a-z]i.*' |awk '{print $2" install"}') ; ทำ echo $i|dpkg --set-selections ; เสร็จแล้ว
ยกเลิกการตั้งค่า IFS
สาเหตุ/สาเหตุของปัญหานี้ยังไม่ทราบ เดอะ รี สถานะควรจะหมายความว่าอย่างนั้น dเลือก (ตัวจัดการแพ็คเกจเดเบียนเก่าในปัจจุบันถูกแทนที่ด้วย ฉลาด) ใช้เพื่อทำเครื่องหมายแพ็คเกจที่จะลบออกจากระบบ และหากคุณต้องการใช้สถานะการเลือกเหล่านั้นจริง ๆ คุณสามารถเรียกใช้ได้ apt-รับ dselect-upgrade. ดู คน dpkg และส่วน "ข้อมูลเกี่ยวกับแพ็คเกจ" สำหรับข้อมูลเพิ่มเติม
เดอะ apt install --reinstall ชื่อแพ็คเกจ ก็โอเค แต่จะทำมากกว่าการเปลี่ยนแปลงขั้นต่ำในระบบเพื่อแก้ไขปัญหา