从mac电脑到windows的迁移
起因
- mac之后all-in到arm,很多系统和功能都无法使用,需要重新编译,对于后端开发来说实际线上服务器肯定长期还是以linux-X86-64为主,很多软件需要交叉编译
- windows的wsl提供了基本无缝+完整的编译环境,同时还支持gpu的port,使用win10+wsl基本能够完成99%的工作
WSL的安装
主要就是按照官方的教程去安装就好,由于网络原因只能选择手动安装,好在实际下载速度都很快
这块没有遇到什么问题,主要是注意win10加入insider计划之后升级到最新版,默认安装的19H1是没有wsl的.
基本非常快就能搞定
同时也是长期版本ubuntu20.04-lts,基本的包都会默认安装好
遇到的各种兼容性问题
github的代理: 直接参考这篇可选的比较多: https://blog.csdn.net/networken/article/details/105122778
安装oh-my-zsh的时候如果使用
curl
的命令,会提示hasdshake的错误,一开始以为是tizi的问题,但是实际上搜索之后并不是,主要是windows默认的intel网卡驱动问题导致gnutls版本问题.解决方案:- 在wsl使用wget下载各种安装的scrips
- 在intel的官网下载最新的驱动,覆盖windows的驱动即可
参考链接:
讨论的issue: https://github.com/microsoft/WSL/issues/4253
intel驱动下载地址: https://downloadcenter.intel.com/download/28794/Windows-10-Wi-Fi-Drivers-for-Intel-Wireless-Adapters?product=99446wsl的服务起起来之后,在windows的浏览器只能使用localhost才能访问,这个是wsl2的实现协议导致的,目前官网也没有很好的解决方案,可以使用一个脚本来批量处理:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { $arguments = "& '" + $myinvocation.mycommand.definition + "'" Start-Process powershell -Verb runAs -ArgumentList $arguments Break } $remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '" $found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'; if( $found ){ $remoteport = $matches[0]; }else{ echo "The Script Exited, the ip address of WSL 2 cannot be found"; exit; } $ports=@(3000, 8080); iex "netsh interface portproxy reset"; for( $i = 0; $i -lt $ports.length; $i++ ){ $port = $ports[$i]; iex "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport"; } iex "netsh interface portproxy show v4tov4";
注意需要再配置里面开启允许powershell执行脚本文件
参考链接:
https://superuser.com/questions/1131874/how-to-access-localhost-of-linux-subsystem-from-windows
https://dev.to/vishnumohanrk/wsl-port-forwarding-2e22
https://superuser.com/questions/106360/how-to-enable-execution-of-powershell-scripts https://devblogs.microsoft.com/scripting/use-powershell-to-create-new-windows-firewall-rules/
https://docs.microsoft.com/en-us/powershell/module/netsecurity/new-netfirewallrule?view=win10-ps
https://docs.microsoft.com/en-us/powershell/module/netsecurity/enable-netfirewallrule?view=win10-ps
https://github.com/microsoft/WSL/issues/5439
https://docs.microsoft.com/en-us/windows/wsl/compare-versions#accessing-a-wsl-2-distribution-from-your-local-area-network-lan
https://github.com/Microsoft/WSL/issues/1032
https://github.com/microsoft/WSL/issues/4150
https://github.com/microsoft/WSL/issues/4150在wsl启动的服务有些端口提示冲突的问题,主要是3000与3306等端口都默认被windows的一个动态端口协议占用的 (官方说明从winserver2008之后包括win10都默认修改了,但是安装的系统还是老的,需要手动执行下更新) 还是万能的github之后可以通过命令修改:
netsh int ipv set dynamic tcp start=49152 num=16384
参考链接:
https://github.com/docker/for-win/issues/3171#issuecomment-736155035 https://docs.microsoft.com/en-US/troubleshoot/windows-server/networking/default-dynamic-port-range-tcpip-chang