搭建家用 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 的相关内容留待后续的日志.