通过 distrobox 在任何发行版安装星火应用商店

首先

由于 WPS 直接在 distrobox 环境下运行我遇到了各种麻烦的问题,于是尝试在 distrobox 中安装星火应用商店,再安装 WPS。问题能够解决,于是顺便记录一下 distrobox 中安装星火的过程。总体上还是非常轻松的,十几分钟就能搞定

安装

系统环境为 Bluefin Linux (based-on Fedora Silverblue)

创建 distrobox 使用的是这个 image

1
distrobox create --image quay.io/toolbx/ubuntu-toolbox:latest --name box-spark

当前的 latest 应该是 24.04 (LTS)
ubuntu-toolbox 是精简后的 ubuntu image,亲测也足够星火运行的,用完整的 ubuntu image 应当更加没有问题

默认没有 systemd 支持,而星火应用商店的更新通知(定时检查更新)依赖 systemd,可以通过 distrobox 的 --init flag 实现。当然不用 systemd 也是完全可以用的

进入容器命令行之后,正常 apt install 星火应用商店的 .deb 即可,星火应用商店会拖家带口把 qt、dtk、gcc 环境、工具链都装上,占用空间 600M+ 是正常的

没有什么报错安装完成之后(不装 systemd 的话安装过程会有一个小报错),就可以通过 spark-store 运行图形化的星火应用商店

Post-fix & Workaround

第一个问题:中文字体坏的

这个很好解决:

1
sudo apt install fonts-noto-cjk

或者安装任何你喜欢的字体即可

第二个问题:点击“下载并安装”,下载之后就没动作了,不会自己安装

解决方案: https://gitee.com/spark-store-project/spark-store/issues/IBML1L
即在 distrobox 容器内执行

1
2
3
echo '#!/bin/sh
sudo "$@"' | sudo tee /usr/local/bin/pkexec
sudo chmod +x /usr/local/bin/pkexec

这是因为原本正常安装的星火应用商店,应当在安装过程中通过 pkexec 提升到 root 权限,因为这样可以跳出一个 askpass 图形界面请求用户输入密码。而在容器中一般直接使用 sudopkexec 由于各种原因往往没法正常工作。不是完全不可以,但挺麻烦的

所以以上命令能替换 /usr/local/bin/pkexec 的内容为一个脚本,直接原地将命令丢给 sudo

由于创建容器的时候就没有用 --root 创建 rootful 容器,所以这个 sudo 出来的 root 应该 也不是宿主机的 root,不需要特别在乎安全问题。只要你用 Podman 就完全是 rootless 的

第三个问题:搜索框没法输入中文

最简单的 经典 解决方案就是从别的地方打好字然后粘贴进去

当然也可以选择一步到位。我使用 fcitx5 框架,需要在容器里安装对应前端界面(我也不知道为啥宿主机的 fcitx5 前端在容器里就不工作了)

1
sudo apt install fcitx5-frontend-all

这样安装的只是适用于 qt gtk 等程序的 fcitx5 前端,后端还是通过 D-Bus 连宿主机的(还好 distrobox 上 D-Bus 开箱即用)
当然就是要再牺牲掉一些存储空间,fcitx5 也喜欢拖家带口

其他问题目前都还没遇到

  • WPS 开箱即用没有任何问题
  • 能正常用 distrobox-export 将桌面图标 .desktop 导出到宿主机
  • 通过星火应用商店安装的 ACE 兼容环境可以在命令行正常进入。这样对于适合安装到 ACE 兼容环境中的软件,问题应当又能解决很多
    再其他的问题也就是星火应用商店本身的问题了(可不是容器的问题)