降级 Mac OS X

不知道是现阶段 OS X 10.7.3 beta 1 有 Bug 还是我个人 RP 的问题,玩了两天,千方百计,还是未能解决 MacBook Pro 运行龟速的问题。主要体现在磁盘 IO 缓慢,Finder 和 iTunes 占用 CPU 都很高,多指手势延时超过 1 秒。 忍无可忍,尝试用 10.7.2 的升级包降级回到 10.7.2 稳定版。却提示版本太新,不能安装老版本的 combo 包。立刻想到了跑 Reversioner11C73Client.pkg,结果报错:“The volume must contain Mac OS X version 10.7.2 11C73”。 解开 Reversioner11C73Client.pkg 发现 Contents/Resources/VolumeCheck 中有以下检测: #!/usr/bin/perl my $SYSTEM_VERS = "$ARGV[0]"."/System/Library/CoreServices/SystemVersion.plist"; my $SERVER_VERS = "$ARGV[0]"."/System/Library/CoreServices/ServerVersion.plist"; my $EXIT_VALUE = 0; DO_CHECKS: { if(! -e "$SYSTEM_VERS") { $EXIT_VALUE = (( 1 << 5 ) | 16 ); last; } if(! MatchSystemVersionRange($SYSTEM_VERS, "10.7.2", "11C1", "11C73")) { $EXIT_VALUE = (( 1 << 5 ) | 16 ); last; } if((-e $SERVER_VERS)) { $EXIT_VALUE = (( 1 << 5 ) | 16 ); last; } } exit($EXIT_VALUE); ...... 再观察 Contents/Resources/English.lproj/VolumeCheck.strings: "16" = "The volume must contain Mac OS X version 10.7.2 11C73"; "17" = "This Downgrader requires that reversioner_flat.tmp be installed on this volume."; 哈,这不很明显吗?原来安装包仅仅检测 /System/Library/CoreServices/SystemVersion.plist 中的版本号,一旦发现版本号不满足,就不允许往后安装了。那就简单了: sudo vim /System/Library/CoreServices/SystemVersion.plist 直接改为: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ProductBuildVersion</key> <string>11C73</string> <key>ProductCopyright</key> <string>1983-2011 Apple Inc.</string> <key>ProductName</key> <string>Mac OS X</string> <key>ProductUserVisibleVersion</key> <string>10.7.2</string> <key>ProductVersion</key> <string>10.7.2</string> </dict> </plist> 我都不屑跑 Reversioner 了,直接跑 MacOSXUpdCombo10.7.2.pkg 然后重启。 机器闪电搬的速度又回来了,哈!痛快!

让 pac 文件修改后立即生效

ssh -D 和 VPN 是我认为目前最靠谱的翻墙方式了。 但是,他们都面临同一个问题,就是需要区分被墙与没有被墙的网站,以使用较快的方式访问所需要的站点。 我使用 VPN 的时候会使用 chnroutes 项目:http://code.google.com/p/chnroutes/ 使用 ssh -D 的时候,我有自己的 .pac 文件,且我的 pac 文件修改很频繁。 于是怎么在不重启浏览器(或其他应用)的情况下,让新修改的 .pac 文件生效呢? 经过研究,发现只需要修改一下 .pac 文件的地址,浏览器就会重新加载代理脚本了。 但每次都在图形界面下干这活儿,实在太反人类了,于是,决定尝试写 shell: Mac: #!/bin/sh pac="http://www.xxx.com/yyy.pac?time=`date +%s`"; networksetup -setautoproxyurl Wi-Fi "$pac"; # 你需要把 Wi-Fi 改为自己网络的 Service name Linux with gnome: #!/bin/sh pac="http://www.xxx.com/yyy.pac?time=`date +%s`"; gconftool -s /system/proxy/autoconfig_url -t string "$pac"; Windows? 对不起,不用 Windows 好多年了。