背景
目前家里有两台不用的旧主机,平时没事在家里折腾这两台机器。经常换装各种系统。最早是将镜像刷入u盘作为启动盘,这样需要重复装系统就特别麻烦。后来用了ventoy以后一个U盘可以放多个系统镜像,还能做口袋系统(SystemToGo)。最近看到ventoy的作者发布了iventoy提供了一种简单易用的网络启动的方法,就想着在家里的网关上安装iventoy作为PEX服务器。以后重装系统,进PE都不需要U盘了。
尝试按官网方式安装(失败了)
-
下载官网tar包
-
解压
-
运行启动脚本
存在问题:
openwrt基于busybox,存在以下问题
-
其内部命令相比debian、RHL等发行版要精简很多,导致脚本(iventoy.sh)无法运行(可修改启动脚本解决)
-
缺少相关类库,导致二进制文件(lib/iventoy)也无法执行
错误:lib/iventoy not found,但是明明是有这个文件的,通过搜索引擎检索发现这种问题可以通过ldd命令去调试
如上图,通过ldd lib/iventoy可以发现报了很多错,通过各种搜索发现问题都指向没有类库glibc,而openwrt使用的是muslc,而安装glibc非常麻烦,并且也不建议这么做,因为openwrt本来就是为嵌入式设备设计的,加了会导致系统变大。
到这里就失败了,然后就想到了能否做成Docker镜像来运行,首先就是到hub.docker.com和github上去搜索是否有现成的镜像,结果来真有,详细步骤参考后文。
使用docker镜像安装(成功了)
推荐镜像:ziggyds/iventoy,该作者的镜像通过Github Actions自动更新
参考 docker-compose.yml
version: '3.9' services: iventoy: image: ziggyds/iventoy:latest container_name: iventoy restart: always privileged: true #must be true network_mode: host volumes: - /data/sda/packages/SystemImages:/app/iso - ./config:/app/data - ./logs:/app/log environment: - AUTO_START_PXE=true # optional, true by default
启动:docker compose up -d
这里直接启动会遇到问题,因为我们把data目录映射到了容器外面,如果不映射那么配置会随着容器的销毁而销毁,因此我们需要把单独下载的linux安装包对应文件拷贝到映射配置目录即可。
也可以通过docker命令来实现
# 先移除容器 docker compose down # 复制容器data目录的文件到你映射的配置目录 docker cp iventoy:/app/data ./config # 重新启动 docker compose up -d
使用外部dhcp-服务器(网关的DHCP)
我的openwrt系统是网关也是nas,本机已经存在一个hdcp服务器了,所以参考官方文档配置外部dhcp服务器即可。
-
登录iventoy控制台,在【参数配置】中设置【DHCP 服务器模式】为External
-
在openwrt中配置PXE启动选项
对比ventoy
根据我的实际使用经验来看,iventoy不能替代ventoy,原因主要有以下两点
-
不支持SystemToGo,无盘系统启动好像也不行(没有足够资料供我研究)
-
不是所有的镜像都支持网络启动。目前感觉是只有支持legacy模式的镜像才能通过iventoy启动,另外WIMBOOT也不支持