创建 enter-systemd-namespace

创建 enter-systemd-namespace

我按照官方 kubernetes 站点的说明创建了这个:https://kubernetes.io/blog/2020/05/21/wsl-docker-kubernetes-on-the-windows-desktop/

我的 WSL 现在无法工作。它卡在提示符处:/usr/sbin/enter-systemd-namespace: 第 10 行:/usr/sbin/daemonize: 没有该文件或目录

请帮忙。我是初学者。

创建 enter-systemd-namespace

   sudo vi /usr/sbin/enter-systemd-namespace

#!/bin/bash

if [ "$UID" != 0 ]; then
    echo "You need to run $0 through sudo"
    exit 1
fi

SYSTEMD_PID="$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')"
if [ -z "$SYSTEMD_PID" ]; then
    /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
    while [ -z "$SYSTEMD_PID" ]; do
        SYSTEMD_PID="$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')"
    done
fi

if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
    if [ -n "$1" ] && [ "$1" != "bash --login" ] && [ "$1" != "/bin/bash --login" ]; then
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -a \
            /usr/bin/sudo -H -u "$SUDO_USER" \
            /bin/bash -c 'set -a; source "$HOME/.systemd-env"; set +a; exec bash -c '"$(printf "%q" "$@")"
    else
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -a \
            /bin/login -p -f "$SUDO_USER" \
            $(/bin/cat "$HOME/.systemd-env" | grep -v "^PATH=")
    fi
    echo "Existential crisis"
fi

答案1

很高兴听到您能够使用恢复机制解决问题wsl vi /usr/sbin/enter-systemd-namespace

但是关于您所遵循的流程,有几点需要注意(其中最重要的是最后一点):

我按照官方 kubernetes 站点的说明创建了这个

请注意,您链接到的页面在我看来是访客博客,而不是“官方”文档。还请注意页面顶部的警告——我个人非常欣赏 Kubernetes 对超过一年的博客文章自动发出通知:

这篇文章已有一年多的历史。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否不正确。

考虑到它使用 Ubuntu 18.04,距离其标准支持结束仅有 6 个月左右的时间,因此它绝对可以使用更新。


来自博客文章标题:

WSL+Docker:Windows 桌面上的 Kubernetes

也许我有点误解了,因为我不是 K8s 专家,但我认为这篇文章应该更准确的标题是“Windows 桌面上的 Minikube”。

如果你只需要 Kubernetes,而不需要 Minikube,那么 Docker Desktop 包含一个带有单节点集群的 K8s 服务器和客户端。请参阅Docker 文档了解更多信息。

请注意,Docker Desktop Kubernetes 实现不需要 Systemd。


以下引自博客文章:

为了在 WSL2 上启用 SystemD,我们将应用 Daniel Llewellyn 的脚本。

如果你确实需要 Minikube,我会说我不喜欢在 WSL 上启用 Systemd 的脚本。我的理由如下这个答案,但可以说,像这样在 Systemd 命名空间内运行会彻底改变 WSL 的工作方式。至少,有比该脚本更好(更新、更强大)的选项。

现在,如果你至少是 Windows 11 用户,你可以使用启用 Systemd 支持的 Microsoft 官方 WSL 版本。这几乎肯定比博客文章推荐的脚本更好。请参阅这个答案有关如何使用最新版本在 Windows 11 上的 WSL 中启用 Systemd 支持的详细信息。

相关内容