norestart 未成功安装_wsl的安装/升级笔记

这部分记录了如何安装wsl,以及如何升级到wsl2的心酸历程。


版本要求

安装wsl2对系统版本有硬性的要求:

  • 运行 Windows 10(已更新到版本 2004 的内部版本 19041 或更高版本)。
  • 通过按 Windows 徽标键 + R,检查你的 Windows 版本,然后键入 winver,选择“确定”。 如果内部版本低于 19041,请更新到最新的 Windows 版本。

v2-047418e681c23b6d8ab6220c84dc41e3_b.jpg

升级windows

如果版本达到了要求,则跳过此步骤。
  • Win+S 搜索预览体验计划

加入预览体验计划,获取更新版本。

v2-b64d17a13aa8226e65c4600d2922be0f_b.jpg
  • 进行windows更新

v2-f6c220e4b7f9c3150489bb2f50908aab_b.jpg

然后就是漫长的等待过程,无论是下载还是安装的过程都很漫长。


WSL的安装

  • 使用管理员权限打开powershell
  • 启用“适用于 Linux 的 Windows 子系统”可选功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
这时候wsl其实已经启用了,重启就可以了,但还要更新到wsl2,就在后面一起重启了。

升级到WSL2

  • 启用“虚拟机平台”可选组件
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 重启电脑。
  • 重新管理员身份打开powershell,用下面的命令将wsl2设置为默认。
wsl --set-default-version 2

v2-0bc0e46a7a22a9cedbfd3327f13198c9_b.jpg

出现上面这行就是好了,如果有问题请参考后文中遇到的问题及解决办法。


安装linux分发版

选择一个你喜欢的就可以了,任君挑选。

  • 打开 Microsoft Store,并选择你偏好的 Linux 分发版。

v2-f069df026de09435647418e7d1629e8e_b.jpg

单击以下链接会打开每个分发版的 Microsoft Store 页面:

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
  • openSUSE Leap 15.1
  • SUSE Linux Enterprise Server 12 SP5
  • SUSE Linux Enterprise Server 15 SP1
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix for WSL
  • Pengwin
  • Pengwin Enterprise
  • Alpine WSL
  • 在分发版的页面中,选择“获取”。

v2-34bb2f1cdf29bc9e191e209ee7627120_b.jpg

安心等待片刻,就安装好了,这时你点击开始,就可以在最近安装看见你安装好的分发版了。

初次启动它会进行一个初始化的过程,需要等待一段时间。完成之后会让你设置账号和密码。

v2-6c3ade899fe7914a648858cc5232974f_b.jpg

排查安装问题

下面是相关的错误和建议的修复措施。 有关其他常见错误及其解决方法,请参阅 WSL 故障排除页。

  • 安装失败并出现错误 0x80070003
  • 适用于 Linux 的 Windows 子系统只能在系统驱动器(通常是 C: 驱动器)中运行。 请确保分发版存储在系统驱动器上:
  • 打开“设置”->“存储”->“更多存储设置: 更改新内容的保存位置”

v2-d46515d5631011f6a57e96b2d983fa46_b.jpg
  • WslRegisterDistribution 失败并出现错误 0x8007019e
  • 未启用“适用于 Linux 的 Windows 子系统”可选组件:
  • 打开“控制面板” -> “程序和功能” -> “打开或关闭 Windows 功能”-> 选中“适用于 Linux 的 Windows 子系统”,或使用本文开头所述的 PowerShell cmdlet。
  • 安装失败,出现错误 0x80070003 或错误 0x80370102
  • 请确保在计算机的 BIOS 内已启用虚拟化。 有关如何执行此操作的说明因计算机而异,并且很可能在 CPU 相关选项下。
  • 尝试升级时出错:Invalid command line option: wsl --set-version Ubuntu 2
  • 请确保已启用适用于 Linux 的 Windows 子系统,并且你使用的是 Windows 内部版本 19041 或更高版本。 若要启用 WSL,请在 PowerShell 提示符下以具有管理员权限的身份运行此命令:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux。 可在此处找到完整的 WSL 安装说明。
  • 由于虚拟磁盘系统的某个限制,无法完成所请求的操作。虚拟硬盘文件必须是解压缩的且未加密的,并且不能是稀疏的。
  • 请检查 WSL GitHub 主题 #4103,其中跟踪了此问题以提供更新的信息。
  • 无法将词语“wsl”识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  • 请确保已安装“适用于 Linux 的 Windows 子系统”可选组件。 此外,如果你使用的是 ARM64 设备,并从 PowerShell 运行此命令,则会收到此错误。 请改为从 PowerShell Core 或从命令提示符运行 wsl.exe

相关链接

常见问题

WSL 2 常见问题解答

疑难解答


记录所踩的坑

上面的问题和解决办法,是官方的手册给的,下面说记录下安装的心酸历程,如果上面没找到你的问题,可以看看我的经历是不是能给你点帮助:
  1. 首先是windows版本,我一直保持着最新的版本,想当然的以为版本足够,查了各种方法也装不上wsl2,后来在一个大佬的笔记里发现要打开预览版本更新。
  2. 之后就是安装WSL 2遇到了 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel的问题,然后就下载了最新版本的内核。
  3. 然后又遇到内核无法安装的问题,这时我已经要炸了,冷静下来想起了解决之前问题时候尝试装过一次内核,随后找到应用卸载的界面卸载了之前装的内核,安装新内核成功。
  4. 之后也成功的切换到了wsl2,但是从应用商店下载的Ubuntu20,04第一次打开加载报错,不信邪的我切换回了wsl1,再打开Ubuntu成功运行,这时候我心态已经有点崩了,搞来搞去wsl2还是不能用。
  5. 我又在应用商店下载了Ubuntu18.04,切换回了wsl2重新安装,还是失败,看了下报错0xc03a001a,找到一个大佬的解答说是因为开了压缩内容以便节省磁盘空间的原因,首先确定你的一些或者所有的文件夹右上角是否都有两个相对的蓝色箭头,然后找到路径:C:Users你的用户名AppDataLocalPackagesCanonicalGroupLimited.xxxx (xxx为你所下载的对应Linux发行版)这个文件夹,若它确实是右上角带有两个相对箭头,那么:
右键 -> 属性 -> 常规 -> 高级 -> 取消勾选 压缩内容以便节省磁盘空间 这一项 -> 确定 再次启动所安装的 Linux 发行版应该就可正常使用。

随后我以为终于可以解决了,然而并没有。还是报错,具体是什么忘记了,也没查到答案。最后问题还是自己解决的。我灵机一动,既然wsl1环境可以正常安装,那我是不是在1环境下安装,再转换到2环境下呢?最后问题完美解决。

wsl --set-version Ubuntu-20.04  2

v2-15369e13732ac285742777e1a6773535_b.jpg
上面解决办法可能是对的,可能只是需要 重启一下再点开安装就行了。

终于等到你,还好我没放弃!

逐条注释 ``` if grep -q "chroot_list_file=/etc/vsftpd/chroot_list" /etc/vsftpd/vsftpd.conf then sed -i '/chroot_list_file=/etc/vsftpd/chroot_list/s/^/#/' /etc/vsftpd/vsftpd.conf echo 'chroot_list_file=/etc/vsftpd/chroot_list' >> /etc/vsftpd/vsftpd.conf else echo 'chroot_list_file=/etc/vsftpd/chroot_list' >> /etc/vsftpd/vsftpd.conf fi if grep -q "anonymous_enable" /etc/vsftpd/vsftpd.conf then sed -i '/anonymous_enable=YES/s/^/#/' /etc/vsftpd/vsftpd.conf sed -i '/anonymous_enable=NO/s/^/#/' /etc/vsftpd/vsftpd.conf echo 'anonymous_enable=NO' >> /etc/vsftpd/vsftpd.conf else echo 'anonymous_enable=NO' >> /etc/vsftpd/vsftpd.conf fi fi touch /etc/vsftpd/chroot_list chmod 750 /etc/vsftpd/chroot_list service vsftpd restart systemctl restart vsftpd.service mv /etc/issue /etc/issue.bak mv /etc/issue.net /etc/issue.net.bak touch /etc/motd chmod 644 /etc/motd rpm -e telnet-server systemctl stop telnet.socket if grep -q "Authorized only. All activity will be monitored and reported" /etc/motd then echo 'have' else echo "Authorized only. All activity will be monitored and reported" >> /etc/motd fi if [ -f "/etc/syslog.conf" ];then echo 'authpriv.* /var/log/secure' >> /etc/syslog.conf echo 'cron.*' >> /etc/syslog.conf echo '*.* @133.64.93.31' >> /etc/syslog.conf service syslog restart fi if [ -f "/etc/rsyslog.conf" ];then echo 'authpriv.* /var/log/secure' >> /etc/rsyslog.conf echo 'cron.*' >> /etc/rsyslog.conf echo '*.* @133.64.97.31' >> /etc/rsyslog.conf service rsyslog restart systemctl restart rsyslog.service fi echo 'ok' ```
07-20
这段脚本的作用是修改一些vsftpd和系统的配置,并重新启动相应的服务。具体解释如下: ```shell if grep -q "chroot_list_file=/etc/vsftpd/chroot_list" /etc/vsftpd/vsftpd.conf then sed -i '/chroot_list_file=/etc/vsftpd/chroot_list/s/^/#/' /etc/vsftpd/vsftpd.conf echo 'chroot_list_file=/etc/vsftpd/chroot_list' >> /etc/vsftpd/vsftpd.conf else echo 'chroot_list_file=/etc/vsftpd/chroot_list' >> /etc/vsftpd/vsftpd.conf fi ``` - 检查/etc/vsftpd/vsftpd.conf文件中是否存在"chroot_list_file=/etc/vsftpd/chroot_list"这一行。 - 如果存在,则使用sed命令在该行的行首添加注释符号#,即禁用chroot_list_file功能。 - 然后在文件末尾添加一行"chroot_list_file=/etc/vsftpd/chroot_list"。 - 如果不存在,则在文件末尾添加一行"chroot_list_file=/etc/vsftpd/chroot_list"。 ```shell if grep -q "anonymous_enable" /etc/vsftpd/vsftpd.conf then sed -i '/anonymous_enable=YES/s/^/#/' /etc/vsftpd/vsftpd.conf sed -i '/anonymous_enable=NO/s/^/#/' /etc/vsftpd/vsftpd.conf echo 'anonymous_enable=NO' >> /etc/vsftpd/vsftpd.conf else echo 'anonymous_enable=NO' >> /etc/vsftpd/vsftpd.conf fi ``` - 检查/etc/vsftpd/vsftpd.conf文件中是否存在"anonymous_enable"这一行。 - 如果存在,则使用sed命令将"anonymous_enable=YES"和"anonymous_enable=NO"这两行的行首添加注释符号#,以禁用匿名用户登录。 - 然后在文件末尾添加一行"anonymous_enable=NO",即禁用匿名用户登录。 ```shell touch /etc/vsftpd/chroot_list chmod 750 /etc/vsftpd/chroot_list service vsftpd restart systemctl restart vsftpd.service ``` - 创建一个空的/etc/vsftpd/chroot_list文件。 - 修改/etc/vsftpd/chroot_list文件的权限为750,即只有所有者具有读、写和执行权限。 - 重新启动vsftpd服务,使配置生效。 ```shell mv /etc/issue /etc/issue.bak mv /etc/issue.net /etc/issue.net.bak touch /etc/motd chmod 644 /etc/motd ``` - 备份/etc/issue和/etc/issue.net文件,将其重命名为/etc/issue.bak和/etc/issue.net.bak。 - 创建一个空的/etc/motd文件。 - 修改/etc/motd文件的权限为644,即所有用户具有读权限,其他权限为空。 ```shell rpm -e telnet-server systemctl stop telnet.socket ``` - 卸载telnet-server软件包。 - 停止telnet服务。 ```shell if grep -q "Authorized only. All activity will be monitored and reported" /etc/motd then echo 'have' else echo "Authorized only. All activity will be monitored and reported" >> /etc/motd fi ``` - 检查/etc/motd文件中是否存在"Authorized only. All activity will be monitored and reported"这一行。 - 如果存在,则输出"have"。 - 如果不存在,则在文件末尾添加一行"Authorized only. All activity will be monitored and reported"。 ```shell if [ -f "/etc/syslog.conf" ];then echo 'authpriv.* /var/log/secure' >> /etc/syslog.conf echo 'cron.*' >> /etc/syslog.conf echo '*.* @133.64.93.31' >> /etc/syslog.conf service syslog restart fi ``` - 检查/etc/syslog.conf文件是否存在。 - 如果存在,则在文件末尾添加以下几行配置: - "authpriv.* /var/log/secure":将authpriv类别的日志记录到/var/log/secure文件。 - "cron.*":将cron类别的日志记录到默认位置。 - "*.* @133.64.93.31":将所有日志发送到IP地址为133.64.93.31的远程主机。 - 重新启动syslog服务,使配置生效。 ```shell if [ -f "/etc/rsyslog.conf" ];then echo 'authpriv.* /var/log/secure' >> /etc/rsyslog.conf echo 'cron.*' >> /etc/rsyslog.conf echo '*.* @133.64.97.31' >> /etc/rsyslog.conf service rsyslog restart systemctl restart rsyslog.service fi ``` - 检查/etc/rsyslog.conf文件是否存在。 - 如果存在,则在文件末尾添加以下几行配置: - "authpriv.* /var/log/secure":将authpriv类别的日志记录到/var/log/secure文件。 - "cron.*":将cron类别的日志记录到默认位置。 - "*.* @133.64.97.31":将所有日志发送到IP地址为133.64.97.31的远程主机。 - 重新启动rsyslog服务,使配置生效。 ```shell echo 'ok' ``` - 输出"ok",表示脚本执行完毕。 这段脚本的目的是修改一些vsftpd和系统的配置,并重新启动相应的服务,以增强系统的安全性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值