您尚未登录。

#1 2020-08-07 15:03:22

matrikslee
会员
注册时间: 2017-04-21
帖子: 450
个人网站

[伪Arch(异端?)]ArchWSL 的一些记录

最开始只是想在公司办公电脑上更舒服的使用linux shell,所以装了WSL。
后来发现可以用Arch,就把发行版换成了ArchWSL(其实并没有太多的好处)
【我是不会承认我就是冲着用pacman去的...XD】

环境: Win10 1709的WSL + ArchWSL-AppX_20.4.3.0_x64.appx
我的目标:在后台开一个posix shell环境,可以随时通过ssh连上去干活

安装和配置pacman 源的东西就不写了,wiki上大堆现成的内容可以参考。
安装完成后配置shell相关环境,WSL对oh-my-zsh等shell相关工具的兼容性还是非常棒的,
与真机环境下的Ach没有太多差异,tmux也能支持

完成相关安装和环境初始化之后,开始改善易用性:

1. 做一个vb脚本(wsl-startup.vbs)持久化后台shell 并 启动sshd以便随时登录

set ws=wscript.createobject("wscript.shell")
ws.run "C:\Android\adb.exe start-server",0
ws.run "C:\Windows\System32\wsl.exe -u root -e /usr/bin/sshd -D",0
ws.run "C:\Windows\System32\bash.exe -u root -e chmod +rwx /dev/ttyS*",0

然后把这个脚本放入windows的自启动目录即可

然后问题来了,默认状态下 systemctl是没法用的,我之前发的讨论帖 https://bbs.archlinuxcn.org/viewtopic.php?id=5960
更多的内容可以参考github 上关于wsl init的讨论。

我在internet上找到了相关替代品——一个用python实现的脚本 (^1)
食用方法:直接wget(或者curl)https://raw.githubusercontent.com/gdrah … stemctl.py
然后执行一次下面的命令

sudo cp $(which systemctl) $(which systemctl).old
sudo cp systemctl.py $(which systemctl)
sudo chmod +x $(which systemctl)

ok,systemctl 已经可以用来start一些服务了,但是systemctl enable依然不可用,所以得在vbs脚本中写上start命令

然而会发现sshd还是没有启动起来,而且替代品的systemctl还有相关log(淦!)

手动执行sshd得到提示 sshd: no hostkeys available -- exiting.
查阅Internet发现是因为没有相关host key,所以执行下列命令(^2):

# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# ssh-keygen -t ecdsa -f  /etc/ssh/ssh_host_ecdsa_key
# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

最后,我使用putty作为ssh客户端连上去,putty对于ssh terminal的兼容性还是非常不错的!

references:
(^1)https://github.com/gdraheim/docker-syst … placement/
(^2) https://my.oschina.net/u/4325464/blog/4279295

最近编辑记录 matrikslee (2021-04-06 10:20:40)

离线

#2 2020-08-07 15:41:29

silkriver
会员
注册时间: 2020-07-24
帖子: 148

Re: [伪Arch(异端?)]ArchWSL 的一些记录

Win10 升到 2004 用 WSL2,然后上 Microsoft Store 装 Windows Terminal 或 VSCode 装 Remote Development 插件,微软官方正统~

离线

#3 2020-08-07 16:38:31

matrikslee
会员
注册时间: 2017-04-21
帖子: 450
个人网站

Re: [伪Arch(异端?)]ArchWSL 的一些记录

silkriver 说:

Win10 升到 2004 用 WSL2...微软官方正统~

WSL2是比WSL改善了很多东西,我也想上WSL2,但是WSL2也有硬伤
不能访问usb(例如adb)以及串口,而WSL这边是完美支持的

另外,公司电脑不是个人电脑,操作系统版本自己选不了,如果可以,我直接上Arch它不香嘛...  wink

最近编辑记录 matrikslee (2020-08-07 16:38:56)

离线

#4 2021-03-29 16:38:09

matrikslee
会员
注册时间: 2017-04-21
帖子: 450
个人网站

Re: [伪Arch(异端?)]ArchWSL 的一些记录

自从Archlinux的glibc包的2.33-4版本在build时加入了--enable-kernel编译选项后,WSL Arch的kernel由于是windows提供的二进制文件且无法升级导致Fatal: kernel too old错误。

修复的方法是编辑pacman.conf将[core]的mirror server改成一个备份mirror以避免升级glibc软件包,弊端就是所有软件都无法升级了(WSL还要什么升级)【这很不Arch!!!】

参考:
https://bugs.archlinux.org/task/69684
https://www.gitmemory.com/issue/yuk7/Ar … /781374779

最近编辑记录 matrikslee (2021-03-29 20:11:57)

离线

#5 2021-03-29 16:46:51

SamLukeYes
会员
所在地: Canton, China
注册时间: 2020-07-19
帖子: 320
个人网站

Re: [伪Arch(异端?)]ArchWSL 的一些记录

matrikslee 说:

自从Archlinux的glibc包在build的时候加入了--enable-kernel编译选项后,WSL Arch的kernel由于是windows提供的二进制文件且无法升级导致Fatal: kernel too old错误。

https://aur.archlinux.org/packages/glibc-linux4
试试这个?

离线

#6 2021-03-29 20:11:17

matrikslee
会员
注册时间: 2017-04-21
帖子: 450
个人网站

Re: [伪Arch(异端?)]ArchWSL 的一些记录

SamLukeYes 说:
matrikslee 说:

自从Archlinux的glibc包在build的时候加入了--enable-kernel编译选项后,WSL Arch的kernel由于是windows提供的二进制文件且无法升级导致Fatal: kernel too old错误。

https://aur.archlinux.org/packages/glibc-linux4
试试这个?

会有包冲突诶,这样的花不小心在升级的使用用glibc替换了glibc-linux4是不是就gg了?

离线

#7 2021-03-29 21:30:48

SamLukeYes
会员
所在地: Canton, China
注册时间: 2020-07-19
帖子: 320
个人网站

Re: [伪Arch(异端?)]ArchWSL 的一些记录

matrikslee 说:

会有包冲突诶,这样的花不小心在升级的使用用glibc替换了glibc-linux4是不是就gg了?

为啥会“不小心替换”啊?

离线

#8 2021-03-29 22:12:41

matrikslee
会员
注册时间: 2017-04-21
帖子: 450
个人网站

Re: [伪Arch(异端?)]ArchWSL 的一些记录

SamLukeYes 说:
matrikslee 说:

会有包冲突诶,这样的花不小心在升级的使用用glibc替换了glibc-linux4是不是就gg了?

为啥会“不小心替换”啊?

pacman在询问是否要替换软件包的时候顺手就按Enter确认啊

离线

#9 2021-04-18 02:07:32

荒野无灯
荒野无灯
注册时间: 2012-12-02
帖子: 36
个人网站

Re: [伪Arch(异端?)]ArchWSL 的一些记录

如果只是要在win上用 pacman 的话,那么你直接用 msys2 就好了。

离线

页脚