更新几种获取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]
: -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没有也不清楚。
再次声明:纯粹记录,有啥不妥的地方请大神指教。