我将Raspberry Pi用作无头服务器,可以将其插入。我不需要X Server,LXDE等。

我正在运行Raspbian“ wheezy”。我已经按照此处所述使用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


删除操作似乎有点奇怪。

有没有更简单的方法?是否有一个“超级”程序包,它拥有所有这些图形内容并且可以删除,并带有所有依赖项?据我了解,这似乎是不可能的,因为这些东西尚未自动安装,这意味着我需要跟踪所有它们并显式删除它们。

#1 楼

TL; DR或“只是烧焦我的pi”

sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge


(重复apt-get autoremove --purge直到没有孤儿为止)

进一步的解释

如果一个软件包foo依赖于另一个软件包libfoo,而您删除了libfoo软件包,则依赖项(foo)也将被删除。因为Foo有一个指定libfoo的依赖行,所以如果删除libfoo,则将其保留为foo将被破坏。反之则不成立:删除foo不会自动删除libfoo。另一个软件包xfoo也可能依赖于libfoo,因此apt不会仅仅删除它(尽管apt会跟踪它是否仅作为安装foo的副作用而安装,并会在您要求时自动删除它,所以很长因为没有其他人仍然依赖它)

元软件包依赖于一组其他软件包,就像foo依赖libfoo一样,因此,当您删除元软件包时,通常很少删除。例如,可能有两个依赖xterm的元软件包(也许是lxsession和xfsession),但是卸载一个或两个都不会卸载xterm,因为没有lxsession或xfsession不会破坏xterm。通常,元软件包位于依赖关系树的顶部,而不是底层,并且几乎没有什么东西直接依赖于元软件包。元软件包主要是提供一种方便的方式来一次安装一组合理的软件包,但它们并不是卸载工具。定位所有x11应用最终必须依赖的基本libx11库集:
这将(模拟)删除最终依赖于libx11-。*的所有内容,还将删除所有作为X11程序依赖项安装的软件包,即使它们并不直接依赖X11本身(通常安装了CUPS和Ghostscript)作为安装桌面环境的副作用)。第二个命令将删除后续的孤儿,直到没有孤儿为止。如果要稍后执行此步骤或根本不执行此步骤,请删除“ --auto-remove”,或者在清除GUI后手动重新添加软件包。


删除--dry-run选项可以在检查完该操作后不会真正删除您不希望删除的软件包后执行该操作。)


我更喜欢清理并清除副作用,然后根据需要将其添加回去。另外,我继续在自己的pi上对其进行了测试,然后重新启动到了非常精简但功能正常的服务器上。 :)

为什么删除操作会安装某些东西?

以上策略解决了上述问题,但是仍然存在为什么删除操作会导致安装软件包的好奇心。

每个软件包管理器的核心都是某种可满足性的解决方案。当您告诉程序包管理器安装某些程序包,删除某些程序包或升级某些程序包时,您真正要执行的操作是在给定可用程序包集的情况下解决软件安装的下一个所需状态。该解决方案可以包括安装其他软件包(依赖项),删除现有软件包(冲突,中断),降级/升级特定软件包(兼容性级别)或其组合。因此,虽然求解程序确定需要安装某些软件包才能删除其他软件包是有点违反直觉的,但这还是很有意义的。这是程序包管理器解决的棘手的依赖管理问题。

一个具体示例:给定已经安装了一组Java应用程序,它们都依赖于Java兼容的运行时,该运行时恰好是openjdk-7-jre。然后,您要求软件包管理器解决安装新的Java工具的问题,该Java工具声明与openjdk-7-jre冲突,但可与oracle-7-jre一起使用(这两个软件包通常都提供java-7-runtime)。解决方案将建议删除openjdk-7-jre并安装oracle-java-7-jre,以解决在不破坏现有软件包的情况下安装新软件包的所需状态。

在这种特定情况下,xterm是一个提供称为x-terminal-emulator的虚拟依赖项的软件包(xterm,lxterminal和aterm都提供了x-terminal-emulator),因此很可能在删除lxterminal(作为一部分)删除lxde),求解器找到了一个需要某种x-terminal-emulator的现有安装包(可能是转码),因此求解器选择安装xterm(这需要libutempter0和xbitmaps,说明要安装的其他软件包)。以满足否则破裂的依赖关系。在没有看到软件包数据库的情况下,我假设这是最可能的情况。 --installed开关仅限于已安装的软件包):

sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge


以替换字符“ |”开头的依赖项表示该软件包取决于xterm或它提供的某种东西(在这种情况下,某种东西是x-terminal-emulator)。 clusterssh软件包显式依赖于xterm,并且不允许其他选择。这是导致需要xterm的软件包的简短列表。

deborphan呢?

跟踪孤儿的功能于2010年通过“自动删除”功能(Debian错误582791)并入了apt-get中,从而使deborphan大部分是多余的,实际上已经过时了。与deborphan和其他类似解决方案不同,apt-get直接跟踪哪些软件包已显式安装,哪些软件包作为副作用或对显式安装软件包的依赖性而安装。例如,如果管理员安装了foo,则libfoo是作为副作用安装的,并且如果在删除foo时指定了autoremove(或--auto-remove),则apt-get autoremove实际上将删除libfoo。

deborphan采取的方法是猜测的集合。例如,猜测没有依赖库的已安装库必须是孤立的:如果安装了libfoo,但是foo和xfoo都没有,则deborphan可能会决定它必须是孤立的。此处的一种失败模式是,可能为它们提供的工具专门安装了库(在将XMLlint重新打包为libxml2-utils之前,将libxml2用于xmllint)或仅用于开发目的。这样的包不是孤儿。此外,deborphan专注于库,因此它错过了许多易于跟踪的非库孤儿(过时的包与孤立的包)。

评论


辉煌为我工作谢谢。由于某些原因,它也确实去除了穆宁,但是之后我可以很容易地将其还原。

–天
2013年3月11日12:53



烤焦!我不得不引用'libx11-。*'来防止外壳混乱。

–user9091
13年8月18日在20:16

@Maxx,很好的答案,但是在您所有的情况下,您都没有描述他运行apt-get remove时想要安装xterm和另外两个的方式。我也经历过,无法解决。

–马迪法德
13年8月25日在11:17

干净,未经扩展的Raspbian安装,在apt-get升级后,dist-upgrade:rootfs ... 94%/。在apt-get删除后--auto-remove --purge libx11-。*:rootfs ... 51%/很好的答案,非常感谢!

–丹尼尔F
2015年2月1日在20:16



在apt-get autoremove之后:rootfs ... 41%/ ...

–丹尼尔F
15年2月1日在20:36

#2 楼

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检测到的所有孤立软件包。

第四行删除所有不需要的软件包。

第五行清除程序包缓存。

评论


欢迎来到Raspberry Pi Stack Exchange!尽管从技术上讲这可以回答问题,但最好包括一些解释,说明其工作原理以及其确切作用。

–RPiAwesomeness
2014年9月11日下午16:41

在全新的Raspbian安装上运行这些命令,我​​从4GB SD卡上的不到1GB的可用空间变为2.5GB的可用空间。至少对我来说,这是正确的答案。

– rob
15年1月18日在15:58

接受的答案非常深入,但实际上并没有列出完成OP问题的列表。这个答案可能是准系统,但实际上可以完成OP(和我)的实际需求

–portforwardpodcast
2015年4月5日在2:39

为什么要卸载samba?这不是GUI应用程序。联网可能是必需的。

–狗狗天气
18-10-8在8:54

#3 楼

1 /。要删除我刚刚做过的所有台式机(去煮一壶咖啡。散步需要一段时间)... apt-get remove --auto-remove --purge libx11-.*

2 /。然后我安装了deborphan来清除孤立的文件... sudo apt-get install deborphan

如果您想查看孤立的文件,请执行以下操作... deborphan -sz

3 /。然后,我删除了所有孤立文件... sudo apt-get remove --purge $(deborphan)

最后执行此操作以删除不必要的不​​是孤立文件的包...哨声

评论


apt-get remove --dry-run绝对不执行任何操作,但是在屏幕上显示消息。

– lenik
2014年6月16日下午4:26

#4 楼

在这里看看,但向下滚动到tasksel的部分。

通过wifi ssh在pi上运行tasksel --list-tasks给我(大约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主要用于debian维护人员。如果这样做有效,请告诉我们;)

评论


谢谢,尽管我确实有相当多的Ubuntu经验,但我从未听说过taskel。不幸的是,我尝试了这一点,花了一些时间来运行remove desktop命令,但是根据能力,所有那些“图形”包仍然存在。

–天
13年1月29日在20:39

我也没有,但是当我发现只是删除一些基本的X组件并没有拉动整个依赖堆栈时,我有点不安,我认为那样会。我为taskel找到了更好的页面,并实际上启动了ncurses应用程序(没有选项的tasksel)。可以肯定的是,现在的'u'意味着没有安装元软件包,如果您安装'desktop',您将获得的不仅仅是lxde版本的wiki.debian.org/tasksel,因此没有任何限制。我注意到apt-cache搜索元包中的“ xorg”元包也未实际安装。怪我猜是树莓派。

– goldilocks♦
13年1月29日在20:54



我将保留这个答案,以免别人死胡同,以防万一有人可以说得更好。

– goldilocks♦
13年1月29日在20:56

#5 楼

另外,您可以尝试以下Raspbian最小映像:http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/

评论


根本不回答这个问题。问题是如何卸载X,而不是如何在没有X的情况下安装新操作系统。最好将其留为评论,尝试提出自己的问题或提供有用的答案以获取发表评论所需的代表。不错的链接仍然。

–冲动
13年20月20日在2:49

#6 楼

根据taskel信息,可以发现存在一个元包任务桌面,该桌面引用了所有其他与GUI相关的包。因此,只需

sudo apt-get remove task-desktop


,这将删除大量其他软件包(与GUI /桌面相关)。

背景:软件包名称task-desktop可以通过运行以下taskel命令可以找到:

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


#7 楼

另一个选择是使用aptitude,如果要做的事情不仅仅是安装或删除一些软件包,则应该始终使用aptitude。在aptitude的标准Packages视图中,最后一个列表项是sudo aptitude,您可以在其中选择taskel列出的各种选项。使用Tasksjk浏览项目。通过在突出显示的项目上输入enter(下划线),标记要清除的项目。这只是准备动作。要执行操作,请按_

阅读debian手册中有关能力的信息。

#8 楼

输入以下代码:

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


评论


因此,为了澄清起见,OP的命令行与您的命令行之间的唯一区别是,使用清除来代替删除吗?

– Greenonline
16年2月7日在14:04