解决 wsl2 ip 的问题

解决问题最简单粗暴的方法就是解决提出问题的人,但是我不能解决我自己,哈哈
前面 wsl1 用得挺好的,但是 vscode 推了好几次 wsl2,仔细研究了下觉得,问题应该不大,那就升级了
升级完用着用着发现,这个 ip 是个大问题,试过修改交换机为 nat,但是重启后又回去了,搞的有时候网络连接没有启用 ipv4,神奇
行,那就想办法把 ip 更新到 hosts,试过 https://github.com/shayne/go-wsl2-host 不起作用,没辙那就继续折腾
分析下问题,就是获取到 wsl2 的 ip,然后更新到 hosts 里,然后想办法把这个动作搞成 wsl2 一启动就触发,折腾了好几天,找到了最佳实践

$hostname = "wsl.dev"

# find ip of eth0
$ifconfig = (wsl -- ip -4 addr show eth0)
$ipPattern = "((\d+\.?){4})"
$ip = ([regex]"inet $ipPattern").Match($ifconfig).Groups[1].Value
if (-not $ip) {
    exit
}
Write-Host $ip

$hostsPath = "$env:windir/system32/drivers/etc/hosts"

$hosts = (Get-Content -Path $hostsPath -Raw -ErrorAction Ignore)
if ($null -eq $hosts) {
    $hosts = ""
}
$hosts = $hosts.Trim()

# update or add wsl ip
$find = "$ipPattern\s+$hostname"
$entry = "$ip $hostname"
$found = $hosts -match $find
if ($found) {
    $old_wsl_ip = $matches[0] -replace " $hostname", ''
    $hosts = $hosts -replace $old_wsl_ip, $ip
} else {
    $hosts = "$hosts`n$entry".Trim()
}

try {
    $temp = "$hostsPath.new"
    New-Item -Path $temp -ItemType File -Force | Out-Null
    Set-Content -Path $temp $hosts

    Move-Item -Path $temp -Destination $hostsPath -Force
} catch {
    Write-Error "cannot update wsl ip"
}

复制上面的内容保存为 wslhost.ps1 ,然后手动关闭下wsl

wsl --shutdown

打开事件查看器,依次展开 Windows 日志 > 系统,找到事件 ID 为 102 的记录
然后选中,右键打开菜单,选择 “将任务附加到此事件”
再按照对话框填就行了,如果 powershell 的执行策略,不允许执行 .ps1 文件,打开 powershell 执行下面的语句

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

这样,每次 wsl 启动时都会更新 ip 到 hosts 文件

一个手动更新phpMyAdmin的脚本

#!/bin/bash

wget https://files.phpmyadmin.net/phpMyAdmin/"$1"/phpMyAdmin-"$1"-all-languages.zip
unzip phpMyAdmin-"$1"-all-languages.zip
if [ -f 'phpmyadmin/config.inc.php' ]; then
        cp phpmyadmin/config.inc.php phpMyAdmin-"$1"-all-languages/
fi
rm -rf phpmyadmin
mv phpMyAdmin-"$1"-all-languages phpmyadmin
chown -R www-data:www-data phpmyadmin

复制到phpmyadmin的上一层目录
chmod +x update_phpmyadmin.php
./update_phpmyadmin 4.8.5
就可以安装到指定版本了…
不止一个服务器的更新,以前一条命令一条命令的敲,好烦啊,这下好多了,清静了

装个pi-hole做dns去广告

pi-hole wikipedia 它的原理是dns沉洞,对于广告服务的域名返回错误的dns响应.例如,返回pi-hole的服务器ip,这样就不会请求到广告,美滋滋.
安装也很简单,一条命令一把梭

curl -sSL https://install.pi-hole.net | sudo bash

剩下跟着脚本走就行了,对了,因为是做dns服务器,所以,必须要选择你的设备能够访问的一个ip.你的设备是指手机,pad,电脑等dns客户端.
还有,如果装了web界面,最后会有自动设置的密码.不过,忘了也没关系

pihole -a -p

嗯,下面是别人录制的安装视频,可以参考下
install pihole

pihole会针对屏蔽的广告地址,设置一个页面,看到的页面会是这样

这就是/var/www/html/pihole 下面的index.php的功劳了

嗯,dns会影响网速,如果觉得网速慢了,可以试试换dns

显示接口,数据接口傻傻分不清吧…

加购物车一台 明基PD2710QC 有好几个月了😂
狠下心来用券3899入了, 再仔细研究了下,发现是type-c给本供电,我这macbook air是magsafe 2 45w供电,完全没有type-c
不可能因为一个显示器换macbook pro…索性仔细研究了这些接口,看怎么才能让我的air也使用上这个扩展槽
百度知道看到一条点醒了我,链接找不到了…
一个叫接口标准,一个叫接口类型

维基百科看的一脸懵逼
去美亚找商品 看图

Thunderbolt Cable/Thunderbolt 2 Cable
Thunderbolt Cable/Thunderbolt 2 Cable

这是雷电2/霹雳2 https://www.amazon.com/dp/B01AKP8Z4C
长得很像mini-dp吧, 接口是一样的,但是用途是不一样的
就是你都可以插进去,但是不一定能按照预想的去工作….
mini-dp是显示接口,它可以输出图像,但是想让它传输/交换数据,就不可能了

Thunderbolt 3 Cable
Thunderbolt 3 Cable

这是雷电3/雷雳3 https://www.amazon.com/dp/B01AS8U8PU
https://support.apple.com/zh-cn/HT208368
苹果官网对它的解释很明确了…

识别 Mac 上的端口
https://support.apple.com/zh-cn/HT201736
看了这个就全明白了

又作死买了根type-c to mini-dp… 转换线
没看错,就是这个…
到了依旧没用..客服说方向是type-c to mini-dp 也就是只输出图像,type-c插笔记本雷雳3,mini-dp插显示器…
最后底座扩展槽还是没用成☹️

参考资料
https://zh.wikipedia.org/wiki/USB
https://zh.wikipedia.org/wiki/Thunderbolt
https://zh.wikipedia.org/wiki/DisplayPort
https://en.wikipedia.org/wiki/List_of_video_connectors

https://www.newnex.com/usb-connector-type-guide.php
https://www.cablestogo.com/learning/connector-guides/usb

docker 加速器

阿里云有免费的加速器
https://dev.aliyun.com/search.html
daocloud也有,不过感觉还是阿里云的速度不错
https://www.daocloud.io/mirror
docker中国官方加速器
https://www.docker-cn.com/registry-mirror

$ locate docker |grep service
# 找到docker的服务文件
$ vim /lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS --registry-mirror="https://your.mirror.aliyuncs.com"

$ systemctl daemon-reload
$ systemctl restart docker

mac在preferences中可以直接添加,记得好像需要重启docker来着