maboloshi / Recordum

沙漠之子's 微博客
https://maboloshi.github.io/Recordum
2 stars 0 forks source link

WIN10: 安装和使用 ArchWSL 相关 #3

Open maboloshi opened 4 years ago

maboloshi commented 4 years ago

转载并修改自:https://github.com/way-zer/way-zer.github.com/issues/2

!!注意:官方文档一定要看,遇到问题更要看!!

简介

WSL 是 Windows 10 的一个新功能,可以快速在 windows 下建立 linux 环境,且比虚拟机启动和运行更快

局限性

目前 WSL 还有某些功能局限:

基础安装

开启 WSL 功能

参考 https://docs.microsoft.com/zh-cn/windows/wsl/install-win10#install-the-windows-subsystem-for-linux

任选一种方式开启

  1. 控制面板 -> 程序 -> 程序和功能 -> 启动或关闭Windows功能,勾选"适用于Linux的Windows子系统"(Windows Subsystem for Linux),无论是否打开开发者模式 安装图

  2. PowerShell方法,即以管理员身份打开PowerShell并输入:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  3. Dism方法,即打开cmd/PowerShell并输入:

    Dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux

安装 ArchWSL

项目链接

使用Zip版本安装,方便管理,甚至可以便携 在 https://github.com/yuk7/ArchWSL/releases/latest 中下载zip文件,解压到想安装的目录 运行Arch.exe来解压生成rootfs文件夹并且注册到 WSL

Tips:

  • 可将Arch.exe复制到C:\Windows\System32,方便日后调用
  • 启动器Arch.exe可单独更新 项目页

初始化并更新

在搜索栏搜索wsl.exeArch.exe打开终端(第一次打开可能略慢)或者在 CMD/PowerShell 窗口中输入bash,wslarch进入

Tips:可使用快捷键Ctrl +D退出WSL

设置更新源

根据实际网络状况选择最适合的更新源

编辑/etc/pacman.d/mirrorlist,在## China节下#Server = xxx,将开头的#去掉,如:

## China
Server = http://mirrors.163.com/archlinux/$repo/os/$arch
Server = http://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch
Server = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.sjtug.sjtu.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch
Server = http://mirrors.zju.edu.cn/archlinux/$repo/os/$arch

请根据网络状态选择源,个人使用中科大、网易、重庆大学

初始化与更新

# 初始化
pacman-key --init
pacman-key --populate archlinux
# 更新
pacman -Sy archlinux-keyring   # 更新 GPG key
pacman -Syu  # 更新系统,速度快慢与镜像源有关

可选安装 base base-devel: pacman -Syu base base-devel

额外配置过程(可选)

建立非root账号并设为默认【推荐】

创建非root账户,并设置密码

useradd -m -G wheel -s /bin/bash <username>
passwd root                      # 给 `root`账户设置密码
passwd <username>        # 给 `username`账户设置密码

Tips: useradd命令解析:

  • -m : 创建同名<username>用户主目录
  • -G wheel : 加入wheel用户组
  • -s /bin/bash : 指定终端
  • <username> : 用户名

给非root账户设置sudo权限

实际给wheel用户组设置sudo权限

EDITOR=nano visudo
# 或者
visudo

找到# %wheel ALL=(ALL) ALL,将开头的#去掉,然后保存退出

注意:# %wheel ALL=(ALL) NOPASSWD: ALL 表示使用sudo时不需要输入密码 (不安全)

将非root账户设置为默认

退出终端,打开一个 CMD/PowerShell 窗口,输入

Arch.exe config --default-user <username>

如果没有生效(#7),请重启计算机,或者在管理员命令提示符(CMD)下重启LxssManager服务 net stop lxssmanager && net start lxssmanager

安装 ArchlinuxCN 仓库

Arch Linux 中文社区仓库是由 Arch Linux 中文社区驱动的非官方软件仓库,包含许多官方仓库未提供的额外的软件包,以及已有软件的 git 版本等变种。一部分软件包的打包脚本来源于 AUR,但也有许多包与 AUR 不一样。

使用方法:

  1. 添加ArchlinuxCN 仓库源。在 /etc/pacman.conf 文件末尾添加以下两行:

    [archlinuxcn]
    Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

    此处同样使用了中科大的镜像站

  2. 更新数据库并导入 ArchlinuxCN 仓库 GPG key

    sudo pacman -Sy archlinuxcn-keyring

安装yay使用AUR

Arch User Repository(常被称作 AUR),是一个为 Arch 用户而生的社区驱动软件仓库。Debian/Ubuntu 用户的对应类比是 PPA。

AUR 包含了不直接被 Arch Linux 官方所背书的软件(未经审核,注意安全)。如果有人想在 Arch 上发布软件或者包,它可以通过这个社区仓库提供。这让最终用户们可以使用到比默认仓库里更多的软件。

Arch 的包管理器 pacman 不直接支持 AUR。那些支持 AUR 的“特殊工具”我们称之为 AUR 助手。-- from Yaourt 已死!在 Arch 上使用这些替代品

此处推荐使用yay

pacman -S yay # archlinuxcn源

注意: AUR编译不允许使用root (安全原因)

修改cmd.exewls.exe终端配色

参考: 调教你的WSL终端

默认情况下修改比较麻烦,不过现在微软开发了一个修改终端配色方案的工具colortool 该工具支持使用Iterm 配色文件,其默认自带solarized_dark等5款主题,更多配色主题可到iterm2colorschemes下载

  1. 下载并解压

  2. 退出终端,打开一个 CMD/PowerShell 窗口,输入如:

    colortool.exe -d solarized_dark

    PS1: 更多关于colortool的资料可以看这里: https://blogs.msdn.microsoft.com/commandline/2017/08/11/introducing-the-windows-console-colortool/

美化终端, 安装Oh-my-zsh

安装图形界面(可选)

在windows上安装VcXsrv,并在linux配置环境变量DISPLAY=:0 echo "export DISPLAY=:0" >> .bzshrc #WSL2与此不同 此处只配置了图形显示(可以运行图形程序了),如需图形界面,请自行选择安装

关闭Windows PATH(让TAB不再卡顿)

echo "[interop]" > /etc/wsl.conf
echo "appendWindowsPath=false" >> /etc/wsl.conf

未完待续

WSL2相关安装

WSL2 需要 win10 19041 (2004) 或以上版本

参考:

启用“虚拟机平台”可选组件

参考: https://docs.microsoft.com/zh-cn/windows/wsl/install-win10#update-to-wsl-2

在已开启WSL的基础上,任选一种方式开启

  1. 控制面板->程序->程序和功能->启动或关闭Windows功能,勾选"虚拟机平台"(Virtual Machine Platform),无论是否打开开发者模式 虚拟机平台

  2. PowerShell方法,即以管理员身份打开PowerShell并输入:

    Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
  3. Dism方法,即打开cmd/PowerShell并输入:

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform

更新 WSL 2 Linux 内核

https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel

将 WSL 2 设置为默认版本

wsl --set-default-version 2

再安装发行版

将现有发行版从WSL1升级到WSL2

# 列出所有分发,并查看WSL版本
wsl --list --verbose

#例如
>
  NAME    STATE           VERSION
* Arch    Stopped         2

# 升级发行版到WSL2
wsl --set-version <发行版> 2

WSL2与WSL1不同说明

在使用前请详细阅读官方教程比较 WSL 1 和 WSL 2, 可少走许多弯路

WSL2迁移

WSL2的迁移相对WSL更方便,因为其所以资料全部封装在ext4.vhdx文件中。用如下方法即可异地注册。

确保在ext4.vhdx同目录下,创建注册Arch.inf文件

[Version]
Signature="$CHICAGO$"

[DefaultInstall]
AddReg=AddReg

[AddReg]
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\%UUID%","State",0x10001,01,00,00,00
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\%UUID%","DistributionName",,"Arch"
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\%UUID%","Version",0x10001,02,00,00,00
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\%UUID%","BasePath",,"%01%"
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\%UUID%","Flags",0x10001,0f,00,00,00
HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\%UUID%","DefaultUid",0x10001,00,00,00,00

[Strings]
UUID="{3f895d73-4cd6-4158-8e59-1035a9ceafd3}"

注意此处UUID必须唯一,可以使用 https://www.uuidgenerator.net/ 生成

迁移时将这2个文件一起迁移到新位置,右键这个inf文件,选择安装即可完成注册。

迁移完成后建议设置默认发行版

设置 WSL 默认发行版

如未设置默认发行版,直接运行wsl 会报

适用于 Linux 的 Windows 子系统没有已安装的分发版。 可以通过访问 Microsoft Store 来安装分发版: https://aka.ms/wslstore

wslconfig /setdefault <发行版名称>
# 或者
wsl --set-default <发行版名称>

WSL2额外步骤(可选)

待续

小技巧

未完待续

。。。

calibura commented 3 years ago

请问这个怎么解决

 wsl --set-version Arch 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
导入分发失败。
./usr/bin/runcon: Write failed
./usr/bin/runuser: Write to restore size failed
./usr/bin/rview: Write to restore size failed
./usr/bin/rvim: Write to restore size failed
./usr/bin/rvlc: Write to restore size failed
./usr/bin/samba: Write to restore size failed
./usr/bin/samba-gpupdate: Write to restore size failed
./usr/bin/samba-regedit: Write to restore size failed
./usr/bin/samba-tool: Write to restore size failed
./usr/bin/samba_dnsupdate: Write to restore size failed
./usr/bin/samba_downgrade_db: Write to restore size failed
./usr/bin/samba_kcc: Write to restore size failed
./usr/bin/samba_spnupdate: Write to restore size failed
./usr/bin/samba_upgradedns: Write to restore size failed
./usr/bin/samplers: Write to restore size failed
./usr/bin/samplers_array: Write to restore size failed
./usr/bin/sane-config: Write to restore size failed
./usr/bin/sane-find-scanner: Write to restore size failed
./usr/bin/saned: Write to restore size failed
./usr/bin/sasldblistusers2: Write to restore size failed
./usr/bin/saslpasswd2: Write to restore size failed
./usr/bin/sbcdec: Write to restore size failed
./usr/bin/sbcenc: Write to restore size failed
./usr/bin/sbcinfo: Write to restore size failed
./usr/bin/sbigtopgm: Write to restore size failed
./usr/bin/scan-build: Write to restore size failed
./usr/bin/scan-view: Write to restore size failed
./usr/bin/scanimage: Write to restore size failed
./usr/bin/sccmap: Write to restore size failed
./usr/bin/schemagen: Write to restore size failed
./usr/bin/sclient: Write to restore size failed
./usr/bin/scmp_sys_resolver: Write to restore size failed
./usr/bin/scor2prt: Write to restore size failed
./usr/bin/scp: Write to restore size failed
./usr/bin/script: Write to restore size failed
./usr/bin/scriptlive: Write to restore size failed
./usr/bin/scriptreplay: Write to restore size failed
./usr/bin/sddm: Write to restore size failed
./usr/bin/sddm-greeter: Write to restore size failed
./usr/bin/sddmthemeinstaller: Write to restore size failed
./usr/bin/sdiff: Write to restore size failed
./usr/bin/sdl-config: Write to restore size failed
./usr/bin/sdl2-config: Write to restore size failed
./usr/bin/secret-tool: Write to restore size failed
./usr/bin/sed: Write to restore size failed
./usr/bin/semver: Write to restore size failed
./usr/bin/sendiso: Write to restore size failed
./usr/bin/sensord: Write to restore size failed
./usr/bin/sensors: Write to restore size failed
./usr/bin/sensors-conf-convert: Write to restore size failed
./usr/bin/sensors-detect: Write to restore size failed
./usr/bin/seq: Write to restore size failed
./usr/bin/serdi: Write to restore size failed
./usr/bin/serialver: Write to restore size failed
./usr/bin/servertool: Write to restore size failed
./usr/bin/servicemenuinstaller: Write to restore size failed
./usr/bin/sessreg: Write to restore size failed
./usr/bin/set-wireless-regdom: Write to restore size failed
./usr/bin/set_unicharset_properties: Write to restore size failed
./usr/bin/setarch: Write to restore size failed
./usr/bin/setcap: Write to restore size failed
./usr/bin/setcifsacl: Write to restore size failed
./usr/bin/setfacl: Write to restore size failed
./usr/bin/setfattr: Write to restore size failed
./usr/bin/setfont: Write to restore size failed
./usr/bin/setkeycodes: Write to restore size failed
./usr/bin/setleds: Write to restore size failed
./usr/bin/setmetamode: Write to restore size failed
./usr/bin/setpci: Write to restore size failed
./usr/bin/setpriv: Write to restore size failed
./usr/bin/setsid: Write to restore size failed
./usr/bin/setterm: Write to restore size failed
./usr/bin/setvtrgb: Write to restore size failed
./usr/bin/setxkbmap: Write to restore size failed
./usr/bin/sexp-conv: Write to restore size failed
./usr/bin/sfconvert: Write to restore size failed
./usr/bin/sfdisk: Write to restore size failed
./usr/bin/sfdp: Write to restore size failed
./usr/bin/sfinfo: Write to restore size failed
./usr/bin/sftp: Write to restore size failed
./usr/bin/sfv-hash: Write to restore size failed
./usr/bin/sg: Write to restore size failed
maboloshi commented 3 years ago

问题:“请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化。”

原因:

1.Win10系统自带“虚拟机平台”(hyper-v)被禁用。(WSL、WSL、docker for windows均依赖Win10系统自带“虚拟机平台”(hyper-v),而该“虚拟机平台”与Vmware、VirtualBox、等第三方虚拟机软件冲突。)

2.BIOS 中未启用虚拟化

解决:

针对原因一:

cmd下运行bcdedit /set hypervisorlaunchtype auto然后重启后生效

Tips:

  1. 启用/禁用 Hyper-v

    # 启用
    bcdedit /set hypervisorlaunchtype auto
    # 禁用
    bcdedit /set hypervisorlaunchtype off
  2. 创建2个启动项

    # 复制当前的启动项为一个新的启动项
    bcdedit /copy {current} /d "Windows10 no Hyper-V"
    # 默认启用项启用Hyper-v
    bcdedit /set hypervisorlaunchtype auto
    针对原因二:

    去 BIOS 页开始虚拟化支持

maboloshi commented 3 years ago

参考

QZQ-QSQ commented 3 years ago

大佬,我安装archlinux后点击arch.exe,一闪而过,arch并没有启动。请问是什么原因?谢谢。

my569 commented 2 years ago

请问这个怎么解决

 wsl --set-version Arch 2
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
导入分发失败。
./usr/bin/runcon: Write failed
./usr/bin/runuser: Write to restore size failed
./usr/bin/rview: Write to restore size failed
./usr/bin/rvim: Write to restore size failed
./usr/bin/rvlc: Write to restore size failed
./usr/bin/samba: Write to restore size failed
./usr/bin/samba-gpupdate: Write to restore size failed
./usr/bin/samba-regedit: Write to restore size failed
./usr/bin/samba-tool: Write to restore size failed
./usr/bin/samba_dnsupdate: Write to restore size failed
./usr/bin/samba_downgrade_db: Write to restore size failed
./usr/bin/samba_kcc: Write to restore size failed
./usr/bin/samba_spnupdate: Write to restore size failed
./usr/bin/samba_upgradedns: Write to restore size failed
./usr/bin/samplers: Write to restore size failed
./usr/bin/samplers_array: Write to restore size failed
./usr/bin/sane-config: Write to restore size failed
./usr/bin/sane-find-scanner: Write to restore size failed
./usr/bin/saned: Write to restore size failed
./usr/bin/sasldblistusers2: Write to restore size failed
./usr/bin/saslpasswd2: Write to restore size failed
./usr/bin/sbcdec: Write to restore size failed
./usr/bin/sbcenc: Write to restore size failed
./usr/bin/sbcinfo: Write to restore size failed
./usr/bin/sbigtopgm: Write to restore size failed
./usr/bin/scan-build: Write to restore size failed
./usr/bin/scan-view: Write to restore size failed
./usr/bin/scanimage: Write to restore size failed
./usr/bin/sccmap: Write to restore size failed
./usr/bin/schemagen: Write to restore size failed
./usr/bin/sclient: Write to restore size failed
./usr/bin/scmp_sys_resolver: Write to restore size failed
./usr/bin/scor2prt: Write to restore size failed
./usr/bin/scp: Write to restore size failed
./usr/bin/script: Write to restore size failed
./usr/bin/scriptlive: Write to restore size failed
./usr/bin/scriptreplay: Write to restore size failed
./usr/bin/sddm: Write to restore size failed
./usr/bin/sddm-greeter: Write to restore size failed
./usr/bin/sddmthemeinstaller: Write to restore size failed
./usr/bin/sdiff: Write to restore size failed
./usr/bin/sdl-config: Write to restore size failed
./usr/bin/sdl2-config: Write to restore size failed
./usr/bin/secret-tool: Write to restore size failed
./usr/bin/sed: Write to restore size failed
./usr/bin/semver: Write to restore size failed
./usr/bin/sendiso: Write to restore size failed
./usr/bin/sensord: Write to restore size failed
./usr/bin/sensors: Write to restore size failed
./usr/bin/sensors-conf-convert: Write to restore size failed
./usr/bin/sensors-detect: Write to restore size failed
./usr/bin/seq: Write to restore size failed
./usr/bin/serdi: Write to restore size failed
./usr/bin/serialver: Write to restore size failed
./usr/bin/servertool: Write to restore size failed
./usr/bin/servicemenuinstaller: Write to restore size failed
./usr/bin/sessreg: Write to restore size failed
./usr/bin/set-wireless-regdom: Write to restore size failed
./usr/bin/set_unicharset_properties: Write to restore size failed
./usr/bin/setarch: Write to restore size failed
./usr/bin/setcap: Write to restore size failed
./usr/bin/setcifsacl: Write to restore size failed
./usr/bin/setfacl: Write to restore size failed
./usr/bin/setfattr: Write to restore size failed
./usr/bin/setfont: Write to restore size failed
./usr/bin/setkeycodes: Write to restore size failed
./usr/bin/setleds: Write to restore size failed
./usr/bin/setmetamode: Write to restore size failed
./usr/bin/setpci: Write to restore size failed
./usr/bin/setpriv: Write to restore size failed
./usr/bin/setsid: Write to restore size failed
./usr/bin/setterm: Write to restore size failed
./usr/bin/setvtrgb: Write to restore size failed
./usr/bin/setxkbmap: Write to restore size failed
./usr/bin/sexp-conv: Write to restore size failed
./usr/bin/sfconvert: Write to restore size failed
./usr/bin/sfdisk: Write to restore size failed
./usr/bin/sfdp: Write to restore size failed
./usr/bin/sfinfo: Write to restore size failed
./usr/bin/sftp: Write to restore size failed
./usr/bin/sfv-hash: Write to restore size failed
./usr/bin/sg: Write to restore size failed

请问这个问题您解决了吗?我也遇到这个问题了

maboloshi commented 7 months ago

WSL2默认DNS配置导致无法访问网络

问题分析:

  1. 进入wsl ping www.baidu.com 不通;
  2. 本机cmd ping www.baidu.com 正常;
  3. 把本机ping 百度的ip拿出来,用wsl直接ping 百度的ip正常;

通过此步骤基本可以判断是WSL2默认的DNS配置有问题。

处理方式

  1. 关闭WSL2自动生成/etc/resolv.conf
    echo "[interop]" > /etc/wsl.conf
    echo "appendWindowsPath=false" >> /etc/wsl.conf
  2. 重启WSL
  3. 新建并设置/etc/resolv.conf
    echo "nameserver 8.8.8.8" > /etc/resolv.conf

    其中 8.8.8.8 替换成你自己的 DNS 服务器地址。可以在本机右下角的网络链接小图标查看本机的DNS服务地址配置。

  4. 重启WSL,再ping www.baidu.com 搞定。