在 WSL2 中安装 Gentoo

为什么采用 WSL2 而不是 WSL1?

WSL1 孱弱的 io 性能和无法使用的 CUDA 是不可接受的,代价仅是 300MB 左右的内存消耗(如果不计cache)

况且 Windows11 直接支持了WSLg,美汁汁~(虽然我没有升级)

我们可以直接使用 WSL 提供的内核,可以省去编译内核,安装 CUDA 和挂载硬盘(编译虚拟硬盘驱动)的过程

安装 WSL2

参考 WSL2 安装教程 步骤1-4

其中步骤3可以直接运行 wsl --update 代替

如果是家庭版安装 Hyper-V 失败可以尝试另一个脚本 Install_Hyper-V.bat

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

安装 Stage 3

Gentoo mirror 找符合自己电脑架构的 stage3 文件

  • 若要用 cuda 不建议选带 musl 的,因为 cuda 只支持 glibc
  • 若要用 mingw 建议不用 clang 的,gentoo 上对 clang-mingw 支持不佳

我选了 stage3-amd64-openrc-20221002T170543Z.tar.xz

解压成 tar 放到一个文件夹里(WSL 貌似只支持 tar.gz 和 tar),运行

wsl --import  <取个名字> <安装位置> <stage3 tar文件> --version 2
# 例如
wsl --import  Gentoo . stage3-amd64-openrc-20221002T170543Z.tar --version 2
# wsl --set-default <名字> # 如果有多个 WSL 发行版,设为默认

稍等片刻就能拿到热腾腾的、包含stage3的 ext4.vhdx 了。接着就靠 WSL 自带的 kernel 启动我们的Gentoo!

wsl -d <名字>

配置 Stage 3

参考 Gentoo AMD64 Handbook

配置编译选项

nano -w /etc/portage/make.conf
# 这些设置是由自动构建此阶段的“催化”(catalyst)构建脚本设置的。
# 请查阅 /usr/share/portage/config/make.conf.example 
# 以获取一个更详细的示例。
COMMON_FLAGS="-O2 -pipe -march=native"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j4" # make 时使用四线程

# 注意:这个阶段是在启用了 bindist Use 标志的情况下构建的
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"

# 这将把构建输出的语言设置为英语。在报告错误时,请保持此设置不变。
LC_MESSAGES=C
USE="-X " # 禁用图形
ACCEPT_LICENSE="*" # 允许一切证书 _(:з」∠)_
# 镜像
GENTOO_MIRRORS="https://mirrors.163.com/gentoo/ https://mirrors.aliyun.com/gentoo/"

按 Ctrl+x 保存退出

配置 Portage

# 创建repos.conf目录
mkdir --parents /etc/portage/repos.conf
# 复制 Portage 提供的 Gentoo 仓库配置文件到这个(新创建的)目录
cp /usr/share/portage/config/repos.conf /etc/portage/repos.conf/gentoo.conf
# 更新内容
emerge-webrsync

配置 CPU_FLAGS_*

一些架构(包括 AMD64/X86、ARM、PPC)有称为 CPU_FLAGS_ARCHUSE_EXPAND 变量(请酌情将 ARCH 替换为相关的系统架构)。

用于构建编译特定的汇编代码或其他内置函数——通常是手写的或其他额外的, 并且与要求编译器输出针对某个 CPU 功能的优化代码不同。

emerge app-portage/cpuid2cpuflags 
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
# emerge sys-kernel/linux-firmware # 不建议,占用空间大

语言设置*

echo zh_CN.UTF-8 UTF-8 >> /etc/locale.gen
locale-gen
eselect locale list
eselect locale set <选择 zh_CN.UTF-8 UTF-8 >
echo LC_COLLATE=\"C.UTF-8\" >>/etc/env.d/02locale
. /etc/profile
env-update

其他配置

# 设置历史记录格式
echo export HISTTIMEFORMAT=\"%F %T \`whoami\` \">>/etc/profile
# sed -i.bak '/[c|C]lear/'d /etc/skel/.bash_logout # 取消注销时清屏
# 添加用户
groupadd admin
emerge app-admin/sudo  dev-vcs/git
echo %admin ALL=\(ALL\) ALL >> /etc/sudoers
useradd <你的名字> -g admin
# echo min=1,1,1,1,1>> /etc/security/passwdqc.conf # 禁用密码强度检查
passwd <你的名字>
echo [user]>>/etc/wsl.conf
echo default = <你的名字> >>/etc/wsl.conf
su <你的名字>

# 解决 libcuda.so.1 is not a symbolic link
CUDAPATH=/mnt/c/Windows/System32/lxss/lib
rm $CUDAPATH/libcuda.so.1 $CUDAPATH/libcuda.so
ln -s $CUDAPATH/libcuda.so.1.1 $CUDAPATH/libcuda.so.1
ln -s $CUDAPATH/libcuda.so.1.1 $CUDAPATH/libcuda.so


~/.bashrc

# If not running interactively, don't do anything
if [[ $- != *i* ]] ; then
        # Shell is non-interactive.  Be done now!
        return
fi

# history
HISTSIZE=100000
HISTFILESIZE=2000000
HISTIGNORE="pwd:history"
shopt -s histappend

# alias from Ubuntu
alias ll='ls -lF'
alias la='ls -A'
alias l='ls -CF'

# wsl proxy
export ip=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
alias wget="wget -c"
alias  pwget="wget -e https-proxy=https://$ip:7890 -e http-proxy=http://$ip:7890 -c"
git config --global http.https://github.com.proxy socks5://$ip:7890
git config --global https.https://github.com.proxy socks5://$ip:7890

# Put your fun stuff here.
export PATH=$PATH:/usr/lib/wsl/lib
posted @   wsm25  阅读(938)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示