coLinux是我极其喜爱的一款虚拟机。它快速而灵巧,最为方便的是它可以直接在Windows中运行——甚至可以作为服务启动!它是我学习Linux的最好的仿真平台之一。本文记录了我在coLinux上安装Debian GNU/Linux的实作过程,参考文献是Cooperative Linux Wiki上的文章DebianGNUcoLinux。
作为开源软件,coLinux在SourceForge.net上提供下载,2006年6月2号发布了最新版本0.***,提供对Linux的内核v2.6.11的稳定支持。安装程序将复制下面的文件到您指定的文件夹中,并自动安装coLinux内核的驱动和虚拟网卡。
|
|
我不喜欢由Windows-Install进行的自动安装,事实上,以受限用户(为了计算机安全,我一般都是用受限用户登入)的权限,我将解压后的文件分别复制到这样几个不同的文件夹中:
新建driver文件夹,将安装程序复制到[netdriver]目录中的网卡驱动文件放在这里:
建立coLinux\dist文件夹,放置不同发行版的Linux虚拟文件系统和配置文件,先建Debian的,配置文件为debian.colinux.xml;事实上,今后我们还会安装Gentoo、Slackware、以及Arch等等,把目录预留出来:
建立coLinux\share文件夹,放置共享的镜像文件和交换文件,其中384Mb.swap_fs是一个384M的虚拟swap文件:
这样,我们的coLinux运行文件就部署好了。
安装coLinux驱动的命令很简单:
这条命令在注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\]分支中登记上键值CoLinuxDriver,并标注coLinux驱动文件的路径和文件名为"ImagePath"="\??\%coLinux File Path%\coLinux\sys\linux.sys",因此,当coLinux的驱动文件linux.sys被移动到其他地方时,需要重新安装驱动以更新注册表键值。
由于现在colinux-daemon.exe只能安装位于同一目录中的linux.sys文件,因此,我们需要将colinux-daemon.exe从bin目录中先暂时移动到sys目录中,安装完驱动后再移回去。
安装coLinux驱动时需要系统管理员权限,如果以受限用户进入操作,可以用RUNAS命令提升权限。
卸载驱动时使用:
查看驱动安装或运行的状态:
安装与配置coLinux网络,是构建coLinux运行环境时相对比较复杂的一个环节,Getting Started with coLinux# Network一节为我们介绍了coLinux网络配置的主要方法:
详细的说明,可以从相关的文献中找到。为了提高性能Network#Recommended Setup中推荐使用两块虚拟网卡:
我们采用这样的配置方法。
第一步,安装一块TAP虚拟高速网卡用于与Windows宿主机的通讯。使用coLinux\driver目录下的tapcontrol.exe程序。
检查是否已有TAP网卡被安装:
升级现有网卡驱动:
安装一块或多块网卡接口:
卸载所有的coLinux适配器:
同样的,安装虚拟网络适配器接口也需要获得管理员权限。
另外,在网卡安装过程会弹出Windows徽标测试的确认窗口,简单的点击“确定”按钮即可。
安装后,将虚拟网卡命令为“coLinux Virtual Gateway”。设置其IP地址为“10.0.0.1”,网络掩码是“255.0.0.0”。
第二步,安装微软环回网络适配器,以成为coLinux第二块网卡桥接的中介。Network#The WinPCAP driver一文提到WinPCAP的连接方式可能会产生这样的问题——这种方式必需一个现存的网络连接并且也许不能正常工作:假如你是与你的ISP直接连接,而他们拒绝在同一条线路上有多个IP——而这正好是我的处境,因此,我得求助于微软环回网络适配器产生一个“假的”现存连接然后让coLinux虚拟网卡通过“ICS”连接到ISP。微软中文知识库文章839013详细描述了如何安装微软环回适配器。
要在 Windows XP 中手动安装 Microsoft 环回适配器,请按照下列步骤操作:
成功安装该适配器后,与其他任何适配器一样,您可以手动配置其选项。如果 TCP/IP 属性配置为使用 DHCP,则该适配器最终将使用一个 autonet 地址 (169.254.x.x/16),因为该适配器并没有与任何物理媒体实际相连接。
安装完成后,将Microsoft环回适配器的网络连接命名为“coLinux Internet Bridge”,并设置在Hosting OS的“家庭或小型办公网络的公用连接”上为“coLinux Internet Bridge”启用 ICS。微软中文知识库文章306126详细讲述了如何配置Internet连接共享。
在主机上执行下列步骤来共享 Internet 连接:
到 Internet 的连接将与局域网 (LAN) 上的其他计算机共享。连接到 LAN 的网络适配器被配置为具有静态 IP 地址 192.168.0.1 和子网掩码 255.255.255.0。
由于我们的Hosting OS安装了多块(虚拟)网卡,在“Internet 连接共享”下,需要从“家庭网络连接”下拉框中选择“coLinux Internet Bridge”以使得Microsoft环回适配器接口可以共享Internet连接,此时,其IP地址被自动设置为“192.168.0.1”。
colinux是无法直接访问磁盘驱动器或其他相关硬件的(Host OS已经锁住它们)。以“colinux block devices(块设备)”、或cobd's的方式,colinux可以通过宿主机操作系统逻辑地读写磁盘分区。需要在配置文件里将每个虚拟的块设备用<block_device>标记分别地单独指列出来:
其中:
例如:
在linux寄宿机的/dev文件系统中建立起适当的块设备后,就可以访问导入到colinux中的虚拟硬件资源了。方便起见,这些设备被命名为/dev/cobdN,这儿N是配置文件中的index编号。对于2.6内核的用户,也可以用/dev/cobd/N来代替/dev/cobdN。如前所述,“cobd”的意思是“Colinux Block Device”。
如果使用来自colinux社区的Linux镜像,这些块设备可能在文件系统中已经有了。否则需要用mknod命令手工创建它们(作为root用户):
也可以使用下面的脚本一次完成:
接下来可以用mount命令加载磁盘镜像(如上例,包含在文件myDiskImage中):
或者,代替以/dev/cobd4来加载磁盘1(第二个物理硬盘)的第二个分区。
命令mknod使用指定名称产生一个FIFO(命名管道),字符专用或块专用文件。通常,一个专用文件并不在磁盘上占用空间,仅仅为操作系统提供交流,而不是为数据存贮服务。一般地,专用文件会指向一个硬件设备(如:磁盘、磁带、打印机、虚拟控制台)或者操作系统提供的服务(如:/dev/null, /dev/random)。块文件通常类似于磁盘设备(在数据可以被访问的地方赋予一个块号,意味着同时设定了一个块缓存)。所有其他设备都是字符文件。(以前,两种文件类型间是有差别的。比如:字符文件I/O没有缓存,而块文件则有。)mknod命令就是用来建立这种类型文件的。
mknod命令的语法为:
mknod Name { b | c } Major Minor
或
mknod Name { p }
mknod命令的第一种形式只能由 root 用户或系统组成员执行。在第一种形式中,使用了 b 或 c 标志。 b 标志表示这个特殊文件是面向块的设备(磁盘、软盘或磁带)。 c 标志表示这个特殊文件是面向字符的设备(其他设备)。第一种形式的最后两个参数是指定主设备的数目,它帮助操作系统查找设备驱动程序代码,和指定次设备的数目,也就是单元驱动器或行号。传统上,主编号标识设备相连的驱动。例如,/dev/null和/dev/zero都由驱动1来管理,而虚拟控制台和串口终端都由驱动4管理;同样,vcs1和vcsa1设备都由驱动7管理。现代Linux内核允许多个驱动共享主编号,但是你看到的大部分设备仍然按照一个主编号一个驱动的原则来组织。次编号被内核用来决定引用哪个设备。依据你的驱动是如何编写的,你可以从内核得到一个你的设备的直接指针,或者可以自己使用次编号作为本地设备数组的索引。不论哪个方法,内核自己几乎不知道次编号的任何事情,除了它们指向你的驱动实现的设备。
在mknod命令的第二种形式中,使用了 p 标志来创建FIFO(已命名的管道)。
扯远一点,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,它首次出现在2.3.46内核中。Mandrake,Gentoo等 Linux分发版本采用了这种方式。devfs创建的设备文件是动态的。但是devfs有一些严重的限制,从2.6.13版本后移走了。目前取代它的是udev--一个用户空间程序。目前很多的Linux分发版本采纳了udev的方式,因为它在Linux设备访问,特别是那些对设备有极端需求的站点(比如需要控制上千个硬盘)和热插拔设备(比如USB摄像头和MP3播放器)上解决了几个问题。
<script src="http://partner.googleadservices.com/gampad/google_service.js" type="text/javascript"></script><script type="text/javascript"></script><script src="http://partner.googleadservices.com/gampad/google_ads.js"></script><script type="text/javascript"></script>