Mini KDE,打造轻量级桌面
许多用户只需要电脑进行基本的办公、网页访问和电子邮件。所有这些任务都有免费软件,但它们也有隐藏的成本。通常,学生、学校和慈善机构只能负担得起五年或更旧的硬件,这些硬件的 CPU 功率和磁盘空间都有限。看似奇怪的是,后者往往是最严重、看似无法解决的问题。您可能只需要五六个小型程序,但它们只能以大型捆绑包的形式提供,而这些捆绑包又有很多依赖项。实际的总空间需求可能非常大,以至于安装程序会因空间不足而中止。
通常,安装最新的但功能精简的应用程序是无用的。台式电脑是通信工具。今天,这意味着至少要有数字签名、IMAP 支持、通过 SSL 或 XHTML Web 表单检查银行账户等等。这也意味着必须支持 OpenDocument,这是一种办公文件格式,是 OpenOffice.org 2.0 中的默认格式,已引起欧盟的极大兴趣,并很快将成为 ISO 标准。
安装较旧的发行版是无用的,原因相同,而且启动也很危险:人们为什么要上网,将自己暴露于多年前就已知的安全漏洞之下?此外,除非您有时间和技能来自己编写修复程序,否则对五六年旧代码的免费在线支持实际上是不存在的。
所有这一切就是为什么几年前,我和其他人启动了 RULE 项目——使使用旧硬件成为可能,通过仅安装真正需要的东西来运行最新的主流 GNU/Linux 应用程序。然而,我们的方法也为现代硬件提供了几个优势。首先,RULE 项目使任何计算机更容易以其最大可能的速度运行。
第二个优势是用今天构建的东西运行正常的 x86 软件,它比笔记本电脑更小巧且功耗更低。去年,一位用户致力于将 Norhtec Microclient 改造成台式机,他写道,“很高兴看到 RULE 提供了 ALSA、Udev 和所有其他最新的好东西……仅 232MB……因为 Fedora 3 提供了它们”。
第三个大幅削减现代程序的刺激也与老式电脑无关:可启动的 Linux CD-ROM 和 USB 驱动器非常适合作为便携式应急桌面,但需要很少的空间。
最后一个原因使所有这些练习都值得,但这仅对 KDE 开发人员和打包者感兴趣,所以我稍后会提到它。
一个有用但轻量级的桌面有哪些特性?对我来说,就是刚才提到的那些。这就是为什么我决定重新打包 KOffice、Konqueror、KMail、KNode,几乎没有其他东西。
KOffice 没有 OpenOffice.org 那么多功能,但它更轻巧,对 Java 的依赖性更小,与 Linux 的集成度更高,并且有一天可以与 OpenOffice.org 共享单文件 SQL 数据库(请参阅在线资源)。最重要的是,KOffice 的路线图正式预见了对 OpenDocument 的完全支持。我们在此称之为 Mini KDE 的结果,必须需要尽可能小的磁盘空间和 RAM 才能运行。本文的其余部分总结了我为实现此目标所做的工作。
我希望最终得到二进制软件包,因为许多桌面最终用户不知道如何自己编译,而且在六七年前的机器上编译会很耗时(如果不是不可能的话,因为编译器、库、源代码和中间编译文件又会不适合较小的硬盘)。一般来说,可以通过三种不同的方法获得优化的 KDE 软件包
使用适当的编译器选项优化应用程序及其相关库的源代码。
仅编译、打包和安装捆绑包的选定部分。
配置结果,以便应用程序启动和运行更快。
最后一种方法甚至在安装后也可以或必须应用。对于 KDE 应用程序,KDE 性能技巧页面中已经记录了这一点(请参阅资源)。
第一种方法依赖于发行版和编译器;它也超出了像我自己和大多数普通用户这样的非程序员的技能范围。另一个问题是几乎没有相关的在线信息;即使在开发者列表上询问也没有获得太多帮助。推向极端,这种方法还意味着针对定制版本的 Qt 进行编译,就像 RULE 网站上讨论的那样进行精简,这几乎就像创建另一个发行版。然而,从我的角度来看,这种方法的最大限制是它并没有大大减少整个软件包的大小,我们认为这是第一个障碍。
最有希望的策略,也是我在本文其余部分讨论的策略,是第二种——尽可能多地从原始捆绑包中删除内容,从而最大限度地减少工作量、所需技能和风险。以下解释基于为 Fedora 3 构建 RPM,但通用过程对每个 GNU/Linux 发行版或打包格式都有效。除了最大的空间节省之外,这种方法的另一个巨大优势是生成的二进制文件与 Fedora Core 或您开始使用的任何其他主流发行版保持兼容。
首先,我清理了运行 Fedora Core 3 的计算机。部分原因是为了腾出一些额外的空间,但主要原因是创建一个干净的环境来构建软件包。经过一些检查和思考,我删除了以下软件包,这些软件包最初是从 Fedora Core 或 KDE/Red Hat 存储库安装的:kdeedu、kdeartwork、KOffice、kdesdk、kdevelop、kdepim、kde、kdebase、kdelibs 和 kdelibs-devel。
以下是进行此类精简练习的另一个原因:您可以了解很多关于软件包之间如何关联的信息。具体来说,您会发现当发行版只是将软件捆绑在一起而不注意时,仍然隐藏着不必要的依赖项和打包错误。例如,我了解到,至少在 Fedora 上,我无法删除 redhat-menus-3.7.1-3.4.3.kde,因为它被表面上不相关的东西所需要,包括 htmlview、gnome-vfs、openoffice.org-1.1.2、Evolution、XMMS 和 Nautilus。
arts(KDE 的模块化声音系统)及其开发补充 arts-devel 也发生了同样的情况。即使没有声卡,老式桌面的用户当然也能够生存,而无需声学效果。然而,许多应用程序都需要这两个软件包,包括 gstreamer 插件、gnome-applets、Evolution 等等。一旦您找到其中一些依赖项,它们确实有道理,但其他依赖项仍然让我感到困惑。无论如何,在这个层面上似乎有很多节省空间的机会。
清理硬盘后,我从 apt.kde-redhat.org/apt/kde-redhat/all/SRPMS.stable 安装了最新的稳定源代码 RPM kdelibs、kdebase、kdepim 和 KOffice。当我开始时,它们是
kdebase-3.4.1-1.0.kde.src.rpm
kdelibs-3.4.1-1.0.kde.src.rpm
kdepim-3.4.1-1.1.kde.src.rpm
koffice-1.3.5-3.0.kde.src.rpm
我选择了 KDE for Red Hat 项目,而不是官方的 Fedora Core 软件包,因为我发现它们比标准软件包更完善。它们通常还提供较新版本的软件包。
当您安装源代码 RPM 时,您会在 .tar.bz2 存档中获得所有源代码,并在 .spec 文件中获得构建所有内容的说明。通常,要构建软件包,您只需要发出命令
rpmbuild -ba <package_name>.spec
为了减少磁盘空间,我基本上做了两件事,这两件事对于非程序员来说都相对简单。首先是修改 .spec 文件中的编译和安装选项。例如,我编译了所有没有声音的东西,添加了-without-arts到配置部分。在可用时,我还添加了类似的选项来忽略其他多媒体库或对手机和 PDA 等设备的支持。然后,我注释掉了所有 Require 和 BuildRequires 指令,这些指令在启动进程之前检查音频、视频和现代外围设备的库是否可用。我还删除了我遗漏的所有二进制文件的 Provides 指令。最后,我注释掉了将我未编译或不需要的文件打包到二进制 RPM 文件中的指令。
我的完整 .spec 文件可在 RULE 网站的 Mini KDE 部分找到。
第二个也是最重要的技巧是在每个 KDE 源代码 tarball 中插入一个正确的 inst-apps 文件。事实证明,这些程序的配置脚本有一个部分或多或少是这样说的(来自 kdelibs)
ac_topsubdirs= if test -s $srcdir/inst-apps; then ac_topsubdirs="`cat $srcdir/inst-apps`" elif test -s $srcdir/subdirs; then ac_topsubdirs="`cat $srcdir/subdirs`" fi
$ac_topsubdirs 是必须编译和安装其代码的所有子目录的列表。默认情况下,此变量加载了 subdirs 文件中写入的所有内容。但是,如果您将 subdirs 复制到 inst-apps 中,从后者中删除所有不需要的项目,然后再次 tar 和压缩所有内容,则只会编译您想要的应用程序。这在直接从源代码安装时也有效。
一般来说,要弄清楚您可以或不能从 inst-apps 中删除哪些内容,请查看每个子目录中的 README 文件。以下是我对每个软件包所做工作的简短摘要。
我仅删除了以下项目:arts、kdoctools、kate、libkscreensaver 和 doc。在 %configure 部分中,我排除了 xinerama、alsa 和 artsd 支持。我还注释掉了 Requires: arts 指令,以及 jasper 和 openexr 的指令。
我从 kdebase 中想要的唯一部分是 libkonq、Konqueror、Kicker 和 Kwin。我能够排除对 xinerama、jasper、arts、Java、GL、Samba、lm-sensors、mDNSResponder-devel 和 libraw1394-devel 的支持。我省略了壁纸。我还删除了声音和模板,以及对 redhat-artwork 软件包的依赖。但是,我不得不把它们放回去,否则 RPM 无法完成,原因尚不清楚。
在这里,由于我只需要 KMail、Kopete 和 KNode,所以我删除了很多程序:karm、knotes、kdgantt、kgantt、korn(邮件通知程序)、kpilot、kmobile 和 ksync、kandy、kitchensync、kalarm、kresources、kfile-plugins、konsolekalendar、korganizer、wizards、kontact 和插件。即使来自 bluez-libs-devel (Bluetooth) 和 gnokii (Nokia 手机支持) 的 BuildRequires 依赖项也消失了,没有出现问题。
表 1 显示了生成的二进制软件包的大小(第一列),与来自 Fedora Core 4 的相同源代码版本的标准 RPM 相比,对于 KOffice,则与 Fedora Core 3 更新存储库相比。
表 1. 二进制软件包大小比较(大小单位:字节)
软件包名称 | Mini KDE | Fedora |
---|---|---|
kdebase-3.4.1-1.0.kde.i386.rpm | 17,798,755 | 27,736,762 |
kdelibs-3.4.1-1.0.kde.i386.rpm | 15,109,882 | 18,140,844 |
kdepim-3.4.1-1.1.kde.i386.rpm | 9,864,436 | 18,089,962 |
koffice-1.3.5-3.0.kde.i386.rpm | 14,514,826 | 14,276,427 |
总而言之,上述四个软件包的总大小从 78.24MB 减少到 57.29MB。文件大小减少了 26.8%,这看起来还不错,但最终节省的空间只有 20.95MB。然而,对磁盘空间的实际影响更好;Mini KDE 需要略少于 150MB 的空间。相同的四个捆绑包加上它们携带的额外捆绑包的常规软件包总共略少于 340MB。
请记住,这些只是我第一次试验的结果,没有更改或查看源代码,并且保持与我选择的发行版、其所有更新和任何第三方 Qt 程序的完全兼容性。本文中的所有屏幕截图都显示,生成的二进制文件在 Fedora Core 3 上运行没有问题。
您可能注意到,真正的节省仅来自 kdebase 和 kdepim。这是预料之中的。我还没有弄清楚为什么 KOffice 变得稍大一些,但我想要保持功能,所以我没有从中删除任何东西。我只是重建了软件包,以确保我精简后的 kdebase 和 kdelibs 与它兼容。
就其他软件包而言,KDE 是建立在公共基础上的许多程序的捆绑包。即使您只使用少数程序,那组核心库、守护程序等等也无法变得更小。这就是 kdelibs 和部分 kdebase 几乎保持不变的原因。与此同时,说“我只想要五六个应用程序,而不是 40 个”实际上使 kdebase 和 kdepim 小得多,几乎没有影响其余程序的功能。
当然,我肯定遗漏了一些东西,还有一些技巧我仍然需要学习,并且在我描述的方法中还有很大的改进空间。然而,这只是第一次测试:最终目标,除了减小软件包大小之外,还要使每个发行版上 Mini KDE 的编译和打包过程尽可能自动化。这样,每当发布新的 KDE 或 KOffice 版本时,就可以快速轻松地为所有硬件有限且没有足够技能从源代码开始的用户提供它们。
为了实现这一目标,有必要尽可能多地发现、收集和记录关于几个 subdirs 文件中的项目如何相互关联的信息,以及任何其他优化技巧。欢迎提出建议!
我将继续与 RULE 和 Ubuntu-lite 邮件列表中的朋友们一起在这个领域进行实验,我感谢他们对这个想法的支持和兴趣。您可以在 RULE 网页上找到 Mini KDE 的所有结果和说明。
还要特别感谢 Luciano Montanaro、D. Faure 和所有 KOffice 开发人员,他们提供了许多初始信息,让我开始工作。
本文资源: /article/8536。
Marco Fioretti 是一位硬件系统工程师,对自由软件作为 EDA 平台以及作为 RULE 项目的现任负责人,作为高效桌面感兴趣。Marco 与家人住在意大利罗马。