PVE LXC 容器中安装 CasaOS 及硬盘直通

✨ 在 PVE 中安装体验开源私有云软件 CasaOS。通过创建 LXC 容器并安装 CasaOS,可以在 PVE 上体验这个简单易用的开源私有云系统。安装过程中可能会遇到报错,可以安装旧版本后通过 Web 更新到最新版本。安装完成后,可以进入 CasaOS Web 页面进行配置和使用。另外,还可以通过修改 LXC 容器配置实现硬盘直通,将宿主机的硬盘挂载到容器中使用。

TOC
https://github.com/IceWhaleTech/CasaOS

👆之前在 GitHub 上发现了上面这个项目:CasaOS —— 一个简单易用的开源私有云系统,看项目介绍及界面截图都蛮不错的,也有挺多人推荐。正好将其装在 PVE 中体验一下,同时也用作 Docker 测试环境。

与之前的 OpenWRT 类似,这次也是安装在 LXC 容器中。

安装

下载 CT 模板

直接在 Web 管理页面中选择 Debian 12 并完成下载。

创建 LXC 容器

执行命令创建 LXC 容器:

pct create 201 /var/lib/vz/template/cache/debian-12-standard_12.2-1_amd64.tar.zst --rootfs local-lvm:20 --ostype debian --hostname casaos --arch amd64 --password password --cores 2 --memory 2048 --swap 0 -net0 bridge=vmbr0,name=eth0 --features nesting=1 --unprivileged 0

安装完毕后启动容器。

安装 CasaOS

进入容器 Shell,键入命令 wget -qO- https://get.casaos.io | bash 开始安装

但是安装完报错:casaos-local-storage.service failed

查询发现在 GitHub 中有同样的问题,也是在 PVE 8.1 CT 容器环境下

Issue 中有提到可以安装旧版本,然后通过 Web 更新版本到最新即可。

安装旧版本命令:bash <(curl -fsSL https://get.casaos.io/v0.4.4)

安装成功!✌️

配置

打开 LXC 容器配置的 IP 地址即可进入 CasaOS Web页面,依次根据提示创建用户,然后即可进入Dashboard:

点击左上角设置按钮,升级版本到最新:

打开 App Store ,就可以在 CasaOS 中自由地安装需要的应用了。

还可添加第三方软件源,比如下面👇的软件源包含了很多中文应用程序,如迅雷、青龙、微力同步等

https://play.cuse.eu.org/Cp0204-AppStore-Play.zip
https://github.com/Cp0204/CasaOS-AppStore-Play


相关信息

设置硬盘直通

修改 LXC 容器配置:vim /etc/pve/lxc/201.conf(201 为 VMID),增加如下内容:

# 停用容器安全策略
lxc.apparmor.profile: unconfined

查看所需硬盘的 ID 信息

lsblk

ls -al /dev/sd*

# 查看有卷标的磁盘
ls -al /dev/disk/by-label

ls -al /dev/disk/by-id

图中的 8, 65 之类的即为硬盘块设备对应 ID 信息。下面绑定硬盘,继续编辑上面的配置文件:

lxc.cgroup.devices.allow: b 8:32 rwm
lxc.cgroup.devices.allow: b 8:33 rwm
lxc.cgroup.devices.allow: b 8:34 rwm

编辑自动挂载脚本用于容器启动时执行:vim /var/lib/lxc/201/mount-hook.sh

#!/bin/sh
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sdc b 8 32
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sdc1 b 8 33
mknod -m 777 ${LXC_ROOTFS_MOUNT}/dev/sdc2 b 8 34

保存后 chmod +x /var/lib/lxc/201/mount-hook.sh 授予可执行权限。继续编辑 LXC 容器配置:

lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/201/mount-hook.sh

完整的修改内容如下:

lxc.apparmor.profile: unconfined

lxc.cgroup2.devices.allow: b 8:32 rwm
lxc.cgroup2.devices.allow: b 8:33 rwm
lxc.cgroup2.devices.allow: b 8:34 rwm

lxc.autodev: 1
lxc.hook.autodev: /var/lib/lxc/201/mount-hook.sh

挂载宿主机目录到 LXC 容器中
pct set 201 -mp0 /data,mp=/mnt/share
201:LXC 容器的 ID。
-mp
0:挂载点的索引,例如 0、1、2 等。
/data:宿主机上的目录路径。
/mnt/share:要挂载到容器中的目录路径。