使用树莓派搭建离线下载神器

目的

利用深夜比较稳定的空闲带宽挂机自动下载比较大的文件,例如:电视剧。

另外我自己写了一个脚本,自动从某盘指定目录下下载文件到本地,每天凌晨自动启动,避免了白天下载占用带宽。

同时利用本篇文章做个笔记,万一设备挂了可以按照文章恢复😂。

工具准备

树莓派(英文名:Raspberry,以下简称树莓派)本体(我用的是3B+),合适的电源,内存卡,读卡器,网线,一块硬盘(用来存放下载后的数据)

烧录系统

Raspberry Pi OS 是一款基于 Debian 的 Linux 发行版,官方一共提供了三个版本:

  • Raspberry Pi OS with desktop and recommended software(2,949MB)
  • Raspberry Pi OS with desktop(1,177MB)
  • Raspberry Pi OS Lite(438MB)

前两个是提供了 GUI 界面的,由于我们没有图形化的需求,所以这里选择第三个。

这是一个比较轻量级的系统,不包含常用软件和 GUI 界面,而且体积比较小。

将系统下载好后解压,可以得到一个 img 映像文件,如下图:

image-20201227224250707

使用官方推荐的映像写入工具,将 img 映像文件写入到存储卡中。

注意:写入操作会清空存储卡所有内容!

image-20201227224225495

写入完成后内存卡变成了两个分区,其中一个是 FAT32 格式的启动分区,另一个是 ext4 格式的 Linux 分区,由于 Windows 不支持 ext4 分区,所以这里显示为空,不要去尝试双击打开。

image-20201227224331656

这时先不要急于弹出存储卡,由于我这里并没有显示器并且 ssh 功能默认是关闭的,所以需要先打开 ssh 功能,方便后面连接上去。

在启动分区中新建一个名字为 ssh 的文件,没有后缀名,也没有内容,保持空白就可以,如下图:

image-20201227224423115

当树莓派启动时会自动检测此文件,检测到后会开启 ssh 功能并且删除文件。

启动系统

弹出内存卡装到树莓派上,插上电源和网线,开机,树莓派启动好后会自动开启 ssh 功能,在路由器管理界面可以查看树莓派的IP地址。

image-20201227224758641

image-20201227224816874

使用 xshell 登录到树莓派,默认账号为 pi,默认密码为 raspberry。

image-20201227224857118

更改密码&&换源

登录之后我们第一步要做的就是更改密码,更改掉 pi 账号默认的密码和 root 账号的密码,后面的操作有一部分是需要 root 权限的。

接下来就是换源,树莓派系统默认的软件源地址在国外,下载软件会很慢,所以我们需要使用国内源来加速这个过程。

首先切换到 root 账号下,省的每次都要敲 sudo。

备份下配置文件,如果配置错了可以恢复。使用以下命令备份配置文件:

cp /etc/apt/sources.list /etc/apt/sources.list.back

写入新的源:

echo "deb https://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free" > /etc/apt/sources.list

这个是阿里的软件源,到这里还没完,还有一个源需要更换,它的路径是:/etc/apt/sources.list.d/raspi.list

先备份:cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.back

写入新的源:echo "deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui" > /etc/apt/sources.list.d/raspi.list

这个源是清华大学的,因为阿里的源好像是不全,所以这个源只能用清华大学的。

更换源后就可以更新系统了。

apt update && apt upgrade

初始化&&挂载磁盘

更新完系统后将准备好的硬盘插入到树莓派上,进行初始化。

使用 fdisk -l 命令查看当前的磁盘,如下图:

image-20201228103650047

可以看到,我一共有两块磁盘,一块是 16GB 的内存卡,另一块是 1TB 的硬盘。

使用 fdisk /dev/sda 命令初始化 1TB 的硬盘,如下图:

image-20201228105949551

先输入 d 删除之前的分区,如果有的话,如下图:

image-20201228110007459

输入 n 新建一个分区,输入 p 新建主分区,输入 1 ,代表分区号为 1,输入开始和结束扇区,回车默认即可,如下图:

image-20201228110037816

输入 w 保存更改并退出,如下图:

image-20201228110100648

使用 partprobe /dev/sda 命令在不重新启动的情况下重新读取分区表,使新建的分区生效。

使用 mkfs -t ext4 /dev/sda 命令格式化新建的分区,格式化成 Linux 下可用的 ex4 格式,如下图:

image-20201228110425732

挂载磁盘,查看磁盘是否可以正常挂载,如下图:

image-20201228110735914

确认磁盘可以正常挂载后,取消挂载磁盘,方便下面加密分区。

cd .. && umount dd

加密磁盘

本次只写下载器的搭建过程, 在不久的未来可能会搭建私人云盘,所以为了安全起见,需要将磁盘进行一下加密,防止硬盘被偷等物理攻击😂😂,不需要的小伙伴可以跳过这个环节。

LUKS (Linux Unified Key Setup)是 Linux 硬盘加密的标准。 通过提供标准的磁盘格式,它不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理,底层使用的是 dm-crypt 进行加解密操作,前端使用 cryptsetup 进行命令行控制。

它是在内核中实现的,并且它是以抽象块设备进行透明加密的,这样使其具有很大的灵活性,可以使它用于操作系统支持的任何文件系统。

注意:以下操作会清空硬盘上所有数据!

首先确认 cryptsetup 程序是否已经安装到了系统中,使用 cryptsetup -V 命令,如果提示未找到,则需要安装它,如下图:

image-20201228112945330

使用 cryptsetup luksFormat /dev/sda 命令创建加密设备,如下图:

image-20201228114200398

会警告已经存在了一个 ext4 分区,这个是刚才初始化磁盘时建立的分区,忽略它,输入 YES 确定格式化。之后输入两次磁盘的加密密码,以后每次挂载都要输入这个密码来解密磁盘。

使用 cryptsetup luksOpen /dev/sda ddtt 命令打开虚拟设备,输入上个步骤中设置的密码,会自动将虚拟设备 ddtt 添加到映射文件 /dev/mapper 中。

image-20201228120046930

使用命令 mkfs -t ext4 /dev/mapper/ddtt 格式化虚拟设备,格式化为 ext4 格式,如下图:

image-20201228134404513

之后就可以正常挂载虚拟设备到目录了,挂载命令为 mount /dev/mapper/ddtt dd,如下图:

image-20201228134642269

如果需要卸载分区可以使用 umount dd 命令,之后使用 cryptsetup luksClose /dev/mapper/ddtt 命令关闭加密分区,如下图:

image-20201228134829487

此后正确使用加密磁盘的步骤如下:

  • 打开加密分区,输入密码
  • 挂载虚拟设备
  • 卸载虚拟设备
  • 关闭加密分区

自动挂载&&解密磁盘

在任意一个目录中生成密钥文件,更改权限使得只有 root 账户才能读取它,如下图:

image-20201228142748401

使用命令 cryptsetup luksAddKey /dev/sda /root/.kkk 添加密钥文件,使密钥文件生效,即可以使用密钥文件来解密磁盘。

image-20201229103214427

编辑 /etc/fstab 文件设置自动挂载,将 /dev/mapper 下的虚拟设备自动挂载到 /mnt/dd 下,格式为 ext4,如下图:

image-20201228144707755

编辑 vim /etc/crypttab 自动生成虚拟设备,如下图:

image-20201228144846258

设置完毕,重启系统,重新登录到系统,查看磁盘是否自动挂载成功,如下图:

image-20201228145337762

可以看到 dd 文件夹(正常是空的)中已经有了系统文件夹,并且设备 /dev/mapper 中也可以看到自动添加上的 ddtt 虚拟设备,所以自动解密&&自动挂载成功。

下载器设置

下载程序我这里使用 aria2 ,它支持 HTTP(S),FTP,SFTP,BitTorrent 和 Metalink 协议,可以使用多个线程加速下载,选择它的最重要的一点是它支持远程下载,也就意味着可以通过程序来控制它下载和停止。

由于 aria2 默认是启用所有协议支持的,而且貌似不能关闭 bitTorrent 的上传,但是我这里只会用到 HTTP(S) 等协议,不会用到 BitTorrent 协议,为了简化配置和节省资源我选择自己编译,去掉 BitTorrent 协议和 Metalink 协议的支持。

从 GitHub 下载代码,根据文档中的指示安装依赖,生成配置文件,修改配置,编译。(没有 git 的小伙伴自行安装)

1
git clone --depth=1  https://github.com/aria2/aria2

image-20201228152013312

1
apt install libssh2-1-dev libc-ares-dev zlib1g-dev libsqlite3-dev pkg-config libssl-dev

image-20201228152306034

1
apt install libxml2-dev libcppunit-dev autoconf automake autotools-dev autopoint libtool

image-20201228152444478

1
autoreconf -i

image-20201228152704529

1
./configure --disable-bittorrent --disable-metalink

image-20201228153053805

image-20201228153423439

1
make -j 4

image-20201228153516295

等待好久之后,编译完成,编译好的文件在当前目录的 /src/aria2c,将其移动到 /usr/bin 中,就可以直接使用了。

image-20201228162338141

接下来要配置 aria2,找到了这个比较活跃且比较完整的 aria2 配置文件,还有比较丰富的功能,将其下载下来,稍作修改,精简掉 BitTorrent 相关配置,上传到树莓派上,启动 aria2 程序,如下图:

image-20201228184453053

aria2 启动正常,将其放到后台运行,添加 -D 参数,下载器配置结束。

关于 aria2 的 GUI,我用的是这个,单 HTML 文件,不需要运行时和其他设置,设置好 IP 地址就可以连接了。

samba共享设置

首先安装 samba 软件包,如下图:

image-20201228185532045

安装好后需要配置 samba 才可以使用。

使用 smbpasswd -a pi 命令添加当前账号,设置密码,可以与系统密码不同,如下图:

image-20201228210503471

使用 vim /etc/samba/smb.conf 命令编辑配置文件,在配置文件后面添加如下内容,如下图:

image-20201228224500081

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[share]
# 注释而已
comment = share folder
browseable = yes
# 共享的目录
path = /mnt/dd
create mask = 0700
directory mask = 0700
valid users = pi
force user = pi
force group = pi
public = no
available = yes
writable = yes
# 不允许guest
guest ok = no

之后重启 samba 服务,命令为 service smbd restart,如下图:

image-20201229103959077

然后就可以在 Windows 上进行连接了,输入 IP 地址进行连接,输入刚才设置的账号密码即可,如下图:

image-20201229105425928

image-20201229105409931

开机启动设置

总结下需要开机启动的程序:

  • 磁盘已经实现自动挂载和解密,这个无需开机自动启动
  • aria2 需要开机自动启动
  • samba 服务会自动启动
  • 如果有自定义的下载程序,则需要开机自动启动或者使用计划任务自动执行
  • 如果有其他需要自动启动的可以自行设置

aria2 开启自动启动设置如下:

使用 vim /etc/rc.local 命令编辑 /etc/rc.local 文件添加 aria2 自动启动命令,如下图:

image-20201229113146890

重启树莓派,验证程序是否开机自动启动成功,如下图:

image-20201229113432110

仪表板

该安装的都安装好了,再装一个仪表板吧,用来方便的监控树莓派的运行状态,CPU 使用率,内存,网络,温度等等指标。

这里使用的是开源版本的 pi-dashboard,为了方便部署,找到了它的 docker 版本,直接一行命令 docker run -d --name docker-pi-dashboard -e 'LISTEN=1024' --net=host ecat/docker-pi-dashboard 就可以部署好了,节省部署和升级的时间,还不会污染树莓派本身的环境。

部署好后如下图:

image-20201230213415919

image-20201230213439808

界面比较清爽,简洁,符合我的审美观🤣🤣,再也不用手动敲 htop,iotop,vnstat,free 命令啦。

总结

到这里整个配置流程就结束了,整体还是比较顺畅的,鉴于树莓派 3b+ 的性能,作为基本的下载器还是可以满足要求的,因为家里带宽不是很高,跑不到 USB2.0 的上限,所以树莓派的计算性能和 IO 性能都不是瓶颈,目前来说是够用的。

参考链接

https://www.raspberrypi.org/documentation/

https://github.com/P3TERX/aria2.conf

https://www.raspberrypi.org/documentation/installation/installing-images/windows.md

https://www.raspberrypi.org/documentation/remote-access/ssh/README.md

https://blog.csdn.net/u012308586/article/details/105555737

https://aria2.github.io/manual/en/html/README.html#how-to-build

[https://github.com/mayswind/AriaNg

https://github.com/spoonysonny/pi-dashboard

https://github.com/ecator/docker-pi-dashboard

本文章首发于个人博客 LLLibra146’s blog
本文作者:LLLibra146
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
本文链接https://blog.d77.xyz/archives/c13775e6.html