搭建家用 Linux 服务器

差不多两年前在 Micro Center 买了一台翻新的 HP 5850 台式机搭了一个简单的 Linux 服务器, 将下载的美剧和电影放在服务器上, 配合 Plex 以后可以从家里的任何设备上观看. 并且通过 deluge 和 aria2 等软件可以实现远程以及自动下载的功能.

不过前两天突然意识到 5850 主板上的硬盘接口是 SATA II 的, 于是折腾的心骚动起来, 又跑到 Micro Center, 买了一个 PCIE SATA III controller. 谁知自己的 Linux 知识还是不够, 不知道硬盘换了 SATA 接口以后系统就不能顺利启动. 我也没有什么调试 Linux 系统的能力, 只能选择重新安装 Ubuntu Server, 以便让新买的 PCIE card 可以发挥它的作用. 正赶上 Ubuntu Server 更新到 16.04, 一些系统设置发生了变化, 所以一是为了给 blog 拔草, 二是为了存档以便日后需要时查看, 就在这篇日志里记录一下我使用的程序, 以及 16.04 的一些变化.

最大的变化是 Ubuntu 从 15.04 开始, 放弃 upstart 而转用 systemd 来控制程序的开机自动启动. 由于 14.04 和 16.04 是 LTS, 所以我跳过了 15.04 并且从 16.04 开始接触到这个改动. 虽然服务器很少重启, 但在难得的几次重启中, 也不会有人愿意手动打开一个一个需要使用的程序, 所以这一变化很重要. 由于我的 Linux 知识有限, 于是只能在后文就我所安装的程序来简单记录一下如何使用 systemd.

首先, 如何安装 Ubuntu Server 就不细说了, 需要提一句的是安装时记得选中 OpenSSH Server 和 Samba File Server. 前者使用户可以通过个人电脑连接服务器进行更新, 维护以及安装程序等工作; 后者的作用是用户可以在个人电脑上通过 samba 访问和操作服务器上媒体文件. 安装完 Ubuntu Server 之后, 建议第一件事就是给系统设置固定 IP 地址, 通过修改 /etc/network/interfaces 文件实现, 而且从最新的 Ubuntu 开始 DNS Nameserver 也是在这个文件中设置. 设置完成后通过重启服务器来检查设置有没有生效. 最简单的方法是输入 ifconfig, 如果输出的 IP 地址是你设置的固定地址, 那么这一步就成功了.

我对 Linux 服务器的要求不高, 能够自动, 远程, 或者定时下载想看的电视剧, 电影和音乐, 并且可以用电脑, 手机 平板以及 Nvidia Shield 连接到服务器进行播放就可以. 要实现这些功能的话, 可以在服务器上安装以下程序: aria2, deluge, flexget, plex 和 forked-daapd. 此外, 为了方便管理服务器, 建议安装 webmin, 有了它就可以在个人电脑上访问一个特定的网页对服务器进行一些操作, 比如设置 cron job 还有给新添加的硬盘分区并搭载, 我的经验是这两项工作通过 webmin 进行会比用终端方便很多.

具体如何安装 webmin, 到这里获取最新的版本号, 在终端中输入以下代码下载 webmin 到服务器(注意要替换链接中的版本号为最新)

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.801_all.deb

接着输入

sudo dpkg -i webmin_1.801_all.deb

进行安装, 如果安装过程中报错的话, 输入:

sudo apt-get install -f

安装完毕后, 可以使用如下代码删除安装包

rm webmin_1.801_all.deb

至此, 就可以在家里任何一台联网的电脑上打开网页浏览器输入

https://YOURIPADDRESS:10000/

连接到 webmin 进行操作了. 假设之后使用 webmin 或者终端对服务器上的硬盘进行了分区和挂载, 那么就可以接着安装各种程序并进行设置了. 从 aria2 开始, aria2 是一个下载工具, 不过我对它的使用仅限于下载百度云上的内容, 具体如何安装并配置 aria2 去下载百度云请自行 google, 这里主要介绍一下如何设置 aria2 使其开机自启动. 前面说了, 从 Ubuntu 15.04 开始系统默认使用 systemd 来配置自启动项, 所以, 我们要在 /etc/systemd/system 文件中建议一个 aria2.service 文件, 具体操作方法是在终端中输入

sudo nano /etc/systemd/system/aria2.service

然后, 将如下代码复制粘贴, 注意粗体部分需要替换为 aria2 配置文件的地址:

[Unit]
Description=Aria2c download manager
After=network-online.target
Wants=network-online.target
[Service]
User=aria2
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2.conf
[Install]
WantedBy=multi-user.target

将 aria2.service 文件保存后, 在终端中输入

systemctl enable /etc/systemd/system/aria2.service

就可以使 aria2 在开机时自动启动了. 接下来是 deluge 和 flexget, deluge 是我用来 BT 下载的工具, 而配合 flexget 之后可以定时扫描 RSS 页面上的更新, 这样一旦有最新的电视剧, deluge 就会自动开始下载. 实现这些功能需要一些略微复杂的设置, 作为开始, 我们在服务器上建立一个名为 "deluge" 的用户, 由这个用户来启动 deluge 和 flexget, 具体代码分为如下几步

sudo adduser --disabled-password --system --home /var/lib/deluge --gecos "Deluge service" --group deluge

sudo touch /var/log/deluged.log

sudo touch /var/log/deluge-web.log

sudo chown deluge:deluge /var/log/deluge*

随后是安装 deluge, 可以选择同时安装 deluge-webui, 不过还是更为推荐在客户端 PC 上使用 deluge gtk 进行连接操作. 然后需要做两件事: 第一, 修改 auth 文件, 指定可以启动并操作 deluge 的用户; 第二, 设置 deluge 开机自动启动. deluge 的 auth 文件存放在 /var/lib/deluge/.config/deluge/, 所以我们输入以下代码:

sudo nano /var/lib/deluge/.config/deluge/auth

打开文件后添加如下一行:

deluge:deluge:10

其中第一个 "deluge" 表示用户, 第二个 "deluge" 是这个用户的默认密码, "10"表示用户的权限. 如此设置之后, 在客户端电脑上打开 deluge gtk 使用 deluge 这个用户进行连接, 成功后可以在 deluge gtk 里更改一些常用设置, 比如默认下载文件夹, 上传下载速度等等. 同时, 我们可以顺利的进入下一步设置 -- 在 /etc/systemd/system 文件夹中建立 deluged.service 文件, 复制粘贴如下内容:

[Unit]
Description=Deluge Bittorrent Client Daemon
After=network-online.target
[Service]
Type=simple
User=deluge
Group=deluge
UMask=007
ExecStart=/usr/bin/deluged -d
Restart=on-failure
TimeoutStopSec=300
[Install]
WantedBy=multi-user.target

完成后输入

systemctl enable /etc/systemd/system/deluged.service

就可以使 deluge 开机后自动启动. 其实到这一步为止, 已经可以通过 deluge gtk 手动下载想看的电影和电视剧了, 但更智能一点的方式是随着电视剧集的更新自动进行下载, 这一功能需要 flexget 和 deluge 的配合来实现. 如何安装 flexget 请自行 google, 这里重点介绍一下怎样设置 flexget. 想要用好 flexget, 配置文件非常重要, 这个配置文件我们存放于 /var/lib/deluge/.flexget/config.yml, 配置文件的如何编写仍然请自行 google. 然后, 我们输入

sudo -H -u deluge flexget execute -v

如果一切正常, 那么 deluge 应该自动开始下载 flexget 配置文件中设定好的电视剧了. 到了这一步, 仍然需要手动输入上述代码才能使 flexget 通知 deluge 进行下载. 为了实现自动, 我们使用 webmin 建立一个 cron job, flexget 就可以定时启动, 如果搜索到电视剧的更新, 就会通知 deluge 进行下载. 具体操作是创建一个以 deluge 为用户的任务, 任务内容是

/usr/local/bin/flexget execute

一般来说, 还要同时创建一个环境变量, 变量值为 LANG = en_US.UTF-8, 这样刚刚创建的 cron job 才能顺利启动. 这些都设置好以后, 只需要再下载一个 Plex 作为媒体服务器, 就可以从任何客户端连接进行视频和音乐的播放了. 最新的 Plex 根据 Ubuntu Server 的变化也做出了相应的更新, 安装成功后不需要额外设置就可以自动启动.

至此, 一个简单的 Linux 服务器便搭建完成了. 由于篇幅过长, forked-daapd 的相关内容留待后续的日志.

WD My Cloud 入手

去年听一个来访问的波兰学生说, 他买了一个"盒子", 可以接在路由器上作为硬盘存放文件, 备份电脑, 并且能远程自动下载文件到"盒子"里. 当时觉得挺奇妙, 后来知道那是新一代的存储设备, 叫做 Network-attached Storage (NAS). 除了前面提到的功能, 它主要是作为个人的云端存储而存在. 美国这里 Dropbox 被使用的非常广泛, 比如导师和我共享的学术资料都放在 Dropbox 里, 我写的论文草稿, 幻灯片也是, 这样不管换哪一台电脑, 只要在有网络的地方就可以访问. 但作为公共云端存储服务, 空间大小相当受限, 除非你愿意成为付费用户. 此外, 如果家里的网络坏了, 无法连接互联网, 就没法及时同步文件. NAS 就是为了弥补这些缺陷而被提出的概念. 无论是局域网内还是远程都可以访问存放在其中的文件, 而且动辄 2TB 乃至更大的空间让人基本不用担心容量问题, 同时局域网内诸如 Apple TV 等视频设备也可以直接读取 NAS 上的视频文件. 想象一下, 回家前远程设置好要下载的视频, NAS 内置的 Linux 系统自动开始下载, 到家后就能直接在电视机上播放, 是不是非常轻松和愉快?

生产 NAS 的厂家很多, 亚马逊上评价最高的是 Synology, 其产品功能全面稳定, 但价格普遍昂贵并且需要用户自备硬盘,虽然随意更换硬盘的选项很诱人, 可是一块容量足够的硬盘几乎就快赶上机器设备本身的价格. 综合考虑, 还是买了我觉得性价比比较高的西部数据 (WD) My Cloud, 作为其前身 My Book Live 的升级版, 其系统自带了远程访问功能, 虽然没有预装 BT 下载的软件, 但是用户可以自己通过 SSH 连接 My Cloud 进行下载工具的安装和设置. 价格相对实惠, 还能体会动手折腾的乐趣, 不能更换硬盘是个不大不小的软肋, 但是它提供了一个 USB 接口用于外接硬盘扩容, 那么只要连接一个 Docking Station, 便可以部分达到更换硬盘的效果了.

My Cloud 到手后, 连接, 设置都很简单, 那么要更大化的发挥其功能便是安装下载软件了. WD 官方论坛上有详细的 Transmission (一个 BT 客户端) 安装教程, 需要用到 PuTTY 或其它 SSH 软件和一些 Linux 系统安装软件的命令, 总体来说简单易懂, 具体链接如下:

My Cloud 安装 Transmission

此外建议在电脑上再安装一个 Filezilla, 可以更加方便的连接 My Cloud 更改设置文件.

作为中国的用户, 还会经常用到的下载工具是迅雷和百度网盘, 关于它们的安装, 国内论坛也有教程, 但基本都是针对 My Book Live 的, 不过核心就是安装一个 Aria2, 所以还算大同小异. 具体到 My Cloud 上的操作, 已有的一篇文章在这里:

WD My Cloud 安装 aria2 开启远程下载

但其中有一个步骤替换了系统某文件夹下的 rc.local 文件, 据说会导致无法远程连接 My Cloud, 而且上述的安装方法不能生成 Aria2 的设置文件, 不是太方便. 所以我稍微做了一些修改, 详细步骤如下:

首先, 用 Filezilla 连接 My Cloud, 将 Aria2 的安装包上传到根目录 (下载链接在之前提到的文章里); 按照这篇帖子的方法编写一个 Aria2 的设置文件, 命名为 aria2.conf 并且上传到 /etc 目录. 修改 /etc/init.d 目录下的 rc.local 文件, 在末尾加上两行命令:

touch aria2.session
aria2c --conf-path=/etc/aria2.conf -D

关于第一行, 如果在设置文件中没有提到 aria2.session 的话可以不写. 第二行的意思是开机后台启动 Aria2 并且调用设置.

然后, 用 PuTTY 连接 My Cloud, 执行安装命令:

sudo apt-get update
sudo apt-get install libc-ares2
sudo apt-get install aria2
touch /root/aria2.list
chmod 777 /root/aria2.list
update-rc.d rc.local start 98 2 3 4 5 .
reboot

等待重启完成, Aria2 会自动启动, 然后需要在网络浏览器上进行一些设置, 这里推荐火狐或者是 Chrome, 原因是需要一些安装一些脚本. 在浏览器中打开这个网址, 设置程序路径为

http://[My Cloud 的 IP]:6800/jsonrpc

最后参考这里便可以添加迅雷, 百度网盘等的下载了. 这里提示一下, 以上安装和设置可以保证在局域网内设定下载, 如果需要远程添加下载, 那么可以在路由器中做端口映射, 并且将 "[My Cloud 的 IP]:6800" 这一部分改为你的 IP 地址和映射后的端口.

还要提一句, My Cloud 的以太网接口是千兆接口 (Gigabit Ethernet), 为了达到在局域网内的最佳传输效果, 建议更换到比较新的千兆接口路由器, 此外, 下一代的无线网设备将使用 IEEE 802.11ac 通讯标准, 所以一步到位的更新便是千兆接口 802.11ac 的无线路由.