Aria2

说到下载服务器,大家的首选一定是 Aria2,然而 Aria2 的服务配置还是要费一番心思的。Arch 的 AUR 里有 aria2 的 systemd service 文件,然而这个文件并不能拿过来无脑用,而且会往 journald 里输出大量的垃圾,所以我直接把它的标准输出堵住了⋯⋯ 这是我的 service 文件:

[Unit]
Description=Aria2 Service
After=network.target

[Service]
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
StandardOutput=null
User=aria2
Group=aria2

[Install]
WantedBy=default.target

接着创建 aria2 用户

# useradd -r -s /usr/bin/nologin aria2

Aria2 的配置文件 /etc/aria2/aria2.conf

continue
daemon=false
dir=/mnt/downloads
file-allocation=none
log-level=notice
console-log-level=notice
max-connection-per-server=4
max-concurrent-downloads=8
max-overall-download-limit=0
min-split-size=5M
enable-http-pipelining=true
save-session=/etc/aria2/session.lock
input-file=/etc/aria2/session.lock
download-result=hide

enable-rpc=true
rpc-listen-all=true
rpc-listen-port=9003
rpc-secret=<some password>
rpc-allow-origin-all

# BT
bt-seed-unverified
max-overall-upload-limit=1M
max-upload-limit=512K
seed-ratio=2.0
seed-time=60
bt-force-encryption=true
bt-max-peers=200
dht-file-path=/etc/aria2/dht.dat
dht-file-path6=/etc/aria2/dht6.dat

注意我把 session 文件和 DHT 文件都放在了 /etc/aria2 里,因为 aria2 这个用户没有家目录。这里有个很奇怪的坑,就是如果你把 /etc/aria2 这个目录和里面的东西都设为 aria2 所有,然后启动 aria2 服务的话,它依然会说无法打开 session 文件和 DHT 文件。我试了半天,最后发现要手动生成这几个文件。

# touch /etc/aria2/{dht.dat,dht6.dat,session.lock}
# chown -R /etc/aria2

Aria2 的默认下载目录设在了 /mnt/downloads,这个地方用 samba 挂载了家里群辉上的一个目录。我的 /etc/fstab 里有

//nity.local/Stuff/Downloads /mnt/downloads cifs credentials=/etc/samba/credentials/stuff,noperm 0 0

接下来是 web 界面。我随便 找了一个似乎很流行的,是一个单网页 + JavaScript 界面,界面逻辑完全运 行在浏览器里。原则上我不需要在服务器里 host 这个网页,但是考虑到我的懒 癌,决定还是搞个 apache 来 host,这样需要用的时候就不需要在电脑里找这 个网页放在哪了。我给这个页面单开了一个 vhost,配置单独写在 /etc/httpd/conf/extra/httpd-vhost-aria2.conf 里,

<VirtualHost *:9004>
    ServerAdmin my@email.com
    DocumentRoot "/srv/aria2-webui"
    ServerName adenine.local:9004
    ServerAlias adenine.local:9004
    ErrorLog "/var/log/httpd/aria2-webui-error_log"
    CustomLog "/var/log/httpd/aria2-webui-access_log" common

    <Directory "/srv/aria2-webui">
        Require all granted
    </Directory>
</VirtualHost>

在 apache 的主配置文件里更改端口,并引用这个配置,

# Change 80 to 9004
Listen 9004
# ...
# Custom vhosts
Include conf/extra/httpd-vhost-aria2.conf

最后 git clone 那个 web 界面的 repo,把里面 doc 目录的内容扔到 /srv/aria2-webui 里,就算完工了。

Transmission

Aria2 的 BT 下载其实并不是很符合我的使用习惯,比如在筛选文件的时候看不 到文件大小⋯⋯ 所以我决定再开一个 Transmission 的 web UI,专门用来下 BT。 Aria2 就留给别的协议吧。

由于自带 web UI 和 http 服务器,Transmission 的配置比 Aria2 简单很多。 只需要安装 transmission-cli 即可。安装好以后开启服务,web UI 会挂在 9091 端口。但是如果这时去访问 web UI,它会报错,原因是它默认假设你会在 localhost 访问。这时停止 transmission 服务,编辑 /var/lib/transmission/.config/transmission-daemon/settings.json 这个 文件,把 rpc-whitelist-enabled 改为 false,并把 rpc-host-whitelist 改为 adenine.local,顺便把端口改为 9005。再次启动服务,就会发现一切 正常了。注意改 Transmission 配置之前必须先停止服务,不然配置文件会重置。

最后,

# systemctl enable aria2 httpd transmission