级别: 初级 Chris Ward (tjcw@uk.ibm.com), 咨询软件工程师, IBM
2006 年 1 月 23 日 您可以创建并打包一个 Linux® LiveCD,这样它就可以使用标准的 Microsoft® Windows® 安装过程进行安装,并能像标准的 Windows 屏幕保护程序一样进行工作。本文回答了人们对于开放源码软件最为关心的两个问题,并会展示 Linux 的确可以在 Windows 上运行。
那么我们为什么要阅读本文呢?也就是说我为什么要撰写这篇文章呢?我的动机是帮助消除广泛采用自由且开放源码的软件时的两个障碍:
- 认为 Linux 安装困难,并会造成破坏性的影响
- Linux 的硬件支持的不确定性
大部分计算机用户都非常熟悉 Microsoft Windows 环境,这上面提供了各种屏幕保护程序,它们可以用来在用户离开计算机时保护数据不被那些未经授权的用户访问。
现在有很多自由且开放源码的软件可以把 Linux 作为一个 Windows 屏幕保护程序来安装并运行。本文将向您展示如何构建一个适当的 CD 或 DVD;并且在这个过程中向您展示软件的 “自由” 和 “不自由” 这两个对立面并非是一分为二的。
本文中采用的例子符合 IBM 的三个当前目标:
- 结束 OS/2 业务
- 重新进行教育
- 鼓励人们学习科学
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 —— 我从一个 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
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 的文件结构
下面是这张 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 文件
autorun.bat 文件(在将 C 放到光驱/播放器中时就会启动)的内容如下:
清单 4. autorun.bat
@start SetupQemuSaver.exe
@start index.html
@cd qemu
@start /MIN qemu-knoppix
@exit
|
qemu-knoppix.bat 文件
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
|
创建 ISO 映像的 shell 脚本
下面的 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 机器的屏保来运行所需要的所有步骤。享受它吧!
参考资料 学习
获得产品和技术
讨论
关于作者  | 
|  | 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 联系。 |
对本文的评价
|