|
|
本帖最后由 fitnessele 于 2025-8-27 09:53 编辑
本文固件采用h大的固件,其他固件使用这套教程,可能会出奇奇怪怪的问题,自行处理
刷机教程参考:
网心云 OEC/OECT 笔记(1) 拆机刷入Armbian固件:
https://blog.csdn.net/weixin_41463074/article/details/148522217
LXC教程参考
OECT在Armbian下通过LXC运行最新版iStoreOS 保姆级教程:
https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8436490&highlight=lxc
扩容教程参考
https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8417284&highlight=oec%2Bdebian
nano migrate_to_new_partition.sh
编辑migrate_to_new_partition.sh文件 复制进去
- #!/bin/bash
- set -euo pipefail
- # 检查是否以root权限运行
- if [ "$(id -u)" -ne 0 ]; then
- echo "错误:请使用root权限运行此脚本 (sudo $0)"
- exit 1
- fi
- # 显示磁盘信息并让用户选择目标设备
- echo "====== 检测到的磁盘信息 ======"
- lsblk -d -o NAME,SIZE,MODEL | grep -E '^sd'
- echo "=============================="
- read -p "请输入目标磁盘(例如sda,不要加数字):" DISK
- TARGET_DEV="/dev/${DISK}"
- PARTITION="${TARGET_DEV}1"
- # 确认设备
- echo "您选择的磁盘是: ${TARGET_DEV}"
- echo "将创建的分区是: ${PARTITION}"
- read -p "确认继续操作? (y/N) " -n 1 -r
- echo
- if [[ ! $REPLY =~ ^[Yy]$ ]]; then
- echo "操作已取消"
- exit 0
- fi
- # 检查分区是否已存在
- if [ -e "${PARTITION}" ]; then
- read -p "分区${PARTITION}已存在,是否格式化它? (y/N) " -n 1 -r
- echo
- if [[ ! $REPLY =~ ^[Yy]$ ]]; then
- echo "操作已取消"
- exit 0
- fi
- else
- # 创建新分区
- echo "正在创建新分区..."
- (
- echo n # 新建分区
- echo p # 主分区
- echo 1 # 分区号
- echo # 起始扇区(默认)
- echo # 结束扇区(默认,使用全部空间)
- echo w # 写入并退出
- ) | fdisk "${TARGET_DEV}"
- partprobe "${TARGET_DEV}" # 刷新分区表
- sleep 2
- fi
- # 格式化分区为ext4
- echo "正在格式化分区为ext4..."
- mkfs.ext4 -F "${PARTITION}"
- # 创建挂载点并挂载
- echo "正在挂载分区..."
- mkdir -p /mnt/"${DISK}"1
- mount "${PARTITION}" /mnt/"${DISK}"1
- # 复制根文件系统
- echo "正在复制文件系统(这可能需要一段时间)..."
- rsync -aAXv / /mnt/"${DISK}"1 --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}
- # 获取新分区UUID
- echo "获取分区UUID..."
- UUID=$(blkid -s UUID -o value "${PARTITION}")
- echo "新分区UUID: ${UUID}"
- # 更新fstab
- echo "更新fstab文件..."
- sed -i "s|^UUID=.* / ext4|UUID=${UUID} / ext4|g" /mnt/"${DISK}"1/etc/fstab
- # 更新armbianEnv.txt
- if [ -f /boot/armbianEnv.txt ]; then
- echo "更新armbianEnv.txt..."
- sed -i "s|^rootdev=UUID=.*|rootdev=UUID=${UUID}|g" /boot/armbianEnv.txt
- else
- echo "未找到armbianEnv.txt,跳过此步骤"
- fi
- # 更新extlinux.conf
- if [ -f /boot/extlinux/extlinux.conf ]; then
- echo "更新extlinux.conf..."
- sed -i "s|root=UUID=.* |root=UUID=${UUID} |g" /boot/extlinux/extlinux.conf
- else
- echo "未找到extlinux.conf,跳过此步骤"
- fi
- # 完成提示
- echo "所有操作已完成!"
- read -p "是否立即重启系统? (y/N) " -n 1 -r
- echo
- if [[ $REPLY =~ ^[Yy]$ ]]; then
- reboot
- else
- echo "请手动重启系统以应用更改"
- fi
复制代码
PS:这套脚本 我也没试过,AI写的,我看着没什么问题,不放心可以使用上面我参考的扩容教程修改
- #授予权限 执行脚本
- chmod +x migrate_to_new_partition.sh
- ./migrate_to_new_partition.sh
复制代码
安装LXC- # 安装必要组件
- apt update && apt install -y \
- ifupdown2 \
- resolvconf \
- lxc bridge-utils \
- qemu-utils
- # 卸载不需要的传统网络管理器
- apt purge -y ifupdown network-manager netplan.io isc-dhcp-client
- apt autoremove -y
复制代码 网络管理器使用ifupdown2 要卸载传统网络管理器,这两套共存可能会造成抢网络配置,造成网络波动
另外nano /etc/network/interfaces 下面关于 dns-nameservers 的配置 还要在/etc/systemd/resolved.conf这里修改一下
修改宿主机网络配置
- nano /etc/network/interfaces
- # interfaces(5) file used by ifup(8) and ifdown(8)
- # Include files from /etc/network/interfaces.d:
- source /etc/network/interfaces.d/*
- auto lo
- iface lo inet loopback
- auto eth0
- iface eth0 inet manual
- auto vmbr0
- iface vmbr0 inet static
- address 192.168.1.100/24
- gateway 192.168.1.1
- bridge-ports eth0
- bridge-stp off
- bridge-fd 0
- dns-nameservers 192.168.1.1 8.8.8.8
复制代码
改好之后应用网络配置
下载ImmortalWrt镜像包,选择R3S镜像包
https://downloads.immortalwrt.org/snapshots//targets/rockchip/armv8/immortalwrt-rockchip-armv8-friendlyarm_nanopi-r3s-squashfs-sysupgrade.img.gz
上传到/root目录下
制作LXC容器
- gunzip -d immortalwrt-rockchip-armv8-friendlyarm_nanopi-r3s-squashfs-sysupgrade.img.gz #解压文件
- mv immortalwrt-rockchip-armv8-friendlyarm_nanopi-r3s-squashfs-sysupgrade.img openwrt.img #重命名为openwrt.img 方便操作
复制代码- mkdir /mnt/openwrt #创建挂载目录
- modprobe nbd
- qemu-nbd -c /dev/nbd0 -f raw /root/openwrt.img
- lsblk -f /dev/nbd0 #查看名为squashfs的分区,比如nbd0p2
- mount /dev/nbd0p2 /mnt/openwrt
- cd /mnt/openwrt && ls #查看镜像文件是否正确挂载
- tar -czvf /root/openwrt.rootfs.tar.gz * #把镜像打包到tmp目录
- cd /tmp && ls #查看镜像是否正确打包
- umount /mnt/openwrt/
- qemu-nbd -d /dev/nbd0
复制代码
- mkdir /var/lib/lxc/openwrt/rootfs
- tar -zxvf /root/openwrt.rootfs.tar.gz -C /var/lib/lxc/openwrt/rootfs/
复制代码
编辑openwrt lxc启动配置
- # ==================================================
- # LXC 容器配置 - OpenWrt
- # ==================================================
- # --------------------
- # 基础配置
- # --------------------
- lxc.include = /usr/share/lxc/config/common.conf # 引入 LXC 通用配置
- lxc.arch = aarch64 # 容器架构 (ARM64)
- # --------------------
- # 容器特定配置
- # --------------------
- lxc.apparmor.profile = unconfined # 不使用 AppArmor 限制
- lxc.apparmor.allow_nesting = 1 # 允许容器内嵌套 (必要时启用)
- lxc.rootfs.path = dir:/var/lib/lxc/openwrt/rootfs # 容器根文件系统路径
- lxc.uts.name = openwrt # 容器主机名
- lxc.start.auto = 1 # 系统启动时自动启动该容器
- lxc.start.delay = 20 # 容器自启动延迟 (秒),避免同时启动冲突,不开这个lxc开机可能会起不来
- # --------------------
- # 网络配置
- # --------------------
- lxc.net.0.type = veth # 使用 veth 虚拟网卡
- lxc.net.0.link = vmbr0 # 绑定到宿主机网桥 vmbr0
- lxc.net.0.flags = up # 启动时自动启用网络接口
- # --------------------
- # 设备与挂载
- # --------------------
- lxc.cgroup2.devices.allow = c 10:200 rwm # 允许 /dev/net/tun 设备 (TUN/TAP,用于virtual**等)
- lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file # 将宿主机 /dev/net/tun 映射到容器
复制代码- #常用LXC命令
- lxc-ls -f # 查看容器和IP
- lxc-start -n <容器名> # 开机
- lxc-stop -n <容器名> # 关机
- lxc-attach -n <容器名> # 进入终端
复制代码
进入openwrt容器修改网卡地址
更新opkg软件包,自行安装插件。
openwrt安装完成后网络测试下,安装好海淘插件后,就可以将Oect的网关地址修改成openwrt的
安装1panel面板
- bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
复制代码
保存草稿,不小心发布出去了,待后续继续更新。。。
|
评分
-
查看全部评分
|