行者无疆 始于足下 - 行走,思考,在路上
Mac OS X遭遇记
3月1号回到玉泉,处理了许多杂事,找导师沟通了下毕业设计的问题。沟通的最终结果就是我又被发配到了手机客户端组,继续做GUI控件。事实上我最开始选的题目是《海量空间数据的高性能引擎研究》,我还是挺喜欢这个方向的,而且与我在Baidu的实习以及日后的工作都有很大的关联性。但是导师一句“题目较难,时间不够”就把我噎了回来,紧接着来一句“我还是希望你能够做一些连续性的工作”——就是去年四月份实验室做的Windows Mobile控件开发了。其实我是非常不喜欢这个项目的。对于一个崇尚自由、分享的Open Source Programmer来说,用着盗版的Windows+VS,盗用Open Source的成果来开发闭源软件,实实在在是一件不怎么惬意的事情——老实说我也算不上合格的Open Source Programmer,因为我至今也没有自己的Open Source软件。其次是我越来越讨厌关于Windows的一切,无论是作为一个User还是Programmer。我最近正计划着写一系列的Windows吐嘈文,构思良久,即将面世。
只不过这次不同,我所面对的不再是Windows Mobile,而是——iOS。
How?这是我脑子里最先冒出的想法——How to write an Win32-Styled GUI program under Windows(or maybe Linux) platform for iOS?我战战兢兢地问了下学长“实验室有苹果机吗?”,答曰“没有,用虚拟机”。
Oh,my god。在Windows平台上运行着虚拟机,在虚拟机里面运行着Mac OS X,在Mac OS X里面运行Xcode,在Xcode写Win32-Styled Program,然后将这个Win32-Styled的Program Load到虚拟机里面的Mac OS X里面的Xcode IDE里面的iOS模拟器上,调试!!!
What a Joke!
不过,吐槽归吐槽,活儿还是要干。鉴于前两次Hacintosh的惨痛经历,所以这才在也不敢在自己精心调制好的ThinkPad x201i上为所欲为,还是乖乖的虚拟机的好。幸好前两天买了根三星金条,武装到了4G内存,否则还真不敢想象在虚拟机里面玩Leopard。
高级的虚拟机咱不懂,所以诸如KVM,Xen就不在考虑之列了。剩下的,最开始接触电脑时玩的Microsoft Virtual PC,不知道现在活的怎么样。VMware,大概是三年前用过,印象就是臃肿,慢。VirtualBox,我的最爱,开源、免费、跨平台、轻量快捷。所以VirtualBox是试验的首选环境。
不过Mac平台的封闭性带来一个众人皆知的事实,那就是Hacintosh的成功性与人品——也无关,我的意思是说,Hacintosh的成功与否完全是莫名其妙的事情,无论是虚拟机还是实体机,能否Hacintosh,要看上帝的心情。
Hacintosh的版本有很多,比如东皇、iATKOS、iDeneb、OSXPCBETA等等,boot loader也有若干种方案,比如变色龙、EFI Emulation等等,个中详细可以参考OSx86。而由这些基本“元件”排列组合出来的网上作为“PC变Mac”的方案更是五花八门,让人目不暇接。照理说,对各种硬件的良好支持是一个OS安身立命的最基本条件,至于Mac如何在违背这个基本原则下打拼出自己的逍遥天地,容我另外一篇文章再做分析。
好了,回到正题,继续我的Mac OS X遭遇记。我按照老赵点滴上的指示在我的ArchLinux+VirtualBox 4.0上做实验,前面都是很顺利的,也出现了下面的Kernel panic情况:
按照教程,重启之后就可以进入期盼的Leopard,可是我却陷入了无限的灰色风火轮等待中。重整多番,调整了多组参数,均以失败告终。
于是转投VMware,我按照VMware的要求,下载了300+M的VMware7.1的bundle,按照ArchWiki上的步骤,成功装上了VMware,但是确始终启动不起来。无奈,转投Windows吧。之所以坚持Linux,是因为我需要LaTeX,我需要Emacs+Auctex+cdlatex+outline-mode来完成我的毕业论文啊。
好在Windows下的VMware还算正常,安装过程也算顺利,我就不在细说了。具体过程可以参考《VMWare下安装MAC OS X Snow Leopard 10.6》,需要注意的主要是:
- 安装之前用securAble检测下CPU是否支持虚拟化;
- 内存至少1G,最好主机配上4G内存,而VMware配上2G内存,否则慢起来很要命,如果搞开发,硬盘最好20G以上;
- 注意修改VMware目录下的.vmx下的guestOS由guestOS = "freebsd-64"改为guestOS = "darwin10";
- 启动时始终需要darwin.iso来引导;
- 成功安装系统后安装darwin.iso里面的vmtools,获得更好地使用体验;
放张图吧:
顺便感叹下,VMware的虚拟化技术还真是强大,2G虚拟内存跑Mac OS X,速度还真是不赖,界面效果也都能跑的出来。如果再弄个分屏软件,再插上一个LCD的液晶屏,就真是两个系统了。
至于Xcode和iOS SDK的安装就简单很多了,可能需要做一次系统升级。至于iOS上如何写Win32-Style的GUI程序,我现在也是丈二的和尚。至于额外的Macintosh吐槽文,还是等以后心情不错的时候再写吧。
纠结的Mac安装
导师让我研究iphone下的程序开发。迫于经济窘迫,手头没有mac,四处查资料,终于搞出来了一个跨平台的解决方案,写了20多页的英文文档,美其名曰《The Cross-Platform Developing Skills for Mac Applications》,认真进行了排版,给导师发了过去。可是导师太忙了没有时间看呃。于是我一股脑的跟导师倾诉了一番mac, objective-c, gnustep等等之类的东西,虽然我也不太懂。导师看我做的十分认真,比较满意,中午一起吃了饭,下午来了个学长,一起坐下交流一番。我刚想倾诉我伟大的跨平台解决方案,学长说,"现在mac os可以装载pc上了“。于是我就悲剧了。
周五下午去公司跟学长借了盘,插进光驱,改下bios从cd启动,哇,竟然能启动,而且见到了安装界面。窃以为到这步,我的pc装苹果之路已经走完了一半。哪知这仅仅是噩梦的开始。整个下午就在网上乱逛,了解下pc安装苹果的知识,了解下多系统的安装与启动。晚上回到寝室,真刀真枪,开始干了。
首先是硬盘的问题。由于我的头脑发热,整个硬盘250G,就一个archlinux,这么一来要想安装苹果先得给苹果腾点地方啊。于是找到了传说中的Gparted,但是系统正在运行,/分区和/home分区无法umount,因此更无法resize,于是就找到了Gparted Live CD。wget拖了半个小时,用brasero刻盘,第一次可能用了全速刻盘,最后出现了莫名其妙的错误,刻录失败,废了一张cd。于是又想到了伟大的ultraiso 9.3版。咱不是有virtualbox嘛。马上去神网下了ultraiso,装上,插上u盘,打算搞鸽GParted Live USB出来。依然宣告失败。还剩一张cd,又用brasero刻录了下,这下降低了刻录速度,终于成功。reboot。
加载了3、4分钟的样子,Gparted终于出来了。桌面环境采用的是fluxbox,虽然没用过。先把/home分区resize一下,成功。重启,进入archlinux,df -h看看文件系统,成功!!很是兴奋的样子。reboot again,又进入了GParted Live CD,打算给mac腾30g的空间。不知怎么的,我试探性的用了一个貌似叫new partition table的功能,谈出个窗口,我点了个确定,又一个窗口,我又点了确定,这下糟了!整个硬盘被重新格式化了,整个过程不超过1s中的时间,我想这GParted也太nb了。250g的硬盘,1s中不到就全部搞定格式化了。
呜呜,我的archlinux,我的心血啊。索性,一不做,二不休,先装苹果吧。苹果的盘是ideneb的leopard 10.5.7的版本。从晚上7点到午夜12点,总共装了不下6次。终于还是没装上。症状是安装完所有软件重启后风火轮转几圈后就黑屏无反应。可能是各种驱动的问题,但是我用手机上网,反复设置,反复选择,还是没有成功,这使我彻底失望。mac的安装确实是一个关乎rp的问题。怎么办?
思前想后,还是决定装windows 7,再重新装个linux吧。于是找室友帮忙,下载了windows msdn英文原版,还是用伟大的ultraiso,刻成了live usb,启动,开始安装。半个小时,一个华丽的启动界面出现在我的眼前——果然很绚丽。简单使用了一下,相比vista,对windows 7确实做的非常非常不错。尤其是独具匠心的UI设计。超级任务栏,aero peak,动态的主题效果,重新设计的media center,便捷的网络vpn链接,还有许多我觉得不错但是叫不出名字的功能,真的很强大。而且运行起来比vista要轻快多了。看来MS这次是下了血本了。
盗版,这个字眼对于中国的it人来说是一种挥之不去的痛。虽然我也不想用盗版,虽然我可以用linux满足自己开发、办公、学习方方面面的需要,但是某些时候环境是不一样的。譬如实验室的同组同学都在用visual studio 2008做开发,这种情况下想不用盗版的MS产品恐怕都很难。据说即将面试的Visual Studio 2010正版要11100+美刀。简直是不可想向了。算了。这是在中国。cc98上有几个msdn的key,也许这次rp不错,竟然能电话激活了。此时已经半夜两点多了,撑不住了,睡了。
第二天早晨10点才爬起来。继续搞电脑。得装个linux。装哪个版本好呢?arch,自己配置还是蛮麻烦的。说实话现在对系统安装已经没有多大的兴趣了。每次重装系统都是把自己的精心调制的作品一点一点碾碎,然后再一点一点搭建起来。我是需要xetex最新版本的,自从用了latex后,已经完全不能习惯word。google了下,ubuntu 9.10中的texlive貌似还停留在2007版本。算了,还是arch吧。
有了上次的安装经验,这次的安装也算是轻车熟路了。但是自己又没有十全的把握与信心,于是在win7下把archlinux官网wiki上的Beginner's Guide打印了下来,七十多页。具体的安装过程不讲了,大体上都一样的,真想自己装的话看Beginner's Guide。只是记录一下安装过程中遇到的几个小问题。
1、grub的引导问题。很幸运的是archlinux自动识别了win7,只需要在grub的menu.lst文件中去掉几行注释就行。这是我的menu.lst文件:
timeout 5
default 0
color light-blue/black light-cyan/blue
# boot sections follow
# each is implicitly numbered from 0 in the order of appearance below
#
# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line.
#
#-*
# (0) Arch Linux
title Arch Linux
root (hd0,8)
kernel /vmlinuz26 root=/dev/disk/by-uuid/06ec3189-80fa-471d-b8be-20de1d458f63 ro nomodeset vga=773
initrd /kernel26.img
# (1) Arch Linux
title Arch Linux Fallback
root (hd0,8)
kernel /vmlinuz26 root=/dev/disk/by-uuid/06ec3189-80fa-471d-b8be-20de1d458f63 ro
initrd /kernel26-fallback.img
# (2) Windows
title Windows
rootnoverify (hd0,0)
#makeactive
chainloader +1
2、rc.conf的问题,最重要的是要安装hal,并把它防盗rc.conf的daemons里面,否则进入gui后无法识别键盘鼠标。这是我的daemons设置:
3、语言选择问题,在rc.conf会有一个LOCALE的设置问题,建议不要更改成中文,保持默认就好。我就是看了某个教程的知道改成了zh_CN.utf8,结果进入kde时,界面字体非常难看。也可能是我的字体还没有配置好的原因。
4、localtime和UTC的选择。wiki上说如果是windows和linux双系统,还是选择localtime比较好。
HARDWARECLOCK="localtime"
USEDIRECTISA="no"
TIMEZONE="Asia/Shanghai"
5、字体配置我选择的是WenQuanYi Micro Hei系列,效果还算不错的。仿雅黑字体的。
6、触摸板的增强可以用gsynaptics驱动,其中有个circular scrolling的功能,非常的有趣。实现了mac触摸板的某些功能。自己google一下就知道了。在触摸板上画圈circular,就可以实现srolling的功能。呵呵。注意,gsynaptics的设置默认每次是不能保存的。把下面语句:
加入到你自己主目录下的.xprofile文件中即可。
7、显卡驱动的问题。我的是ati x1450卡。采用xf86-video-ati的开源驱动即可。但是最新的内核(2.6.31以上版本)开发了一个叫做kernal mode-setting的功能,会引起一些冲突,导致桌面效果无法启用。具体可以参考archlinux wiki上的这篇文章。解决方法是禁用kernal mode-setting功能。在grub menu.lst中实现。也就是下面这句:
nomodeset表示禁用kernal mode-setting,vga=773表示启用控制台的framebuffer。至于framebuffer是什么,自己百度吧。
8、xetex的字体问题。直接将下载的字体cp到/usr/share/fonts里面,最好建一个目录来存放自己的字体,然后最好
一下。
9、okular, evince不能显示中文问题。据说二者都是基于poppler的,安装poppler-data即可完美解决这个问题:
10、从普通用户到root用户gui程序无法启动的问题:
Password:
[root@freelox lox]# firefox
No protocol specified
No protocol specified
Error: cannot open display: :0.0
[root@freelox lox]#
解决办法是在转到root之前输入xhost +命令:
access control disabled, clients can connect from any host
[lox@freelox ~]$ su root
Password:
[root@freelox lox]# firefox
[root@freelox lox]#
应该是与X11协议的实现有关。我没大看明白。自己百度吧。
能想起来的问题大体就这么多,放上一张archlinux+kde的图片的,是我现在的桌面:
后来的后来,在win7里面装上了Visual Studio 2008, Visual Assist和Viemu以及Vmware 6.5,当然,全部都是中国特色的db,呃,很矛盾。
周日看了一天的计算理论,教材是《Elements of the Theory of Computation: Second Edition》的中文版,张立昂、刘田译。不过质量实在不怎么样。看了三十页,就发现了至少三处错误。边看教材边做习题,打算把习题全部做完,统一给老师交上去好了。中途要画几个finite automata,于是又头脑发热翻了翻pgf/tikz manual,还算有点小成果。
又是繁忙的一周,汇编语言要补,计算机组成的实验更要补,计算几何的期中考试,数值分析新的内容,操作系统两份报告,还有很多很多。呃。加油吧。从来没感到学业如此繁重过。