月度归档:2013年02月

NexentaStor NAS 家用环境置备(一):BT 客户端

前言

对于 7*24 运行的家用 NAS 来说,你肯定想装上可通过 Web 界面访问控制的 BT 客户端——通过动态域名服务的支持,种子在办公室或路上就可以扔到上面,苍老师在你回家之前就已躺好了……:D

这一切在 Linux 的诸多发行版下很容易实现,比如 Debian 只需用 apt-get 就基本上搞定了所有事情。而如果你的 NAS 基于 Solaris,比如 NexentaStor,这也有现成的包,但缺失了一些基本的东西——软件包没给你创建服务进程专有的用户,以及没有按照 Solaris 的标准将“服务”给定义出来。

为什么要选用 NexentaStor?NexentaStor 系出 Solaris,在商业化运作的基础上也提供 Community 版本的软件,对 OS 底层封装得非常不错,相比其他 BSD NAS 方案有着良好的用户使用体验!二则是 ZFS 的优良特性,使得其非常适合家庭持久数据的保存。

nexentastor4

NexentaStor ACL

下文将解释如何在 NexentaStor 上安装 BT 客户端 Transmission(它也被很多 PT 支持),并将其配置为 svcadm 所能管控的系统服务。

本文使用的 NexentaStor 为 4.0.0 Beta M20,你可以到 NexentaStor Community Beta 网站上关注其更新。

系统准备

NexentaStor 使用了 Debian 的软件包管理机制,支持 apt 方式安装和更新软件包。作为一个尚处于 Beta 阶段的专有 OS,官方并未给 NexentaStor 4.0.0 Beta M20 提供可用的 apt deb source,但由于其核心与 Dilos 一样基于 illumos,且都使用 apt,所以我们把下面这几个源加到 /etc/apt/sources.list 当中应当是可行的:
deb http://apt.dilos.org/dilos dilos-unstable main contrib non-free
deb http://apt.dilos.org/dilos dilos-testing main contrib non-free

对了,对于 NexentaStor 来说,默认的 Shell 并不是常见的 Bash,而是其封装好的 nmc,你得进到 Bash 才能编辑上述的 sources.list。这你得动点手脚,具体可以点击这里

nmc@nas:/$ option expert_mode = 1
nmc@nas:/$ !bash
You are about to enter the Unix ("raw") shell and execute low-level Unix command(s). Warning: using low-level Unix commands is not recommended! Execute?  (y/n)

按”y”之后,熟悉的bash#就回来了!

root@nas:/volumes#

接下来是导入 dilos 的公钥以验证该 source 的签名,参见“apt-get update 的 NO_PUBKEY 问题解决”:

root@nas:~# gpg --keyserver subkeys.pgp.net --recv-keys 74DA7924C5513486
root@nas:~# gpg --export 74DA7924C5513486 | apt-key add -

更新系统:

root@nas:~# apt-get update
root@nas:~# apt-get install curl
root@nas:~# apt-get install unzip

但是,切记除了安装你需要的软件包,不推荐你运行 apt-get upgrade 或者 apt-get dist-upgrade 来更新系统。

基本安装

同样,我们通过 apt-get install transmission 来完成 Transmission 基本软件包的安装。

root@nas:~# apt-get install transmission
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'network-transmission' instead of 'transmission'
The following extra packages will be installed:
  library-libevent
The following NEW packages will be installed:
  library-libevent network-transmission
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 30.9 MB of archives.
After this operation, 108 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://apt.dilos.org/dilos/ dilos-unstable/main library-libevent solaris-i386 1.2.10.1 [628 kB]
Get:2 http://apt.dilos.org/dilos/ dilos-unstable/main network-transmission solaris-i386 1.2.10.2 [30.3 MB]
Fetched 30.9 MB in 1min 7s (460 kB/s)                                                                                                                                 
Selecting previously unselected package library-libevent.
(Reading database ... 62440 files and directories currently installed.)
Unpacking library-libevent (from .../library-libevent_1.2.10.1_solaris-i386.deb) ...
Selecting previously unselected package network-transmission.
Unpacking network-transmission (from .../network-transmission_1.2.10.2_solaris-i386.deb) ...
Setting up library-libevent (1.2.10.1) ...
Setting up network-transmission (1.2.10.2) ...

查看 Transmission 版本,2.73,不是最新也尚可:

root@nas:~# transmission-cli --version
transmission-cli 2.73 (13592)

创建一个新用户 torrentd,用于替换 root 来运行 Transmission 服务进程。

root@nas:~# mkdir -p /export/home/torrentd
root@nas:~# cd /export/home/
root@nas:/export/home# useradd -d /export/home/torrentd -s /bin/false torrentd
root@nas:/export/home# chown torrentd:other torrentd/
root@nas:/export/home# ls -la
total 6
drwxr-xr-x 4 root     root  4 Feb  8 00:24 .
drwxr-xr-x 3 root     sys   3 Feb  8  2013 ..
drwxr-xr-x 2 admin    staff 6 Feb  8  2013 admin
drwxr-xr-x 2 torrentd other 2 Feb  8 00:24 torrentd

你可以同时创建 BT 使用的存储目录。NexentaStor 下无疑你希望用上自己的 ZFS 池。

root@nas:~# mkdir -p /volumes/main/stuff/btdownloads
root@nas:~# chown -R torrentd:other /volumes/main/stuff/btdownloads

配置

这些基本步骤过后,我们还需要配置 Transmission,而创建配置文件最方便容易的方式莫过于运行 transmission-daemon,它会为我们创建一个母本。通常情况下,这些配置文件将在当前登录的用户主目录中生成,在多用户环境中这是 OK 的,但在这里的场景下我们把它们放在 /var/transmission 目录中。

root@nas:~# mkdir /var/transmission/
root@nas:~# transmission-daemon --config-dir /var/transmission -f
[00:35:04.262] Transmission 2.73 (13592) started (session.c:720)
[00:35:04.263] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:803)
[00:35:04.263] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:997)
[00:35:04.263] RPC Server Whitelist enabled (rpc-server.c:1001)
[00:35:04.263] UDP Failed to set receive buffer: No buffer space available (tr-udp.c:58)
[00:35:04.263] UDP Failed to set receive buffer: requested 4194304, got 57344 (tr-udp.c:77)
[00:35:04.263] DHT Generating new id (tr-dht.c:309)
[00:35:04.263] Using settings from "/var/transmission" (daemon.c:517)
[00:35:04.263] Saved "/var/transmission/settings.json" (bencode.c:1731)
[00:35:04.263] Port Forwarding (NAT-PMP) initnatpmp succeeded (0) (natpmp.c:72)
[00:35:04.263] Port Forwarding (NAT-PMP) sendpublicaddressrequest succeeded (2) (natpmp.c:72)
[00:35:12.337] Port Forwarding Port Forwarding (port-forwarding.c:93)
[00:35:12.337] Port Forwarding Port Forwarding (port-forwarding.c:93)
[00:35:37.568] DHT Attempting bootstrap from dht.transmissionbt.com (tr-dht.c:247)

现在进程已经起来,配置文件也已经生成,按 CTRL-C 把 transmission-daemon 进程杀掉。你可以看到一些文件已经生成出来:

root@nas:~# cd /var/transmission/
root@nas:/var/transmission# ls -la
total 11
drwxr-xr-x  5 root root    6 Feb  8 00:37 ./
drwxr-xr-x 41 root sys    41 Feb  8 00:34 ../
drwxr-xr-x  2 root root    2 Feb  8 00:35 blocklists/
drwxr-xr-x  2 root root    2 Feb  8 00:35 resume/
-rw-------  1 root root 2147 Feb  8 00:37 settings.json
drwxr-xr-x  2 root root    2 Feb  8 00:35 torrents/

最重要的文件是 settings.json ,我们需要在其中设置下载目录(download-directory)以及对本地局域网设置白名单(whitelist) (我这里是 192.168.168.*)。

关于设置文件的一个注意事项:你可以任意编辑此文件,但如果你编辑 settings.json 时 transmission-daemon 处于运行状态,那么服务进程停止时设置文件将被覆写。所以要停掉 transmission-daemon 之后再编辑 settings.json。

"download-dir": "/volumes/main/stuff/btdownloads",
...
"rpc-authentication-required": false,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-password": "------------",
"rpc-port": 9091,
"rpc-username": "",
"rpc-whitelist": "127.0.0.1,192.168.168.*",
"rpc-whitelist-enabled": true,

Web GUI 的默认端口为 9091,这可以通过编辑 rpc-port 值来变更。

设置文件的更多信息在这里找:
https://trac.transmissionbt.com/wiki/EditConfigFiles

然后更变配置文件夹的属主。

root@nas:/var/transmission# chown -R torrentd:other /var/transmission

Transmission 配置为系统服务

最后一步是将 Transmission 集成到系统的 Service Management Facility (smf) 当中。这需要一个描述了 Transmission 服务的 XML 配置文件。

基本的 XML 配置文件在 4amlunch.net 可以找到。但因为该配置文件中需要设置一些特定的目录,所以此处编辑了这个文件以适合本文中的叙述。新文件可以在这里找到:
transmission.zip

假设传送至 /tmp 目录。

root@nas:/tmp# unzip transmission.zip
Archive:  transmission.zip
  inflating: transmission-daemon
  inflating: transmission-daemon.xml

root@nas:/tmp# mv transmission-daemon /lib/svc/method/
root@nas:/tmp# chmod +x /lib/svc/method/transmission-daemon
root@nas:/tmp# chown root:bin /lib/svc/method/transmission-daemon
root@nas:/tmp# svccfg import -V transmission-daemon.xml

现在,我们已经将 transmission-daemon 安装成为了 NexentaStor 的一个服务,它可以使用 svcadm 命令来启动及停止,并使用 svcs 来检查其运行状态。

相关命令:
svcadm enable transmission-daemon
svcadm disable transmission-daemon

以下步骤将启用 Transmission 服务,并检查其状态。

root@nas:/tmp# svcadm enable transmission-daemon
root@nas:/tmp# svcs -x transmission-daemon
svc:/application/transmission-daemon:default (Transmission BitTorrent Client (Daemon))
 State: online since February  8, 2013 01:33:33 AM PST
   See: transmission-daemon(1)
   See: http://www.transmissionbt.org
   See: /var/svc/log/application-transmission-daemon:default.log
Impact: None.

这样就可以了,服务已启动并运行,现在我们可以在端口 9091 访问 Transmission 的 WebGUI:
http://YourServerAddress:9091/

transmission-web-ui

如果希望使用 uTorrent 风格的客户端,那推荐你使用 RPC 客户端来访问 Transmission 守护进程,比如 Transmission Remote GUI,比 Web GUI 更方便强大:
https://code.google.com/p/transmisson-remote-gui/