2178 字
11 分钟
树莓派 5 安装 Ubuntu Server 24.04 LTS 记录

使用树莓派 5 安装 Ubuntu Server 24.04 LTS 作为小型服务器使用,并部署包括 docker 在内的各项服务,在此进行记录。

安装 Ubuntu Server 24.04 LTS#

此时需要准备一个 TF 卡。

刷入系统#

先到 Ubuntu 官网 下载系统镜像文件,这里我选择的是 Ubuntu 服务器 24.04 LTS 64 位镜像。

然后到 树莓派官网 下载系统刷入工具 Raspberry Pi Imager。运行后选择刚才下载的镜像并选择对应的 TF 卡进行刷入。

刷写配置可选择修改主机名、用户名和密码,并记住勾选使用 SSH 连接,如果需要连接无线网络也可以选择配置。

刷写结束 TF 卡会自动弹出,将其插入断电状态的树莓派,然后接通电源,系统启动。

登录系统#

使用 ssh 工具登录系统,若没有配置主机名、用户名和密码,默认主机名为 ubuntu,默认用户名为 ubuntu,默认密码为 ubuntu。第一次登录时会要求修改默认密码。

安装中文语言包#

Ubuntu Server 系统安装时默认语言为英语,现在将其修改为中文

首先安装简体中文语言包

sudo apt update
sudo apt install language-pack-zh-hans

将区域语言设置为简体中文

localectl set-locale LANG=zh_CN.UTF-8

重启以应用更改。

sudo reboot

查看当前区域语言设置。

locale

测试是否为中文输出。

sudo apt update

删除 Snap 商店#

sudo apt autoremove --purge snapd

创建 Swap 交换空间#

开启 Swap#

创建一个 swap 文件。

sudo dd if=/dev/zero of=/swapfile bs=1M count=8192

设置文件权限。

sudo chmod 600 /swapfile

把文件设置为 Swap 空间。

sudo mkswap /swapfile

启用 Swap 空间。

sudo swapon /swapfile

开机自动挂载 Swap 空间。

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

最后,检查 Swap 空间是否已启用。

free -h

关闭 Swap#

关闭 Swap 空间。

sudo swapoff /swapfile

停止开机自动挂载。

sudo sed -i '/swapfile/d' /etc/fstab

删除 swap 文件。

sudo rm /swapfile

挂载移动硬盘#

查看当前磁盘情况。

lsblk

首先,创建需要挂载的文件夹。

sudo mkdir /mnt/sda1

开机磁盘挂载文件保存于 /etc/fstab

sudo vi /etc/fstab

加入这一行命令来挂载磁盘。

/dev/sda1 /mnt/sda1 ntfs defaults,nofail 0 0

挂载磁盘。

sudo mount -av

再次查看当前磁盘情况。

lsblk

配置 SMB 文件共享#

安装 Samba 服务。

sudo apt update
sudo apt install samba

要共享的目录必须存在才能被共享,给共享目录赋予权限。

sudo chmod 777 -R /mnt/sda1

配置共享设置。

sudo vi /etc/samba/smb.conf

[global] 下加入以兼容 iOS 文件应用。

vfs objects = acl_xattr catia fruit streams_xattr

加入共享目录。

[share]
  path = /mnt/sda1
  writable = yes
  read only = no
  guest ok = yes
  guest only = yes
  public = yes
  browseable = yes
  available = yes
  create mode = 0777
  directory mode = 0777

重启 Samba 服务守护进程,查看服务运行状态。

sudo systemctl restart smbd
sudo systemctl status smbd

使用 Cloudflared 建立隧道#

curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb && 

sudo dpkg -i cloudflared.deb && 

sudo cloudflared service install <token>

部署 Docker#

首先卸载可能已经存在的旧版本 docker

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

加入 docker 仓库。

# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

安装 docker

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

修改镜像源,编辑 /etc/docker/daemon.json 文件,在其中添加以下内容。

{
  "registry-mirrors": ["https://mirror"]
}

然后重启 docker 服务。

sudo systemctl restart docker

验证安装。

sudo docker run hello-world

加入用户组以避免权限问题。

# 添加 docker 用户组,一般已存在,不需要执行

sudo groupadd docker

# 将用户加入到docker用户组中

sudo gpasswd -a $USER docker

# 更新用户组

newgrp docker

# 测试 docker 命令是否可以直接使用

docker version

小雅 5678#

查看 小雅使用文档

sudo bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)"

sudo vi /etc/xiaoya/myruntime.txt

sudo bash -c "$(curl http://docker.xiaoya.pro/update_data.sh)"

ddns-go#

docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go

在浏览器中打开 http://主机IP:9876,并修改你的配置。

Portainer 9000#

首先,创建 Portainer Server 将用于存储其数据库的卷。

sudo docker volume create portainer_data

然后,下载并安装 Portainer Server 容器。

sudo docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Dashdot 3001#

sudo docker run -dit \
  --restart always \
  --privileged \
  --name dashdot \
  -p 3001:3001 \
  -v /:/mnt/host:ro \
  -e DASHDOT_ENABLE_CPU_TEMPS=true \
  -e DASHDOT_ALWAYS_SHOW_PERCENTAGES=true \
  -e DASHDOT_PAGE_TITLE="Raspberry Pi 5" \
  -e DASHDOT_SHOW_HOST=true \
  -e DASHDOT_CUSTOM_HOST="Raspberry Pi 5" \
  mauricenino/dashdot:latest

Aria2 + AriaNg + Filebrowser 8000#

首先查看该项目的 GitHub 页面 来创建必要的文件。

sudo docker run -d --name ariang \
  --restart always \
  -p 8000:80 \
  -p 6800:6800 \
  -e PUID=1000 \
  -e PGID=1000 \
  -e ENABLE_AUTH=false \
  -e ENABLE_RCLONE=false \
  -e ARIA2_SSL=false \
  -e ARIA2_EXTERNAL_PORT=6800 \
  -e CADDY_LOG_LEVEL=ERROR \
  -v /mnt/sda1/download:/data \
  -v /home/ubuntu/docker-v/aria2/app/.cache:/app/.cache \
  -v /home/ubuntu/docker-v/aria2/app/a.db:/app/filebrowser.db \
  -v /home/ubuntu/docker-v/aria2/app/conf/key:/app/conf/key \
  -v /home/ubuntu/docker-v/aria2/app/conf:/app/conf \
  wahyd4/aria2-ui

Aria2: http://ubuntu:8000

FileManger: http://ubuntu:8000/files

默认用户名和密码均为 admin

Rclone: http://ubuntu:8000/rclone

Excalidraw 10001#

sudo docker run -dit --restart always --name excalidraw -p 10001:80 welywely/excalidraw:latest

Speed Test 10002#

sudo docker run -dit --restart always --name speedtest -p 10002:80 linuxserver/librespeed:latest

Draw.io 10003#

sudo docker run -dit --restart always --name drawio -p 10003:8080 jgraph/drawio:latest

Flare 5005#

sudo docker run -dit --restart always --name flare -p 5005:5005 -v /home/ubuntu/docker-v/flare/app:/app soulteary/flare

Calibre-Web 8083#

首先,在 GitHub 页面 下载数据库文件。

sudo docker run -d \
  --name=calibre-web \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -p 8083:8083 \
  -v /home/ubuntu/docker-v/calibre-web/data:/config \
  -v /home/ubuntu/docker-v/calibre-web/calibre/library:/books \
  --restart always \
  lscr.io/linuxserver/calibre-web:latest

默认用户名为 admin。 默认密码为 admin123

IT-Tools 9600#

sudo docker run -d --name it-tools --restart always -p 9600:80 corentinth/it-tools:latest

Stirling-PDF 9700#

sudo docker run -d \
  -p 9700:8080 \
  -v /home/ubuntu/docker-v/s-pdf/trainingData:/usr/share/tessdata \
  -v /home/ubuntu/docker-v/s-pdf/extraConfigs:/configs \
  -v /home/ubuntu/docker-v/s-pdf/logs:/logs \
  -e DOCKER_ENABLE_SECURITY=false \
  -e INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false \
  -e LANGS=zh_CN \
  --name stirling-pdf \
  --restart always \
  frooodle/s-pdf:latest

EmulatorJS 9800 3000#

sudo docker run -d \
  --name=emulatorjs \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -e SUBFOLDER=/ `#optional` \
  -p 3000:3000 \
  -p 9800:80 \
  -p 4001:4001 `#optional` \
  -v /home/ubuntu/docker-v/emulatorjs/config:/config \
  -v /home/ubuntu/docker-v/emulatorjs/data:/data \
  --restart always \
  lscr.io/linuxserver/emulatorjs:latest

Minecraft Bedrock Server#

创建 Docker Compose 文件。

mkdir /home/ubuntu/docker-v/mc-bedrock
cd /home/ubuntu/docker-v/mc-bedrock
vi docker-compose.yml

填写以下内容。

services:
  mc:
    image: itzg/minecraft-bedrock-server
    restart: always
    environment:
      TZ: "Asia/Shanghai"
      EULA: "TRUE"
      SERVER_NAME: "Wely"
      LEVEL_NAME: "World"
    ports:
      - "19132:19132/udp"
    volumes:
      - /home/ubuntu/docker-v/mc-bedrock/data:/data
    stdin_open: true
    tty: true

然后建立容器。

sudo docker compose up -d

Minecraft Server on Docker (Java Edition)#

创建 Docker Compose 文件。

mkdir /home/ubuntu/docker-v/mc-java
cd /home/ubuntu/docker-v/mc-java
vi docker-compose.yml

填写以下内容。

services:
  mc:
    image: itzg/minecraft-server
    restart: always
    environment:
      TZ: "Asia/Shanghai"
      SNOOPER_ENABLED: "false"
      SERVER_NAME: "Wely"
      MAX_PLAYERS: "10"
      LEVEL: "World"
      MODE: "survival"
      DIFFICULTY: "normal"
      EXEC_DIRECTLY: "true"
      GUI: "false"
      INIT_MEMORY: "1G"
      MAX_MEMORY: "4G"
      ENABLE_ROLLING_LOGS: "true"
      EULA: "true"
    ports:
      - "25565:25565"
    volumes:
      - /home/ubuntu/docker-v/mc-java/data:/data
    stdin_open: true
    tty: true

或者使用 fabric 服务端.

services:
  mc:
    image: itzg/minecraft-server
    restart: always
    environment:
      TYPE: "FABRIC"
      FABRIC_LAUNCHER: "fabric-server-mc.1.21-loader.0.15.11-launcher.1.0.1.jar"
      TZ: "Asia/Shanghai"
      SNOOPER_ENABLED: "false"
      SERVER_NAME: "Wely"
      MAX_PLAYERS: "10"
      LEVEL: "fabric-world"
      MODE: "survival"
      DIFFICULTY: "normal"
      EXEC_DIRECTLY: "true"
      GUI: "false"
      INIT_MEMORY: "1G"
      MAX_MEMORY: "4G"
      ENABLE_ROLLING_LOGS: "true"
      EULA: "true"
    ports:
      - "25565:25565"
    volumes:
      - /home/ubuntu/docker-v/mc-java/data:/data
    stdin_open: true
    tty: true

然后建立容器。

sudo docker compose up -d

对于 Docker 无法访问的解决方案#

在另一台可以访问的机器上拉取镜像,再传输到需要使用镜像的机器上。

首先拉取对应平台的镜像。

docker pull --platform linux/arm64 image

导出镜像。

docker save -o image.tar image

image.tar 文件传输至需要使用镜像的机器,再导入本地镜像。

docker load -i image.tar

此时,导入的镜像包含所有的元数据。

查看路由器校园网 IP#

路由器脚本。

#! /bin/ash
echo "==========Start=========="
echo `date '+%Y-%m-%d %H:%M:%S'`
#get current wan_ip
current_wan_ip=`ifconfig -a | grep inet | grep -v inet6 | grep -v 127.0.0.1 | grep -v 192.168.8.1 | awk '{print $2}' | tr -d "addr:"`
echo "IP: $current_wan_ip"
#if ip.html
if [ ! -f "ip.html" ]; then
	echo ${current_wan_ip} > ip.html
	echo "craete ip.html"
else
	last_ip=`cat ip.html`
	if [ "${current_wan_ip}" != "${last_ip}" ]; then
		#renew ip.html
		echo ${current_wan_ip} > ip.html
		echo "renew ip.html"
	else
		echo "no difference"
	fi
fi
echo `date '+%Y-%m-%d %H:%M:%S'`
echo -e "==========End==========\n"

树莓派脚本。

sudo sshpass -p password scp -O -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa [email protected]:/root/ip.html /home/ubuntu/server-ip/ip.html

使用 nginx

sudo docker run -dit --restart always -p 23333:80 --name nginx -v /home/ubuntu/server-ip:/usr/share/nginx/html nginx

Docker 备份脚本#

#! /bin/sh
cd /home/ubuntu
sudo tar -czvf docker-v.tar.gz docker-v
sudo mv docker-v.tar.gz /mnt/sda1/docker-backup/docker-v-$(date +%Y%m%d%H%M%S).tar.gz
find /mnt/sda1/docker-backup/ -mtime +7 -name "*.tar.gz" -exec rm -rf {} \;

树莓派 5 风扇#

随着树莓派温度的升高,风扇会做出以下反应:

  • 低于 50°C,风扇不旋转0% 速度)

  • 50°C 时,风扇以低速运转( 30% 速度)

  • 60°C 时,风扇速度增加至中速50% 速度)

  • 67.5°C 时,风扇转速增至高速70% 转速)

  • 75°C 时,风扇升至全速100% 速度)

温度降低时风扇速度也与温度范围有相同的匹配关系,具有 5°C滞后;当温度降至低于上述每个阈值 5°C 时,风扇速度会降低。

USB 端口和风扇插口均采用相同的 1.6 A 电流限制。

所有型号的 Raspberry Pi 都进行了一定程度的热管理,以避免在大负荷下过热。SoC 有一个内部温度传感器,GPU 上的软件会对其进行轮询,以确保温度不超过我们为所有型号设定的 85°C 上限。可以将其设置为更低的值,但不能设置为更高的值。当设备接近极限值时,芯片上使用的各种频率和电压会降低。这样可以减少产生的热量,从而控制温度。

当核心温度在 80°C85°C 之间时,ARM 核心将逐渐降低温度。如果温度达到 85°CARM 内核和 GPU 都会受到限制

树莓派 5 安装 Ubuntu Server 24.04 LTS 记录
https://blog.wely.fun/posts/树莓派-5-安装-ubuntu-server-2404-lts-记录/
作者
Wely
发布于
2024-05-31
许可协议
CC BY-NC-SA 4.0