จะถอนการติดตั้ง X Server และ Desktop Manager ได้อย่างไรเมื่อเรียกใช้ในฐานะเซิร์ฟเวอร์หัวขาด?


88

ฉันใช้ Raspberry Pi ของฉันเป็นเซิร์ฟเวอร์หัวขาดซึ่งฉันสามารถ ssh เข้า ฉันไม่ต้องการ X Server, LXDE เป็นต้น

ฉันกำลังรัน Raspbian "เสียงดัง" ฉันได้ปิดการใช้งานอยู่แล้ว "เริ่มต้นในการบูตสก์ท็อป" ใช้raspi-configตามที่อธิบายไว้ที่นี่ แต่ฉันได้รับการอัปเดตแพคเกจมากมายสำหรับสิ่งที่เดสก์ท็อปทั้งหมดที่ฉันไม่ได้ใช้ (ฉันเรียกใช้apticronเพื่อแจ้งให้ฉันทราบถึงการอัปเดตที่รอดำเนินการทางอีเมล) ดังนั้นฉันจึงต้องการapt-get removeแพคเกจที่ไม่จำเป็นทั้งหมด

ฉันควรลบแพ็คเกจใด

จนถึงตอนนี้ฉันก็คิดเรื่องต่อไปนี้:

sudo apt-get remove desktop-base lightdm lxappearance lxde-common lxde-icon-theme lxinput lxpanel lxpolkit lxrandr lxsession-edit lxshortcut lxtask lxterminal obconf openbox raspberrypi-artwork xarchiver xinit xserver-xorg xserver-xorg-video-fbdev

ฉันสร้างรายการด้านบนโดยดูที่ความถนัดสำหรับแพ็คเกจทั้งหมดในแพ็คเกจที่ติดตั้ง -> x11 -> ส่วนหลักที่ไม่ใช่ "การติดตั้งอัตโนมัติ"

ด้วยเหตุผลบางอย่างเมื่อฉันเรียกใช้สิ่งนี้apt-getบอกฉันว่า:

The following extra packages will be installed:
  libutempter0 xbitmaps xterm

ซึ่งดูเหมือนว่าแปลก ๆ สำหรับลบการดำเนินงาน

มีวิธีที่ง่ายกว่านี้ไหม? มีแพ็คเกจ "super" ที่เป็นเจ้าของกราฟิกสิ่งนี้ทั้งหมดและสามารถลบออกได้โดยขึ้นอยู่กับมันหรือไม่ จากความเข้าใจของฉันมันไม่ได้เป็นไปได้เพราะสิ่งเหล่านี้ยังไม่ได้ติดตั้งโดยอัตโนมัติซึ่งหมายความว่าฉันต้องติดตามพวกเขาทั้งหมดและลบพวกเขาทั้งหมดอย่างชัดเจน

คำตอบ:


85

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 มุ่งเน้นไปที่ห้องสมุดจึงคิดถึงจำนวนไม่ใช่ห้องสมุดเด็กกำพร้าที่แทร็คแพกเกจ(แพคเกจเลิกกับแพคเกจกำพร้า)


2
ยอดเยี่ยมมากสำหรับฉันขอบคุณ มันยังลบmuninด้วยเหตุผลบางอย่าง แต่ฉันสามารถใส่กลับได้อย่างง่ายดายพอหลังจากนั้น
วันที่

4
เกรียมมัน! ฉันต้องพูด'libx11-.*'เพื่อป้องกันไม่ให้เปลือกกลม

1
@ Maxx คำตอบที่ดี แต่ในทุกสถานการณ์ของคุณคุณไม่ได้อธิบายว่ามันเป็นอย่างไรเมื่อเขาวิ่งตามapt-get removeที่มันต้องการinstall xtermและอีกสองคน ฉันมีประสบการณ์เช่นนี้และไม่สามารถใช้งานได้
Madivad

2
สะอาด raspbian ที่ไม่ได้ขยายการติดตั้งหลังจาก apt-get อัพเกรด DIST rootfs ... 94% /อัพเกรด: หลังจาก apt-get remove --auto-remove --purge libx11 -. *: rootfs ... 51% /คำตอบที่ยอดเยี่ยมขอบคุณมาก!
Daniel F

2
และหลังจากที่ได้รับ autoremove: rootfs ... 41% /...
แดเนียล F

27
sudo apt-get install deborphan
sudo apt-get autoremove --purge libx11-.* lxde-.* raspberrypi-artwork xkb-data omxplayer penguinspuzzle sgml-base xml-core alsa-.* cifs-.* samba-.* fonts-.* desktop-* gnome-.*
sudo apt-get autoremove --purge $(deborphan)
sudo apt-get autoremove --purge
sudo apt-get autoclean

บรรทัดแรกติดตั้งdeborphanซึ่งจะลบแพ็กเกจที่ถูกโยงถึงออก

บรรทัดที่สองจะลบแพ็คเกจหลักของระบบ X11 LXDE, Samba (การแชร์ไฟล์ของ Windows) แบบอักษร Gnome และสิ่งอื่น ๆ ที่เกี่ยวข้องกับสภาพแวดล้อมเดสก์ท็อปของ Raspberry Pi

บรรทัดที่สามจะลบแพ็กเกจที่ถูกโยงถึงใด ๆ ที่ตรวจพบโดย deborphan

บรรทัดที่สี่จะลบแพ็คเกจที่ไม่จำเป็นออกไป

บรรทัดที่ห้าจะล้างแคชแพ็กเกจ


3
ยินดีต้อนรับสู่ Raspberry Pi Stack Exchange! แม้ว่าเทคนิคนี้อาจตอบคำถามได้ดีกว่า แต่ก็ควรมีคำอธิบายเกี่ยวกับวิธีการทำงานและการทำงานของมัน
RPiAwesomeness

1
การรันคำสั่งเหล่านี้บนการติดตั้ง Raspbian ใหม่ฉันไปจากน้อยกว่ากิกะไบต์ฟรีบนการ์ด SD 4GB ถึง 2.5GB ฟรี อย่างน้อยสำหรับฉันนี่คือคำตอบที่ถูกต้อง
ปล้น

2
คำตอบที่ได้รับการยอมรับนั้นลึกมาก แต่จริง ๆ แล้วมันไม่ได้ให้รายการเพื่อให้บรรลุปัญหาของ OP คำตอบนี้อาจเป็นเปลือยเปล่า แต่จริงๆแล้วมันบรรลุสิ่งที่ OP (และฉัน) ต้องการจริงๆ
portforwardpodcast

ทำไมถอนการติดตั้ง samba นี่ไม่ใช่แอปพลิเคชัน GUI อาจจำเป็นสำหรับระบบเครือข่าย
Dogweather

9

1 / หากต้องการลบเดสก์ท็อปทั้งหมดที่ฉันเพิ่งทำ (ไปทำกาแฟสักแก้วเดินเล่นสักพักหนึ่ง) ...
apt-get remove --auto-remove --purge libx11-.*

2 / จากนั้นฉันติดตั้ง deborphan เพื่อกำจัดไฟล์ orphaned ...
sudo apt-get install deborphan

หากคุณต้องการที่จะเห็นสิ่งที่ได้รับกำพร้าทำเช่นนี้ ...
deborphan -sz

3 / จากนั้นฉันก็ลบไฟล์กำพร้าทั้งหมด ...
sudo apt-get remove --purge $(deborphan)

ในที่สุดก็ทำเช่นนี้เพื่อลบแพ็คเกจที่ไม่จำเป็นซึ่งไม่ได้เป็นกำพร้าออก ...
sudo apt-get autoremove

ผลสุดท้าย: ไม่มีหัวและทำความสะอาดเหมือนเสียงนกหวีด


2
apt-get remove --dry-runไม่ทำอะไรเลยอย่างแน่นอนแต่พิมพ์ข้อความบนหน้าจอ
lenik

7

มีดูที่นี่taskselแต่เลื่อนลงไปส่วนหนึ่งเกี่ยวกับ

ทำงานtasksel --list-tasksบน pi ผ่าน wifi ssh ให้ฉัน (หลังจากประมาณ 30 วินาที):

u desktop   Debian desktop environment
u web-server    Web server
u print-server  Print server
u database-server   SQL database
u dns-server    DNS Server
u file-server   File server
u mail-server   Mail server
u ssh-server    SSH server
u laptop    Laptop

ดังนั้นtasksel remove desktopควรจะทำสิ่งที่คุณต้องการ[ดูความคิดเห็น] หน้าคนสั้นและลึกลับเล็กน้อยอาจเป็นเพราะ taskel ส่วนใหญ่มีไว้สำหรับผู้ดูแลเดเบียน หากงานนี้แจ้งให้เราทราบ;)


ขอบคุณฉันไม่เคยได้ยินtaskselถึงแม้ว่าฉันจะมีประสบการณ์ Ubuntu ที่ดีพอสมควร แต่น่าเสียดายที่ฉันพยายามนี้มันต้องใช้เวลาในขณะที่จะเรียกใช้remove desktopคำสั่ง แต่ทุกคนที่แพคเกจ "กราฟิก" aptitudeยังคงมีตาม
วันที่

ฉันไม่ได้อย่างใดอย่างหนึ่ง แต่ฉันก็ตกใจเมื่อฉันสังเกตเห็นเพียงแค่การลบองค์ประกอบ X พื้นฐานบางอย่างไม่ได้ดึงกองพึ่งพาทั้งหมดซึ่งฉันคิดว่ามันจะ ฉันพบหน้าดีกว่าสำหรับ taskel และจริง ๆ แล้วทำให้แอพ ncurses ( taskselไม่มีตัวเลือก) ค่อนข้างแน่ใจว่าตอนนี้ 'u' หมายถึงmetapackages ไม่ได้ถูกติดตั้งและถ้าคุณติดตั้ง 'เดสก์ท็อป' คุณจะได้รับมากกว่า lxde รุ่นwiki.debian.org/taskselดังนั้นจึงไม่มีลูกเต๋า ฉันสังเกตเห็น metapackage "xorg" จากapt-cache search metapackageนั้นไม่ได้ถูกติดตั้งเช่นกัน ฉันคิดว่าโทษของราสเบี้ยน
goldilocks

2
ฉันจะทิ้งคำตอบนี้ไว้เพื่อช่วยชีวิตใครบางคนให้สิ้นซากหรือในกรณีที่ทุกคนสามารถหลั่งน้ำตาได้ดีกว่า
goldilocks

5

หรือคุณสามารถลองใช้ภาพขนาดเล็กของ Raspbian นี้ได้ที่: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/


2
ไม่ตอบคำถามเลย คำถามคือวิธีการถอนการติดตั้ง X ไม่ใช่วิธีการติดตั้งระบบปฏิบัติการใหม่โดยไม่ต้อง X นี้จะถูกทิ้งไว้เป็นความคิดเห็นที่ดีที่สุดลองถามคำถามของคุณเองหรือให้คำตอบที่เป็นประโยชน์เพื่อรับตัวแทนที่จำเป็นในการแสดงความคิดเห็น ลิงค์ที่ดีไม่มีน้อย
Impulss

3

จากข้อมูล taskel เป็นไปได้ที่จะพบว่ามี meta-package task-desktop ซึ่งอ้างอิงแพ็คเกจ GUI ที่เกี่ยวข้องอื่น ๆ ทั้งหมด ดังนั้นเพียงแค่

sudo apt-get remove task-desktop

สิ่งนี้จะลบแพ็คเกจอื่น ๆ (ที่เกี่ยวข้องกับ GUI / เดสก์ท็อป)

พื้นหลัง: ชื่อของแพ็กเกจtask-desktopสามารถพบได้โดยการรันคำสั่ง taskel ต่อไปนี้:

tasksel --list-tasks
tasksel --task-packages desktop

0

อีกทางเลือกหนึ่งคือการใช้ความถนัดที่คุณควรจะได้รับหากคุณจะทำมากกว่าแค่ติดตั้งหรือลบแพ็คเกจออกไป

sudo aptitudeเริ่มต้นความถนัดเป็นรากโดยการพิมพ์ ในมุมมองแพคเกจมาตรฐานของความถนัดรายการสุดท้ายอยู่Tasksที่คุณสามารถเลือกตัวเลือกต่าง ๆ ที่แสดงรายการโดย taskel นำทางผ่านรายการที่มีj, และk enterทำเครื่องหมายรายการที่จะลบออกโดยการป้อน_(ขีดล่าง) ในรายการที่ไฮไลต์ นี่เป็นการเตรียมการกระทำเท่านั้น gเพื่อดำเนินการกระทำที่กด

อ่านข้อมูลเกี่ยวกับความถนัดในคู่มือเดเบียน


0

พิมพ์รหัสนี้:

sudo apt-get purge desktop-base lightdm lxappearance lxde-common lxde-icon-theme lxinput lxpanel lxpolkit lxrandr lxsession-edit lxshortcut lxtask lxterminal obconf openbox raspberrypi-artwork xarchiver xinit xserver-xorg xserver-xorg-video-fbdev

1
ดังนั้นเพื่อชี้แจงความแตกต่างเพียงอย่างเดียวระหว่างบรรทัดคำสั่งของ OP กับคุณคือการใช้คำสั่งpurgeen แทนremoveหรือไม่?
Greenonline
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.