记录下pve下lxc容器安装openwrt

更新几种获取rootfs方法:

我看到的发布的op固件都是两个分区的镜像文件,如:(这里是斐讯n1的固件,和解x86的一样)

# fdisk -l openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img

Disk openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img: 900 MiB, 943718400 bytes, 1843200 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x39a4b5e7

Device                                                Boot  Start    End Sectors  Size Id Type

openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img1        8192  532479  524288  256M  c W95 FAT32 (LBA)

openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img2      532480 1843199 1310720  640M 83 Linux

第一个是boot分区,第二个就是根目录了,我们要提取的就是第二分区。

######################### 挂载的方法 ###################################

获取第二分区的两种挂载方法:

    1,mount openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img openwrt \

         -o loop,offset=$((532480*512))

        这样第二分区就被挂载到openwrt目录了,offset是fdisk -l 显示的第二分区的偏移:

     (偏移字节值 = 开始扇区 * 扇区大小)。

    2,mount $(losetup -Pf --show  openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img )p2 openwrt

        $(losetup....)这个子命令会把op固件挂载到某个/dev/loop上,选项-f:自动找到空闲的loop设备。

         选项--show 会返回挂载的具体设备, 比如: /dev/loop0 。

        其中选项 -P:  --partscan create a partitioned loop device ,挂载成分区的loop设备,比如这里会分成两区

        /dev/loop0p1;  /dev/loop0p2。

        所以$(losetup -Pf --show openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img ) 会在标准输出打印

        出挂载的设备比如:/dev/loop0 ,加上括号后边的p2就是字符串: /dev/loop0p2 。子命令替换后就是:

        mount  /dev/loop0p2  openwrt;

第二种方法适合写成脚本。

############################# unsquashfs 解包 #########################


命令: unsquashfs -o $((532480*512))   -d openwrt   \

            openwrt_s905d_n1_R21.8.6_k5.12.15-flippy-61+-plus.img


         : 选项 -o[ffset] skip at start of

         : -o $((532480*512))  :offset是fdisk -l 显示的第二分区的偏移:(偏移字节值 = 开始扇区 * 扇区大小)。

用这个命令主要是有的系统没有权限挂载,还有个原因是有的squashfs 包是被压缩的,没有办法挂载

只能解包了。

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 老旧的内容 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

纯粹记录下省的下次忘了。    安装方法是用的:   [固件发布] PVE使用的LXC容器镜像openwrt-19.07.1-x86-64  ,但是没有用这里的openwrt。

用的openwrt来自: [2020-11-4]Openwrt 在线IPK随心安装 专治强迫症 超全!

    我是在pve下lxc容器安装的debian里边操作的,直接在pve下应该一样,但是为了保持pve干净还是安装个容器用吧

    具体:

            1,新建目录:mkdir openwrt 进入cd openwrt 下载

图片中选中的镜像:wget https://openwrt.download/R20.11. ... ashfs-rootfs.img.gz

            2,解压 gzip  openwrt-x86-64-generic-squashfs-rootfs.img.gz

            3,下载 unsquashfs:  sudo apt install squashfs-tools

            4,   解包 unsquashfs openwrt-x86-64-generic-squashfs-rootfs.img  会解压到squashfs-root目录进入 cd squashfs-root

            5,   打包rootfs  : tar zcf ../openwrt.rootfs.tar.gz *   这样在openwrt目录就会得到openwrt.rootfs.tar.gz 就是所谓的lxc模板了(这样的打包参数我测试可以用,有啥不妥的请指教)。

            6, 放到pve模板目录sudo cp   openwrt.rootfs.tar.gz  /var/lib/vz/template/cache 刷新下pve管理网页,应该就能看到这个模板了。

            7, 网页上新建容器无法成功, 在pve控制台新建容器:

pct create 201 local:vztmpl/openwrt.rootfs.tar.gz --rootfs local-lvm:0.5 --ostype unmanaged --hostname OpenWrt --arch amd64 --cores 2 --memory 256 --swap 0 -net0 bridge=vmbr0,name=eth0

复制代码

           8,“其它说明:关于UDP转发不可用的问题,需要PVE系统加载tproxy模块。在PVE系统下执行改命令后重启” :echo 'xt_TPROXY' > /etc/modules-load.d/tproxy.conf

     只要大神发布有rootfs镜像文件,我们就可以用1-6步骤制作自己的模板,当然如果是发布的*.rootfs.gar.gz我们就可以省下1-6的步骤了。

     我就安装了xx作为旁路由来用,其它的没测试,所以有啥bug没有也不清楚。

再次声明:纯粹记录,有啥不妥的地方请大神指教。

你可能感兴趣的:(记录下pve下lxc容器安装openwrt)