WSL2虽已升级为完整的Linux Kernel, 但仍存在很多的问题。

<font color="green" id="keyword1">『Issue 1』Linux Header缺失问题</font>

『背景』:WSL默认包含了 Linux Kernel(如:4.19.84-microsoft-standard), 但却缺失了 Linux Header文件,而安装某些 package时又必须依赖 Linux Header文件,如 anbox。
『解决方法』:从官方提供下载的 kernel文件中,恢复(restore)对应的 Linux Header至 /lib/module目录中。

 

  • #### 『解决方法』参考网址 ####
  • #### 微软官方Linux Kernel for Microsoft Standard下载网址 ####
  • Resore Linux Header for WSL2 Kernel Step by Step

    • Step1: 查看内核版本 $ uname -r 4.19.84-microsoft-standard
    • Step2: 从微软官方下载对应的Kernel包(154MB) <code>WSL2-Linux-Kernel-4.19.84-microsoft-standard.tar.gz</code>

    • Step3: 准备工作

      $ sudo apt-get install libelf-dev build-essential pkg-config            
      $ sudo apt-get install bison build-essential flex libssl-dev libelf-dev bc
      
    • Step4: 从Kernel文件进行恢复(restore) modules

      $ cd ~
      $ wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/4.19.84-microsoft-standard.tar.gz   //从微软下载WSL2-Linux-Kernel
      $ sudo tar xvzf 4.19.84-microsoft-standard.tar.gz                    //tar文件完成后可删除
      $ cd WSL2-Linux-Kernel-4.19.84-microsoft-standard                    //该目录完成后不可删除,"/lib/modules"与其symlink
      
      # zcat /proc/config.gz > .config
      
      # make -j $(nproc)                                                   //Compile the kernel and modules
      $ sudo make -j $(nproc) modules_install                              //Install the modules
      
      //make a symlink of that install
      $ cd /lib/modules
      $ sudo ln -s 4.19.84-microsoft-standard+/ 4.19.84-microsoft-standard    
      
      • 此时,在/lib/modules目录中,已看到生成的"4.19.84-microsoft-standard"目录,其包含了对应的Linux Header等等。即表示kernel恢复配置已成功,其他依赖其的package可正常安装。

 

<font color="green" id="keyword2">『Issue 2』Snapd不正常问题</font>

  • #### 问题描述 #### $ sudo snap install --devmode --beta anbox error: cannot communicate with server: Post http://localhost/v2/snaps/anbox: dial unix /run/snapd.socket: connect: no such file or directory
  • 『解决方法』参考网址

    该 Issue和 linux header没有关系。

  • Troubleshooting Step by Step

    • Step1: 卸载自带Snapd并重装它

      sudo apt purge -y snapd && sudo apt autoremove -y
      sudo apt install snapd
      

      此时snapd为不工作状态

      $ snap version
      snap    2.42.1+18.04
      snapd   unavailable
      series  -
      
    • Step2: 准备工作

      sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig
      
      //安装daemonize(否则以下文件修改后,会出现"/usr/sbin/daemonize: No such file or directory"错误,而无法再次进入wsl)
      sudo apt-get update -y
      sudo apt-get install -y daemonize
      
    • Step3: 新建&修改文件

      • <font color="#4d8df1">文件1:新建</font>】/usr/sbin/start-systemd-namespace文件 sudo nano /usr/sbin/start-systemd-namespace,添加以下内容:File1

      • <font color="#4d8df1">文件2:新建</font>】/usr/sbin/enter-systemd-namespace文件 sudo nano /usr/sbin/enter-systemd-namespace,添加以下内容后并赋予可执行权限(chmod +x)sudo chmod +x /usr/sbin/enter-systemd-namespaceFile2

      • <font color="#4d8df1">文件3:修改</font>】/etc/sudoers文件(推荐使用 sudo visudo命令) sudo visudo -f /etc/sudoers,在文件的末尾添加以下内容:Add3

      • <font color="#4d8df1">文件4:修改</font>】在/etc/bash.bashrc文件中,需要增加一行,直接运行以下命令进行增加

        sudo sed -i 2a"# Start or enter a PID namespace in WSL2\nsource /usr/sbin/start-systemd-namespace\n" /etc/bash.bashrc
        
    • Step4: 在CMD窗口,增加两个环境变量

      cmd.exe /C setx WSLENV BASH_ENV/u
      cmd.exe /C setx BASH_ENV /etc/bash.bashrc
      
    • Step5: 退出WSL2所有进程,以确保更改后的new kernel得以应用

      //在Powershell运行:
      wsl --shutdown
      
    • Step6: 重新进入WSL,并输入snap version命令。以下状态表示Snapd正常工作

      $ snap version
      snap    2.42.1+18.04
      snapd   2.42.1+18.04
      series  16
      ubuntu  18.04
      kernel  4.19.84-microsoft-standard
      
Sign in or Sign up Leave Comment