OpenWrt 固件的更新是比较简单的,直接进入系统->备份与升级菜单项,选择刷写新的固件功能项里的刷写固件按钮,选择并上传更新的固件文件,根据提示选择是否保存配置,点击继续按钮就可以由系统自己动完成固件更新了。
图.1 上传固件并更新
固件的格式可以是磁盘镜像”.img”文件,也可以是镜像文件的”.gz”压缩格式文件。
这个固件文件可以官方发布固件文件,也可以是 OpenWrt 系统的磁盘镜像。事实上刷写固件的过程可以理解为两个磁盘的对拷过程,刷写固件就是将固件文件保存的磁盘镜像完整的克隆到实际的磁盘中。这就给我们创建并刷写适合自己使用的固件创造了条件,在不需要使用编译工具来编译固件的前提下,就可以生成一个功能齐全的固件。
本文就以 x86_64 架构为例,讲解如何使用 VMware 虚拟机来制作专用 OpenWrt 固件。
1] 创建 OpenWrt 虚拟机
安装好 VMware 虚拟机软件,下载适合于 VMware 主机 CPU 架构的 OpenWrt 官方固件,就可以根据这个固件文件来创建 OpenWrt 的虚拟机了。
首先解压固件文件,就可以得到 .img 的磁盘镜像文件。虽然这个镜像文件不能被 VMware 直接使用,但是可以使用相关工具软件将镜像文件转换成为 VMware 使用 .vmdk 虚拟磁盘文件。
对于 Windows 系统,可以使用 StarWind V2V Converter 工具将镜像文件与虚拟磁盘文件互转。
而 Linux 系统可以使用 qemu-img 工具进行转换:
/* 安装 qemu-img 工具 */ $ sudo apt install qemu-utils //基于Debian/Ubuntu 的发行版 $ sudo yum install qemu-img //基于RHEL/CentOS 的发行版 /* 转换成虚拟磁盘文件 */ $ qemu-img convert -f raw -O vmdk /path/to/your/image.img /path/to/your/output.vmdk
示例中的参数说明如下:
- -f raw:指定输入文件的格式是原始的(raw)镜像文件,如果镜像文件是其他格式,需要相应调整此参数
- -O vmdk:指定输出文件的格式为VMDK
- /path/to/your/image.img:为镜像 .img 文件的实际路径
- /path/to/your/output.vmdk:指定转换后要生成的 .vmdk 文件的路径和名称
命令执行完成后,就可以生成可以供 VMware 虚拟机使用的虚拟磁盘文件。
使用 VMware 创建一个虚拟机,CPU 和内存根据需求设置好,网络接口可以选择NAT 模式,也可以选择桥接模式,磁盘使用之前生成的 vmdk 虚拟磁盘文件,就可以成功创建一个 OpenWrt 主机。
2] 安装 OpenWrt 软件包
OpenWrt 虚拟机创建完成后,就可以启动该主机,并通过 OpenWrt 管理界面安装软件包了。
选择系统->软件包菜单项,就可以安装 OpenWrt 的软件包了。点击”更新列表”,就会更新软件库,然后再在下面的软件列表中选择相应的软件包进行安装即可。
当然,也可以通过”上传软件包…”按钮来安装官方软件库以外的第三方软件包了,例如科学上网插件,代理客户端等。
如果网络环境不方便从 OpenWrt 官方软件库下载软件包,也可以点击”配置 opkg”按钮来配置 OpenWrt 软件库为国内软件源。
图.2 OpenWrt opkg 软件源配置
删除或注释(行前加#号)”/etc/opkg/distfeeds.conf”部分的内容,然后添加中科大的 OpenWrt 的软件源内容如下:
src/gz openwrt_core https://mirrors.ustc.edu.cn/openwrt/releases/24.10.3/targets/x86/64/packages src/gz openwrt_base https://mirrors.ustc.edu.cn/openwrt/releases/24.10.3/packages/x86_64/base src/gz openwrt_kmods https://mirrors.ustc.edu.cn/openwrt/releases/24.10.3/targets/x86/64/kmods/6.6.104-1-3505295dd1edf1c0eda57c9ce372bf57 src/gz openwrt_luci https://mirrors.ustc.edu.cn/openwrt/releases/24.10.3/packages/x86_64/luci src/gz openwrt_packages https://mirrors.ustc.edu.cn/openwrt/releases/24.10.3/packages/x86_64/packages src/gz openwrt_routing https://mirrors.ustc.edu.cn/openwrt/releases/24.10.3/packages/x86_64/routing src/gz openwrt_telephony https://mirrors.ustc.edu.cn/openwrt/releases/24.10.3/packages/x86_64/telephony
注意标红部分为 OpenWrt 发行版的版本号,要与当前 OpenWrt 的版本一致,否则会引起错误。
文件中的内容可以根据实际情况自行修正,可以先浏览”https://mirrors.ustc.edu.cn/openwrt/releases/”来查看国内源的实际URL,然后再修改为正确值。
所有软件包安装完成后,就制作完成了一个适合使用的 VMware 虚拟机。通过这个虚拟机,就可以制作 OpenWrt 镜像了。
3] 制作 OpenWrt 镜像
使用 VMware 的导出工具,可以将虚拟机导出成虚拟磁盘文件。
使用 VMware “导出为 OVF”菜单项,就可以将 OpenWrt 虚拟机导出成为虚拟磁盘文件,然后将这个文件使用 StarWind V2V Converter 转换为 .img 文件,Linux 系统同样使用 qemu-img 工具通过如下命令将虚拟磁盘文件转换为 .img 文件:
$ qemu-img convert -f vmdk -O raw /path/to/your/source.vmdk /path/to/your/output.img
这样,就可以得到一个完全功能的自制 OpenWrt 镜像文件。这个 .img 文件是可以通过 LuCI 界面直接刷写进主机的,但是刷写过程会上传固件并保存在主机的存储空间中,OpenWrt 主机如果磁盘空间不足的话可能会刷写失败。于是可以使用 Gzip 工具进行压缩:
$ gizp -kv output.img
命令执行完成后,就可以生成一个”output.img.gz”压缩文件,我们也可以上传这个压缩文件来进行固件刷写。
通过 VMware 虚拟机的中转,我们就可以方便的制作适合各种应用场景的 OpenWrt 固件,并且通过管理界面即可直接刷写,不再需要使用其他工具。