![WSL2-microstack 的 snap 安装失败](https://linux22.com/image/1029399/WSL2-microstack%20%E7%9A%84%20snap%20%E5%AE%89%E8%A3%85%E5%A4%B1%E8%B4%A5.png)
我在带有 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 页面上有所有内容的解释