我在 Windows 11 上成功安装了 Ubuntu WSL,使用本指南没有任何问题。但是,当我尝试按照以下说明安装 Anbox 时官方网站,我不断收到如下错误:
error: cannot communicate with server: Post http://localhost/v2/snaps/anbox: dial unix /run/snapd.socket: connect: no such file or directory
和
System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down
然后我尝试了这个解决方案:
# This part adds the Microsoft repository to install dotnet-runtime, which you need for `systemd-genie`
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# This part installs the .NET runtime
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-6.0
# This part adds the transdebian repository, which contains systemd-genie
wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg
cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
EOF
#This part installs systemd-genie
sudo apt update
sudo apt install -y systemd-genie
# This part adds a script to `~/.profile` to automatically start genie every time you start up bash.
echo "# Are we in the bottle?
if [[ ! -v INSIDE_GENIE ]]; then
read -t 3 -p 'yn? * Preparing to enter genie bottle (in 3s); abort? ' yn
echo
if [[ $yn != y ]]; then
echo 'Starting genie:'
exec /usr/bin/genie -s
fi
fi
" >> ~/.profile
# Restart bash
exec bash
当我下次启动 Ubuntu WSL 时,在运行任何命令之前我得到了这个:
-bash: /root/.profile: line 15: conditional binary operator expected
-bash: /root/.profile: line 15: syntax error near `y'
-bash: /root/.profile: line 15: ` if [[ != y ]]; then'
当我尝试按照Anbox我得到这些:
/dev/binder$: command not found
-bash: /dev/ashmem: No such file or directory
$: command not found
我究竟做错了什么?
PS: 这个问题最初发布于堆栈溢出但被强制关闭。
PS:我的技术背景极其有限。谢谢
答案1
我的技术背景极其有限
不用担心,这确实是有用的信息。至少对我有帮助尝试提供与您的经验水平相匹配的答案。话虽如此,这背后的原因是相当技术性,但到目前为止,您已经很好地尝试解决了其中的一些问题。
我想你已经猜到了,你看到的前两个错误都是因为 WSL 不支持 Systemd(因此也不支持 Snaps)。这也许是人们在尝试将其用作“真正的”Linux 系统的一对一替代品时遇到的最大挑战之一。
Systemd 是大多数 Linux 发行版的“标准”初始化系统,但 WSL 使用自己的系统/init
作为启动系统,其原因我就不多说了。
但这确实意味着,如果不付出额外的努力,一些需要 Systemd 的软件就无法在 WSL 上运行。 Snap是一种利用 Systemd 将软件安装到 Linux 中的方法。
作为Anbox 安装指南提及:
要安装 Anbox,您的系统需要支持 snap。目前,我们官方不支持任何其他 Anbox 发行版,但社区为各种发行版(例如 Arch Linux)制作了软件包,但...
有一些方法可以解决 WSL 上的 Systemd/Snap 支持问题,而 Genie(您第二次尝试)就是其中之一。话虽如此,我思考您正在使用一些过时的 Genie 安装说明。请查看Genie github了解最新情况。
根据对我的原始答案的评论:
@moyadin *我在 windowscentral.com 上发布的这个链接用于将 Amazon 的商店替换为 Google 的商店。我在这方面成功了。
哇——我印象非常深刻,因为这真的很技术性 ;-)。我原本以为你指的是使用该指南安装 WSL2。我现在已经浏览了一遍,以了解你做了什么。
如果你正在运行这个程序,那么你正在使用 WSA(适用于 Android 的 Windows 子系统)的早期版本(但经过修改),据我所知,应该是隔离的,因为它在 WSL2 等虚拟机中运行。我自己可能不会遵循该特定指南,因为它涉及一些相当“测试版”的技术,这些技术目前还不是为在 Windows 11 的“正常”版本上运行而设计的。但是,我对我的系统非常保守。
另一方面,我可能会在我拥有的 Windows 11 VM 中尝试它。
我昨天花了一些时间尝试在 WSL2 上安装 Anbox,但没有成功。至少,你必须拥有:
Systemd 运行得比我好
据我所知,你需要构建自己的内核并支持Anbox
binder
和ashmem
内核模块据我所知,我在这方面取得了成功,但确实尝试了两次才成功。将 WSL2 设置为使用你的自定义内核(同样,我成功了,并验证了 Anbox 模块是否正确加载)。
安装 Anbox——曾是能够在 WSL2 上安装 Snap,但我实际上无法运行它,而且我 95% 确定这仍然是由于 Systemd 问题造成的。
如果我花更多时间,我可能会成功,但我仍然必须执行下一步才能进入 Play Store......
运行非常复杂的脚本。讽刺的是,我在文章中发现了这一点Anbox:如何轻松安装 Google Play 商店并启用 ARM (libhoudini) 支持。在告诉你这是最简单的方法之后,他们会(正确地)告诉你:
警告:永远不要在不知道脚本的作用的情况下运行你没有编写的脚本。在运行此脚本之前,请检查其代码。不幸的是,要理解该脚本的作用,需要高的Linux 知识程度。
但如果 Anbox 需要做那么多大量工作,那么我就会忽略整个事情。
我要说这是正确的选择。我的建议是 (a) 坚持使用你正在运行的 (b) 它可能与 Anbox 解决方案一样好甚至更好(并且同样安全)。
我的最终目标是在一个隔离的环境中下载 Android 应用程序,该环境中的应用程序无法访问所有内容(例如从 Microsoft Store 下载的应用程序),而 VMware 上的 Android x86 是我目前正在使用的选项。
好吧,如果你确实有 Windows Central 记录的 WSA 选项,那么它很可能同样安全。我确信微软会在发布前发布更多关于 WSA 的架构信息,但他们表示它在虚拟机中运行。我猜它的架构与 WSL2 非常相似。
我们真的正在等待 WSA发布由微软开发。然后,希望我们能有一些更好的选择(尽管仍然不受支持)来使用 Google Play 商店。