树莓派4B折腾记录

树莓派4B折腾记录

买了一块树莓派 4B 板子,2G 的内存,打算用来替换刷机和折腾都不是很方便的斐讯 N1 ,这里记录一下自己的折腾过程。

一、系统安装

由于之前并没有折腾过树莓派,对于树莓派能用的系统也没有太多的了解,听说 64 位的系统比 32 位性能要更强,百度了一番找到了一个叫做 Debian-Pi 的系统,看中了它集成的 Web 管理页面和 Docker 以及 CeCOS-CaaS 的功能,这可以大幅降低部署系统的操作难度。

官方主页:Github 地址 Gitee 地址

根据需求下载自己需要的镜像版本,我使用的是 2020-06-22-U4-Release 的 plus++ 版本,即无桌面增强版。下载好镜像之后使用 Win32DiskImager 写入 SD 卡再通电启动即可,首次启动需要一定的时间初始化。我是直接网线连接的树莓派,当路由器里面能够看到 raspbian 这个设备 IP 的时候就可以尝试通过 Web 管理页面访问了。

系统初始化说明

系统开机将自动扩展根分区,然后会自动进行相关配置,待完成后方可正常使用,此过程中系统将 自动重启3次

账户及密码

系统默认账户:pi ,默认密码:raspberry

默认账户pi账户支持ssh登录,root账户密码请登陆后使用命令 “sudo passwd root” 执行设置,

或使用命令 “sudo -i” 来切换到root用户。

1.Web可视化管理界面
登录地址 https://你树莓派的IP地址:9090
说明:请使用系统默认账户pi登录

2.WEB SSH 客户端 入口界面
登录地址 https://你树莓派的IP地址:4200
说明:使用具有控制台登录权限的帐户登录,例如:pi

3.CecOS CaaS 容器云管理平台 登录界面
登录地址 https://你树莓派的IP地址:8443
说明:默认管理账户 admin , 默认密码:password 。请登录后立即修改默认密码!!

二、软件安装

1. Hassio

这是 HomeAssistant 的一个版本,自带多个插件,比原版 HomeAssistant 更方便。我用来控制宿舍里的斐讯 TC1 插座。

wget https://code.aliyun.com/neroxps/hassio_install/raw/master/install.sh
chmod +x install.sh
sudo ./install.sh

安装期间会提示以下类型信息,全部 y 或者按照如下操作:

(1). 是否将系统源切换为中科大(USTC)源(目前支持 Debian Ubuntu Raspbian 三款系统)
请输入 y or n(默认 yes):y

(2). 在你系统内找到 onehero 用户,是否将其添加至 docker 用户组。
请输入 yes 或者 no (默认 yes):y
将onehero用户添加至 docker 用户组。

(3).是否需要替换 docker 默认源?
请输入 yes 或者 no(默认:yes):y

(4).请选择你设备类型(默认:qemux86-64)
    [1]: intel-nuc: 英特尔的nuc小主机
    [2]: odroid-c2: 韩国odroid-c2
    [3]: odroid-xu: 韩国odroid-xu
    [4]: orangepi-prime: 香橙派
    [5]: qemuarm-64: 通用arm设备(例如斐讯N1) 64位系统
    [6]: qemux86-64: 通用X86(普通的PC机电脑)64位系统
    [7]: raspberrypi3-64: 树莓派三代64位系统
    [8]: raspberrypi4-64: 树莓派四代64位系统
    [9]: tinker: 华硕tinker
输入数字 (1-9):
你选择了 8
 ################################################################################
 # 1. 是否将系统源切换为中科大(USTC)源: 是
 # 2. 是否将用户添加至 Docker 用户组:   是,添加用户为 onehero 
 # 3. 是否将 Docker 源切换至国内源:     是
 # 4. 您的设备类型为:                   raspberrypi4-64
 ################################################################################
请确认以上信息,继续请按任意键,如需修改请输入 Ctrl+C 结束任务重新执行脚本。

有关 Hassio 的内容还可以参考瀚思彼岸的这个帖子:https://bbs.hassbian.com/thread-4520-1-1.html

2. mqtt 服务器

由于我的斐讯 TC1 刷了 Z大的固件,所以需要用 mqtt 服务器接入 HomeAssistant 来间接控制。

sudo apt install mosquitto
sudo mosquitto_passwd -c /etc/mosquitto/pwfile 你的用户名

mosquitto 的ip地址就是树莓派的 IP ,端口默认是 1883 ,用户名和密码就是上一步刚设置的。

如果无法设置用户名和密码,可以先把 mosquitto 进程关闭,设置好后再开启。

ps -ef | grep mosquitto
kill 上一步找出来的 pid

3. SMB 与 移动硬盘挂载

3.1 安装与配置
sudo apt install samba
sudo nano /etc/samba/smb.conf

# 添加以下内容
[storage]
   path = /home/storage # 你想要共享的目录
   available = yes
   browseable = yes
   public = no
   writable = yes
  
# 在 [global] 节点下添加下面这行可提升传输速度
aio read size = 0

为 SMB 用户添加密码,该用户必须是系统已有用户,按照提示输入密码即可。

smbpasswd -a 你的用户名

重启 SMB 服务:

sudo service smbd restart

然后 Windows 系统在资源管理器的地址栏输入 \\你的树莓派 IP 地址并回车输入账号密码就能看到 SMB 共享目录了,还可以右键点击共享目录选择映射为网络驱动器。

Android 端可以使用 Solid Explorer 、Mix Explorer 、X-plore 等软件来连接 SMB 共享目录,下文 FTP 与 Webdav 同样也可以。

3.2 挂载硬盘

由于手上刚好有两块升级笔记本电脑淘汰下来的 2.5 寸机械硬盘,本着不浪费的原则就买了两块硬盘盒打算把它们一起连接到树莓派当个 NAS 。

1. 供电

树莓派 4B 带不动两块 2.5 寸机械硬盘,我尝试了绿联的 USB Hub 同样不行,必须用带有额外供电的硬盘盒。如果你已经这样试过,可能会出现树莓派因为供电不足系统出错无法启动的情况,如果拔掉移动硬盘仍然无法正常启动请重新烧录系统镜像到 SD 卡安装系统。

2. 移动硬盘格式

强烈建议使用 ext4 格式,原来使用 ntfs 格式时发现读写速度跑不满,而且很占用系统资源。

# 仅下次重启前有效
sudo fdisk -l # 查看并记下要挂载的硬盘或分区信息
sudo mount /dev/sdb /home/storage # /dev/sdb 是要挂载的硬盘或分区,/home/storage 是要挂载到的目录

# 开机自动挂载
sudo blkid # 查看并记下要挂载的硬盘或分区相应的 UUID
sudo nano /etc/fstab
# 添加以下内容,有几个添加几个
UUID=eb151714-de83-364d-9c07-04265bacd19d /home/storage/N1 ext4 defaults 0 0
UUID=88b15d68-acc0-cb4b-bc4f-f969a1f1f0d6 /home/storage/N2 ext4 defaults 0 0

sudo mount -a # 挂载 /etc/fstab 中记录的所有硬盘或分区
chmod -R 777 /home/storage # 挂载完成后设置权限,实现对移动硬盘文件的可读可写。

4. FTP

因为安卓端几乎找不到支持 SMB V3 协议的文件管理器,所以局域网读写速度只有电脑的一半,用 FTP 可以跑满。

4.1 安装 vsftpd
sudo apt install vsftpd
4.2 备份 vsftpd.conf
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
4.3 修改 vsftpd.conf
# 1. 与匿名者相关的信息,在这个案例中将匿名登录取消:
anonymous_enable=NO

# 2. 与实体用户相关的信息
local_enable=YES
write_enable=YES
local_umask=022
local_root=/home/storage

chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES

# 3. 与主机有关的设定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
# pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
4.4 重启 vsftpd
sudo service vsftpd restart

Windows 系统同样可以在资源管理器的地址栏输入 ftp://你的树莓派IP 来访问共享目录,浏览器也可以。

5. chfs

CuteHttpFileServer/chfs是一个免费的、HTTP协议的文件共享服务器,使用浏览器可以快速访问。它具有以下特点:

  • 单个文件,核心功能无需其他文件
  • 跨平台运行,支持主流平台:Windows,Linux和Mac
  • 界面简洁,简单易用
  • 支持扫码下载和手机端访问,手机与电脑之间共享文件非常方便
  • 支持账户权限控制和地址过滤
  • 支持快速分享文字片段
  • 支持webdav协议

与其他常用文件共享方式(如FTP,飞秋,网盘,自己建站)相比,具有使用简单,适用场景更多的优点,在个人使用以及共享给他人的场景中非常方便快捷。

软件官网:http://iscute.cn/chfs

5.1 下载与配置

下载解压:

wget http://iscute.cn/tar/chfs/2.0/chfs-linux-arm64-2.0.zip
unzip -o -d /home/apps/chfs chfs-linux-arm64-2.0.zip # /home/apps/chfs 改成你想解压到的路径

修改配置:

我这里设置成了匿名用户只能

nano chfs.ini # 添加以下内容并保存,注意修改相关项的值
#---------------------------------------
# 请注意:
#     1,如果不存在键或对应值为空,则不影响对应的配置
#     2,配置项的值,语法如同其对应的命令行参数
#---------------------------------------


# 监听端口
port=5212


# 共享根目录,通过字符'|'进行分割
# 注意:
#     1,带空格的目录须用引号包住,如 path="c:\a uply name\folder"
#     2,可配置多个path,分别对应不同的目录
path=/home/storage


# IP地址过滤
allow=

#----------------- 账户控制规则 -------------------
# 访问权限分为四种:""(不可访问),"R"(只读),"W"(读写),"D"(写+删除)。
# 读权限指的是下载,写权限指上传、新建等操作,
# 删除权限是在写权限的基础上加上删除权限。
# 注意:该键值可以同时存在多个,你可以将每个用户的访问规则写成一个rule,这样比较清晰,如:
#     rule=::
#     rule=root:123456:RW
#     rule=readonlyuser:123456:R
# rule=:::Video:r
rule=::::r
rule=用户名:密码:rwd


# 用户操作日志存放目录,默认为空
# 如果赋值为空,表示禁用日志
log=


# 网页标题
html.title=文件共享


# 网页顶部的公告板。可以是文字,也可以是HTML标签,此时,需要适用一对``(反单引号,通过键盘左上角的ESC键下面的那个键输出)来包住所有HTML标签。几个例子:
#     1,html.notice=内部资料,请勿传播
#     2,html.notice=`<img src="https://mat1.gtimg.com/pingjs/ext2020/qqindex2018/dist/img/qq_logo_2x.png" width="100%"/>`
#     3,html.notice=`<div style="background:black;color:white"><p>目录说明:</p><ul>一期工程:一期工程资料目录</ul><ul>二期工程:二期工程资料目录</ul></div>`
html.notice=


# 是否启用图片预览(网页中显示图片文件的缩略图),true表示开启,false为关闭。默认开启
image.preview=true


# 下载目录策略。disable:禁用; leaf:仅限叶子目录的下载; enable或其他值:不进行限制。
# 默认值为 enable
folder.download=


#-------------- 设置生效后启用HTTPS,注意监听端口设置为443-------------
# 指定certificate文件
ssl.cert=
# 指定private key文件
ssl.key=


# 设置会话的生命周期,单位:分钟,默认为30分钟
session.timeout=

启动:

chfs --file="chfs.ini" # chfs.ini 注意修改你的 ini 文件的路径
5.2 启动管理

使用 systemd 管理:

sudo nano /etc/systemd/system/chfs.service # 添加以下内容并保存,注意修改相关项的值
[Unit]
Description=chfs
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
# 程序启动路径和 ini 文件路径请修改成自己的
ExecStart=/home/onehero/apps/chfs/chfs --file="/home/onehero/apps/chfs/chfs.ini"

[Install]
WantedBy=multi-user.target

启动 chfs 并设置为开机自启:

sudo systemctl start chfs # 启动
sudo systemctl enable chfs # 开机自启
5.3 systemd 常用管理命令
systemctl daemon-reload  # 更新配置
systemctl start xxx      # 启动
systemctl restart xxx    # 重启
systemctl stop xxx       # 停止
systemctl enable xxx     # 开机自启
systemctl disable xxx    # 取消开机启动
systemctl is-enabled xxx # 判断是否设置为开机启动

6. FileBrowser

软件介绍:官网

curl -fsSL https://filebrowser.xyz/get.sh | bash

安装教程参考另一位作者的教程:教程地址

使用 systemd 管理,将以下内容保存到 filebrowser.service,放到 /etc/systemd/sytem 目录下即可

sudo nano /etc/systemd/system/filebrowser.service # 添加以下内容,注意修改相关项的值
[Unit]
Description=File Browser
After=network.target

[Service]
# 修改程序路径和数据库地址
ExecStart=/home/onehero/apps/filebrowser/filebrowser -d /home/onehero/apps/filebrowser/filebrowser.db

[Install]
WantedBy=multi-user.target

运行和开机自启:

sudo systemctl start filebrowser
sudo systemctl enable filebrowser

7. 指示灯

关闭读写状态指示灯和电源指示灯

7.1 临时生效
# 状态指示灯,0 为关,1 为开
echo 0 | sudo tee /sys/class/leds/led0/brightness
echo none | sudo tee /sys/class/leds/led0/trigger

# 电源指示灯,0 为关,1 为开
echo 0 | sudo tee /sys/class/leds/led1/brightness
echo none | sudo tee /sys/class/leds/led1/trigger
7.2 永久生效
sudo nano /etc/rc.local

将以下内容添加并保存:

# 状态指示灯,0 为关,1 为开 
echo 0 | tee  /sys/class/leds/led0/brightness
echo none | tee  /sys/class/leds/led0/trigger
# 电源指示灯,0 为关,1 为开
echo none | tee  /sys/class/leds/led1/trigger
echo 0 | tee /sys/class/leds/led1/brightness

8. 微力同步(VerySync)

软件介绍:官网

# (如果需要指定索引存放位置请在最后面添加 -d 路径 如 -d /data/verysync)
curl http://www.verysync.com/shell/verysync-linux-installer/go-installer.sh > go-installer.sh
chmod +x go-installer.sh
sudo ./go-installer.sh

浏览器打开 http://树莓派IP:8886

9. Aria2 Pro

这里使用 Aria2 Pro 的 Docker 镜像安装

Github地址:地址

Docker Hub:地址

教程 Blog:地址

镜像特点

  • 使用 Aria2 完美配置方案
    • BT 下载率高、速度快
    • 重启后不丢失任务进度、不重复下载
    • 删除正在下载的任务自动删除未完成的文件
    • 下载错误自动删除未完成的文件
    • 下载完成自动删除控制文件(.aria2后缀名文件)
    • 下载完成自动删除种子文件(.torrent后缀名文件)
    • 下载完成自动删除空目录
    • BT 下载完成自动清除垃圾文件(文件类型过滤功能)
    • BT 下载完成自动清除小文件(文件大小过滤功能)
    • 有一定的防版权投诉、防迅雷吸血效果
    • 更好的 PT 下载支持
  • 使用 aria2-builder 项目最新静态编译二进制文件
    • 多平台:amd64, i386, arm64, armhf(VPS、群辉、树莓派等常见平台完美支持)
    • 全功能:Async DNS, BitTorrent, Firefox3 Cookie, GZip, HTTPS, Message Digest, Metalink, XML-RPC, SFTP
    • 单服务器线程数最大值无上限(已破解线程数限制)
    • 防掉线程优化
    • 最新依赖库,下载更安全、稳定、快速
    • 持续更新最新版本
  • 支持与 RCLONE 联动
    • 自动上传 OneDrive 、Google Drive 等网盘
    • 百度网盘转存到其它网盘
    • 多网盘自由选择
  • 支持新一代互联网协议 IPv6
  • 下载完成自动移动文件到指定目录(文件自动归档/分类)
  • 定时自动更新 BT tracker 列表(无感知、无重启),保持 BT 下载高速率
  • 用户文件权限自动配置功能
  • 配置文件持久化,支持使用 watchtower 更新容器。
  • 极简设计,专注下载,简单易用,少即是多。

使用 Docker 安装,注意修改下面的 RPC 密钥和配置及数据路径以及默认下载路径

# RPC_SECRET  RPC密钥
# /home/onehero/apps/aria2-config  配置及数据路径
# /home/N1/download  下载路径

docker run -d \
     --name aria2-pro \
     --restart unless-stopped \
     --log-opt max-size=1m \
     --network host \
     -e PUID=$UID \
     -e PGID=$GID \
     -e RPC_SECRET=RPC密钥 \
     -e RPC_PORT=6800 \
     -e LISTEN_PORT=6888 \
     -v /home/onehero/apps/aria2-config:/config \
     -v /home/N1/download:/downloads \
     p3terx/aria2-pro

使用搭建好的 AriaNG 连接管理:地址

设置里面修改连接地址为树莓派 IP 再修改 RPC 密钥即可连接。

10. 系统状态获取

有时候想看看系统的 CPU 温度 、内存占用等信息,使用命令逐个获取不太方便,用脚本可以格式化输出

以下代码来自:树莓派实验室

新建一个.py文件保存代码:

nano status.py

将以下代码添加并保存,由于原帖部分 CPU 温度无法正常获取,这里略作修改:

import os
 
# Return CPU temperature as a character string                                      
def getCPUtemperature():
    file = open("/sys/class/thermal/thermal_zone0/temp")
    temp = round(float(file.read()) / 1000, 1)
    file.close()
    return str(temp)
 
# Return RAM information (unit=kb) in a list                                       
# Index 0: total RAM                                                               
# Index 1: used RAM                                                                 
# Index 2: free RAM                                                                 
def getRAMinfo():
    p = os.popen('free')
    i = 0
    while 1:
        i = i + 1
        line = p.readline()
        if i==2:
            return(line.split()[1:4])
 
# Return % of CPU used by user as a character string                                
def getCPUuse():
    return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip()))
 
# Return information about disk space as a list (unit included)                     
# Index 0: total disk space                                                         
# Index 1: used disk space                                                         
# Index 2: remaining disk space                                                     
# Index 3: percentage of disk used                                                  
def getDiskSpace():
    p = os.popen("df -h /")
    i = 0
    while 1:
        i = i +1
        line = p.readline()
        if i==2:
            return(line.split()[1:5])
 
 
# CPU informatiom
CPU_temp = getCPUtemperature()
CPU_usage = getCPUuse()
 
# RAM information
# Output is in kb, here I convert it in Mb for readability
RAM_stats = getRAMinfo()
RAM_total = round(int(RAM_stats[0]) / 1000,1)
RAM_used = round(int(RAM_stats[1]) / 1000,1)
RAM_free = round(int(RAM_stats[2]) / 1000,1)
 
# Disk information
DISK_stats = getDiskSpace()
DISK_total = DISK_stats[0]
DISK_used = DISK_stats[1]
DISK_perc = DISK_stats[3]
 
if __name__ == '__main__':
    print('')
    print('CPU Temperature = '+CPU_temp)
    print('CPU Use = '+CPU_usage)
    print('')
    print('RAM Total = '+str(RAM_total)+' MB')
    print('RAM Used = '+str(RAM_used)+' MB')
    print('RAM Free = '+str(RAM_free)+' MB')
    print('')  
    print('DISK Total Space = '+str(DISK_total)+'B')
    print('DISK Used Space = '+str(DISK_used)+'B')
    print('DISK Used Percentage = '+str(DISK_perc))

授予权限:chmod +x status.py

运行:python status.py

11. 备份/恢复系统

定时备份系统是个好习惯,当系统出现问题的时候只需要将备份的镜像重新烧录到 SD 卡即可。

参考教程:地址

11.1 备份时压缩:
lsblk # 查看 / 分区和 /boot 分区所在,在这里是 mmcblk0
# status=progress 可以显示备份过程中的文件大小变化,如果系统提示不支持可以去掉
# 注意修改路径
sudo dd if=/dev/mmcblk0 status=progress | gzip > /home/storage/N1/backup.gz

# 以当前时间生成特定的备份文件
sudo dd if=/dev/mmcblk0 status=progress | gzip > /home/storage/N1/"debian-pi-aarch64_backup_"$(date "+%Y%m%d_%H-%M-%S")".gz"

# 系统不支持显示 status 属性的话,可以新开一个终端运行以下命令观察文件大小
# 每隔 1s 刷新一次
watch -d -n 1 ls -lh /home/N1/backup.gz
11.2 备份时不压缩:
sudo dd if=/dev/mmcblk0 status=progress of=/home/storage/N1/backup.img bs=1M
11.3 备份脚本
nano backup.sh

# 添加以下内容并保存
#!/bin/bash
path="/home/storage/N1/" # 备份路径

prefix="debian-pi-aarch64_backup_" # 文件名
suffix=".gz"
curTime=$(date "+%Y%m%d_%H-%M-%S") # 日期格式
fullName="${path}${prefix}${curTime}${suffix}"
echo $fullName
sudo dd if=/dev/mmcblk0 status=progress | gzip > $fullName

# 赋予可执行权限
chmod +x backup.sh

# 运行
sudo ./backup.sh
posted @ 2020-12-07 18:53  柳桥风起  阅读(654)  评论(0编辑  收藏  举报