TL; DR หรือ "แค่เกรียมปี่ของฉัน"
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
(ทำซ้ำapt-get autoremove --purge
จนกว่าจะไม่มีเด็กกำพร้าเหลืออยู่)
คำอธิบายเพิ่มเติม
หากแพ็กเกจfoo ขึ้นอยู่กับแพ็กเกจlibfooอื่นและคุณลบแพ็กเกจlibfooระบบจะขึ้นอยู่กับ ( foo ) เนื่องจาก Foo มีบรรทัดที่ขึ้นอยู่กับการระบุlibfooมันจะแตกออกจาก foo ถ้า libfoo ถูกลบ ย้อนกลับไม่เป็นความจริง: การลบfoo จะไม่ลบlibfooโดยอัตโนมัติ แพคเกจอื่นxfooอาจยังขึ้นอยู่กับ libfoo จึงมีแนวโน้มที่จะไม่เพียง แต่เอามันออกไป (ถึงแม้จะมีแนวโน้มที่จะติดตามถ้ามันถูกติดตั้งเพียงเป็นผลข้างเคียงของการติดตั้งfoo และเสนอที่จะลบออกโดยอัตโนมัติหากคุณต้องการ
แพ็คเกจ Meta ขึ้นอยู่กับชุดของแพ็คเกจอื่น ๆ ในลักษณะเดียวกับที่fooขึ้นอยู่กับlibfooดังนั้นเมื่อคุณลบ meta-package มักจะถูกลบออกไปเล็กน้อย ตัวอย่างเช่นอาจมีสองแพ็คเกจเมตาที่ขึ้นอยู่กับ xterm (อาจเป็น lxsession และ xfsession) แต่การถอนการติดตั้งหนึ่งหรือทั้งสองอย่างจะไม่ถอนการติดตั้ง xterm เนื่องจาก xterm ไม่ได้ขาดโดยไม่มี lxsession หรือ xfsession Meta- แพ็คเกจมักอยู่ที่ด้านบนของแผนภูมิการพึ่งพาไม่ใช่ที่ด้านล่างและบางสิ่งมักขึ้นกับเมตาดาต้าแพคเกจโดยตรง เมตาแพ็คเกจแพกเกจให้วิธีที่สะดวกในการติดตั้งชุดแพ็กเกจที่สมเหตุสมผลพร้อมกัน แต่พวกเขาไม่ได้ถอนการติดตั้งเครื่องมือ
ดังนั้นหากคุณต้องการเกรียมทุกอย่างที่ขึ้นอยู่กับ X11 คุณจะต้องกำหนดเป้าหมายฐานไลบรารี libx11 ที่แอป x11 ทั้งหมดต้องขึ้นอยู่กับ:
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
สิ่งนี้จะ (จำลอง) ลบทุกสิ่งที่ท้ายที่สุดขึ้นอยู่กับ libx11 -. * และจะลบแพ็คเกจใด ๆ ที่ติดตั้งเป็นการอ้างอิงของโปรแกรม X11 แม้ว่าจะไม่ได้ขึ้นอยู่กับ X11 โดยตรง (CUPS และ Ghostscript) เป็นผลข้างเคียงของการติดตั้งสภาพแวดล้อมเดสก์ทอป) คำสั่งที่สองจะลบเด็กกำพร้าที่ตามมาจนกว่าจะไม่มีใครเหลืออยู่ ลบ "- ลบอัตโนมัติ" หากคุณต้องการทำขั้นตอนนี้ในภายหลังหรือไม่ทำเลยหรือเพียงแค่เพิ่มแพ็คเกจด้วยตนเองหลังจากล้าง GUI ออก
ถอด--dry วิ่งตัวเลือกที่จะจริงดำเนินการดำเนินการหลังจากที่คุณได้ตรวจสอบว่ามันจะไม่ลบแพคเกจที่คุณไม่ได้ตั้งใจที่จะถูกลบ.)
ฉันชอบที่จะทำความสะอาดและกำจัดผลข้างเคียงและเพิ่มกลับไปตามต้องการ นอกจากนี้ฉันไปข้างหน้าและทดสอบสิ่งนี้กับ pi ของฉันเองและมันจะรีบูทไปยังเซิร์ฟเวอร์ที่ทำงานได้ดี :)
ทำไมลบติดตั้งอะไร?
กลยุทธ์ดังกล่าวข้างต้นจะช่วยแก้ปัญหาที่ระบุไว้ แต่ยังคงมีความอยากรู้อยากเห็นว่าทำไมการลบผลการดำเนินงานในแพคเกจที่ถูกติดตั้ง
ที่เป็นหัวใจของแพคเกจผู้จัดการทุกคนเป็นแก้ satisfiabilityของบางชนิด เมื่อคุณบอกให้ผู้จัดการแพคเกจติดตั้งแพคเกจบางลบบางแพคเกจหรืออัพเกรดแพคเกจบางสิ่งที่คุณขอให้ทำคือการแก้ปัญหาสำหรับสถานะการติดตั้งซอฟต์แวร์ที่ต้องการต่อไปให้กำหนดชุดของแพคเกจที่มีอยู่ โซลูชันนี้อาจรวมถึงการติดตั้งแพ็กเกจเพิ่มเติม (การอ้างอิง) การลบแพ็กเกจที่มีอยู่ (ความขัดแย้งตัวแบ่ง) การอัปเกรด / อัปเกรดแพ็กเกจเฉพาะ (ระดับความเข้ากันได้) หรือการรวมกัน ดังนั้นในขณะที่มันค่อนข้างใช้งานง่ายนักแก้ปัญหาจะพิจารณาว่าจำเป็นต้องติดตั้งแพ็กเกจบางอย่างเพื่อให้ลบแพ็คเกจอื่น ๆมันทำให้รู้สึกที่สมบูรณ์แบบ นี่เป็นปัญหาการจัดการการพึ่งพาที่น่ารังเกียจที่ผู้จัดการแพคเกจแก้ไข
ตัวอย่างที่เป็นรูปธรรม: ให้ชุดของการใช้งานจาวาติดตั้งแล้วพวกเขาทั้งหมดขึ้นอยู่กับรันไทม์ที่รองรับ Java ซึ่งขณะนี้เกิดขึ้นเป็นOpenJDK-7-JRE จากนั้นคุณขอให้ผู้จัดการแพคเกจที่จะแก้ปัญหาในการติดตั้งเครื่องมือ Java ใหม่ที่ประกาศความขัดแย้งกับOpenJDK-7-JREแต่ทำงานกับoracle-7-JRE (แพคเกจทั้งทั่วไปให้Java-7-รันไทม์ ) แก้จะนำเสนอการกำจัดของOpenJDK-7-JREและติดตั้งของออราเคิล Java-7-JREเป็นวิธีแก้ปัญหาในสถานะที่คุณต้องการในการติดตั้งแพ็คเกจใหม่โดยไม่ทำลายแพ็คเกจที่มีอยู่
ในการนี้เฉพาะกรณีxtermเป็นแพคเกจที่ให้พึ่งพาเสมือนจริงที่เรียกว่าX-ขั้วจำลอง ( xterm , lxterminalและatermทั้งหมดให้x ขั้ว-จำลอง ) ดังนั้นจึงเป็นไปได้ว่าในการลบlxterminal (เป็นส่วนหนึ่งของ การเอา lxde) ตัวแก้ปัญหาพบแพ็คเกจที่ติดตั้งอยู่แล้ว ( transcodeเป็นตัวอย่างที่เป็นไปได้) ที่ต้องการx-terminal-emulator บางประเภทดังนั้นตัวเลือกจึงเลือกติดตั้ง xterm (ซึ่งต้องใช้libutempter0และxbitmapsอธิบายแพ็คเกจอื่น ๆ ที่จะติดตั้ง) เพื่อตอบสนองต่อการพึ่งพาที่แตกหัก โดยไม่ได้เห็นฐานข้อมูลแพ็คเกจฉันจะตั้งสมมติฐานว่านี่เป็นสถานการณ์ที่เป็นไปได้มากที่สุด
ในการค้นหาแพ็กเกจที่ขณะนี้ขึ้นอยู่กับxterm (หรือทางเลือก) ให้ใช้คำสั่งapt-cache rdepends (โดยใช้สวิตช์- ติดตั้งเพื่อ จำกัด แพ็คเกจที่ติดตั้งเท่านั้น):
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
การขึ้นต่อกันที่ขึ้นต้นด้วยอักขระการสลับ '|' หมายความว่าแพ็กเกจขึ้นอยู่กับxtermหรือบางอย่างที่มีให้ (นั่นคือx-terminal-emulatorในกรณีนี้) clustersshแพคเกจขึ้นอยู่กับxterm อย่างชัดเจนและไม่อนุญาตให้มีทางเลือก นี่เป็นรายการย่อของแพ็กเกจที่ทำให้ xterm จำเป็นต้องมี
แล้วเดบอร์ฟานล่ะ
การทำงานของการติดตามเด็กกำพร้าถูกรวมเข้าไปใน apt-get ผ่านฟังก์ชั่น 'autoremove' ในปี 2010 (Debian bug 582791 ) การแสดงผลdeborphan ส่วนใหญ่ซ้ำซ้อนและล้าสมัยเป็นหลัก แตกต่างจาก deborphan และวิธีแก้ปัญหาอื่น ๆ เช่น apt-get โดยตรงติดตามแพคเกจที่ติดตั้งอย่างชัดเจนและแพคเกจที่ติดตั้งเป็นผลข้างเคียงหรือการพึ่งพาของแพคเกจที่ติดตั้งอย่างชัดเจน ตัวอย่างเช่นหากผู้ดูแลระบบติดตั้ง foo, libfoo จะถูกติดตั้งเป็นผลข้างเคียงและ apt-get autoremove จะเอาออก libfoo ถ้า autoremove (หรือ - อัตโนมัติลบ) ถูกระบุเมื่อลบ foo
วิธีการที่ใช้โดยเดบอร์แฟนคือชุดของการเดา ตัวอย่างเช่นการเดาว่าไลบรารีที่ติดตั้งซึ่งไม่มีการพึ่งพาต้องเป็นเด็กกำพร้า: หากติดตั้งlibfooแต่ไม่ใช่ทั้งfooและxfoo deborphanอาจตัดสินใจว่ามันต้องเป็นเด็กกำพร้า หนึ่งในโหมดความล้มเหลวที่นี่คือไลบรารีอาจถูกติดตั้งโดยเฉพาะสำหรับเครื่องมือที่พวกเขาให้ (libxml2 สำหรับ xmllint ก่อนที่มันจะถูกบรรจุใหม่ใน libxml2-utils) หรือมีไว้เพื่อวัตถุประสงค์ในการพัฒนา แพ็คเกจดังกล่าวไม่ใช่เด็กกำพร้า นอกจากนี้ deborphan มุ่งเน้นไปที่ห้องสมุดจึงคิดถึงจำนวนไม่ใช่ห้องสมุดเด็กกำพร้าที่แทร็คแพกเกจ(แพคเกจเลิกกับแพคเกจกำพร้า)
munin
ด้วยเหตุผลบางอย่าง แต่ฉันสามารถใส่กลับได้อย่างง่ายดายพอหลังจากนั้น