折腾WSL2有个前提, 你不会用linux来开发和硬件设备强相关的产品,如果你要开发嵌入式产品,老老实实用纯linux。
我折腾WSL2就是为了进行 “AI/网络” 开发。
安装WSL2
在 Windows 上通过命令行安装 Ubuntu 作为 WSL(Windows Subsystem for Linux)发行版,可以按照以下步骤操作:
1. 启用 WSL, 安装特定的 Ubuntu 版本
首先需要确保 WSL 功能已启用。如果没有启用,可以在 PowerShell 中使用管理员权限运行以下命令:
比如 Ubuntu 22.04,可以通过以下命令来指定安装:
wsl --install -d Ubuntu-22.04
你也可以选择其他版本,比如 Ubuntu-20.04
或 Ubuntu-18.04
。
如果wsl 出0x80072f7d 错误, 请打开TLS1.2 , win+r 输入inetcpl.cpl -> 高级 -> 开启TLS1.2 ,建议关掉SSL3,TLS1.0, TLS1.1,国内网银经常会关掉TLS1.2
如果wsl 出0x80370102 错误,要启用虚拟功能, 确保bios打开 Intel® Virtualization Technology选为Enabled、Intel® VT-d Feature选为Enabled .
在 powerShell 中以管理员身份运行下面命令以确保开启适用于 Linux 的 Windows 子系统和虚拟机平台配置项。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
运行完成之后,需要重启电脑完成安装。
还是不行的话,
确保 hypervisor launch 在 boot configuration 里面是enable的 . 在powershell 用以下命令确认:
bcdedit /enum | findstr -i hypervisorlaunchtype
如果看到 hypervisorlaunchtype Off
, 那么 hypervisor 是 disabled. 通过以下命令enable:
bcdedit /set hypervisorlaunchtype Auto
运行完成之后,需要重启电脑完成安装。
2. 检查已安装的 Linux 发行版
安装完成后,可以使用以下命令来查看已安装的 Linux 发行版:
wsl -l -v
3. 设置默认 WSL 版本
通常安装的都是wsl2,如果不是,可以使用以下命令将默认版本设置为 WSL 2:
wsl --set-default-version 2
4. 启动 Ubuntu
安装完成后,你可以通过 Windows 的开始菜单搜索 “Ubuntu” 来启动它,也可以在命令行中直接运行以下命令:
wsl
或指定 Ubuntu 发行版启动:
wsl -d Ubuntu-22.04
这样你就可以使用命令行在 WSL 中安装并运行 Ubuntu 了。如果你之前没有启用 WSL,整个安装过程可能需要一些时间。
更改 WSL 发行版的安装位置
在 WSL 中安装 Linux 发行版时,默认情况下,它们会安装在 Windows 的系统驱动器(通常是 C:\
盘)中。虽然 WSL 本身不提供在安装时直接选择安装路径的选项,但你可以通过以下方式间接控制安装路径:
1. 手动更改 WSL 发行版的安装位置
虽然 WSL 默认安装在 C:\
盘的特定目录下,但你可以通过以下步骤手动更改发行版的安装位置:
步骤 1:导出当前的 WSL 发行版
首先,你可以导出当前安装的 WSL 发行版(例如,Ubuntu)为一个 .tar
文件。
打开 PowerShell 或命令提示符并输入以下命令:
wsl --export Ubuntu-22.04 D:\WSL_Backup\ubuntu.tar
这会将 Ubuntu-22.04
导出为一个 ubuntu.tar
文件,保存在 D:\WSL_Backup\
目录中。你可以选择任何你希望保存的路径。
步骤 2:注销当前的 WSL 发行版
导出完成后,注销现有的 Ubuntu 发行版:
wsl --unregister Ubuntu-22.04
这将删除当前的发行版,但不会影响你的 .tar
备份文件。
步骤 3:在新位置导入 WSL 发行版
接下来,你可以在新的路径下导入发行版。假设你想将 Ubuntu 安装在 D:\WSL\Ubuntu-22.04
目录下,可以运行以下命令:
wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\WSL_Backup\ubuntu.tar
这里:
Ubuntu-22.04
是发行版的名称。D:\WSL\Ubuntu-22.04
是你希望安装发行版的路径。D:\WSL_Backup\ubuntu.tar
是你导出的.tar
文件的位置。
导入后,WSL 发行版将安装在你指定的新路径中。
导入之后,缺省用户变成root, 如果要让缺省用户是当前用户,执行以下命令:
ubuntu2204.exe config --default-user 你的用户名
ubuntu2204.exe 这个可执行文件和你的安装版本Ubuntu-22.04相关
步骤 4:启动导入的发行版
导入完成后,你可以像往常一样启动 WSL 发行版:
wsl -d Ubuntu-22.04
wsl2使用windows clasx工具
一、前置
这里使用的是 clasx工具 for windows,注意需要打开允许局域网
二、具体实施
wsl 终端输入:
cat /etc/resolv.conf
可以查看 hostip:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.24.32.1
此后输入以下命令,设置环境变量
export https_proxy="http://${hostip}:7890"
export http_proxy="http://${hostip}:7890"
export all_proxy="socks5://${hostip}:7890"
#hostip为刚才查询的ip,后面的端口号默认为 7890
三、写成脚本
# 获取本地主机的 IP 地址
host_ip=$(grep "nameserver" /etc/resolv.conf | cut -f 2 -d " ")
# 设置代理
alias setproxy="export all_proxy=http://$host_ip:7890; export http_proxy=http://$host_ip:7890; export https_proxy=http://$host_ip:7890"
# 取消代理
alias unsetproxy="unset all_proxy; unset http_proxy; unset https_proxy"
使用 setproxy 打开,unsetproxy 关闭
将脚本添加到 .bashrc
如果你希望每次启动 shell 都能使用这些别名,可以将脚本添加到 ~/.bashrc
中。
在 .bashrc
中添加:
-
打开配置文件
vim ~/.bashrc
-
将上述脚本粘贴到文件的末尾。
-
保存文件并退出编辑器。
-
重新加载配置文件:
source ~/.bashrc
四、添加window防火墙规则
我在这个window防火墙卡了好久,打开powershell,输入以下命令:
netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=7890
五、检测成果
测试的方法有很多,比如:
wget abc.com
安装docker
下载docker desktop, 安装即可.
需要调整 Docker Desktop 在 Windows 上的存储目录,不然C盘很容易塞满:
在 Windows 上调整 Docker Desktop 的存储目录
默认情况下,Docker Desktop 在 Windows 上将其数据存储在C盘。
步骤 1:停止 Docker Desktop
在更改存储路径之前,首先需要停止 Docker Desktop。
- 打开 Docker Desktop。
- 在 Docker Desktop 中点击右上角的 齿轮图标 ,进入设置页面。
- 在 Troubleshoot 选项卡中,点击 Stop 按钮来停止 Docker Desktop。
步骤 2:移动 Docker 数据目录
接下来,你需要将 Docker 的数据文件从默认位置移动到新的位置。
- 找到 Docker 的数据文件目录,通常位于:
C:\Users\<username>\AppData\Local\Docker
- 将该文件夹的所有文件和目录移动到你想要的新存储位置。例如,将它移动到
D:\DockerData
。 - 删除原始的Docker 的数据文件目录,
C:\Users\<username>\AppData\Local\Docker
步骤 3:创建符号链接
在 Windows 上,你可以使用符号链接来欺骗 Docker,使其认为数据仍然在默认位置。通过符号链接将新的存储路径连接到旧的路径。
-
打开 命令提示符 ,并以管理员身份运行。
-
使用
mklink
命令创建符号链接:mklink /J "C:\Users\<your-username>\AppData\Local\Docker" "D:\DockerData"
这里,
/J
参数用于创建目录符号链接。C:\Users\<your-username>\AppData\Local\Docker
是 Docker 默认的数据存储路径,而D:\DockerData
是你想要的新路径。
步骤 4:重新启动 Docker Desktop
符号链接创建成功后,重新启动 Docker Desktop,它将会使用新的存储位置。
安装python环境
安装pyenv + poetry + pipenv的组合 , pyenv管理python各个版本 ; poetry管理虚拟环境,适用于poetry ; pipenv也是管理虚拟环境,适用于pip .
1. 安装pyenv
安装依赖项
在安装 pyenv
前,确保安装了必要的依赖项:
sudo apt update; sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
安装 pyenv
使用以下命令来下载并安装 pyenv
:
curl https://pyenv.run | bash
配置环境变量
在 .bashrc
文件中添加以下内容:
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
然后重新加载 shell:
source ~/.bashrc
验证安装
运行以下命令来验证是否成功安装:
pyenv --version
这样,pyenv
就安装好了,你可以开始管理 Python 版本了。
先用pyenv安装一个python版本:
pyenv install 3.10
然后,全局设置一个python:
pyenv global 3.10
2. 安装poetry
curl -sSL https://install.python-poetry.org | python3 -
在.bashrc
新增:
export PATH=$PATH:$HOME/.local/bin
存档后验证:
source ~/.bashrc
poetry --version
修改config
,可以建立项目目录里面的.venv
虚拟环境
先使用poetry config
指令來查看 Poetry 目前的设定:
❯ poetry config --list
cache-dir = "/root/.cache/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs" # /root/.cache/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true
virtualenvs.in-project = null
就是我们要修改的配置,使用指令:
poetry config virtualenvs.in-project true
实际使用:
比如用 pyenv install 3.10
安装一个python 3.10
进入一个项目目录, pyenv local 3.10
然后就可以在项目目录 poetry env use 3.10
之后 poetry init
建立虚拟环境 ,或者如果项目目录中已经有pyproject.toml的情况下,用 poetry install
安装虚拟环境。
虚拟环境安装成功后, 用 poetry shell
来激活虚拟环境
poetry shell
3. 安裝 virtualenv
pip install virtualenv
建立 virtualenv 环境
- 移动到项目文件目录里面
- 输入
virtualenv venv
- 完成后,即可看到项目文件目录多了 venv 的文件夹
启动 venv 环境
source venv/bin/activate
查看一下目前使用的版本
python --version
查看一下目前安裝的套件
pip list
关闭venv 环境
deactivate
实际使用:
比如用 pyenv install 3.10 安装一个python 3.10
进入一个项目目录, pyenv local 3.10
然后就可以在项目目录 virtualenv venv
建立虚拟环境 。
虚拟环境安装成功后, 用 source venv/bin/activate
来激活虚拟环境
然后你就可以快乐的pip, 安装的库都会在venv目录里面,可以du -h venv
看一下占用空间大小。
安装N卡cuda和cudnn:
安装CUDA:
由于是window系统,驱动系统已经装好了,看一下nvidia-smi的CUDA版本:
去 https://developer.nvidia.com/cuda-toolkit-archive 下载对应的版本
wget https://developer.download.nvidia.com/compute/cuda/12.3.2/local_installers/cuda_12.3.2_545.23.08_linux.run
sudo sh cuda_12.3.2_545.23.08_linux.run
根据安装好的提示,在 .bashrc
路径下添加环境变量。cuda的版本目录请根据实际版本来调整
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.3/lib64
export PATH=/usr/local/cuda-12.3/bin:$PATH
测试安装:先source ~/.bashrc
nvcc -V
安装cudnn:
去 https://developer.nvidia.cn/cudnn-downloads 下载对应的cudnn,我下载9.4.0
wget https://developer.download.nvidia.com/compute/cudnn/9.4.0/local_installers/cudnn-local-repo-ubuntu2204-9.4.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2204-9.4.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-9.4.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cudnn
测试安装是否成功:
sudo apt-get install libfreeimage3 libfreeimage-dev
cp -r /usr/src/cudnn_samples_v9/ $HOME
cd $HOME/cudnn_samples_v9/mnistCUDNN
make clean && make
./mnistCUDNN
通过会显示Test passed!
安装ollama server
选择ollama安装在wsl2里面,方便linux应用开发。
curl -fsSL https://ollama.com/install.sh | sh
远程调用ollama服务
我们想要在别的机器远程调用带GPU的ollama服务器的模型能力。
打开ollama的端口
Ollama默认的网络配置为仅在本地网络环境中运行,这意味着只有安装Ollama的主机能够访问该服务。如果希望从外部网络访问Ollama服务,需要进行相应的网络配置调整。
修改ollama配置使其可以监听0.0.0.0和修改端口,可以实现非本地访问
使用命令:sudo vim /etc/systemd/system/ollama.service,添加:Environment=“OLLAMA_HOST=0.0.0.0:11434”,然后保存更改
然后 sudo systemctl daemon-reload
然后 sudo systemctl restart ollama
在wsl2里面查询一下本地ip
打开windows浏览器输入:ip地址:11434
出现ollama is running,表示配置成功,局域网可以调用ollama服务
公网调用ollama服务
需要1个前置条件: 公网ip
有了公网ip,就可以用代理来实现跳转。client端就可以用 公网ip:公网端口 来访问ollama服务