本文描述了如何将x86-64的OpenWrt镜像运行在VirtualBox虚拟机
VBoxManage convertfromraw --format VDI lede-x86-64-combined-squashfs.img lede-x86-64-combined-squashfs.vdi (在 VB 5.1.10 debian8 上测试可以用,但是lede-x86-64-combined-squashfs.img镜像看起来不能用,因为是只读的)
如果你看到类似右边的错误:VBoxManage: error: VD: The given disk size 19444018 is not aligned on a sector boundary (512 bytes)
VBoxManage: error: Error code VERR_VD_INVALID_SIZE at /Users/vbox/tinderbox/5.1-mac-rel/src/VBox/Storage/VD.cpp(7002) in function int VDCreateBase(PVBOXHDD, const char *, const char *, uint64_t, unsigned int, const char *, PCVDGEOMETRY, PCVDGEOMETRY, PCRTUUID, unsigned int, PVDINTERFACE, PVDINTERFACE)
VBoxManage: error: Cannot create the disk image “lede.vdi”: VERR_VD_INVALID_SIZE
你可以重新整合镜像,dd if=lede-x86-64-combined-squashfs.img of=lede.img bs=128000 conv=sync 整合后的镜像, 再用 VBoxManage convertfromraw 工具转换.
你也可以自己编译(Target System → x86-64 and Target Images → Build VirtualBox image files). 首先需要启用ext4.
教程和截图来自 Virtualbox 5.1.8 Linux 主机, Windows 或者 MacOS 主机上大同小异( 比如菜单栏会)同 但是 Virtualbox 界面和按键是一样的。
打开VirtualBox,然后点击 新建(New) 来新建一个虚拟机(VM)
给虚拟机设置 名字(Name), 类型(Type) 选择 Linux , 版本(Version) 选择 Linux 2.6 / 3.x / 4.x (64-bit) , 点击 下一步(Next).
LEDE 工作需要的内存(RAM)比推荐的少的很多,128 MiB 就已经足够.
选择 使用已有的虚拟硬盘文件(Use an existing hard disk file), 点击文件(file) 图标来打开虚拟介质管理器(Virtual Media Manager, 点击添加(Add) 来选择你的.vdi 文件. 点击 创建(Create)即可完成创建.
这里推荐,在把镜像文件添加到VirtualBox前,把镜像文件放在一个永久存储的位置。如果你之后移动了文件, VB 将不会找到,并且会在下次启动时报告这个问题。但是不用担心,VB将会告诉你如何再次链接这个虚拟硬盘文件。
本部分将会手动设置网络配置.
你将通过本教程设置:
首先我们需要确认是否有一个仅主机(Host-only) 网络适配器,并且正确配置
点击 文件(File) → 偏好设置(Preferences) → 网络(Network)
点击仅主机(Host-only)网络标签,如果没有vboxnet0 选项,点击 窗口右边的 + 图标来添加.
选择 vboxnet0 选项, 点击右边那个螺丝刀的图标来打开设置.
IPv4 地址(Address) 设置为 192.168.56.1, IPv4 网络掩码(Network Mask) 设置为 255.255.255.0, IPv6 地址(Address) 为空, IPv6 网络掩码(Network Mask) 为 0
(可选) 如果你想让虚拟机获得动态地址,可以像截图中的那样,设置 DHCP 服务器, 但是对于本教程,不需要在虚拟机本身设置静态地址
按 OK 保存并关闭,然后再次返回 Virtualbox 管理器界面.
因为 LEDE 的限制, 在虚拟机的终端屏幕上,输入源设置为US,所以你的一些按键不会打印出正确的符号.
同样, 由于您所看到的是一个裸机终端,而不是一个ssh程序(Putty / Kitty / whatever)或终端仿真器程序, 所以你不能往里面复制-粘贴文本.
别担心, 大多数配置会在你连接到SSH(remote terminal)后进行,所以不会有不能复制粘贴的问题.
这是一份 US 键盘布局,你可以查看以比对出你应该在你的键盘上按的按键.
root@lede:~# uci show network network.loopback=interface network.loopback.ifname='lo' network.loopback.proto='static' network.loopback.ipaddr='127.0.0.1' network.loopback.netmask='255.0.0.0' network.globals=globals network.globals.ula_prefix='fd1b:e541:8f1a::/48' network.lan=interface network.lan.type='bridge' network.lan.ifname='eth0' network.lan.proto='static' network.lan.netmask='255.255.255.0' network.lan.ip6assign='60' network.lan.ipaddr='192.168.56.2' network.wan=interface network.wan.ifname='eth1' network.wan.proto='dhcp' network.wan6=interface network.wan6.ifname='eth1' network.wan6.proto='dhcpv6'
uci batch <<EOF set network.mng=interface set network.mng.type='bridge' set network.mng.proto='static' set network.mng.netmask='255.255.255.0' set network.mng.ifname='eth0' set network.mng.ipaddr='192.168.56.2' delete network.lan delete network.wan6 set network.wan=interface set network.wan.ifname='eth1' set network.wan.proto='dhcp' EOF
root@lede:~# uci changes network.mng='interface' network.mng.type='bridge' network.mng.proto='static' network.mng.netmask='255.255.255.0' network.mng.ifname='eth0' network.mng.ipaddr='192.168.56.2' -network.lan -network.wan6 network.wan='interface'
uci batch <<EOF set network.lan=interface set network.lan.ifname='eth2' set network.lan.proto='dhcp' EOF uci commit
如果你有更多的需求,你可以阅读文档来设置, 或是通过 luci.