那么我们为什么要阅读本文呢?也就是说我为什么要撰写这篇文章呢?我的动机是帮助消除广泛采用自由且开放源码的软件时的两个障碍:
- 认为 Linux 安装困难,并会造成破坏性的影响
- Linux 的硬件支持的不确定性
大部分计算机用户都非常熟悉 Microsoft Windows 环境,这上面提供了各种屏幕保护程序,它们可以用来在用户离开计算机时保护数据不被那些未经授权的用户访问。
现在有很多自由且开放源码的软件可以把 Linux 作为一个 Windows 屏幕保护程序来安装并运行。本文将向您展示如何构建一个适当的 CD 或 DVD;并且在这个过程中向您展示软件的 “自由” 和 “不自由” 这两个对立面并非是一分为二的。
本文中采用的例子符合 IBM 的三个当前目标:
- 结束 OS/2 业务
- 重新进行教育
- 鼓励人们学习科学
OS/2 在 2005 年 12 月 23 日 就正式结束了自己的使命。根据 IBM Web 站点上有关 OS/2 Warp 迁移的说法(请参阅 参考资料),IBM 并没有为 OS/2 提供一个替代产品。IBM 建议 OS/2 客户可以考虑使用 Linux。
但是究竟使用哪一个 Linux 发行版呢?如果不清楚客户机的目的是什么,那么泛泛地给出一个建议是不负责任的。然而,到了 2005 年 12 月 25 日,对 GamesKnoppix St. Nicholas' Day 的需求已经很大,发行软件的能力也已足够。如果您将其配置为一个屏幕保护程序,即使按下一个错误的键来启动它也是不可能的。
图 1. GamesKnoppix St. Nicholas' Day
基本的 ISO 是 GamesKnoppix 3.7-0.1(请参阅 参考资料)。
重新教育是 IBM 博爱努力的焦点 —— 不过 IBM 对这方面所提供的产品的支持也是有限的。以这些任务为己任的组织,例如 UNESCO(United Nations Educational, Scientific, and Cultural Organization),都使用了自己所有的资源来实现这个目标。UNESCO 还与 Organization for Free Software in Education and Teaching 进行合作,创造了一个 “UNESCO Linux”(Freeduc-CD)。它的许可证模型非常清楚:他们接受捐赠,并且免费提供产品。
另外,将 UNESCO Linux 配置为一个 Windows 屏幕保护程序可以消除用户的恐惧、不确定和怀疑。
图 2. UNESCO Linux/Freeduc-CD
基本的 ISO 是 freeduc-cd 1.4.1(请参阅 参考资料)。
促进科学研究和发展是 IBM 博爱努力的另外一个重要方向 —— 如果没有这些努力,将来就不会有 IBM 的员工了(也就不会有客户机了)。然而 Big Blue 这样的机器是不可能部署到世界各地的。这就是为什么要使用 Knosciences。
这个 Linux 屏幕保护程序是由 Nathalie Carrie 和 Arnaud Verhille 开发的,他们是 Reunion Island(这是印度洋中的一个法国殖民地)的科学教师。这个屏幕保护程序中提供了大约 700MB 的应用程序,来帮助学校中的孩子们学习数学和物理。Verhille 曾经咨询过这样的问题:“我从哪儿可以获得免费的 Java 呢?” 因为他担心按照 Sun® 的许可证条件,他的工作会受到影响。
图 3. Knosciences
在本文中我使用的是 Knosciences 0.95(请参阅 参考资料)。
让 ISO 文件能够在另外一个操作系统上运行需要一个开放源码的 PC 模拟器,这包括开放源码的 BIOS 和一个开放源码的虚拟图形适配器(例如 QEMU 9.7.2)。这个模拟器让您可以在一个实际的 PC 中再构建一个虚拟的 PC。要构造一个屏幕保护程序,最好的方式就是为其配置一个虚拟的光驱、键盘、屏幕和鼠标,但是不需要虚拟磁盘和网络适配器。
记住,在模拟器中运行另外一个操作系统的速度会比较慢(甚至 “非常慢”,就像是运行解释的 Java 代码一样)。但是由于我们是在屏保模式下运行这个系统,因此现代的 PC 硬件的速度都足以满足这个任务的要求。
下面是具体实施的步骤。
您需要重新编译 QEMU —— 我从一个 QEMU 论坛上学习到可以按照下面的步骤来编译它(请参阅 参考资料)。下载以下包:
- Minimalist GNU for Windows 组件:
- MinGW。这是一组可以自由使用和发布的 Windows 特定的头文件和导入库,还有一些 GNU 工具集,使用它们可以编译出不依赖于第三方 C 运行 DLL 的 Windows 程序。
- MSYS,一个 Minimal SYStem。它允许使用一些 POSIX/Bourne 配置脚本来执行并创建
make命令所使用的 makefile。 - msysDTK。这是 MSYS 的一些插件,包括 telnet 和 rlogin。
- SDL,Simple DirectMedia Layer。这个跨平台的多媒体库被设计用来提供对音频、键盘、鼠标、操纵杆和 3D 硬件(通过 OpenGL 和 2D 视频帧缓存)的低级访问。
- zlib。这个无损数据压缩库可以在任何虚拟计算机硬件和操作系统上运行,SDL 需要使用这个库。
- directx。在 Windows 上运行 SDL 时需要这个库。
- Inno Setup。这是一个免费的 Windows 程序的安装程序。
Inno Setup 可以帮助您按照一种 Windows 用户熟悉的方式来对软件进行打包。我使用的版本是 5.1.5。
对于作为 Windows 屏幕保护程序运行的程序来说,它需要采用类似于 “Knosciences.scr” 的名字,并且需要安装到 C:\WINDOWS\SYSTEM32\ 目录中。它将使用诸如 Knosciences.scr /s 这样的命令从命令行启动,并且其当前目录是 C:\WINDOWS\SYSTEM32\。
我们对 QEMU 中的文件 vl.c 进行了如下的修改,这样就可以使用 /s 开关并在全屏模式下运行了。这种实现消除了对虚拟网卡的需求;如果您去掉指定 net_if_type 的那行代码,就具有了一个可以将 Windows 作为 NAT 路由器防火墙的屏幕保护程序。
清单 1. 修改 QEMU,使其可以作为一个屏幕保护程序运行
for(;;) {
if (optind >= argc)
break;
r = argv[optind];
if (r[0] != '-') {
if ( 0 == strcmp(r,"/s") ) {
/* Going to run as a Windows screen saver */
full_screen = 1 ;
bios_dir = "." ;
ram_size=512*1024*1024 ;
boot_device='d' ;
hd_filename[cdrom_index] = "knosciences-0.95.iso" ;
rtc_utc = 0;
net_if_type = NET_IF_DUMMY;
optind += 1 ;
} else {
hd_filename[0] = argv[optind++];
}
} else {
...
}
if ( full_screen == 1 )
{
putenv("SDL_VIDEODRIVER=windib") ;
}
|
在编译好 QEMU 之后,将 qemu.exe 文件的 i386-softmmu 版本重命名为 Knosciences.scr。
Inno Setup 可以使用下面的脚本将这个屏幕保护程序和 ISO 文件放到 C:\WINDOWS\SYSTEM32\ 目录中:
清单 2. 安装程序的脚本
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
;
[Setup]
AppName=Knosciences Screen Saver
AppVerName=Knosciences Screen Saver
AppPublisher=OFSET
AppPublisherURL=http://www.ofset.org/
AppSupportURL=http://www.ofset.org/
AppUpdatesURL=http://www.ofset.org/
DefaultDirName={pf}\Knosciences
DefaultGroupName=Knosciences
Compression=lzma
SolidCompression=yes
[Files]
Source: "{src}\qemusaver\Knosciences.scr"; DestDir: "{sys}"; Flags: external
Source: "{src}\qemusaver\knosciences-0.95.iso"; DestDir: "{sys}"; Flags: external
Source: "{src}\qemu\SDL.dll"; DestDir: "{sys}"; Flags: external
Source: "{src}\qemu\bios.bin"; DestDir: "{sys}"; Flags: external
Source: "{src}\qemu\vgabios.bin"; DestDir: "{sys}"; Flags: external
Source: "{src}\qemu\vgabios-cirrus.bin"; DestDir: "{sys}"; Flags: external
Source: "{src}\qemu\qemu-doc.html"; DestDir: "{app}"; Flags: external
Source: "{src}\qemu\vl.c"; DestDir: "{app}"; Flags: external
Source: "{src}\qemu\LICENSE\LICENSE"; DestDir: "{app}\LICENSE\LICENSE";
Flags: external
Source: "{src}\qemu\LICENSE\README-SDL.txt"; DestDir: "{app}\LICENSE\README-SDL.txt";
Flags: external
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}\Knosciences Screen Saver"; Filename: "{sys}\Knosciences.scr"
Name: "{group}\{cm:UninstallProgram,Knosciences Screen Saver}"; Filename: "{uninstallexe}"
|
下面是这张 CD 所需要的文件结构:
autorun启动屏保安装程序、“live” Knosciences 以及文档查看器。- /qemu 中的文件都是与 “live” Knosciences 有关的。
- SetupQemuSaver.exe 文件是由 Inno Setup 生成的屏保安装程序。
- /qemusaver 中的文件是屏保和原始的 ISO 文件。
- /Knosciences 中的文件是原始 CD 中的文档。
清单 3. 最终 CD 中的文件
. ./autorun.bat ./autorun.inf ./autorun.pif ./qemu ./qemu/bios.bin ./qemu/linux_boot.bin ./qemu/qemu-doc.html ./qemu/qemu.exe ./qemu/qemu-img.exe ./qemu/qemu-knoppix.bat ./qemu/vl.c ./qemu/qemu-tech.html ./qemu/qemu-win.bat ./qemu/README-en.txt ./qemu/README-ja.txt ./qemu/SDL.dll ./qemu/vgabios.bin ./qemu/vgabios-cirrus.bin ./qemu/LICENSE ./qemu/LICENSE/LICENSE ./qemu/LICENSE/README-SDL.txt ./qemusaver ./qemusaver/qemusaver.iss ./qemusaver/Knosciences.scr ./qemusaver/knosciences-0.95.iso ./cdrom.ico ./SetupQemuSaver.exe ./Knosciences ./Knosciences/index.html ./Knosciences/knosciences-0.95.css ./Knosciences/knosciences-0.95.html ./Knosciences/labels.pl ./Knosciences/node1.html ./Knosciences/node10.html ./Knosciences/node100.html ./Knosciences/node101.html .. ./Knosciences/node97.html ./Knosciences/node98.html ./Knosciences/node99.html ./Knosciences/WARNINGS ./index.html |
autorun.bat 文件(在将 C 放到光驱/播放器中时就会启动)的内容如下:
清单 4. autorun.bat
@start SetupQemuSaver.exe @start index.html @cd qemu @start /MIN qemu-knoppix @exit |
qemu-knoppix.bat 文件(它会将 Knosciences demo 作为 autorun 系列过程的一部分来启动)的内容如下:
清单 5. qemu-knoppix.bat
@echo off
REM KNOPPIX on Windows File System
REM Written by Japanese KNOPPIX TEAM 2004.08.17
REM Contact: knoppix@m.aist.go.jp
REM License GPL
REM If you get iso image of KNOPPIX, please use the following options.
REM Join the following two lines before running this bat file; it was split
for space purposes.
qemu.exe -L . -m 128 -boot d -cdrom ../qemusaver/knosciences-0.95.iso
-user-net -enable-audio
-localtime
REM ^^^^^^^^^^^^^^^^^^^^^^^^^^
exit
|
下面的 shell 函数可以创建 ISO 映像文件。您也可以在 Windows 上创建 CD 的映像文件;这个 CD 不需要是可以启动的。
清单 6. 构造 ISO 映像
function remaster_mkisofs
{
mkdir -p ${wrkdir}/new_iso
mkisofs -pad -l -r -J -v -V "Knosciences" \
-hide-rr-moved \
-publisher "OFSET http://www.ofset.org/" \
-p "http://www.ofset.org/" \
-volset "Knosciences 0.95 for Windows (knosciences 0.95 with QEMU 0.7.2)" \
-o ${wrkdir}/new_iso/freeduc.iso ${wrkdir}/files
}
|
这就是从一张 LiveCD 上安装 Linux 并将其作为一个 Windows 机器的屏保来运行所需要的所有步骤。享受它吧!
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
-
阅读下面的文章,学习有关 LiveCD 技术和 Linux 的知识:
- “Spin up a Linux LiveCD”(developerWorks,2004 年 7 月)介绍了有关如何使用 LiveCD 的背景知识。
- “Assess system security using a Linux LiveCD”(developerWorks,2005 年 7 月)可以帮助您评估系统的风险,而不需要进行冗长的安装和配置。
-
在 “Open source licensing, Part 1: The intent”(developerWorks,2005 年 10 月)中,Martin Streicher 介绍了版权和开放源码许可证的问题。
-
在 Open source licensing, Part 2: Academic v. reciprocal (developerWorks,2005 年 11 月)中,Streicher 继续探讨了两种最流行的开放源码许可证:学院许可证和互惠许可证。
-
按照 “Windows-to-Linux roadmap” 的步骤(developerWorks,2003 年 11 月),将您在 Windows 环境中的技能迁移到 Linux 上。
-
“Write emulator-friendly Linux code”(developerWorks,2004 年 12 月)展示了模拟器可以实现什么功能,并详细介绍了硬件模拟和软件模拟的问题。
-
“OS/2 Warp migration information” 提供了有关从 OS/2 上应该转向哪里的重要信息,这很快就会记录在操作系统的历史教材中了。
-
Innovation Opens Up 介绍了 IBM 对于将来的战略眼光。
-
在 developerWorks Linux 专区 中可以找到为 Linux 开发人员准备的更多资源。
-
跟踪 developerWorks 技术事件和 Webcasts 的最新进展。
获得产品和技术
-
GamesKnoppix 3.7-0.1,这是由德国 University of Kaiserslautern 的学生所创建的一个 Live Linux ISO,其中包括了对于各种 3D 图形适配器、游戏杆和 xsnow 动画壁纸的支持。
-
freeduc-cd 1.4.1 是由 Organization for Free Software in Education and Teaching 所创建的一个 Live Linux ISO,它是由 United Nations Educational, Scientific, and Cultural Organization 赞助的。
-
Knosciences 是由 Nathalie Carrie 和 Arnaud Verhille 所创建的一个 Live Linux ISO,他们是 Reunion Island(印度洋中的一个法国殖民地)的科学教师。
-
Harmony 试图按照 Apache License 2.0 来创建一个可兼容的、独立的 J2SE 5 的实现。您可以注册获得 Apache Harmony developer kit。
-
QEMU 是 Fabrice Ballard 编写的一个开放源码 PC 模拟器。
-
Minimalist GNU for Windows 包中包括 MSYS、msysDTK 和 MinGW。
-
QEMU 使用 Simple Direct Layer 来访问屏幕、键盘和鼠标。作者使用了 SDL 1.2.8 package、zlib 1.2.2 (压缩库)和 directx(在 Windows 下使用)。
-
Inno Setup 是一个开放源码应用程序,可以用来为在 Windows 上使用的程序构建安装包。
-
LinuxTracker 是人们可以交换自由开放源码软件的地方之一(它使用 BitTorrent 方法来分发软件)。此处的软件都是 “as is” 模式(是什么就是什么)—— 使用时您要自负风险。
-
在您的下一个开发项目中采用 IBM 试用软件,这可以从 developerWorks 上直接下载。
讨论
-
QEMU Forum 上有对 QEMU 这个开放源码 PC 模拟器的讨论。
-
通过参与 developerWorks blogs 加入 developerWorks 社区。

Chris Ward 于 1982 年从英国剑桥大学加入 IBM。他曾经见证过硬盘的出现和发展,见证过 OS/2 的诞生和消亡,并且见证了 Windows 和 Linux 的问世,但是还没有看到它们的终结。他曾经为 IBM Journal of Research and Development 撰写过有关 BlueGene/L 的文章。他将为 IBM 的商业客户机或 IBM 的 On Demand Community 所支持的慈善团体或学校创造各种东西。您可以通过 tjcw@uk.ibm.com 与 Chris 联系。