构建一个微型的 ARM 服务器(3)

耗电?没必要那么多吧 :-)

规格分段...

# cat /proc/cpuinfo
Processor  : ARM926EJ-Sid(wb) rev 5 (v5l)
BogoMIPS    : 99.73
Features    : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part    : 0x926
CPU revision    : 5
Cache type  : write-back
Cache clean : cp15 c7 ops
Cache lockdown  : format C
Cache format    : Harvard
I size      : 32768
I assoc    : 4
I line length  : 32
I sets      : 256
D size      : 32768
D assoc    : 4
D line length  : 32
D sets      : 256

Hardware    : Oxsemi NAS
Revision    : 0000
Serial      : 0000000000000000

...这台机器绝对赢不了任何比赛:功率非常低,但这也可以被看作是其一个优点:空载时只消耗0.7瓦特的服务器随时“待命”没什么问题吧!随后加入了160GB磁盘驱动器,我一下将功耗提到了3-3.5W...,一点也不差。

DynDNS

我得机器在DSL线路的后面,所以我的IP地址是不断变化的。为了能从外部访问我这台迷你服务器,我在DynDNS上打开了一个(免费的)帐户。由于主板只有32MB的RAM,我选择了禁止使用DynDNS的Perl脚本,而是采用了原生的C客户端,inadyn:

# apt-get install gcc
...
# wget
# unzip inadyn.v1.96.2.zip
# cd inadyn
# make
...
# cp bin/linux/inadyn /usr/local/bin

然后,通过cron我配置使其启动在运行状态:

# cat /var/spool/cron/crontabs/root
...
@reboot /usr/local/bin/inadyn

...还有设置我的DynDNS凭据:

# cat /etc/inadyn.conf
--username USER --password PASSWORD --alias UBER-SECRET.dyndns.org --update_period_sec 300 --background

这就好了了——每5分钟(5×60=300),微小的服务器会使用当前的IP地址跟DynDNS进行一次通信是:

# host UBER-SECRET.dyndns.org
UBER-SECRET.dyndns.org has address AA.BB.CC.DD

如此,我就拥有一个永久的Internet存在了,是时候往里面放些“东西”了.

Nginx

首先,我要安装nginx——这样就可以把任何我想的内容在朋友/家庭中分享——只要他们有一个浏览器访问即可。

当然,我这个32MB内存的迷你服务器及700kbit上行的DSL速度做不了大事 ,但还有其他的用途:我在我iPhone照片文件夹上运行rsync-ed,将照片发布到一个Nginx密码保护的文件夹中…

# rsync -av mobile@iphone:/private/var/mobile/Media/DCIM/100APPLE/ \
            /var/www/nginx-default/Media/

我的照片从此可以在世界任何地方访问到了,只要访问我的迷你服务器即可(需要使用文件夹密码)。欧耶!

我到rsync添加到了cron任务中,这样我iPhone内的照片每晚都会自动rsync-ed不论我在睡觉或充电。

Exim, mutt

隐私问题让人不能接受,所以能有一个不依靠第三方存在的邮件服务是极好的。apt-get install exim4,然后我的朋友就可以通过ttsiod@UBER-SECRET.dyndns.org这个地址给我发邮件了。我使用'mutt'工具ssh连接到服务器上来阅读这些邮件,它在这个微型服务器的小CPU上工作的很好。

<rant2>

如果世界上的人都自我尊重,那这个世界就结束了;不幸的是,即使GMail账户接收我发出来的邮件没有任何问题,剩下的(例如Yahoo)则会把我当成是一个垃圾邮件者,因为我是从一个地狱的黑洞里发出邮件(例如我的IP属于DSL的一行)。他们如何确认我不是一个Windows僵尸机,被malware入侵并且为Spam Lord服务呢?

SPF或者DomainKeys都不能确定这些--所以我转换我的出口到usesmarthost并且因此通过我的ISP路由mail。

(叹气)

</rant2>

防火墙和sslh

有一些地方是无法访问我的SSH服务器的(比如,通过ssh -D命令把它当作SOCKS代理使用的地方),因为这样的地方都有只允许HTTP流量通过的防火墙。

最初,我试图通过HTTPS的端口(443)把服务器呈现出来,不过这么做不能满足需求。我最终使用了sslh,它非常巧妙地在端口和大量后台服务之间做着中介。在这种情形下,只要能解析SSH和HTTPS协议,它就能够确定什么时候给进入的连接SSH响应,什么时候给HTTP响应-而且在请求和正确的本地后台服务(sshd,nginx)之间建立通道 。此时,防火墙就把它当作合法的HTTPS站点(我就是这么做的,多亏有Nginx),接着运行ssh -p 443......哈哈,可以访问了。

Samba

我可以使用这个微型服务器下载我想下载的任何东西。rtorrent是一个运行良好的基于文本的BT客户端,不过由于我实际上不是一个跟随主流的人,因此真正让我感兴趣的事情不是这个工具。许多情况下,我宁愿收集我所感兴趣的URL,然后建立使用wget或者youtube-dl的脚本来下载这些屏蔽在会话里的URL。这样,在下班回家以后,我就从越狱的安卓平板(通过Samba,即使用常用的mount -f cifs...)连接到服务器的已下载文件夹,接着就可以毫无网络“中断”地观看视频了。

你可能很想知道,我现在正在看的是Drew Neil的令人着迷的VimCasts系列视频和egghead.io上的有关AngularJS的视频吗。解答这个问题相当容易-我对HTML进行大量的分析,找到视频所在的URL,然后把这些URL传递给使用了速度限制的wget-这样,我就不会让分享这些宝贵资源的人超负荷的运行了。

总结 - UNIX的荣耀

如果你考虑一下,那结果是令人惊讶的,一切工作都是在ARM处理器上完成的,而不是Intel:

我仅仅只需要付出3-3.5w的能源就能获得一个一直在我房子里工作的服务器。

即使我使用的是动态IP我也能访问到我的服务器(通过DynDNS)。

Nginx web服务器能够使我与我在这个世上真正关心的人们(家人,和一些像我一样的hacker)共享一些东西。因为我的iPhone也运行的是UNIX,我可以每天把里面的照片同步到我的小服务器上,并且因此我能够向我关心的任何人展示它。未来短期的计划:利用AngularJS/Flask把一些东西hack到一起,这样我就能用一种更好的方法来呈现我的照片而不仅仅只是一些JPG文件(例如预览功能等)。

Exim邮件服务器允许我通过(E)SMTP来接收邮件,储存在我家里,并且在任何地方通过SSH/mutt来阅读它们。

当我需要时,我会SSH连接到我的小服务器上并且使用Wake-On-Lan启动我的桌面电脑,然后就能访问到我coding生涯中的任何成果。或者我的音乐收藏。

我可以通过screen命令(会话以sessoin形式保存,即使ssh退出后仍起效,译者注)在上面跑长时间的web下载(例如wget/youtube-dl),然后通过Samba共享给我家里的设备(例如从我的越狱过得安卓平板上看电影)。

感谢sslh,我可以透过几道存在于不同地方的防火墙从而访问到我的小服务器。

总而言之,UNIX的力量体现在使用中-在小服务器里,在我的手机上,在我的平板上。他们三个都有着ARM处理器。诚实的说,我没有想到:15年前我很肯定Intel和微软是整个银河的核心...但不知怎么的,Linux已经设法改变了这一切。

我仍然需要越狱或者hack他们来为我干活,当然啦-世事总不是那么完美的。

但这也正是它的乐趣所在 :-)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4316f669d3f3b99aa85f894474e834e8.html