搭建个人家用NAS网络存储服务器 [三]

上文 搭建个人家用NAS网络存储服务器 [二] 里讲了这次新NAS server的硬件,这篇讲讲软件。

首先,这次组home server的目的已经不仅仅是NAS,还想用虚拟化做几台VM跑一些web应用,所以在用何种虚拟化技术上动了点脑筋。
考虑过以下几种

  • ESXi
  • Xen
  • Solaris Zones

第一种ESXi安装起来最简单,VMWare的图形化配置简单易用,客户端还有中文版。但问题就在这个客户端上,它只有Windows版本(就算web client也是需要一台windows机器做web server)这给我造成了很大的不便,家里都是Mac和Linux。
第二种Xen的安装需要对Linux系统比较熟悉,并且配置大量依赖命令行(我没有装libvirt图形界面,用xl这个stack tool足够了)
第三种Solaris Zones我也曾经考虑过,那时候曾经想主机(Dom0)就直接跑OpenIndiana然后用Zones作虚拟化,最后作罢的的原因还是对Solaris不熟悉。

在决定采用Xen虚拟化技术的同时还有一点需要注意的就是CPU和主板都支持vt-d,这样可以直接把SAS控制卡和网卡直接pci passthrough给位于DomU的NAS系统,以达到接近于native的性能。Intel带K结尾的CPU都不支持vt-d技术(可惜了我的3770K),Z77主板除了Asrock的一款外也都不支持vt-d(又可惜了我的ROG M5G)

NAS本身的系统我还是选择了自己相对熟悉的FreeNas。曾经列入考虑范围的还有OpenIndiana(也就是OpenSolaris folk出的开源版本),最后由于对Solariz系统不熟悉和对FreeNAS漂亮GUI的依赖而作罢。

最终系统中软件的版本如下
Dom0:
Gentoo Linux 3.8.13-gentoo (我尝试过3.10.7 内核,Xen配置不成功)
Xen-4.2.1-r4 (4.2.2 下配合Xen-tools 有点问题,hvm DomU跑不起来)
Xen-tools-4.2.1-r5 (4.2.2-r3 下hvm和qemu被mask,遂降级至4.2.1-r4)

DomU:
FreeNAS我尝试过两个版本 (8.3.1-p2-X64, 9.1.1-X64) 可以顺利跑在DomU HVM下并且Dom0 pci passthrough LSI 9211-8i HBA controller和Intel 82579LM Gigabit ethernet card。
这里面有一个tricky的地方就是LSI 9211-8i 这块用SAS 2008芯片的HBA卡在通过Xen passthrough给FreeNAS的时候需要修改FreeNAS系统里的2个配置问题,否则系统启动中会遇到超时问题(如下)

run_interrupt_driven_hooks: still waiting after 60 seconds for xpt_config mps_startup
run_interrupt_driven_hooks: still waiting after 120 seconds for xpt_config mps_startup

解决办法就是修改FreeNAS上的/boot/loader.conf,加入以下两行 (默认情况下/boot 是readonly的,需要 mount -uw / 加载为可读写)

hw.pci.enable_msi="0"
hw.pci.enable_msix="0"

这个问题托 @delphij 的福已经开了bug ticket

至此我的第二台NAS server + home server顺利运转,并且主机上还能再跑几台VM弄点web应用。

如果还写第四篇的话,我估计玩的就是链路聚合 Link aggregation control protocol 或者是10GBase-T网络了

搭建个人家用NAS网络存储服务器 [二]

不知不觉距上文 搭建个人家用NAS网络存储服务器 [一] 发布已经快三年了。
第一篇中的主机后来给家人当做桌面机上网炒股打游戏,作为替换我尝试了HP N40L MicroServe (主要是捡到一台非常便宜的N40L) 加FreeNAS系统的组合,主要考量还是FreeNAS提供的ZFS磁盘格式比较吸引人,ZFS Snapshot是超越Mac OSX上时光机的终极快照备份工具。可惜的是N40L只有4个不可热插拔硬盘位,4个盘位跑RaidZ2略显尴尬,外加N40L的集成CPU性能较弱,应付RaidZ2略显吃力,在全负载读写数据下网络数据传输曲线惨不忍睹。加上最近家里宽带套餐换成了Business Class Internet,ISP提供了一个固定IP,于是想装一台新的home server在提供NAS的同时也可以跑一些web服务。于是再一次开始DIY…

这次装机考虑的主要是一机多用即主机上能跑多个虚拟机应付不同的应用,于是虚拟化能力成了选购主板和CPU的首要因素。Intel的VT-x和VT-d是必须的,前者在主流CPU上都有提供,后者是为了PCI device passthrough (Direct I/O)以保证提供NAS服务的虚拟机能直接操纵硬件以提供最佳性能。为了能将服务器仍在角落运转而不用担心死机重启,主板支持IPMI就显得非常重要。至于主板SATA的数量到不是最关键因素,决定上HBA控制卡来保证足够多的SATA/SAS接口。

于是乎有了下面的配置
Supermicro X9SCM-F (只有带F的型号支持IPMI)
Intel Xeon E3-1220 V2 (没有选择V3 Haswell平台主要是从功耗和价格上考虑,V2设计TDP 69w,V3居然要80W)
Kingston DDR3-1333 ECC unbuffered Memory 8Gx2 (主板只支持ECC内存)
LSI 9211-8I HBA 扩展卡
Seasonic 650W 80 Plus Gold (主要遇到打折,65美金实惠价,80+金牌能效比高一些)
OCZ Vertex2 128G SSD (以前机器淘汰下来的,仅作为系统盘够用了)
机箱这次用了Fractal Design Define XL R2,全塔ATX机箱,提供8个3.5寸,4个5.25寸驱动位,这个情况下应该足够了。
磁盘还没有全部到位,基本上准备上WD Red NAS driver红盘。

关于CPU的选择还有个插曲。我中途一度考虑过Xeon E3-1220L V2 这款2012二季度发布的CPU设计TDP只有17w,并且双核四线程带Vt-d简直是家用服务器首选。可惜这款CPU根本不针对零售市场,不管在美国还是中国都很难买到。淘宝上一度出现过一些ES版本的V1版喊价都在1200人民币以上,个别日本代购还喊出了1999人民币的匪夷所思价格。最终还是选择了Xeon E3-1220 V2这款好买又不算太贵的CPU,我买的价格是233美金不含税,如果最终感觉功耗过大可以在BIOS里关掉两个核以降低功耗。

主板的选择余地并不大,考虑到需要IPMI和虚拟KVM支持,基本上只有supermicro,Intel和ASUS这几家,考虑到名气和市场占有率选择Supermicro就不意外了。至于HBA扩展卡而不是硬件RAID卡,主要考虑因素是FreeNAS(或OpenSolaris)跑ZFS需要对硬盘的直接控制,用一款硬件RAID控制卡的话就等于中间额外架了一层,此外纯硬件RAID卡如果要支持RAID 6价格不菲。从性能上讲现代CPU已经严重性能过剩,以前硬件RAID的专用RISC处理器速度快,现在都已经可以完全靠软件Raid来提供同等性能。另外一个不得不考虑的地方就是硬件RAID卡坏了得找一块同厂家同型号的卡来把数据救回来,软件的就比较简单,接哪台机器上都一样用。选择这个型号是因为根据网上的评测,LSA 9211-8i这块卡上用的SAS 2008 芯片系统兼容性比较好。再次不得不说taobao神店多,这卡在淘宝上400-600人民币选择一大堆,在eBay/Amazon上都起码是200+美金,还是祖国好啊。

电源机箱没啥特别的,看到打折外加造型还可以就买了。电源唯一需要注意的就是实际运行中并不需要650w那么大功率,每个硬盘差不多十多w就搞定了,但是开机一瞬点启动电流会比较大,电源不能提供12V下足够电流就容易挂硬盘。我想也没有人会一个个慢慢热插拔硬盘来启动,所以还是选择名牌电源比较靠谱。

下文会讲具体的OS选择和虚拟化技术选择,提前预告下牵涉到了Xen的安装和具体PCI passthrough的配置…. 我想应该不用再等三年了

Mac OSX 上安装 cx_Oracle (for python)

系统: Mac OS X Lion 10.7.3 64bit
环境: Gentoo Prefix Bash / Python 2.7.3

首先从Oracle下载 Oracle Instance Client

Lion下需要安装32bit版本

  • instantclient-basic-10.2.0.4.0-macosx-x86.zip
  • instantclient-sdk-10.2.0.4.0-macosx-x86.zip

解压zip文件到同一目录下,得到类似如下文件

开始安装前需要设置环境变量如下
[code lang=”bash”]
# export ORACLE_HOME=[File Path]/instantclient_10_2
# export LD_LIBRARY_PATH=$ORACLE_HOME
# export DYLD_LIBRARY_PATH=$ORACLE_HOME
[/code]

还需要做一个符号链接
[code lang=”bash”]
# cd $ORACLE_HOME
# ln -s libclntsh.dylib.10.1 libclntsh.dylib
[/code]

接下来的安装过程就和其他python module一样
[code lang=”bash”]
# easy_install cx_Oracle
[/code]

简单即是美 - DBox 试用 The missing downloader for OSX

从Windows迁移到Mac OSX之后一直在找一个简单易用的下载软件,需求很简单,只要做到
1. 多线程下载
2. 浏览器插件
3. 简洁,不要有太多广告和弹出窗口

期间使用过Folx,iGetter,始终都感觉不太满意。Folx免费版本有广告,而且只能2个线程(更多线程只有在付费版本才能激活)。而且Folx的浏览器插件会迫使点击下载链接之后一定要通过它来下载,即使在弹出的Folx窗口里取消也无法继续用浏览器下载,这样对于pdf这种可以内嵌在浏览器中预览的文件类型就会比较不便。iGetter的界面有点类似初期的flashget,免费版可以一直试用,每次启动会弹出广告。

如果想注册购买的话,Folx是19.95美金,iGetter 25美金,虽然不属于昂贵的行列但对于一款下载软件而言还是有些让人不爽。想想看Sparrow只有9.99美金… 而且这两款软件目前都无法通过Mac App Store购买,只能在各自网站付费购买。这样对于将来的更新升级就不如MAS上那么方便。

今天在twitter上看到了一条tweet提到了DBox,一款号称The missing downloader for OSX的下载软件。目前在Mac App Store的售价是4.99美金,相比上面两个竞争对手而言便宜了许多。联系作者之后幸运地得到了redeem code得以最快时间下载试用。

第一次打开的界面非常清爽,相对于iGetter和Folx而言第一眼的感觉都没有让人觉得这是一款下载软件。

同样提供了safari插件,相比Folx,它不会拦截下载链接点击,可以通过鼠标右键点击(触摸板双指单击)链接来选择用DBox下载。

也可以点击界面上的加号输入下载链接。

下载过程中的界面同样简洁,必要的速度,进度和百分比信息外没有多余的东西(比如代表文件长度的小方块)

下载完毕后的文件默认依然在列表中,可以通过界面右下角的搜索框来根据名字搜索。目前版本中这个搜索的反应有点缓慢,清空后还有大概1s-2s的延迟才会显示所有下载列表。

DBox的设置也非常简单,可以设置线程数(这个对于国内网站提供的下载还是挺有用的),默认文件的保存地址等等。一如既往地简洁。

这些就是DBox的所有功能了。在我看来除了缺失一个下载完毕提醒(Growl集成)外其他该有的功能都有了。现在程序自带的提醒是在dock上显示一个下载完成数的badge(类似于mail的未读邮件数)。如果有Growl提醒就更完美,毕竟dock空间宝贵,拖出来就为了看下载完成数的话有些浪费。期待下个版本中会加入。

对于一款4.99的软件,这些已经足以让我掏钱购买。仅仅是iGetter或Folx 四分之一到五分之一的价格加上简洁地界面,外加Mac App Store便捷地购买和升级。就像标题写的那样 It’s the missing downloader for OSX。

从Mobile me 迁移到iCloud

随着iOS5 GM和10.7.2 GM的发布,广大iOS/OSX用户将在12号迎来新的苹果云服务iCloud。对于过去没有订阅mobile me的用户来说一切都比较简单,现在使用的apple id将可以免费获得一个@me.com的邮箱(用户名可以自由选择,但不可与现有用户重名)。那么老的mobile me用户(不管是individual user还是family pack user)就有个迁移问题,包括很多人一直在询问的如何将mobile me账户与其他apple id合并。

首先我们需要明确以下几个概念
1. Apple Id可以用户任何一个邮箱地址注册,你在itunes store购买过的音乐读书软件都将归于这个账户名下。这个id所关联的primary email地址是可以修改的,但你不能修改为一个已经被注册过apple id的地址。
2. mobile me天生就是一个apple id,所以你无法修改一个已有的apple id的primary email为任何一个@me.com的邮箱。网上曾经有人成功那么做过但普遍相信这只是一个bug,大多数人是无法成功修改一个已有的apple id邮箱为@me.com,系统会报告这个@me.com已经用来注册另一个apple id。
3. iCloud地址可以视为增强版的apple id,为现有的apple id加入了邮件(可免费分配一个@me.com邮箱),联系人,日历,提醒,书签,记录,相片流,文档数据以及iOS系统备份功能。其中的前六项同步和现有的mobile me功能重合,后面3项是随着ios5新增的功能。同时这些同步不仅仅工作于iOS之上,也可以和OSX (10.7.2开始)协同工作。

那么当一个有着mobile me账户的人升级到iOS5,他该选择哪个apple id来登陆iCloud呢?Apple在登陆界面下已经给出了简短解释。用户应该以mobile me账户来登陆iCloud(中间有个迁移过程,稍后会提到),而在管理已经购买的数字内容时用购买过那些内容的apple id来登陆app store。Apple现在没有提供合并apple id的功能,并且为个人觉得这也无妨大家升级到iCloud,且听我道来迁移过程。

当用户用mobile me登陆iCloud时会被要求前往 http://www.me.com/move/ 去手工确认并迁移mobile me账户到iCloud。这个过程需要在电脑的浏览器上完成,无法通过iOS系统设置程序完成迁移。

需要注意的有这几点
1. 现有的iDisk, Photo Gallery, Web publisher在iCloud中并无对应服务,他们会在2012年6月30日停止,请注意备份。
2. iOS设备需要运行iOS5 (现在GM已经放出给iOS developer,正式版10月12日发布)
3. OSX设备需要运行10.7.2 (同上,GM已经放出,正式版应该也在12号左右发布)
4. Windows系统需要安装iCloud Control Panel for windows (已经随10.7.2 GM一同放出)

当你确认这几项均满足时,就可以在http://www.me.com/move/ 登陆并点击几个按钮实施迁移。整个过程不到一分钟即可完成。完成之后你在iOS5设备上已经设置的Mobile me账户会自动被转成iCloud账户,这个步骤无需人工干预。同时在OSX的system preference中的mobile me设置已经被新的iCloud设置所替代。

由于我的老mobile me订阅还未到期,现在迁移至iCloud之后为的账户容量为25G (原有的付费用户20G + free 5G)当然对于那些老用户们而言,部分mobile me功能诸如keychain, widget dock item同步之类的功能在iCloud时代就不再提供了。

It’s time to migrate.

苹果官方的迁移FAQ

[更新1] 用非me.com的apple id购买iTunes Match服务并用me.com帐号登录iCloud不会有任何问题。只要你的App Store里的账户还是订阅iTunes Match的即可,我目前就是那么使用的。

CentOS5上安装Redmine的常见问题

因为项目需求,需要安装一套集成Issue tracking/task management /SCM/wiki/forum的系统。如果单独安装,那么可以有Jira,Wikipedia,Phpbb之类的候选人。如果想要all in one solution那显然Redmine是最好的选择。Redmine本身是由ROR写的,看到这里估计大家心里有数了,这东西的安装在老系统上必然不会是那么顺利,曲折是难免的,尤其是在一台CentOS 5.6的机器上。常规的Install Guide 暂且不表,可以参考 http://www.redmine.org/projects/redmine/wiki/HowTo_install_Redmine_on_CentOS_5

这里就说下可能遇到的常见问题。

1. 软件版本。根据官方的说法,即使是最新的Redmine 1.2.x也暂时不支持Ruby 1.9,推荐使用Ruby 1.8.6 or 1.8.7。我尝试过CentOS官方repo里自带的1.8.5以失败而告终。所以耐心地现在source code自己编译吧。Gem的版本也有讲究,比如1.7.0之前的,显然那就只有1.6.2可用。同理还有Rake必须0.8.7,我尝试过0.9.1的结果就是失败。Rack用1.1.0。

2. 在执行rake db:migrate的时候你可能遇到一个错误消息 ‘no such file to load –openssl’。那就需要先
[code lang=”bash”]# yum install openssl openssl-devel[/code]
然后在已经解压的ruby source code中
[code lang=”bash”]
# cd /ruby_install_dir/ext/openssl
# ruby extconf.rb
# make & make install
[/code]

3. 如果用mysql数据库存储,可能会遇到错误 ‘No such file or directory – /tmp/mysql.sock’ 这是因为在config/database.yml中默认没有指定socket路径,解决方案即加一行参数把实际的sock路径指定,如[code lang=”bash”]socket: /var/lib/mysql/mysql.sock[/code]

4. 如果用Passenger 配合Nginx,那可能会在用passenger-install-nginx-module的时候遇到错误提示 ‘configure: error: C compiler gcc is not found’。问题原因不详,解决方案就是在安装的第二部不要选择1 用默认的下载地址把Nginx源码下载到/tmp然后选择2,手工指定已经下载并解压的nginx源码(放在非/tmp目录下)即解决问题。

下篇会讲到Redmine和Gitosis集成

在iPad一代上用Apple Digital AV Adapter (HDMI适配器)开启画面镜像

随着iPad2的面世Apple推出了Digital AV Adapter,就是个一头接iPad,另一头有个标准HDMI输出接口的适配器。它可以将视频输出到通过HDMI链接的电视机/投影仪上,在家浏览iPad上的电影就方便多了。不仅支持iPod程序里的电影,也支持HTML5网页中的视频,或是自带的Youtube程序中播放的视频,这些均可以全屏显示。

这个适配器在iPad2上使用还可以实现镜像 (display mirror),即在电视机上同步输出iPad2上你能看到内容,比如待机画面或是程序画面。用这个东西连接46寸电视机玩Angry Birds可以让人感受“这个鸟怎么那么大啊”的感觉。

根据Apple的产品销售说明,它也支持iPhone4代和iPad一代,不过默认情况下只能在这两者上输出视频,画面镜像功能就没了。

直到我们有了越狱….

不管你是用iFile还是开启了OpenSSH,只要修改/System/Library/CoreServices/SpringBoard.app/K48AP.plist这个文件
插入两行内容即可实现画面镜像功能(需要re-spring或者重启设备)
[code lang=”xml”]
display-mirroring
[/code]

修改好后的文件内容类似于

然后你的iPhone4和iPad1也可以实现镜像功能。不过镜像功能无法在16:9电视机上实现全屏(估计因为比例问题,iOS上是4:3),即使是iPad2也无法实现全屏镜像。

FreeNas 0.7 上架设Mac OSX Time Machine 时光机

Mac平台下的Time Machine时光机让一贯使用windows的我表示十分向往。只要有移动硬盘或是独立分区即可增量备份系统数据,即使更换新的电脑或重装系统也能快速恢复自己习惯的使用环境。相比同一个硬盘分区的损坏风险或移动硬盘连接不便(从稳定性上说移动硬盘本身就是不那么靠谱的设备,它的使用环境决定了它的损坏概率是很大的),通过网络备份到NAS服务器无疑是最可靠且不影响正常使用的方法(你不会经常想到在家用电脑的时候也接个硬盘备份吧,尤其是在只有2个usb口的mbp上)

要使用网络备份时光机,最简单直接的办法就是买Apple的Time capsule路由器,自带1T/2T硬盘,秉承苹果配件一贯的高价易用风格。廉价的方案就是在FreeNAS 0.7系统上自己DIY时光机服务。

首先开启AFP服务

添加共享

注意勾选
Automatic disk discovery – Enable automatic disk dicovery
Automatic disk discovery mode – Time Machine

接下来打开Time Machine程序

选择磁盘

接下来输入freenas上的用户名密码,确保该用户对你在第二步添加的共享目录有读写权限即可。

第一次备份可能花费大量时间,建议接上网线备份。以后的增量备份在无线网络的环境下也速度也可以接受。

快捷分享你的文件

我们都经历过这样的场景,手头有几张图片,一首mp3或者几篇文档需要与朋友共享。但是发email太慢,msn传输又不稳定,网盘又担心内容不符合XXX规定而和谐,况且国内多数网盘还需要下载安装XXX插件,安全方面让人担心。

现在有两种新的选择。

1.多平台用户 – Ge.tt
Ge.tt 界面非常简洁,硕大的一个图标 ‘Select files’ 点击即可浏览本地文件,确定即开始上传。无需注册,上传完毕后将得到一个类似 http://ge.tt/39cNlRv 的短链接,把这个链接直接在IM上告诉朋友,他就可以开始下载。非注册用户上传的文件只能在线保存30天,注册用户之后可以无限保存(内容不能违反美帝法律),并且可以看到每个文件的下载数据统计,历史上传记录等等,单个文件大小不限,总容量不限。

2. Mac用户有更简单的办法 – Droplr
Droplr Mac用户有福气,下载一个2兆多的文件,安装后桌面status bar上会多出一个droplr的图标。直接把想共享的内容往里一拖就搞定,甚至都无需打开浏览器。上传完成后会自动得到一个d.pr的短链接。该服务无需注册,只需要用你的twitter账户授权登录即可,同样可以看到历史上传文件,并且删除你不想保存的文件链接。官方网站有一个45秒的视频介绍,看完就明白了。顺便提一句,Droplr还有iPhone客户端。该服务为每个账户提供1GB免费空间,将来会开通付费扩容。

对于生活在千年盛世,和谐社会的用户来说,最难能可贵的是上面两项服务目前均还没有被反党反社会主义的境外敌对势力所利用,所以,你懂得,无需费力翻墙即可快捷分享。