手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2008年12月的文章

如何优化VMware Server虚拟机系统[值得收藏]

原文来自:http://server.zdnet.com.cn/server/2008/0910/1117939.shtml

我也是在操作vmware server版的时候才找到的此文章,它给我带来了很多思路,比如把网卡改为其他型号的。原来这都是我没有想过的。

  在现实情况中,许多商业程序只能分别在Windows或Linux下运行。那么,如何在同一台主机上运行Windows和Linux两种系统, 以支持尽可能多的应用软件,就成了一个重要的课题。VMware Server虚拟机模拟软件的出现为解决这一问题提供了不错的方法,它可以同时运行Linux和Windows等其它操作系统,且每个操作系统在各自独立 的窗口里运行。

  不过,尽管可以在Windows主机下运行VMware Server,但不推荐这么做——Windows的蓝屏死机会让Windows主机和Linux虚拟机系统同时挂掉,所以我们选择在Linux下运行虚拟 软件。这种模拟能帮助Windows用户容易地过渡到Linux,它让用户在使用新的Linux应用程序时就像在使用熟悉的Windows应用一样,且用 户不需要关心它是运行在Linux下还是Windows下。

  当前,VMware主要有三个版本:VMware Server、VMware Workstation和VMware ACE。VMware Server是免费的,它给Linux提供了多操作系统功能。VMware Workstation和VMware ACE为程序开发人员提供额外功能,例如给一台虚拟机分配多个CPU,给虚拟机设置安全策略。

  主流x86多系统的选择

  虽然在Linux下运行Windows或其它操作系统应用有几种方法,但我觉得VMware Server是最符合我的要求的。当然,所有的模拟软件都会降低性能,并且消耗更多的内存。所以,我的测试系统配备的是Athlon3500+的 CPU,1GB DDR2的内存——VMware在Duron 1800、512M DRAM和3GB的虚拟内存(交换文件)下也能运行得不错;但如果同样是Duron 1800的CPU,只配置1GB的虚拟内存(交换文件),运行起来就不太流畅了。另外,如果有硬件虚拟化支持(如Intel VT和AMD-V)就更好了,但对VMware Server来说这并不是必需的。

  其他几种运行外部操作系统应用的方法及其特性与限制如下表所示:

  Vmware的系统优化

  在不同的Linux版本中安装VMware Server有细微的差别。注意,本文的重点不在于如何安装VMware Server软件,而是要告诉你如何优化系统,使VMware Server更有效地工作。

  首先,我们从http://www.vmware.com/download/server/下载VMware Server(下载时需要提供注册号码),从http://ftp.cvut.cz/VMware/VMware-any-any- update105.tar.gz可以下载各种补丁,包含一些支持VMware Server的内核模块。注意,当运行VMware的配置脚本时,会提示你输入VMware设备的目录名称,把/var/lib/VMware /Virtual Machines改成/var/lib/Virtual_Machines。因为如果有空格,在用命令行应用程序访问时会有很多麻烦。另外,当在虚拟机配 置向导里提示输入虚拟机名称时,也不要带空格,如要用Windows_98代替Windows 98。

  不论VMware虚拟机系统依赖什么配置,运行起来和在物理机器本地运行是一样的。比如,假设USB有问题,则在Windows控制面板里,找到系统、设备,就能看到跟物理机器安装时一样的错误图标。其它如音频、网络、视频以及各类驱动问题也是一样。

  如果你以前安装过VMware Server(你可能只是升级下主机系统或者换个Linux版本),只要把.vmx和.vmdk文件放到相应的地方,如/var/lib/VMware /Virtual_Machines/,然后改变文件的所有者属性和访问权限。从VMware Server控制台选择VM菜单,安装VMware Tools,能提高速度和稳定性,也能让你访问VMware音频和视频驱动。

  虚拟以太网卡的配置

  我们可以通过虚拟以太网卡在虚拟机和主机之间传输文件,系统默认提供的网卡是AMD PCNet PCI网卡,传输速率大约是400Kbps,换成Pro1000的网卡,能提高到3Mbps。VMware Server的虚拟以太网卡在vmx配置文件里就是一行文本,跟实际网卡一样,它也需要驱动程序。如果驱动程序位于C盘下的好几级目录中(如下图),那你 应该创建一个快捷方式放在C盘根目录下,这样安装驱动时就不用找来找去了。

  进入/var/lib/VMware/Virtual_Machine/Windows_98。用一个文本编辑工具打开.vmx文件,在 Ethernet那一节的第一行前插入:ethernet0.virtualDev = e1000。保存文件,退出。然后,启动虚拟机下的Windows系统,做如下操作:

  1. 从开始菜单的设置-系统-设备下删除AMD网络适配器。

  2. 重启虚拟机Windows系统。

  3. 当提示你为一个PCI以太网卡安装驱动时,点取消。

  4. 打开开始菜单-设置-系统-设备,找到那个有问题的网络设备。

  5. 右键单击该网络设备,选择安装驱动。

  6. 选择“从磁盘安装”。

  7. 到你刚刚创建的快捷方式,选择.inf驱动安装文件,点击OK,就会看到一个列表。

  8. 然后选择Intel Pro/1000 MT桌面连接,点OK。

  9. 当提示你要Pro/1000安装包时,选择C盘的快捷方式。当提示需要Windows安装盘时,插入光盘。

  10. 点击完成按钮。

  11. 重启。

  12. 改变网卡设置,选择开始菜单-设置-网络-Intel Pro/1000 MT 桌面连接-属性-高级-连接速度和双工,选择1000Mbps自动协商。

  通过Samba在主机系统和虚拟机系统间共享文件

  通过VMware Server安装虚拟机系统,最大的好处就是可以用传统的Windows应用程序和本地的Linux应用访问同一个文件。因此,在Linux主机系统和 Windows虚拟机系统之间共享文件是必需的。Samba是一组给Windows客户端提供文件和打印机共享服务的程序集合,可以让这些客户端象访问网 络磁盘一样访问Linux文件系统。下面我们给出出一些提示供参考。

  首先,保证系统已经安装Samba。通常是默认安装的,但最好查一查。在下面的Samba配置文件中,“Username”指你的用户 名,Linux主机系统下的用户ID要和Windows虚拟机系统下的一致。这个文件定义了Linux和Windows共享的基本配置。更多的信息,可以 运行如下命令查看Samba的帮助文件:$ man Samba。或者到Samba的网站查看相关文档。

  1)VMware Server的Samba配置

  用root用户打开一个Linux文本编辑工具,把下面的内容保存为文件:/etc/Samba/smb.conf (;表示注释行)

  [global]

  ;General server settings

  netbios name = FC6

  workgroup = workgroup

  wins server = 169.0.0.1

  server string = Samba Server

  printcap name = /etc/printcap

  cups options = raw

  log file = /var/log/Samba/%m.log

  max log size = 50

  socket options = SO_KEEPALIVE TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192

  ; SO_SNDBUF=8192

  dns proxy = no

  guest ok = yes

  guest account = username

  security = user

  encrypt passwords = yes

  username map = /etc/Samba/smbusers

  smb passwd file = /etc/Samba/smbpasswd

  restrict anonymous = no

  domain master = yes

  preferred master = yes

  max protocol = NT

  acl compatibility = winnt

  ldap ssl = No

  server signing = Auto

  [win]

  path = /home/username/data/

  writeable = yes

  valid users = username

  comment = home

  admin users = username

  browseable = yes

  case sensitive = no

  配置文件中的“path”指你需要共享的Linux目录,也就是你允许Linux和Windows都能访问的文件空间。在Windows虚拟机 系统下访问时,你可以选择“映射到网络驱动器”。这时,你就能看到你在Linux和Windows共享的内容了。刚安装的Windows系统访问 Linux主机系统时,可能会因为Windows安装了防火墙而弹出一个提示框,如下图:

  如图所示(假设本地IP是196.x.x.x范围的),告诉你的防火墙允许NetBIOS访问那个IP:

  2)有用的SAMBA提示

  下面的提示可以帮助你更好的在Linux和Windows共享文件:

  · 在物理主机上运行Windows系统时,不用修改已经共享的目录名称。只把那些非Windows系统不能访问的文件放在Windows驱动器下。

  · 因为你不能在Linux系统下直接访问虚拟机系统下的文件,所以最好把数据文件保存在Linux空间下,然后通过Samba共享给Windows程序用。

  · 在Windows桌面上的快捷方式点击右键,把驱动盘符C改为E,这样你就可以继续使用这些快捷方法

  设置音频

  VMware Server下的虚拟机系统能够处理多媒体内容,并通过声卡播放声音。如果你的主机系统和虚拟机系统都是64位的,可以到Vmware官方网站上下载驱动 (http://download3.vmware.com/software/wkst/vmaudio-5.10.0.350)。下载之后,复制到 Windows文件系统下,安装时跟安装其它音频驱动一样。其它情况需要这样做:

  1. 打开控制面板-设置-系统-声音,安装Windows声音驱动。

  2. 删除所有的音频驱动。

  3. 安装驱动文件。

  4. 重启,在驱动文件里找到系统提示要的.cat文件(或其它配置文件),点击OK。

  5. 播放一个声音文件。

  6. 把KDE的声音管理设置改为“自动检测”,然后告诉它空闲2秒钟后释放资源。

  USB设备配置

  通过VMware Server下的Windows应用可以直接访问打印机、扫描仪或者其它USB设备。如在VMware Server控制台的菜单查找打印机:VM >Removable Devices >USB Controller >printer(如下图)。

  那么,如何在VMware里使用USB打印机呢?其步骤如下:

  1. 打开VMware Server。

  2. 点击Windows标签。

  3. 点击添加设备。

  4. 添加USB控制器。

  5. 启动Windows。

  6. 打开VM工具栏,VM >Removable Devices >USB Devices >[你的打印机名]。

  7. Windows会提示找到新设备,要求你选择一款打印机或者从磁盘安装驱动。插入你的打印机驱动光盘。

  8. 点击OK,能看到一个安装成功的提示窗口。

  9. 打开开始菜单-设置-打印机,就能看到你的打印机了。

  10. 右键打印机图标,选择属性。

  11. 点击“打印测试页”,看看打印机是否打印出来。

  同样,安装扫描仪和其它USB设备也可参考上述步骤。值得一提的是,VMware虚拟USB适配器可以同时使用两个USB设备。安装第二个USB设备时,只要按照上面的步骤到VMware工具栏那一步就可以了。

  另外,一个USB设备可以被Linux主机系统使用,也可以被Windows虚拟机系统使用,你必须确定是哪个系统在使用它。选择菜单VM >Removable Devices >printer在虚拟机Windows系统下禁用打印机,这样主机的Linux系统才能使用它。然后重新插拔一下打印机的USB线。打开打印机管 理器,先停用、再启用一下打印机。

  在主机系统和虚拟机系统之间切换USB打印机,你需要在VMware Server上关闭USB设备,甚至通过重新插拔一下来重启设备,然后打开Linux开始菜单-控制中心,点击外设-打印机,选择相应的打印机菜单,点击 下拉菜单的重启项,重启CUPS Linux打印系统。

  优化VMware Server虚拟机系统的小提示

  下面是我常用到的小提示:

  · 磁盘速度:大多数版本都有调整硬盘速率的选项,借此你可以让硬盘访问速度加倍。

  · 把虚拟硬盘文件(即VMware虚拟机系统的“硬盘”)分割成多个2GB的文件,我发现这样能显著提高访问速率。

  · 一些优化Windows系统的小技巧在虚拟机下也可以用,当然最好安装防火墙和反病毒软件。

  · 如果映射驱动器上的某个程序运行慢或者有问题,可以在Windows虚拟机系统下重新安装试试。我就重新安装过Eudora、MS Office、CorelDRAW和Paint Shop Pro。如果你本地安装的Windows系统在C:Program Files下有程序,也安装到虚拟机的虚拟硬盘上去,不要留在映射驱动器E:(也就是/home/username/win)上。

  最后,值得一提的是,分割虚拟硬盘文件不仅有利于提高访问速率也有利于备份。通过以下命令可以分割虚拟硬盘文件:# VMware-vdiskmanager -r sourceDisk.vmdk -t 3 destinationDisk.vmdk。完成之后,要修改一下访问权限:

  chown username:username *.vm*

  chmod 777 *

  打开原来的.vmx文件,保证里面的硬盘项是指向分割后的文件里的第一个。VMware相关的文件列在/etc/VMware/locations这个文本文件里。

  在Linux主机系统之上通过VMware Server运行Windows虚拟机系统,让用户可以同时使用两个系统。也就是,既可以享受Linux的稳定性和健壮性,又能享受Windows程序的 易用性和通用性。也为现代计算机系统的后续扩展提供了空间。随着Linux程序变得一样易用而功能强大,普通用户也能比较容易的使用Linux程序。

Tags: linux, vmware, 虚拟机, 优化

Jadu: 将 PHP 编译成 .NET

新闻来源:itnews.com.au
内容管理公司 Jadu 最近发布了一个工具,可以让 PHP 和 .NET 这对冤家和平共处。他们开发了一个叫做 Phalanger PHP compiler 的工具,可以将 PHP 程序编译成本地 .NET 程序执行。他们还准备将这一工具开源。


据 Jadu CEO Suraj Kika 介绍,这个工具对 PHP 程序进行编译,编译成 .NET 框架下下的本地程序。比如,你想用 WordPress,但你属于微软阵营,你可以将 WordPress 编译成可执行文件,放到 .NET 中并在 Visual Studio 中针对这个编译过的 WordPress 做进一步开发。

这个工具将为 PHP 和 .NET 开发工程师带来职业上的便利,避免在各自对方的技术领域内再培训。Kika 表示,我们会看到大量 PHP 开发者在微软阵营找到客户群。

Kika 还表示,开源和商业软件之间向来泾渭分明,这一工具将让这两个阵营的开发者走到一起。

本文来源:http://www.itnews.com.au/News/90129,jadu-brings-php-and-net-closer-together.aspx
中文翻译:COMSHARP CMS
膘叔:好妖的功能呀,一直以为PHP要想在windows下独立运行,得使用php GTK的,结果现在居然有人编译成.net,真是心有多大,世界有多大呀

Tags: php, .net, 编译

保存的一封邮件

这篇日志被加密了,请输入密码后查看。

Wine中文显示

突然发现wine的中文显示其实很简单
从1.1.4开始wine的界面就已经支持中文了,但是对于软件中的中文支持并不太好,主要原因。还是字体。。。
Let's go
首先,copy一下字体:把simsun.ttc (即宋体)复制到 ~/.wine/drive_c/windows/fonts
然后:

XML/HTML代码
  1. [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]  
  2. "Arial"="simsun"  
  3. "Arial CE,238"="simsun"  
  4. "Arial CYR,204"="simsun"  
  5. "Arial Greek,161"="simsun"  
  6. "Arial TUR,162"="simsun"  
  7. "Courier New"="simsun"  
  8. "Courier New CE,238"="simsun"  
  9. "Courier New CYR,204"="simsun"  
  10. "Courier New Greek,161"="simsun"  
  11. "Courier New TUR,162"="simsun"  
  12. "FixedSys"="simsun"  
  13. "Helv"="simsun"  
  14. "Helvetica"="simsun"  
  15. "MS Sans Serif"="simsun"  
  16. "MS Shell Dlg"="simsun"  
  17. "MS Shell Dlg 2"="simsun"  
  18. "System"="simsun"  
  19. "Tahoma"="simsun"  
  20. "Times"="simsun"  
  21. "Times New Roman CE,238"="simsun"  
  22. "Times New Roman CYR,204"="simsun"  
  23. "Times New Roman Greek,161"="simsun"  
  24. "Times New Roman TUR,162"="simsun"  
  25. "Tms Rmn"="simsun"  
当然,你也可以COPY其他字体,然后替换掉这上面的simsun。把这 段内容保存成一个reg文件,例如:fonts.reg
最后,到命令行下支持wine regedit fonts.reg,OK,你现在重新打开记事本,是不是发现可以输入中文了?

Tags: linux, wine, ubuntu, editplus

Good and Bad PHP Code

by Kevin Yank

The following is republished from the Tech Times #165.

When interviewing a PHP developer candidate for a job at SitePoint, there is one question that I almost always ask, because their answer tells me so much about the kind of programmer they are. Here’s the question: “In your mind, what are the differences between good PHP code and bad PHP code?”

The reason I like this question is because it tests more than just a candidate’s encyclopedic knowledge of PHP’s functions. Zend’s PHP certification does a good job of that (as does the test that Yahoo! issues to applicants for its PHP developer jobs, apparently).

Rather, the answer to this question tells me whether a PHP developer has, for example, experienced the pain of working with poorly-written code inherited from a careless predecessor, and whether he or she will go the extra mile to save the rest of the team from that same pain.

I don’t have a set notion of the perfect answer to the question, but I do know the kinds of things I’m hoping to hear. Just off the top of my head:

Good PHP code should be structured. Long chunks of code can be broken up into functions or methods that achieve sub-tasks with simple code, while non-obvious snippets should be commented to make their meaning plain. As much as possible, you should separate frontend HTML/CSS/JavaScript code from the server-side logic of your applications. PHP’s object oriented programming features give you some especially powerful tools to break up your applications into sensible units.

Good PHP code should be consistent. Whether that means setting rules for the names of variables and functions, adopting standard approaches to recurring tasks like database access and error handling, or simply making sure all of your code is indented the same way, consistency makes your code easier for others to read.

Good PHP code should be portable. PHP has a number of features, such as magic quotes and short tags, that can break fragile code when they are switched on or off. If you know what you’re doing, however, you can write code that works by adapting to its environment.

Good PHP code should be secure. While PHP offers excellent performance and flexibility out of the box, it leaves important issues like security entirely in the hands of the developer. A deep understanding of potential security holes like Cross-Site Scripting (XSS), Cross-Site Request Forgeries (CSRF), code injection vulnerabilities, and character encoding loopholes is essential for a professional PHP developer these days.

Once a candidate has answered this question, I usually have a pretty good idea of whether they’ll be hired or not. Of course, there’s always the possibility that an interviewee simply isn’t able to articulate these types of things, so we also have our candidates sit a PHP developer exam.

Many of the questions in this exam seem straightforward on the surface, but they give candidates plenty of opportunity to show how much they care about the little details.

The following “bad” code is a highly simplified example of the sort of thing we might put in our PHP developer exam. The question might be something like “How would you rewrite this code to make it better?”
 
<?php
    echo("<p>Search results for query: " .
        $_GET['query'] . ".</p>");
?>

<?php
    echo("<p>Search results for query: " .     $_GET['query'] . ".</p>");
?>

The main problem in this code is that the user-submitted value ($_GET['query']) is output directly to the page, resulting in a Cross Site Scripting (XSS) vulnerability. But there are plenty of other ways in which it can be improved.

So, what sort of answer are we hoping for?

Good:
 
<?php
     echo("<p>Search results for query: " .
         htmlspecialchars($_GET['query']) . ".</p>");
?>


<?php
    echo("<p>Search results for query: " .
         htmlspecialchars($_GET['query']) . ".</p>");
?>

This is the least we expect. The XSS vulnerability has been remedied using htmlspecialchars to escape dangerous characters in the submitted value.

Better:
 
<?php
     if (isset($_GET['query']))
     {
       echo '<p>Search results for query: ',
           htmlspecialchars($_GET['query'], ENT_QUOTES), '.</p>';
     }
?>


<?php
    if (isset($_GET['query'])) {
        echo '<p>Search results for query: ',
          htmlspecialchars($_GET['query'], ENT_QUOTES), '.</p>';
    }
?>

Now this looks like someone we might want to hire:

    * The “short” opening PHP tag (<?) has been replaced with the more portable (and XML-friendly) <?php form.
    * Before attempting to output the value of $_GET['query'], isset is used to verify that it actually has a value.
    * The unnecessary brackets (()) around the value passed to echo have been removed.
    * Strings are delimited by single quotes instead of double quotes to avoid the performance hit of PHP searching for variables to interpolate within the strings.
    * Rather than using the string concatenation operator (.) to pass a single string to the echo statement, the strings to be output by echo are separated by commas for a tiny performance boost.
    * Passing the ENT_QUOTES argument to htmlspecialchars to ensure that single quotes (') are also escaped isn’t strictly necessary in this case, but it’s a good habit to get into.

Somewhat distressingly, the number of PHP developers looking for work that are able to give a fully satisfactory answer to this sort of question—at least here in Melbourne—are few and far between. We spent a good three months interviewing for this latest position before we found someone with whom we were happy!

So, how would you do when asked a question like this one? Are there any factors that make PHP code good or bad that you feel I’ve left out? And what else would you look for in a PHP developer?