macOS虚拟机踩坑记录

最近在研究 flutter,需要在 mac 编译 ios 版测试,所以装了个虚拟机,期间碰到了不少坑,在此记录一下。

flutter 安装

# mac默认没有 homebrew,要安装一下
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
cd [你想要安装flutter的路径]
unzip ~/Downloads/flutter_macos_v1.0.0-stable.zip
echo export PATH="\$PATH:`pwd`/flutter/bin" > ~/.bash_profile
# ios调试所需依赖
brew update
brew install --HEAD usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice
brew install ideviceinstaller
brew install ios-deploy
bash

虚拟机硬盘清理

以前用 HFS+的时候,vmtools 有个命令可以直接清理硬盘空间:

sudo  /Library/Application\ Support/VMware\ Tools/vmware-tools-cli disk shrink  /
bash

但是最近几个版本的 mac 已经切换到 APFS 了,这命令不好使了,直接提示Partition / is not shrinkable,查了下,vmware 官方论坛有人说可以直接用 diskutil 的安全擦除来清理磁盘,试了下果然好使:

diskutil secureErase freespace 0 卷名
bash

一分钟不到就好了,比之前用 vmtools 擦除快得多 之后关闭虚拟机,然后在物理机运行:

vmware-vdiskmanager.exe -d 虚拟磁盘路径 # 整理磁盘碎片
vmware-vdiskmanager.exe -k 虚拟磁盘路径 # 清理磁盘
bash

就可以了,本来 vmware 的 gui 也有个清理磁盘的选项,但是不知道为什么清理不了。

ssh 证书储存

mac 的 ssh 证书密码可以存放在 keychain 上,只要使用ssh-add -K 证书路径然后输入密码就可以了

但是在某个版本后就不支持在重新登陆后自动输入密码了,需要配置一下

处理方法是在~/ssh/config 加入以下参数即可:

Host *
    UseKeychain yes
    AddKeysToAgent yes
ini

ssh 无法连接

配置好 ssh 证书后虽然可以连接上服务器并获取服务器证书信息,但是在握手的时候会提示

packet_write_wait: Connection to w.x.y.z port 22: Broken pipe

查了一下,似乎是vmnat 无法识别 AF21/CS1 DSCP 标志(这标志不知道是啥),所以连接被 RST 了

处理方法是增加 QoS 标志,在~/ssh/config 加入以下参数即可:

Host *
    IPQoS throughput
ini