V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
升级到 Windows 11
charlieethan
V2EX  ›  Windows

WSL2 现已支持 Systemd

  •  5
     
  •   charlieethan · 14 天前 · 6521 次点击

    根据微软的官方博客: https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl ,在最新版的 WSL2 中已经支持了 Systemd ,升级的方法如下(以 Windows 商店内的 Ubuntu 发行版为例,Windows 版本为 Windows 11 22H2 ):

    • 更新 WSL 版本:wsl.exe --update

    • 查看 WSL 版本:wsl.exe --version

    如果第一行显示为 WSL version: 0.67.6.0 ,则已升级到支持 systemd 的版本

    • 设置 systemd 开机自启(在 Linux 内执行以下命令):
    sudo cat > /etc/wsl.conf <<EOF
    [boot]
    systemd=true
    EOF
    
    • 退出 Linux 子系统,并关闭 WSL:wsl.exe --shutdown

    • 重新进入 WSL ,输入 systemctl list-unit-files --type=service ,即可检验 systemd 的运行状态

    57 条回复    2022-09-29 15:09:11 +08:00
    brucmao
        1
    brucmao  
       14 天前
    升级失败
    ❯ wsl.exe --update
    正在检查更新。
    The system cannot find the file specified.
    Error code: Wsl/UpdatePackage/ERROR_FILE_NOT_FOUND
    codehz
        2
    codehz  
       14 天前
    wsl 也要商店安装的版本,于是 win10 用不了了)
    brucmao
        3
    brucmao  
       14 天前
    我用的商店里 Windows Subsystem for Linux Preview ,版本才 0.66.2.0
    charlieethan
        4
    charlieethan  
    OP
       14 天前
    @brucmao 没遇到过,建议直接去 https://github.com/microsoft/WSL/releases/tag/0.67.6 下载 msixbundle 安装
    BeautifulSoap
        5
    BeautifulSoap  
       14 天前
    @brucmao 我也一样的问题,结果看到了: "This version of WSL is now available in the Microsoft Store to users on Windows Insiders build for initial testing" 。干,不光要 win11 ,还要装 store 版本,还必须系统是 insider 。

    不过文档也说了可以从 WSL release page 安装还算好,但手动安装的话今后更新估计麻烦
    Hylenbin
        6
    Hylenbin  
       14 天前 via iPhone
    看了,必须 win11 ,很讨厌圆角,还是坚守 win10
    momocraft
        7
    momocraft  
       14 天前
    用这个可以在 wsl VM 里跑 dockerd 吗
    learningman
        8
    learningman  
       14 天前
    PS C:\Users\u> wsl --update
    正在检查更新。
    已安装最新版本的适用于 Linux 的 Windows 子系统。
    PS C:\Users\u> wsl --version
    WSL 版本:0.66.2.0
    内核版本:5.15.57.1
    WSLg 版本:1.0.42
    MSRDC 版本:1.2.3401
    Direct3D 版本:1.606.4
    DXCore 版本:10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
    Windows 版本:10.0.22000.978
    kindjeff
        9
    kindjeff  
       14 天前
    22H2 Preview 升级成功

    不过我最需要 systemd 的应用 docker 已经用 podman 替代了,现在还真没有东西要用 systemd
    DonkeyBenjamin
        10
    DonkeyBenjamin  
       14 天前
    买了 systemd 作者算是值了?
    不过还是不想用 win, 广告,ebpf 不支持,ssh 和 syncthing 配置方案麻烦,部份软件需要特殊配置。。。
    hahastudio
        11
    hahastudio  
       14 天前
    @kindjeff docker 用 systemd 么?我自己装 docker service 跑着没感觉出什么问题
    kindjeff
        12
    kindjeff  
       14 天前
    @hahastudio #11 不用 systemd 如何自动启动 daemon 呢
    cyaki
        13
    cyaki  
       14 天前
    @kindjeff 可以用 systemd + Podman
    andyskaura
        14
    andyskaura  
       14 天前
    wsl2 监听局域网 ip 有没有什么好点的办法
    oldshensheep
        15
    oldshensheep  
       14 天前
    成功了,用的 ArchLinux 。

    ➜ ~ systemctl list-unit-files --type=service | grep docker
    docker.service disabled disabled
    Nitroethane
        16
    Nitroethane  
       14 天前
    @DonkeyBenjamin #10 了解下 epbf-for-windows ( https://github.com/microsoft/ebpf-for-windows ),不过我不用 windows ,没试过,不知道效果咋样
    DonkeyBenjamin
        17
    DonkeyBenjamin  
       14 天前
    @Nitroethane 感谢指出,这个当初看过一点,但是项目还处于早期阶段,懒得自己去踩坑。目前很多基于 ebpf 的工具和项目没有提到支持 wsl2 和 ebpf for windows.
    dinghmcn
        18
    dinghmcn  
       14 天前
    @oldshensheep #15 成功了,同用的 ArchLinux 。
    hahastudio
        19
    hahastudio  
       14 天前
    @kindjeff
    我在 profile 里加了 service docker start
    wolfie
        20
    wolfie  
       14 天前
    @kindjeff
    nohup dockerd &
    onikage
        21
    onikage  
       14 天前
    现在 ip 能固定了吗?
    urzz
        22
    urzz  
       14 天前
    终于支持 systemd 了,不容易啊。。
    不过我碰到 wslg 打开 idea ,过段时间就假死的问题,被迫弃了 wsl2 ,另外 wsl2 的固定 ip 是不是还不支持
    cco
        23
    cco  
       14 天前
    ❯ wsl.exe --update
    正在检查更新。
    已安装最新版本的适用于 Linux 的 Windows 子系统。
    ❯ wsl --version
    WSL 版本:0.66.2.0
    内核版本:5.15.57.1
    WSLg 版本:1.0.42
    MSRDC 版本:1.2.3401
    Direct3D 版本:1.606.4
    DXCore 版本:10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
    Windows 版本:10.0.22000.978
    kid740246048
        24
    kid740246048  
       14 天前   ❤️ 1
    @onikage #21
    @urzz #22
    0.51.2 版本以上可以桥接网卡,配合路由器设置可以固定 ip
    https://github.com/microsoft/WSL/issues/4150#issuecomment-1018524753
    jdz
        25
    jdz  
       14 天前 via Android
    @kindjeff podman 比 docker 有哪些优势么用起来
    xwcs
        26
    xwcs  
       14 天前
    更新后无法在 wsl2 中调用 windows 程序了
    WSL 版本:0.67.6.0
    内核版本:5.15.62.1
    WSLg 版本:1.0.44
    MSRDC 版本:1.2.3401
    Direct3D 版本:1.606.4
    DXCore 版本:10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
    Windows 版本:10.0.22000.978
    ![]( https://files.catbox.moe/x5ziag.png)
    xwcs
        28
    xwcs  
       14 天前   ❤️ 1
    开启这个 systemd 之后的话是无法调用 Windows 程序了,慎用
    LifStge
        29
    LifStge  
       14 天前
    用的 win10 其实吧 写个脚本 win 下添加个计划任务 还不错呢...
    phenixc
        30
    phenixc  
       14 天前
    @andyskaura beta 版本支持桥接了
    phenixc
        31
    phenixc  
       14 天前   ❤️ 1
    @onikage beta 版本支持桥接了
    kindjeff
        32
    kindjeff  
       14 天前   ❤️ 1
    @jdz #25

    没有 daemon 就是个很大的优势,装好了直接用,不用起一个后台程序;也不用管什么 root 权限、docker 用户组的事情,当前用户就能用

    然后 cli 几乎完全兼容,alias docker=podman 就可以

    docker-compose 有 podman-compose 这样的兼容工具

    他官方吹的写 k8s pod deploy yaml 在我看来几乎没有用,最重要的滚动更新用不成,还是用 compose 顺手
    billlee
        33
    billlee  
       14 天前 via Android
    @jdz 没有 daemon 还有一个优势就是,容器进程就是 podman 命令的子进程,很容易监控容器的存活状态
    zhhww57
        34
    zhhww57  
       14 天前
    之前都是自己 fake 一个 systemd ,或者弄 sysvinit ,这也是我讨厌 systemd ,而喜欢 sysvinit ,openrc 之类的原因,chroot ,proot ,wsl ,docker 之类的总是 init 系统一堆问题,后来干脆自己弄了个 fake 版本的 systemd ,直接导入自己的源,安装这个替换掉原版 sstemd ,然后 systemctl 的时候带了个解析器,自动解析 service 格式的服务,然后启动
    jdz
        35
    jdz  
       14 天前 via Android
    @kindjeff vscode 可以远程么。类似远程 docker container
    lambdaq
        36
    lambdaq  
       14 天前
    wsl2 不是虚拟机么。之前为啥不支持?
    Noicdi
        37
    Noicdi  
       14 天前
    Windows 11 22H2 ,wsl --update 后的版本为 0.66.2.0 ,store 中 wsl preview 版本也是如此,够不到 0.67.6 ,看来暂时无缘了。
    dingwen07
        38
    dingwen07  
       14 天前
    非 Insider 用户从这里下载 Preview:
    https://github.com/microsoft/WSL/releases
    0attocs
        39
    0attocs  
       13 天前
    @lambdaq #28 为了更方便地处理 wsl 的特殊需求吧。wsl2 是一个运行 linux distro container 的 host vm ,本来用的是微软自己的(多个) init binary 。除了 pid 1 的 init 之外,其他的 init 用来管理 linux distro containers ,跑 9p server ,处理 linux 和 windows binary 的互操作之类的。
    Dragonphy
        40
    Dragonphy  
       13 天前   ❤️ 1

    @xwcs #28 可以调用 Windows 程序
    kindjeff
        41
    kindjeff  
       13 天前 via Android
    @jdz 这我就真没试过了,不太用 vscode
    jelipo
        42
    jelipo  
       13 天前
    @DonkeyBenjamin #10 请问一下为什么不支持 ebpf ,不是完全虚拟化的 Linux 吗
    xwcs
        43
    xwcs  
       13 天前
    @Dragonphy 系统是什么?是在 Windows store 安装的吗?我是安装的 archwsl ,开启之后就没法调用 Windows 程序了
    Dragonphy
        44
    Dragonphy  
       13 天前

    @xwcs #43
    xwcs
        45
    xwcs  
       13 天前
    @Dragonphy 我在公司电脑上试了下也是可以,看来跟这个问题有点关系
    https://github.com/microsoft/WSL/issues/8855
    xwcs
        46
    xwcs  
       13 天前
    2NUT
        47
    2NUT  
       13 天前
    wsl2 也是虚拟机,为啥不直接用虚拟机,徒增烦恼

    wsl2 对微软最有用,对个人开发者用处不大
    0attocs
        48
    0attocs  
       13 天前
    @Dragonphy #31 他发的那个 issue 里描述的是重启 WSL2 后打开第一个 linux distro 时可以互操作,打开第二个后就不行了。

    https://github.com/microsoft/WSL/issues/8843#issuecomment-1254778464
    0attocs
        49
    0attocs  
       13 天前   ❤️ 2
    @2NUT #37 WSL2 能和宿主 Windows 互操作,能直接调用互相的 binary ,由此能衍生不少花样,对特定人群有不可替代性。

    例如,WSL2 支持 GPU 穿透并和宿主 Windows**共用一张不支持虚拟化的 GPU**,比如 GeForce 系列 GPU 。此时 WSL2 直接使用宿主 Windows 的 GPU 驱动,调用直接转发到宿主 GPU ,除了很小的转发 overhead 之外,没有性能损失(不过首发时 GPU 带宽好像默认是 PCIEx8 而非 x16 )。而其他 VM 即使支持 GPU 穿透,据我所知在不支持 vGPU 显卡上需要独占该显卡。
    jingcoco
        50
    jingcoco  
       12 天前
    @Dragonphy 大佬 求主题。。
    Dragonphy
        51
    Dragonphy  
       12 天前
    @jingcoco #50
    ohmyfish 的 eden 主题,Windows Terminal 用的是 one half dark
    Dragonphy
        52
    Dragonphy  
       12 天前
    @Dragonphy #51 light
    yukunZhan9
        53
    yukunZhan9  
       12 天前
    >wsl --update
    正在检查更新...
    正在下载更新...
    请求的操作需要提升。


    ---
    这是什么原因?有大佬知道吗
    yukunZhan9
        54
    yukunZhan9  
       12 天前
    @yukunZhan9 需要使用商店安装的 WSL ,已解决.
    chronos
        55
    chronos  
       11 天前
    @xwcs https://github.com/microsoft/WSL/issues/8843#issuecomment-1255546484 这里提到的 WSLInterop.conf 文件放到 /usr/lib/binfmt.d 目录下,再重启一下 wsl 应该就可以正常使用了。
    fgwmlhdkkkw
        56
    fgwmlhdkkkw  
       7 天前
    @Dragonphy #40 这个是什么主题呀
    Dragonphy
        57
    Dragonphy  
       7 天前
    @fgwmlhdkkkw #56
    见 51 楼
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1810 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 16:26 · PVG 00:26 · LAX 09:26 · JFK 12:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.