把 Time Machine 备份到 FreeNAS 上

Mac 上的 Time Machine 很好用,不过每次备份都要用移动硬盘挺麻烦的。如果有多人使用多台 Mac 能不能把大家的 Time Machine 统一备份到云里或者局域网的某台服务器上呢?我们实验室大部分人都在用 Mac,现在正需要这么一个备份方案。谷歌了一下,发现这种使用 Time Machine 备份到远程电脑的方案是最方便、廉价的了,只需要一台普通 PC 就可以充当备份服务器。

Apple 使用自己的 Apple Filing Protocol (AFP) 协议提供文件共享服务,FreeNAS 刚好支持这一协议(貌似 Openfiler 目前还没有实现 AFP)。在一台服务器或虚拟机上安装 FreeNAS,安装过程很容易,这里省略。

配置 FreeNAS

安装好后进入 web 管理界面创建一个新用户,然后创建一个新 APF 共享, 在左边菜单里面选择 Sharing->Add Apple (AFP) Share,这里需要注意钩上 Disk Discovery 并选择 Disk discovery mode 为 Time Machine:

create a afp share

搞定~

配置 Mac

现在剩下的配置在 Mac 完成,让 Mac 连接刚创建的 AFP Share,点击 Mac 顶部菜单 Go->Connect to Server…,填入 freenas 服务器的 IP 地址 192.168.2.200 连接服务器:

time machine backup

成功连接后会挂载一个 AFP share 盘,然后配置 Time Machine 选择这个盘当作备份盘:

time machine backup

大功告成,等着自动备份吧:

time machine backup

把浏览器当作临时记事本

今天发现一个比较实用的小技巧,新建一个浏览器窗口在里面打字,可以当作简单的 notepad 用,比如临时记点东西什么的,这样不必每次开 Notes/TextEdit/Vi/Evernote 之类的工具了。(小技巧来自:One line browser notepad

打开浏览器,在地址栏里敲入下面这行:

data:text/html, <html contenteditable>

如果稍微美化调整一下并修改浏览器标题栏的话:

data:text/html, <title>Notepad</title>
<body contenteditable style="font-size:2rem;line-height:1.4;max-width:60rem;
margin:0 auto;padding:4rem;">

可以把上面代码保存到书签,这样就不必每次复制粘贴上面的代码了:

use browser as notepad

升级到 Mac OS X 10.8 Mountain Lion

mac os x mountain lion

苹果上周发售了新版的 Mac OS X Mountain Lion,周末升了一下级。购买和升级过程越来越容易了,上次从 Tiger 升级到 Leopard 的时候从订购安装盘到完成升级花了几天。这次升级到 Mountain Lion 要简单方便得多,登陆 Mac App Store 点击 install,输入帐号后就开始下载了,下载完后自动启动安装界面,只需要点击一次就开始升级安装,整个升级过程无需任何干预(期间两次重启也是自动的)。

晚上给另一台 Macbook Pro 升级的时候发现一个比较坑爹的地方,下午下载的 4GB 多的 Mountain Lion 安装镜像升级完后就消失了,这样不得不在另一台 Macbook Pro 上重新下载一遍(购买 Mountain Lion 一次后可以不限次下载,20美元的 Mountain Lion 授权可以用在自己的多台 Mac 上)。所以家里有多台 Mac 的话最好先下载、拷贝镜像或者做成 DVD/USB 后再升级。

完成升级后登陆最先看到的是变化是壁纸,桌面壁纸改成了更简洁的淡蓝银河,不知道是心理作用还是审美疲劳?每次升级 Mac OS X 后都觉得壁纸比前一个版本要好看。

外观方面没有大的变化,但很多细节都有改进。比如以前的滚动条很小不容易鼠标点击到,现在的滚动条会在鼠标碰到的时候自动放大,不过在 Mac 上都是用双指触摸来上下拖动页面的,滚动条其实不是那么常用,所以这个改进对用户来说不是那么重要(如果不是追求完美的话~)。拷贝和下载大文件的时候进度条出现在文件的图标(icon)上。3个指头点击触摸板就可以预览,这个挺方便。Dock, Dashboard, 桌面屏保和壁纸等等都有变化。

点击苹果主菜单的软件升级 Software update… 后自动连上 App Store,以后的 update 和 App store 紧密连在一起,而不是分开的程序了。

到处都是 Share 按钮,share 无处不在。

Notification Center 整合了所有烦人的通知消息,不用单独去查看和处理哪里来的 notification 了,生产力大大提高。

mountain lion notification

应用程序增加了 Reminder, iMessage,Reminder 对于我来说比较有用,可以当作简单的 todo list 用,之前一直在用第三方的 Wunderlist.

Safari 升级到了 6.0,改进很大,地址栏搜索历史纪录、书签等响应很快,终于有了 Chrome 里面早就有的直接在地址栏输入查询关键字的功能,而且比 Chrome 做的更好。Safari 增加了一个 Reader 按钮更加专注于阅读,还可以把未看完的文章加入 Reading list. 增加了 tab 预览,对于我这种一次开 n 个 tab 的人来说这个功能实在来得太及时了,很容易在不同 tab 里(依靠预览)切换,不用一个一个点击 tab 看内容。

mountain lion notification

Mail, QuickTime, Dictionary, Time Machine, Photo Booth 等都有升级和改进。

自带的中文输入法有一些改进,加入了手写识别,词库更大了,还加入了中文字典释义功能,有汉字不懂意思的话选中后用3个指头轻击触摸板就会出现意思,类似中文-中文字典。

字体有改进,更加精致饱满了。下面这张截图是刚从 Mountain Lion + Safari 6.0 上拔下来的,对比一下以前 Mac OS X 上的字体:Mac 和 Windows 的中文字体显示效果看看。

font on mountain lion

网上很多人讨论这次升级19.99美元值不值,这个价格比苹果应用商店上的小应用程序还便宜,一个 Things.app 要 $49.99,连一个 Todo.app 都要 $14.99,这样比较起来有 4GB 体积的 Mountain Lion 可以简直就是免费。苹果说这次有200多项改进,没有一一去核实,不过从这两天使用来看,系统和浏览器性能明显有提升,系统响应快、稳定,细节改进很多。按照 OS X Mountain Lion 10.8 License Agreement,Mountain Lion 可以授权安装在任何属于自己的 Mac 上,如果家里有多台 Mac(家人都在用 Mac 的话),20美元就更超值了~

Mac OS X Lion 上使用 TTLS/PAP 访问 Wi-Fi

我们实验室的 Wi-Fi 更改了认证方式,不再采用简单的 WPA2/PSK (Pre-Shared Key),这种方式的弊端显而易见,所有人都知道 Wi-Fi 密码,大家容易把这个 “共用” 密码传给外人,如果是 “个人” 密码的话会好一些,所以我们打算通过 LDAP 把这个密码和个人的邮件密码连在一起,这样会有效的阻止密码扩散(不会有人轻易告诉别人自己的邮件密码),还减轻了管理员经常换密码的痛苦。除了密码管理方面的好处外,还可以通过 Radius 对用户进行统计、对通讯加密等等。我们采用了 DD-WRT + Radius + LDAP 这种方式和现有的基础设施连在一起,用户通过 Linksys WRT 54GS 无线 AP 输入自己内部的 LDAP 帐号就可以登陆 Wi-Fi,和我们其他服务一样 “一次登陆到处使用”。

Mac OS X Lion (10.7) 上默认使用的是 TTLS/MSCHAPv2 方式,如果使用 TTLS/PAP 的话就需要更改配置,问题是 Mac OS X Lion 的配置文件页面没有提供任何方式更改或新建配置来支持 PAP. 打开 Apple > System Preferences … > Network > Wi-Fi > Advanced … > 802.1X 后会发现是空的列表,没有新建按钮也没有导人,怎么增加一个 Profile 呢?我记得 Mac OS X Snow Leopard (10.6) 是有个新建按钮的,不知道为啥 Apple 把这个按钮去掉了,官方给的解释是通常这个 .mobileconfig 配置文件都是由网络管理员提供的,用户拿到这个文件双击就可以完成配置,不需要自己动手配置。

解决这个问题有两个办法:第一个是下载一个别人配置好的.mobileconfig 文件,其实就是一个 xml,然后调整一下后双击使用;第二个是下载 iPhone Configuration Utility 工具自己创建一个 .mobileconfig 文件。办法一可以直接到这里下载 .mobileconfig 后修改,这里不详细介绍了。这里采用办法二:

1、下载和安装 iPhone Configuration Utility 3.5 for Mac OS X 工具
2、打开 Applications > Utilities > iPhone Configuration Utility.app 选择左边列表的 Configurations Profiles;
3、按照下图在 General 页面填写信息;

ttls/pap on mac os x

4、按照下图在 Wi-Fi 页面填写必要的信息,比如 SSID 等,注意选择 WPA/WPA2 Enterprise, TTLS 和 PAP;

ttls/pap on mac os x

5、点击菜单的 Export 配置到某个文件,然后双击这个后缀名为 .mobileconfig 的文件就会自动导入到上面的 802.1X 页面,会提示输入 Radius 服务器的登陆信息等;
6、最后切换无线网络测试一下。

sshuttle:不需配置的 VPN

sshuttle 被其作者称为 “穷人的 VPN”(A poor man’s instant VPN),甚至不需要远端服务器的 root 权限就可以用(只需要一个普通 SSH 帐号),和在 Mac/Linux 客户端直接用 ssh -D 的方式有点类似。如果不想花钱买 VPN,又懒得自己在 VPS 上安装和设置复杂的 VPN 服务,又不想用 ssh -D 这么朴素的技巧的话可以试一下这个 sshuttle,按照作者的说法 sshuttle 比 sshd -D 的方式快一点,因为 It’s just data-over-TCP,而不是 TCP-over-TCP,TCP-over-TCP 的方式会带来不必要的性能问题,因为 TCP 本身就是可靠传输协议,保证了包的有序性和无差错,并确保包被接受,如果有包丢失的话 TCP 协议可以自己立即重传弥补,所以没必要两层都 TCP,一层 TCP 就比较安全了。

sshuttle 的用法很简单,在客户端下载和运行就可以了(需要有 Python 的支持),无需在服务器端做任何配置(但是需要一个 ssh 帐号和 Python 支持):

$ git clone git://github.com/apenwarr/sshuttle

$ ./sshuttle -r username@sshserver 0.0.0.0/0 -vv
Starting sshuttle proxy.
Binding: 12300
Listening on ('127.0.0.1', 12300).
[local sudo] Password: 
firewall manager ready.
c : connecting to server...
...

成功运行 sshuttle 后会在 Terminal 上看到一些运行时 log:
sshuttle

同步管理多个 SSH 会话

当我们管理数十台或更多 Linux 服务器的时候,往往需要在每台服务器上执行同样的命令,比如我们想一次查看10台 Xen 服务器(node)上系统负载情况,或者想知道哪台 Xen 服务器有剩余内存可以分给新客户,又或者想执行 df 命令看看哪个服务器上还有多的硬盘空间等等,除了可以用脚本或工具统一收集这些信息外,我们还可以考虑使用一些同步管理多个 SSH 会话的小工具来帮助管理多台服务器,节省时间提高管理效率。在 Linux 上可以用 pdsh、ClusterSSH 和 mussh;在 Mac 上可以用 csshX.

使用 csshX 很简单,下载解压后就可以运行,如果要同时 ssh 到4个服务器的话:

$ ./csshX 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4

也可以把这些要 ssh 管理的 IP 写到一个文件里,然后加载这个文件:

$ vi xenhosts
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4

$ ./csshX --hosts xenhosts

csshX

在 Mac OS X Snow Leopard 上安装 Ruby 和 Rails

昨天刚发布的 Rails 3.0.6 包含重要的安全更新,所以刚好在升级 Rails 的时候顺便把 Ruby 也升级一下。Mac OS X Snow Leopard 默认的 Ruby 版本是 1.8.7 的,貌似直接源代码编译升级到 1.9.2 有一些问题(网上有不少人升级到 1.9.2 的时候出问题)。最好的办法是用 RVM (Ruby Version Manager),又简单又方便,而且不会替代系统自带的 Ruby 1.8.7,以后可以随时在 1.8.7 和 1.9.2 之间切换,适合开发和移植程序,Rails 3 也支持 Ruby 1.9.2 版本。

安装必要工具

安装前确定 Mac OS X 已经安装了最新的 Xcode 开发工具,至少是 3.2.1 版本。然后安装 git 工具:

$ xcodebuild -version
Xcode 3.2.6
Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
BuildVersion: 10M2518

$ sudo port install git

安装 RVM

安装 RVM 的方法有点不同:

$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

如果有代理的话,用 -x 设置代理服务器:

$ bash < <( curl -x 192.168.0.1:3128 http://rvm.beginrescueend.com/releases/rvm-install-head )

配置 RVM:

$ vi ~/.bashrc
# This loads RVM into a shell session.
[[ -s "/Users/vpsee/.rvm/scripts/rvm" ]] && source "/Users/vpsee/.rvm/scripts/rvm"

关闭 Terminal 后重新打开以便 .bash_profile 文件生效,这个时候用下面命令可以验证 rvm 是否安装成功:

$ type rvm | head -n1
rvm is a function

安装 Ruby

安装最新的 Ruby 1.9.2-p180 稳定版本:

$ rvm install 1.9.2

系统上原来是 1.8.7 的,把系统默认的 ruby 解释器设置成 1.9.2:

$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ rvm --default 1.9.2
$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]

检查 gem 版本是 1.3.7 或以上,以及 sqlite3 版本是 3.6.12 或以上,然后使用 gem 安装 sqlite3-ruby:

$ gem -v
1.3.7

$ sqlite3 -version
3.7.5

$ gem install sqlite3-ruby
/Users/vpsee/.rvm/rubies/ruby-1.9.2-p180/bin/gem:4: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777

$ sudo chmod go-w /usr/local/bin
$ gem install sqlite3-ruby

安装 sqlite3-ruby 的时候出现目录权限警告, 修改一下 /usr/local/bin 的权限就好了。

安装 Rails

安装 Rails 3.0.6 版本:

$ gem install rails

$ rails -v
Rails 3.0.6

升级 Ruby 和 Rails 完毕后我们就在 Snow Leopard (Mac OS X 10.6.7) 上有了一个最新的 Ruby on Rails 开发环境。

在 PC 上安装 Mac OS X Snow Leopard

上周 MacBook Pro 莫名其妙点不亮屏幕了,症状是:黑屏但是系统可以正常运行,如果要使用的话只能接外接显示器来操作,没有屏幕非常不方便,毕竟不是每个地方都有多余的显示器可以用。Google 了一下找到的一些重置 Mac 的技巧都不管用,后来发现 Apple 官方承认这款2007年产的部分 MacBook Pro 在某种情况下会出现屏幕问题(MacBook Pro: Distorted video or no video issues),原因出在 NVIDIA GeForce 8600M GT 显卡。还好 Apple 承诺过了质保期也可以免费维修:

Apple has determined that some MacBook Pro computers with the NVIDIA GeForce 8600M GT graphics processor may be affected. If the NVIDIA graphics processor in your MacBook Pro has failed, or fails within four years of the original date of purchase, a repair will be done free of charge, even if your MacBook Pro is out of warranty.

笔记本已经送到 Apple Store,第一次修 Mac 不太懂流程,老土了一把。昨天接到电话说是显卡和主板之间的问题,打算给我换一个主板,不过没有现成的主板,需要等一周时间,等就等吧,过了质保又是免费,还有什么可以抱怨的呢。VPSee 去年买的 Mac OS X Snow Leopard DVD 是含5个 license 的家庭套装版,MM 用了1个,自己用了2个,刚好还剩2个,别浪费了,昨晚手贱,把家里一台 PC 格了装苹果。

准备工作

  • Intel 处理器电脑(不过有人在 AMD 上安装成功过)
  • 一张空白 CD
  • Mac OS X Snow Leopard 安装光盘

设置 BIOS

BIOS 有几个地方比较重要,需要修改4个地方:

  • Advanced BIOS Features->First Boot Device,确认 CD-ROM 引导启动;
  • Integrated Peripherals->PCH SATA Control Mode,设置成 AHCI;
  • Integrated Peripherals->Onboard SATA/IDE Ctrl Mode,设置成 AHCI;
  • Power Management Setup->HPET Mode,设置成 64-bit model.

主板不同 BIOS 界面可能有差异,不过意思是一样的。

开始安装

先去 tonymacx86 下载 iBoot,解压后得到 iBoot.iso,刻盘,然后用盘启动系统就会得到如下界面:

Boot Hackintosh

换光盘,把 iBoot 光盘取出来,把 Mac OS X Snow Leopard 安装光盘放进去,等待10秒左右然后按 “F5” 就会看到界面上面的字变成 “Mac OS X Install DVD”,按 “Enter” 就进入 Mac OS X 的常规安装了。需要注意的地方可能就是记得先选择 Utilities > Disk Utility 工具分区和格式化硬盘为 Mac 格式:Mac OS Extended (Journaled) ,并且分区选择 Options->GUID Partition Table.

启动系统

安装完系统后,重启仍然需要 iBoot 光盘启动,进入 iBoot 后选择硬盘启动后就进入了 Mac OS X,每次都要用 iBoot 光盘先启动很麻烦,所以需要一个 Boot Loader,仍然到 tonymacx86 下载 MultiBeast,安装完毕后取出 iBoot 光盘就应该可以从硬盘直接引导了。

Troubleshooting

如果 PC 上用的不是 NVIDIA 的显卡一般会因为没有相应的显卡驱动导致屏幕分辨率停留在 1024×768 上不去,一种绕过的办法是(可能有效):

$ sudo vi /Library/Preferences/SystemConfiguration/com.apple.Boot.plist 
...
Graphics Mode
1280x1024x32
...

网上关于在 PC 上安装 Mac OS X 的资料很多,可以参考这篇:iBoot + MultiBeast: Install Mac OS X on any Intel-based PC.

延伸阅读:[TL] Re: [初级] 为何要选择 Mac?为什么国外程序员爱用 Mac?

在 Mac OS X 上安装 ns-3

Ns-3 网络模拟器(network simulator)看上去像 ns-2 的升级版本,其实不是,ns-3 是全新的一套网络模拟器,ns-3 的最终目标是替代 ns-2,虽然 ns-3 和 ns-2 都是用 C++ 写的,但是 ns-3 不兼容 ns-2 的 APIs,这就使得在 ns-2 下写的程序可能就需要一定的移植才能在 ns-3 下运行。对于已经熟悉 ns-2 的人来说,ns-3 和 ns-2 最大的区别可能就是脚本语言的不同,ns-2 使用 OTcl 而 ns-3 使用的是 Python. 虽然 ns-3 的 models 没有 ns-2 多,但是 ns-3 有些我们需要的新功能,比如更细致的 802.11 models 等。最近一直在忙 paper 和一些数据,模拟器的事情被搁到一边很长时间了,ns-3 软件包很绿色,下载完源代码后所有编译过程都在一个目录里进行,编译完就可以用,不需要安装,也不会到处放置一些杂乱的配置文件,所以 VPSee 决定在自己 Mac 上编译一个,省得每次都要远程登录到办公室的电脑上。

下载和编译 ns-3

在编译和安装 ns-3 之前先确认 Mac 上已经装有 Xcode 开发工具,Xcode 是 Mac 的开发工具套件,可以在 Mac OS X 的安装 CD 上找到,如果没有可以去苹果官方网站免费下载。有了 Xcode 后就可以开始编译 ns-3 了。这里使用的 Mac OS X 版本是 10.6.4:

$ wget http://www.nsnam.org/releases/ns-allinone-3.9.tar.bz2

$ tar jxvf ns-allinone-3.9.tar.bz2

$ cd ns-allinone-3.9
$ ./build.py
...
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (22m12.303s)
Leaving directory `./ns-3.9'

测试 ns-3

22分钟后编译完成,在 Mac 上安装比在 Linux 上安装 ns-2 还简单,没有 trouble shooting,没有 workaround,编译完就可以用,难道 ns-3 的开发人员也在用 Mac?编译成功后,用测试用例测试一下:

$ cd ns-allinone-3.9/ns-3.9
$ ./test.py
...
145 of 145 tests passed (145 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)

运行第一个例子程序

没有问题后就可以开始自己的第一个程序了,拷贝一个例子程序,然后编译运行:

$ cd ns-allinone-3.9/ns-3.9

$ cp examples/tutorial/first.cc scratch/myfirst.cc

$ ./waf
Waf: Entering directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
[1160/1308] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_2.o
[1161/1308] cxx: scratch/simple.cc -> build/debug/scratch/simple_3.o
[1305/1308] cxx_link: build/debug/scratch/myfirst_2.o -> build/debug/scratch/myfirst
[1306/1308] cxx_link: build/debug/scratch/simple_3.o -> build/debug/scratch/simple
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (5.995s)

$ ./waf --run scratch/myfirst
Waf: Entering directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
Waf: Leaving directory `/Users/vpsee/Desktop/ns-allinone-3.9/ns-3.9/build'
'build' finished successfully (0.848s)
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

Apple 和 Steven Jobs 关于系统平台最正确的决定可能就是选择和迁移到了 Unix 平台(x86),使得大量的基于 Unix/Linux 的研究和开源项目可以很容易的运行在 Mac 上,这样吸引了大批 Unix/Linux 程序员、系统管理员、研究人员投靠 Mac 阵营

分享一个截网页的好工具:Paparazzi!

写博客的时候经常会对网页截图,比如对 VPS 服务商的官方网站首页进行截图等。Mac 自带的截图工具非常棒,截对话框、窗口、桌面都非常方便,可惜抓取网页的时候不能捕捉到完整的页面,现在的网页动不动就需要拖动很长的滚动条,如果整个页面不能在屏幕上显示出来的话就不能被完整抓到,Mac 自带的抓图工具只能抓 “看得见” 的部分。Paparazzi! 是 Mac OS X 上的一款开源(当然也免费)的抓图工具,可以方便截取长度超过一个屏幕的网页,只要输入网址,调整要抓图的大小和截取的大小就能拔一张完整的页面下来,非常好用。

paparazzi!