一直使用XX-Net 去域外网站查询资料,不过有一段时间很不友好。折腾了半天,Mac 上开启了IPv6,并实现了开机自动运行脚本。
github上两个有用的issues:
手动安装Miredo、tuntaposx
//这个方案需要关闭Mac的SIP,具体命令:
1.开机时,按住 command+R 进入到恢复模式
2. 恢复模式下,终端输入 csrutil disable
3. 重启,终端输入 reboot
4.开机后安装 miredo、tuntaposx
但是我这里做了一遍之后,发现miredo一直是黄灯。无法正常工作~~~
//这个方案不需要关闭Mac 的SIP
//具体命令issue里说的很完整,这里看下下面这个脚本。
#!/bin/bash
SIGNED_TUN_PATH=/Applications/Tunnelblick.app/Contents/Resources/
cd $SIGNED_TUN_PATH
sudo kextload tun-signed.kext
sudo miredo
这个方案解决了问题,但是我更想做到开机自启动。
搜罗了一圈,发现大概有两个方案。
1.系统提供的 root运行方案
sudo defaults write com.apple.loginwindow LoginHook /path/to/script
//path/to/script 就是你的脚本路径
2.手动配置登录项
a.设置脚本默认打开方式为终端,记得要更改权限777,先不要勾选隐藏。
b.系统偏好设置-用户群组-当前登录用户-登录项点+号按钮,这里记得添加的是sh脚本文件。
上面的步骤做完以后,开机运行一下会发现脚本是执行了,可是需要root密码。这个问题的解决,可以使用expect。方法如下:
安装expect
//终端输入
brew install expect
...
...
//成功安装后,创建一个脚本文件(注意这是第二个脚本了),并且要和之前的那个脚本放在同一个目录下。
touch autoStart.sh
//更改权限
sudo chmod 777 autoStart.sh
...
//脚本内容如下
#!/usr/bin/expect
#设置密码的值
set password "你的root密码"
#expect方式: 进入脚本所在的路径
cd [file dirname $argv0]
#shell方式: 进入脚本所在的路径
#$currentpath=$(cd "$(dirname "$0")";pwd)
#cd $currentpath
#执行脚本 如果没有上一步,这里脚本需要加绝对路径才能正常执行
spawn sudo ./之前配置的脚本文件名,如(config.sh)
#expect对通过spawn执行的shell脚本的返回进行判断,是否包含Password字符串
expect "Password"
#如果expect监测到了包含的字符串,将输入send中的内容,\n相当于回车
send "$password\n"
#退出expect返回终端,可以继续输入,否则将一直在expect不能退出到终端
interact
重要的一点,重要的一点,重要的一点!!!将之前在登录项里配置的脚本文件替换成,autoStart.sh文件。
Done...