在 Windows 下搭建 GNU/Linux 环境

October 16, 2007 – 2:54 pm

虽然 Linux 与 Windows 之争几乎从来就没有停止过,不过无疑两者是各有千秋的。所以让两者共存一直是个比较诱人的想法。方法有许多种:debian.png

  • 双系统。这样没有哪个系统是跑在虚拟机里面的,所以都能发挥自己的全部性能,只是两个系统之间切换太麻烦,基本上没有什么交互。
  • Linux 下用 wine 来运行 Windows 程序。不少 windows 下的程序都能跑起来吧,但是目前并不是那么完美,而且 wine 的开发者并没有 Windows 的源代码,所以从理论上来说有些程序运行成功或者失败似乎主要是看运气了。
  • 在 Linux 下通过虚拟机模拟 Windows 。这个主要是一些 Linux geek 们使用的方法,装 Windows 几乎是处于无奈,要跑一些 Windows 程序,比如要用 QQ 或者是浏览学校老师的幻灯片之类的。用虚拟机比用 wine 跑成功率要高一些,因为对于程序来说,这下它们是在一个“真正的” Windows 里面运行了。当然对系统配置的要求就更高了。
  • 使用 coLinux 在 windows 下运行 Linux 。应当是一个相当不错的解决方案了,它与普通的虚拟机不同的是,它直接建立在硬件层次之上,而普通的虚拟机通常是建立在宿主操作系统的层面上,所以它的执行效率会更高一些。
  • 使用 Vmware 在 Windows 下虚拟 Linux 。这个在理论上来说也是相当合适的一种解决方案了,Windows 对原生硬件驱动支持好,图形性能高,适合做宿主系统,而虚拟机里的 Linux 也只需要安装一个文本界面便可以发挥出它的强大之处了。只是 Windows 系统容易中病毒啊、流氓软件之类的,也得小心使用才能做好宿主啊。
  • 使用 cygwin 在 windows 下模拟 Unix 环境。这个解决方案的优点是和原本的系统结合得很紧密,虽然不像 wine 那样直接可以执行原来的二进制程序,而是要重新编译过,但是同样是直接跑在本地系统里面的,所有的程序就和本地程序无异了。只是由于 Windows 和 Linux 本身的差异,并不是所有的方面都能模拟出来,所以并不是所有的程序都能很好地运行起来。

而如果专注于在 Windows 下能有一个顺手的 Linux 环境的话,便主要是后面三种选择了。不知道将来会不会出现像 wine 那样的在 Windows 下直接运行 Linux 程序的模拟器,不过 Linux 下的程序大多没有扩展名,如果每次都要输入 wine ls 的话,真的要疯掉了,哈哈!

回归正题,在剩下的三种选择中,coLinux 和 Vmware 是很类似的解决方案,而 cygwin 则是着眼于另外的应用。按理说 coLinux 应当比 Vmware 更高效一些,但是目前配置还是有些麻烦,如果机器配置稍微好一点,其实 Vmware 也是很高效的,所以我选择了后者。下面我就来详细介绍一下如何用 Vmware 和 cygwin 来搭建一个舒适的 GNU/Linux 环境。

Vmware 篇

Vmware 是商业软件,不过它有一个 Vmware Player 是可以免费使用的。不要小看这个 Vmware Player ,如果只是模拟运行一下系统,它和 Vmware 功能上几乎是差不多的。

  • 虚拟机生成 Vmware Player 虽然强大,但是它不能用来创建虚拟机,但是其实所谓虚拟机只是几个文本格式的配置文件和一个磁盘镜像文件而已。配置文件可以从别处拷贝,磁盘镜像可以用来源的 qemu 来生成,只是这未免太痛苦了,还不如去用 coLinux !不过,如果有 Virtual Machine Creator 就不一样了!去它的网站填上要生成的虚拟机的信息,立马就能生成一个虚拟机,解压开来就可以用 Vmware Player 来运行了。
  • 系统安装 当然这样生成出来的虚拟机只是一个“裸机”而已,还要下载相应的 Linux 发行版来安装。只要在启动的时候把 iso 文件挂载上便可以进行安装。网络设置为 NAT 方式,直接通过宿主机器连接网络,如果不需要从宿主以外的地方访问虚拟机的话,这样应该是最方便的设置了。
  • 文件共享 Vmware 提供了 share folder 的方式进行文件共享,不过我在 Linux 2.6.22 的内核下编译 Vmware Tools 里面的 share folder 模块失败了。这也没关系,可以使用 Samba 来进行文件共享。我在虚拟机里面装了 Debian 4.0 ,apt 源设置好之后,apt-get install samba 即可安装 samba ,打开默认的配置文件,稍微修改一下就可以使用了。
    ifconfig 查看一下 ip 地址,并把它写入到 Windows 的 Hosts 文件 (通常在 C:\Windows\System32\drivers\etc\ 目录下) 中。例如:

    192.168.58.128 debian
    

    之后便可以直接在 Explorer 里面键入 \\debian 访问到虚拟机里面的文件了。如果 Windows 的用户名和秘密与虚拟机里面的用户一样的话,也不需要手工输入密码来进行验证。

    还有一个小技巧:为了避免虚拟机下次重启 ip 会变掉,干脆不重启它。Vmware Player 的默认设置已经是在关闭的时候保存虚拟机状态了。这个不是由虚拟机参与的 Suspend ,而是 Vmware Player 的功能,下次打开虚拟机继续从上次关闭时候的状态开始执行,非常方便,而且通常还比直接启动系统速度要快!这个功能非常舒服!

  • 使用 系统设置好了便可以开始使用了。如果你喜欢,你可以直接在 Vmware Player 里面使用。但是我是不喜欢这样的,一来每次都要按 Ctrl+Alt 来从虚拟机里面把焦点释放出来,而来剪切板交换数据不方便。我更喜欢的方式是把 Vmware Player 隐藏起来,通过一个 ssh 客户端来访问。

    这里推荐两个工具:trayitputty 。前者可以把任意程序隐藏到系统的通知区域 (我最近在《Windows 编程启示录》一书中看到说把那个地方叫做“托盘区”是错误的叫法) ,而后者则是一个小巧的 ssh 客户端程序。两者都是可以免费使用的。

最后献上截图一张:

vmware_player.png

Cygwin 篇

Vmware 的解决方式虽然能给我们一个非常舒适的 GNU/Linux 环境,但是和宿主机器交互并不是特别多,如果想要在 Windows 环境下使用那些小巧的命令行工具的话,再安装一个 Cygwin 是个不错的选择。

  • 安装 到官方网站下载安装程序,这是一个客户端程序,实际的程序包都是需要的时候在从网上的镜像下载的。选择镜像的时候尽量找最近的吧,比如日本的镜像速度都还可以。另外,它会把下载过的包保存在本地,把这个目录保存下来以后安装过的软件就可以直接从本地装了,也可以把它拷贝给别人使用,或者干脆在局域网里面架一个镜像。
  • 安装的时候按自己的需要选择软件包即可。如果想要在 cygwin 里面写程序,可以加上 gcc 、make 、build-utils 以及 vim 等软件包。我自然是把自己喜欢的 zsh 和 screen 装上。

  • 配置 配置 Cygwin 几乎就和配置 Linux 差不多了,将自己平时用的 .zshrc.screenrc 之类的拷贝到 Cygwin 里面的主目录下就可以了。
  • 使用 虽然 Cygwin 里面带了 bash (甚至还有我喜欢的 zsh ),但是 Windows 的那个 cmd.exe 实在不怎么样,作为一个 terminal 来简直是土到家了。有几个替代方案可以选择:Terminator 、rxvt 和 puttycyg

    Terminator 是一个用 Java 写的跨平台的终端模拟器,可以和 Cygwin 一起工作。rxvt 是 Cygwin 里面包含的一个程序,它可以作为 Windows 原生图形程序来运行 (而不是通过 cygwin-X 的方式)。而 puttycyg 则是通过对 putty 打补丁让它可以直接作为 cygwin 的终端模拟器。我自己比较喜欢 puttycyg ,因为连接 ssh 也正好要用到 putty 了。

    截图吗?我在上一篇介绍我的 .screenrc 的 Blog 中所用的截图正好是在 puttycyg 下截出来的。去掉了窗口边框,是不是差不多可以和 Linux 下的终端以假乱真了? :)

Troubleshooting

  • Vmware 虚拟机里面 CPU 频率太快了 这是由于电源管理功能引起的,这个问题我基本上忽略了,所以我虚拟机里面时间走得也比较快。不过如果你对这个问题耿耿于怀的话,可以参考这里的解决方案。
  • putty 里面显示和输入中文 我在虚拟机里面安装了 Debian ,并且系统 locale 是 en_US.UTF-8 。在 putty 配置面板里面找到 Window -> Translation ,并把 “Received data assumed to be in which character set” 那里设置为 UTF-8 就可以正常显示和输入中文了。
  • 在 cygwin 里显示和输入中文 这个在网上可以搜索到许多文章。多是修改 ~/.inputrc ,我看大多数都是说把其中被注释掉的 “Allow 8-bit input/output” 那几行前面的注释去掉就可以了。不过我在 Windows Vista 的 cmd 里面根本没法激活输入法。而 puttycyg 那里我也不知道应该选择什么 encoding 好 (Windows 并不是使用的 UTF-8 ,而我也没有看到有 GB18030 或者 cp936 之类的选项)。显示中文倒是不需要什么设置就可以了,记得 ls 的时候加上 --show-control-chars 参数就可以了。呵呵,想不到 Windows 下竟然也碰到中文问题。
  1. 6 Responses to “在 Windows 下搭建 GNU/Linux 环境”

  2. 赞一下写这么长文字的耐心~~~
    其实我挺讨厌在一个机器上装两个系统的,很容易让我分心的说…

    所以,cygwin一定要装,但是不为了别的,只是为了给windows找一个好的shell。对于习惯console的人来说找不到一个词语来形容cmd环境的烂… = =

    然后就是一个小巧的putty,链接到开发机上,也不要乱其八糟烂的可以的X环境,^^

    By shawn on Oct 16, 2007

  3. to shawn:
    恩,大多数情况下 cygwin 也够用了,不过有些程序在 cygwin 下跑起来不舒服或者跑不起来。比如要做 LAMP 的 Web 服务开发,就可以在虚拟机里面配置服务器进行开发,同时可以在宿主系统里面使用浏览器进行调试。

    By pluskid on Oct 16, 2007

  4. 试了一下Terminator,还不错,不过ssh到别的debian机器上的时候就不对头了,在cmd里用cygwin的时候倒是正常的。

    我用用cmd的cygwin觉得也挺好哈~

    By Rhythm on Oct 16, 2007

  5. cmd 有很多缺点啊,比如字体丑陋、不方便改变窗口大小之类的,那个 cmd.exe 的界面都万年不变了,我看微软也有许多命令行 geek 嘛,怎么没有人把那个东西改进一下呢?

    By pluskid on Oct 17, 2007

  6. 微软内部的人还是比较奉行不重复造轮子的理念的。
    1、普通用户肯定不会碰cmd;
    2、programmer的cygwin够强大了。

    内部的console geek不爽,要么用.Net的powershell,要么直接装一个cygwin解决问题 ^^

    By shawn on Oct 17, 2007

  7. 如果是vmware然后ssh过去,不如ssh到另外一台机器了

    By Sparkle on Oct 24, 2008

Post a Comment