使用树莓派搭建离线下载神器
目的
利用深夜比较稳定的空闲带宽挂机自动下载比较大的文件,例如:电视剧。
另外我自己写了一个脚本,自动从某盘指定目录下下载文件到本地,每天凌晨自动启动,避免了白天下载占用带宽。
同时利用本篇文章做个笔记,万一设备挂了可以按照文章恢复😂。
工具准备
树莓派(英文名: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 映像文件,如下图:
使用官方推荐的映像写入工具,将 img 映像文件写入到存储卡中。
注意:写入操作会清空存储卡所有内容!
写入完成后内存卡变成了两个分区,其中一个是 FAT32 格式的启动分区,另一个是 ext4 格式的 Linux 分区,由于 Windows 不支持 ext4 分区,所以这里显示为空,不要去尝试双击打开。
这时先不要急于弹出存储卡,由于我这里并没有显示器并且 ssh 功能默认是关闭的,所以需要先打开 ssh 功能,方便后面连接上去。
在启动分区中新建一个名字为 ssh 的文件,没有后缀名,也没有内容,保持空白就可以,如下图:
当树莓派启动时会自动检测此文件,检测到后会开启 ssh 功能并且删除文件。
启动系统
弹出内存卡装到树莓派上,插上电源和网线,开机,树莓派启动好后会自动开启 ssh 功能,在路由器管理界面可以查看树莓派的IP地址。
使用 xshell 登录到树莓派,默认账号为 pi,默认密码为 raspberry。
更改密码&&换源
登录之后我们第一步要做的就是更改密码,更改掉 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
命令查看当前的磁盘,如下图:
可以看到,我一共有两块磁盘,一块是 16GB 的内存卡,另一块是 1TB 的硬盘。
使用 fdisk /dev/sda
命令初始化 1TB 的硬盘,如下图:
先输入 d 删除之前的分区,如果有的话,如下图:
输入 n 新建一个分区,输入 p 新建主分区,输入 1 ,代表分区号为 1,输入开始和结束扇区,回车默认即可,如下图:
输入 w 保存更改并退出,如下图:
使用 partprobe /dev/sda
命令在不重新启动的情况下重新读取分区表,使新建的分区生效。
使用 mkfs -t ext4 /dev/sda
命令格式化新建的分区,格式化成 Linux 下可用的 ex4 格式,如下图:
挂载磁盘,查看磁盘是否可以正常挂载,如下图:
确认磁盘可以正常挂载后,取消挂载磁盘,方便下面加密分区。
cd .. && umount dd
加密磁盘
本次只写下载器的搭建过程, 在不久的未来可能会搭建私人云盘,所以为了安全起见,需要将磁盘进行一下加密,防止硬盘被偷等物理攻击😂😂,不需要的小伙伴可以跳过这个环节。
LUKS (Linux Unified Key Setup)是 Linux 硬盘加密的标准。 通过提供标准的磁盘格式,它不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理,底层使用的是 dm-crypt
进行加解密操作,前端使用 cryptsetup
进行命令行控制。
它是在内核中实现的,并且它是以抽象块设备进行透明加密的,这样使其具有很大的灵活性,可以使它用于操作系统支持的任何文件系统。
注意:以下操作会清空硬盘上所有数据!
首先确认 cryptsetup 程序是否已经安装到了系统中,使用 cryptsetup -V
命令,如果提示未找到,则需要安装它,如下图:
使用 cryptsetup luksFormat /dev/sda
命令创建加密设备,如下图:
会警告已经存在了一个 ext4 分区,这个是刚才初始化磁盘时建立的分区,忽略它,输入 YES
确定格式化。之后输入两次磁盘的加密密码,以后每次挂载都要输入这个密码来解密磁盘。
使用 cryptsetup luksOpen /dev/sda ddtt
命令打开虚拟设备,输入上个步骤中设置的密码,会自动将虚拟设备 ddtt 添加到映射文件 /dev/mapper
中。
使用命令 mkfs -t ext4 /dev/mapper/ddtt
格式化虚拟设备,格式化为 ext4 格式,如下图:
之后就可以正常挂载虚拟设备到目录了,挂载命令为 mount /dev/mapper/ddtt dd
,如下图:
如果需要卸载分区可以使用 umount dd
命令,之后使用 cryptsetup luksClose /dev/mapper/ddtt
命令关闭加密分区,如下图:
此后正确使用加密磁盘的步骤如下:
- 打开加密分区,输入密码
- 挂载虚拟设备
- 卸载虚拟设备
- 关闭加密分区
自动挂载&&解密磁盘
在任意一个目录中生成密钥文件,更改权限使得只有 root 账户才能读取它,如下图:
使用命令 cryptsetup luksAddKey /dev/sda /root/.kkk
添加密钥文件,使密钥文件生效,即可以使用密钥文件来解密磁盘。
编辑 /etc/fstab
文件设置自动挂载,将 /dev/mapper
下的虚拟设备自动挂载到 /mnt/dd
下,格式为 ext4,如下图:
编辑 vim /etc/crypttab
自动生成虚拟设备,如下图:
设置完毕,重启系统,重新登录到系统,查看磁盘是否自动挂载成功,如下图:
可以看到 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 |
1 | apt install libssh2-1-dev libc-ares-dev zlib1g-dev libsqlite3-dev pkg-config libssl-dev |
1 | apt install libxml2-dev libcppunit-dev autoconf automake autotools-dev autopoint libtool |
1 | autoreconf -i |
1 | ./configure --disable-bittorrent --disable-metalink |
1 | make -j 4 |
等待好久之后,编译完成,编译好的文件在当前目录的 /src/aria2c
,将其移动到 /usr/bin
中,就可以直接使用了。
接下来要配置 aria2,找到了这个比较活跃且比较完整的 aria2 配置文件,还有比较丰富的功能,将其下载下来,稍作修改,精简掉 BitTorrent 相关配置,上传到树莓派上,启动 aria2 程序,如下图:
aria2 启动正常,将其放到后台运行,添加 -D 参数,下载器配置结束。
关于 aria2 的 GUI,我用的是这个,单 HTML 文件,不需要运行时和其他设置,设置好 IP 地址就可以连接了。
samba共享设置
首先安装 samba 软件包,如下图:
安装好后需要配置 samba 才可以使用。
使用 smbpasswd -a pi
命令添加当前账号,设置密码,可以与系统密码不同,如下图:
使用 vim /etc/samba/smb.conf
命令编辑配置文件,在配置文件后面添加如下内容,如下图:
1 | [share] |
之后重启 samba 服务,命令为 service smbd restart
,如下图:
然后就可以在 Windows 上进行连接了,输入 IP 地址进行连接,输入刚才设置的账号密码即可,如下图:
开机启动设置
总结下需要开机启动的程序:
- 磁盘已经实现自动挂载和解密,这个无需开机自动启动
- aria2 需要开机自动启动
- samba 服务会自动启动
- 如果有自定义的下载程序,则需要开机自动启动或者使用计划任务自动执行
- 如果有其他需要自动启动的可以自行设置
aria2 开启自动启动设置如下:
使用 vim /etc/rc.local
命令编辑 /etc/rc.local
文件添加 aria2 自动启动命令,如下图:
重启树莓派,验证程序是否开机自动启动成功,如下图:
仪表板
该安装的都安装好了,再装一个仪表板吧,用来方便的监控树莓派的运行状态,CPU 使用率,内存,网络,温度等等指标。
这里使用的是开源版本的 pi-dashboard,为了方便部署,找到了它的 docker 版本,直接一行命令 docker run -d --name docker-pi-dashboard -e 'LISTEN=1024' --net=host ecat/docker-pi-dashboard
就可以部署好了,节省部署和升级的时间,还不会污染树莓派本身的环境。
部署好后如下图:
界面比较清爽,简洁,符合我的审美观🤣🤣,再也不用手动敲 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