是否可以在不引入数百个其他软件包的情况下安装 x11?

Is it possible to install x11 without pulling in hundreds of other packages?

我敢肯定这是一个愚蠢的问题,但我还是要问。 是否可以在 OpenSuSE 机器上安装 xterm 和 xorg-x11-fonts 软件包,而无需引入它似乎依赖的大量其他软件包?真的需要那么多包裹中的所有东西吗?如果没有,那么我想知道的是如何 trim 列出该列表并仍然具有功能性 Xterm。 (比如可能选择一个向下几个级别的包并强制安装它而不需要它的某些依赖项)。

如果您花足够的时间来理清每一步的依赖关系,您也许能够做到这一点。

话虽如此,我并不认为这是一个简单的过程,甚至不一定是一个富有成果的过程。如果依赖项发生变化,它也将在以后以潜在的混乱和混乱状态结束。您还需要继续维护此块,因为未来的升级可能会拉入跳过的包。

这通常也不是处理事情的好方法。如果您真的对降低依赖性感兴趣,您最好尝试自己从源代码构建 xterm(尽管这实际上可能没有多大帮助)。

如果您使用的是基于 Red Hat 的发行版之一,那么通常的反应是展示如何使用 yum 查找依赖项。 OpenSUSE 没有使用 yum,但提供了类似的工具 zypper.

如前所述,列表会很有帮助。如果我运行

zypper search --requires xterm

只显示了十几个包:

S | Name                            | Summary
--+---------------------------------+------------------------------------------------
i | codelite                        | Powerful open-source, cross platform code editor
  | eaglemode                       | Eagle Mode the deep application Cosmos
  | leechcraft-shaitan              | LeechCraft Shaitan Module
i | lxterminal-lang                 | Languages for package lxterminal
  | package-lists-openSUSE-GNOME-cd | Patterns for Installation (full ftp tree)
  | package-lists-openSUSE-KDE-cd   | Patterns for Installation (full ftp tree)
  | package-lists-openSUSE-X11-cd   | Patterns for Installation (full ftp tree)
  | package-lists-openSUSE-images   | Patterns for Installation (full ftp tree)
i | xdg-menu                        | XDG Menus for WindowMaker and other Window Manager
i | xdm                             | X Display Manager
i | xinit                           | X Window System initializer
i | xterm                           | X terminal emulator (development version)

但是 xorg-x11-fonts 的相同命令显示了 200 多个包,包括 xorg-x11-server

但是,以这种方式查看依赖关系只给出了故事的一个方面:它显示了删除给定包的效果。实际提出的问题是:作为添加这两个包的副作用,将 添加 哪些包。该列表通常比 --requires 选项显示的列表更短(通常 很多)。

例如,如果您真的只想 xterm 在一台机器上可用,这样您就可以 ssh 进入服务器并 运行 xterm 在您的本地机器,您不需要在 远程 机器上安装 X 服务器。需要的是字体以及 xterm 使用的 运行 时间库。您可以获得这些库正在使用的内容的(更粗略的)图片

rpm -qR xterm

例如:

/bin/bash
/bin/sh
/bin/sh
/bin/sh
aaa_base
libICE.so.6()(64bit)
libX11.so.6()(64bit)
libXaw.so.7()(64bit)
libXft.so.2()(64bit)
libXmu.so.6()(64bit)
libXpm.so.4()(64bit)
libXt.so.6()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libfontconfig.so.1()(64bit)
libtinfo.so.5()(64bit)
libutempter.so.0()(64bit)
luit
perl
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsLzma) <= 4.4.6-1

这些是 xterm 包的直接 file 依赖项。由于 rpm 跟踪依赖关系的方式,您可能会注意到列表中有一些明显的重复。但是十几个软件包(一些 已经 安装)就是这个列表的总和。

可以编写一个脚本,为每个文件询问 zypper --provides 并获得一个包列表,这些包将通过在裸机服务器上安装 xterm 来拉入。这将给出最终列表的第一个近似值。但是,这不会显示必须作为副作用安装的包。越过那个更难——这就是 zypper 的目的。

如果您从没有安装 xterm 的配置开始,请 zypper 安装 xterm 包(获取 short 添加包的列表),然后取消安装。