月度归档: 2013 年 2 月

  • 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/