Windows11 wsl2 启用systemctl,systemd

我的windows11安装了wsl,debian,想要启用systemd,找了半天解决方案,在国外的大佬文章里找到了解决方案,记录一下

原文链接:WSL 2 - Enabling systemd (github.com)

稍微翻译一下内容如下:

此教程用于在wsl中启用systemd,目前测试的系统为Windows10 wsl2,Windows11 wsl2

想要在wsl中启用systemd需要一个叫做systemd-genie的软件

将install-sg.sh的内容拷贝到 /tmp/install-sg.sh当中保存

(如果可以访问github的话,直接执行下面的脚本就行,访问不了可以拷贝我最后面的代码部分,新建 /tmp/install-sg.sh ,将代码粘贴进去即可,效果一样的):

cd /tmp
wget --content-disposition \
"https://gist.githubusercontent.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950/raw/952347f805045ba0e6ef7868b18f4a9a8dd2e47a/install-sg.sh"


给脚本可执行权限:

chmod +x /tmp/install-sg.sh

运行这个脚本,并且清理掉这个脚本:

/tmp/install-sg.sh && rm /tmp/install-sg.sh


退出wsl终端并且关闭wsl,启动能够使用systemd的wsl:(这两行代码要在powershell里面执行,目前来看似乎每次重启完windows之后都要再执行以下这两个命令才能正常使用systemctl)

wsl --shutdown
wsl genie -s

验证systemctl是否可用:

sudo systemctl status time-sync.target

再wsl中执行如上脚本,类似下图说明systemctl已经可以正常使用了,这样配置完每次重启都要重新执行一下上面的powershell命令才能启用systemd,我又写了一个开机自动后台执行脚本的文章,有兴趣可以点击看看

install-sg.sh脚本我也拷贝出来了,有需要可以自取
#! /usr/bin/env bash
set -e

# change these if you want
UBUNTU_VERSION="20.04"
GENIE_VERSION="1.44"

GENIE_FILE="systemd-genie_${GENIE_VERSION}_amd64"
GENIE_FILE_PATH="/tmp/${GENIE_FILE}.deb"
GENIE_DIR_PATH="/tmp/${GENIE_FILE}"

function installDebPackage() {
  # install repackaged systemd-genie
  sudo dpkg -i "${GENIE_FILE_PATH}"

  rm -rf "${GENIE_FILE_PATH}"
}

function downloadDebPackage() {
  rm -f "${GENIE_FILE_PATH}"

  pushd /tmp

  wget --content-disposition \
    "https://github.com/arkane-systems/genie/releases/download/v${GENIE_VERSION}/systemd-genie_${GENIE_VERSION}_amd64.deb"

  popd
}

function installDependencies() {
  sudo apt-get update

  wget --content-disposition \
    "https://packages.microsoft.com/config/ubuntu/${UBUNTU_VERSION}/packages-microsoft-prod.deb"

  sudo dpkg -i packages-microsoft-prod.deb
  rm packages-microsoft-prod.deb

  sudo apt-get install apt-transport-https

  sudo apt-get update
  sudo apt-get install -y \
    daemonize \
    dotnet-runtime-5.0 \
    systemd-container

  sudo rm -f /usr/sbin/daemonize
  sudo ln -s /usr/bin/daemonize /usr/sbin/daemonize
}

function main() {
  installDependencies

  downloadDebPackage

  installDebPackage
}

main