esxi虚拟机安装istoreos软路由模块定制系统

集成homeassistan、zerotier、openlist等插件

Posted by 浅唱 on September 27, 2025

前言

了解到有定制版的 istoreos 固件,便于模块操作,安装一看里面还支持 homeassistan、zerotier、openlist 等插件,正好将目前分散的服务集成起来。 且 openwrt 不知道是否是驱动的原因,高下载负载时会断连,istoreos 固件据说集成了官方驱动,试下可否解决问题。

下载固件

Siriling 由于使用 exsi,故下载了 vmdk 虚拟硬盘便于扩容和转换安装。

扩展容量

在之前的安装过程中,默认 2G 的空间不足以安装 homeassistan,所以扩容到 4G 进行尝试安装。 在 Vmware Workstation 进行新建虚拟机,选择磁盘文件。
扩展磁盘到 4G

新建虚拟机

删除无用硬件后点击添加磁盘,选择现有磁盘 关闭安全引导,否则无法启动系统

磁盘最好最后添加,新建好虚拟机后将磁盘文件上传到新建的虚拟机文件夹中,避免混乱。 配置好后打开电源 打开电源失败 将从属改为主要试试

配置静态网络地址

vi etc/config/network

修改 dhcp 为 static
静态配置 ipaddr 地址 子网掩码

config interface 'lan'
    option device 'br-lan'
    option proto 'static'
    option ipaddr '192.168.10.6'
    option netmask '255.255.255.0'
    option ip6assign '60'

重启 启动后在图形界面设置网关,DNS(网关 DNS 不响应,不知道为什么,故将 DNS 设置为 8.8.8.8) 删除全局网络设置的 IPV6 保存应用

扩容分区

回到首页看到磁盘容量为 4G,分区容量还是 2.4G,参照上次折腾的帖子进行分区扩容,重要操作之前先打快照(快照点 1)。

opkg update
opkg install cfdisk
cfdisk

扩容 sda3,先排序 soft-resize-write-quit。

tune2fs -O^resize_inode /dev/sda2 #删除GPT块
/etc/init.d/dockerd stop
mount -o remount,ro /dev/sda3
e2fsck -f /dev/sda3
  e2fsck 1.46.5 (30-Dec-2021)
  Warning!  /dev/sda3 is mounted.
  Filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks
  is 255; should be zero.  Fix<y>? yes
  Resize_inode not enabled, but the resize inode is non-zero.  Clear<y>? yes
  Pass 1: Checking inodes, blocks, and sizes
  Pass 2: Checking directory structure
  Pass 3: Checking directory connectivity
  Pass 4: Checking reference counts
  Pass 5: Checking group summary information
  Block bitmap differences:  -(2--256) -8486 -(32770--33024)
  Fix<y>? yes
  Free blocks count wrong for group #0 (24094, counted=24350).
  Fix<y>? yes
  Free blocks count wrong for group #1 (32427, counted=32682).
  Fix<y>? yes
  Free blocks count wrong for group #3 (32511, counted=32766).
  Fix<y>? yes
  Free blocks count wrong for group #5 (32511, counted=32766).
  Fix<y>? yes
  Free blocks count wrong for group #7 (32511, counted=32766).
  Fix<y>? yes
  Free blocks count wrong for group #9 (32511, counted=32766).
  Fix<y>? yes
  Free blocks count wrong (497623, counted=499154).
  Fix ('a' enables 'yes' to all) <y>? yes

  etc: ***** FILE SYSTEM WAS MODIFIED *****
  etc: 206/131072 files (0.5% non-contiguous), 25134/524288 blocks

remount 之前要先停止 docker 服务,否则提示设备正忙。
重启之后查看 df

操作之后硬盘挂载不上了,完犊子。

回退快照再次扩容

参考知乎的文章,用 parted 进行扩容操作。

parted
print
resizepart
输入4096M(这个程序4G=4000M)
quit
resize2fs -p /dev/sda3
df -h

???扩容竟如此简单???真令人无语,Openwrt 中弄得要死要活(快照点 2)

设置 Docker 代理

参考恩山论坛的记录

  1. vi /etc/init.d/dockerd
  2. 找到 start_service()
  3. 在 procd_set_param stderr 1 这一行下面添加如下地址

        procd_set_param env HTTP_PROXY=http://192.168.10.234:7897
        procd_set_param env HTTPS_PROXY=http://192.168.10.234:7897
    
    http 地址为代理 http 接口地址。
    

  4. 保存退出并重启/etc/init.d/dockerd restart
  5. 操作完成之后记得注释并重启

设置全局代理

export http_proxy="http://192.168.10.234:7897"
export https_proxy="http://192.168.10.234:7897"

安装 homeassistant

界面安装失败,故复制 shell 命令到终端进行安装

is-opkg install 'app-meta-homeassistant'

服务中继续安装 docker,因为设置好了 Docker 代理,所以这步不会出现问题

发现缺少默认路由

这时候系统启动不了,回到快照点 2,将网关删除,重新设置了一下,再次安装 homeassistant
再次安装成功启动系统,homeassistant 也正常运行,扩容 4G 是刚好够安装 homeassistant 的最低需要容量 关机打快照点 3

直通模块配置模块上网。

按照之前的直通操作配置硬件直通

参考知乎文章

  1. 启用 exsi 的 SSH 功能

  2. 查看 USB 设备的 VID 和 PID 号

  3. 进入虚拟机设置添加参数

    usb.genreic.allowHID TRUE
    usb.quirks.device0   0x2c7c:0x0800 allow
    
    usb.quirks.device1   0x2c7c:0x0800 allow # 多个设备
    

  4. 修改 exsi 的/etc/vmware/config 配置

    末尾新增行

    usb.quirks.device0 = "0x2c7c:0x0800 allow"
    usb.quirks.device1 = "0x2c7c:0x0800 allow" #多个设备
    
  5. 修改启动引导文件/bootbank/boot.cfg

    ESXi 重启后还会再次获取设备的控制权,因此需要在 ESXi 启动引导中禁用 VMkernel 对上述设备的控制权。

    在“kernelopt=”行末尾添加 : 一个设备

    CONFIG./USB/quirks=0x2c7c:0x0800::0xffff:UQ_KBD_IGNORE
    

    两个设备

    CONFIG./USB/quirks=0x046d:0xc534::0xffff:UQ_KBD_IGNORE:0x046d:0xc52f::0xffff:UQ_KBD_IGNORE
    

    以此类推,添加第三个 USB 设备则在末尾追加:

    :0x\***\*:0x\*\***::0xffff:UQ_KBD_IGNORE
    

    注意 CONFIG 前有空格

  6. 重启 exsi

  7. 添加 USB 设备 在虚拟机设置中添加需要直通的 USB 设备,不可以热拔插,所以已经启动的虚拟机需要关机

  8. 启动虚拟机

之前操作过的就不需要再次操作了,只需要操作 3 和 7
启动虚拟机 没有找到模组,重新拔插模组,点击模组扫描,成功找到模组 模组配置又出现异常,退回快照 3 发现又正常…………,再次将模组直通到虚拟机 原来是这里没有找到 cdc-wdm0 设备,此时/dev 目录下有 ttyUSB0-3 共 4 个设备
移动网络接口无法选择,所以出现 nil 空变量,qmi 模式实在识别不到没招。

切换网络模式

qmi 模式创建不出 cdc-wdm0 设备,切换其他模式尝试 除 QMI 模式以外,其他均会直接产生一个设备,要么 wwan0 要么 usb0,成功获取到 IP 地址,牛逼。 切换网络模式最好拔插一下模组,重启一下 iStoreOS 系统

收尾工作

取消网关和 DNS 开启 DHCP 注释 Docker 代理

vi /etc/init.d/dockerd

#procd_set_param env HTTP_PROXY=http://192.168.10.234:7897
#procd_set_param env HTTPS_PROXY=http://192.168.10.234:7897

/etc/init.d/dockerd restart

不分配 DHCP

设置完之后 DHCP 无效不分配 IP
参考Github 打开 etc/config/dhcp 发现 dhcpv4 ‘disabled’,后来直接把 ‘disable’ 改成 ‘server’ ,就可以使用了,真无语

配置 zerotier

在 iStoreOS 商店下载 zerotier,运行一次替换/etc/config/zero/planet 文件 不需要添加网络接口,不需要配置防火墙,这个跟 openwrt 里面 opkg 安装的官方的 zerotier 不太一样,如果是官方的参考之前的文章,测试下是否需要放通防火墙,接收和转发
这里固件默认接收是允许,转发是拒绝,测试可通。
管理页面放通,设置好路由 192.168.10.0/24 <- 10.10.1.xx

带宽监控

下载了个带宽监控,似乎开启代理的情况下无法统计,没用。 营业厅查询流量已经跑了 20G 了,这里显示还是 1G,根本没用。

enable 模块

设置好短信功能,选择发送端口为/dev/ttyUSB3
modemmanager 启用 mmcli -m 0 -e方能接收短信来电
sms-tools 接收短信似乎会乱码,发发短信指令还可以 用 modemmanager 进行 qmi 模式连接的时候就会自动 enable,其他模式似乎创建设备的方式,联网的同时 modem 还是 disabled
顺便安装 dbus-utils软件包 获取dbus-monitor

opkg install dbus-utils

Installing dbus-utils (1.13.18-12) to root...
Downloading https://mirrors.cernet.edu.cn/openwrt/releases/22.03.7/packages/x86_64/packages/dbus-utils_1.13.18-12_x86_64.ipk
Configuring dbus-utils

chmod +x ./modem_event_listener_iStoreOS.sh
cat ./modem_event_listener_iStoreOS.sh



#!/bin/sh
# modemmanager 通过 dbus-utils 监听短信来电并转发飞书
FEISHU_WEBHOOK="https://open.feishu.cn/open-apis/bot/v2/hook/f197a3f1-fc87-4870-8a49-ff7c925d2def"
send_feishu_msg() {
  local text="$1"
  local cmd="wget -O- --no-check-certificate --header=\"Content-Type: application/json\" \
  --post-data='{\"msg_type\":\"text\",\"content\":{\"text\":\"${text}\"}}' \
  \"$FEISHU_WEBHOOK\""

  # 输出原始命令到文件
  echo "$cmd" >> /tmp/wget.log

  # 执行命令
  eval "$cmd" >> /tmp/wget_log.log 2>&1
}
get_modem_number() {
  mmcli -L | grep -o '/Modem/[0-9]\+' | grep -o '[0-9]\+' | head -n 1
}
# 监听 ModemManager DBus 信号,过滤 Messaging 和 Voice 接口
(dbus-monitor --system "type='signal',sender='org.freedesktop.ModemManager1'" | while read -r line; do

# 来电事件(Voice Call Added)
echo "$line" | grep "signal time=" | grep "interface=org.freedesktop.ModemManager1.Modem.Voice" | grep "member=CallAdded" >/dev/null && {
  # 查询所有活动通话
  call_path=$(mmcli -m "$(get_modem_number)" --voice-list-calls | grep "(ringing-in)" | awk '{print $1}' | head -n1)
  call_info=$(mmcli -o "$call_path" --output-keyvalue)
  state=$(echo "$call_info" | grep 'call.properties.state-reason' | awk -F': ' '{print $2}' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
  if [ "$state" = "incoming-new" ]; then
  time=$(date "+%Y-%m-%d %H:%M:%S")
  number=$(echo "$call_info" | grep 'call.properties.number' | awk -F': ' '{print $2}' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
  text="【来电】\n时间: $time\n号码: $number\n状态: $state"
  send_feishu_msg "$text"
  else
  echo "状态不匹配: $state"
  fi
}
  # --- 短信处理:监听 PropertiesChanged ---
echo "$line" grep "signal time=" | grep	"interface=org.freedesktop.ModemManager1.Modem.Messaging" | grep "member=Added" >/dev/null && {
  # 取最新received短信路径
  sms_path=$(mmcli -m "$(get_modem_number)" --messaging-list-sms | grep receiv | head	-n1 | awk '{print $1}')
  if [ -n "$sms_path" ]; then
  until [ "$(mmcli -s "$sms_path" --output-keyvalue | grep 'sms.properties.state' | awk -F': ' '{print $2}' | tr -d ' ')" = "received" ]; do
  sleep 1
  done
  sms_info=$(mmcli -s "$sms_path" --output-keyvalue)
  from=$(echo "$sms_info" | grep 'sms.content.number' | awk -F': ' '{print $2}')
  content=$(echo "$sms_info" | grep 'sms.content.text' | head -n1 | awk -F': ' '{print $2}')
  decoded_content=$(echo -e "$(echo "$content" | sed 's/\\\\/\\/g')")
  sent=$(echo "$sms_info" | grep 'sms.properties.timestamp' | awk -F': ' '{print $2}')
  json_text=$(printf '%s' "$decoded_content" | tr -d '\r' | sed ':a;N;$!ba;s/\n/\\n/g')
  text="【短信】\n发件人: $from\n时间: $sent\n内容: $json_text"
  send_feishu_msg "$text"
  fi
}
done) &

设置启动项 sleep 15 mmcli -m 0 -e #enable modemmanager /root/modem_event_listener_iStoreOS.sh & #监听短信和来电转发到飞书

断连

在测试的过程中发现 openwrt 下的 qmi 模式 在高下载负载时百分百断连

短信

不需要通过 modemmanager 执行指令,所以不再需要修改日志等级为 DEBUG,但需要留意短信条数 127 条满了可能无法收到,可以通过 sms-tools 查看并删除。

致谢

siriling