WSL2-microstack 的 snap 安装失败

WSL2-microstack 的 snap 安装失败

我在带有 WSL2 的 Windows 11 上运行 Ubuntu 22.04.2 LTS。

init microstack init fails at "Configuring networking" with "snapctl start microstack.ovs-vswitchd --enable' returned non-zero exit status 1"

我成功安装了 microstacksudo snap install microstack --devmode --edge

我之前也尝试过snap install microstack --classic --beta并且再次尝试过snap install microstack --beta

在所有示例中,都sudo microstack init --auto --control失败了:

2023-03-19 14:05:07,415 - microstack_init - INFO - Configuring clustering ...
2023-03-19 14:05:07,568 - microstack_init - INFO - Setting up as a control node.
2023-03-19 14:05:13,275 - microstack_init - INFO - Generating TLS Certificate and Key
2023-03-19 14:05:14,800 - microstack_init - INFO - Configuring networking ...
Traceback (most recent call last):
  File "/snap/microstack/245/bin/microstack", line 11, in <module>
    load_entry_point('microstack==0.0.1', 'console_scripts', 'microstack')()
  File "/snap/microstack/245/lib/python3.8/site-packages/microstack/main.py", line 44, in main
    cmd()
  File "/snap/microstack/245/lib/python3.8/site-packages/init/main.py", line 60, in wrapper
    return func(*args, **kwargs)
  File "/snap/microstack/245/lib/python3.8/site-packages/init/main.py", line 228, in init
    question.ask()
  File "/snap/microstack/245/lib/python3.8/site-packages/init/questions/question.py", line 210, in ask
    self.yes(awr)
  File "/snap/microstack/245/lib/python3.8/site-packages/init/questions/__init__.py", line 208, in yes
    enable('ovs-vswitchd')
  File "/snap/microstack/245/lib/python3.8/site-packages/init/shell.py", line 162, in enable
    check('snapctl', 'start', 'microstack.{}'.format(service), '--enable')
  File "/snap/microstack/245/lib/python3.8/site-packages/init/shell.py", line 69, in check
    raise subprocess.CalledProcessError(proc.returncode, " ".join(args))
subprocess.CalledProcessError: Command 'snapctl start microstack.ovs-vswitchd --enable' returned non-zero exit status 1.

答案1

抱歉,我回复得晚了,无法在 WSL2 上直接安装 Microstack,虽然可以做到,但过程有点复杂,但最终还是成功了!

这不起作用,因为 WSL2 的默认 Microsoft 内核不包含 Openvswitch,因此有一个服务无法启动并且所有初始化都失败。要解决这个问题,你需要在 WSL2 发行版上使用包含 openvswitch 的自定义内核

我将解释你必须执行的所有步骤。首先,我在 ubuntu 22.04 上使用了此方法,但我认为它也适用于 20.04,但我不确定

首先,如果您已经拥有 Ubuntu 22.04 发行版或者没有,则应该使用以下命令安装它:

wsl --install -d Ubuntu-22.04

如果你已经拥有它,我建议你使用以下方法重置发行版

wsl --unregister Ubuntu-22.04

拥有一个完全干净的 Ubuntu 22.04 发行版后,你可以开始执行以下步骤。现在你需要安装编译自定义内核所需的一切

sudo apt update -y
sudo apt install -y build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool

安装这些必要的软件包后,使用以下命令进入 /usr/src 文件夹

cd /usr/src

现在您需要克隆内核源代码存储库:

sudo git clone https://github.com/microsoft/WSL2-Linux-Kernel.git --depth=1 wsl2

如果存储库未克隆并出现以下错误:

Error: "fatal: unable to access 'https://github.com/microsoft/WSL2-Linux-Kernel.git': Could not resolve host: github.com"

使用这两个命令:

git config --global --unset http.proxy
git config --global --unset https.proxy

成功克隆内核存储库后,你可以继续

进入“wsl2”文件夹

cd wsl2

现在你需要在编译实际的内核之前做一些小配置

以 root 身份登录

sudo su
zcat /proc/config.gz > .config

打开内核的配置:

make menuconfig

并启用这些条目:选择按 Y 键

General Setup\Compile the kernel with warnings as errors
General Setup\Automatically append version information to the version string

然后进入 Openvswitch,这次选择使用 M 键

Networking Support\Networking Options\Open vSwitch

然后退出并保存设置

现在您需要编辑存储在“Microsoft\config-wsl”中的文件

nano Microsoft/config-wsl

现在我们需要更改内核名称:

现在将 CONFIG_LOCALVERSION 指令的值更改为“-WSL2-Custom-Kernel-ovs”

CONFIG_LOCALVERSION="-WSL2-Custom-Kernel-ovs"

现在取消注释 CONFIG_OPENVSWITCH 行,并分配“y”,这是非常重要的一点,CONFIG_OPENVSWITCH 项已被注释掉

CONFIG_OPENVSWITCH=y

现在保存最后一个文件并安装这两个包:

apt install -y bc dwarves

您现在可以构建自定义内核了

要开始构建内核,请运行:

make O=out KCONFIG_CONFIG=Microsoft/config-wsl

如果在运行内核构建时立即收到错误,请运行以下命令:

make mrproper

如果他问你关于 Openvswitch 的问题,请回答(是)

现在你将需要等待很长时间,编译过程需要两个多小时,这取决于你的电脑的时间,我花了将近 4 个小时

编译成功时

进入“out”文件夹

cd out

然后在你的用户文件夹 C:\Users\username\ 中创建一个文件夹“wsl2”

从 wsl 将此文件复制到之前创建的文件夹:

cp vmlinux /mnt/c/Users/username/wsl2/

然后运行命令

make modules_install

然后在您的用户文件夹中创建一个名为“.wslconfig”的文件

用记事本打开,指定导出内核的位置

[wsl2]
kernel = C:\\Users\\username\\wsl2\\vmlinux

保存此文件

现在你需要重新启动你的 WSL2 发行版

wsl --shutdown

现在再次打开 WSL2 发行版,通过输入以下命令:

sudo uname -r

你会看到:

version-WSL2-Custom-Kernel-ovs+

您已经在 WSL2 上完美安装并配置了自定义内核,现在您终于可以运行 Microstack 了!

这个过程漫长而复杂,但如果你成功到达这里,你就可以安装 Microstack

安装 Microstack:

sudo snap install microstack --devmode --edge

使用以下方法初始化微栈:

sudo microstack init --auto --control

如果您所有操作都正确,该错误将被修复!

初始化成功后,你将能够使用 WSL2 发行版的地址访问 openstack 仪表板

https://wsl2ipaddress/

要获取访问仪表板的管理员密码,请键入

sudo snap get microstack config.credentials.keystone-password

就这样,现在您可以在 WSL2 中享受 Microstack 的工作安装了!

更新答案

如果你不想执行上面列出的所有操作

我在 GitHub 上创建并发布了两个脚本,简化了所有操作

该脚本有两个版本:

这是编译内核的版本:(需要2-4个小时) https://github.com/Sorecchione07435/Microstack-Configurer-WSL2

而此版本将使用已导出所有内核模块的 vmlinux 文件(这将需要 1-2 分钟)

https://github.com/Sorecchione07435/Microstack-Configurer-WSL2-v2

成功运行其中一个脚本后,您将能够安装和初始化 Microstack,因为大部分工作已由脚本完成

GitHub 页面上有所有内容的解释

相关内容