deuso / latx-build

Creative Commons Zero v1.0 Universal
51 stars 3 forks source link

[兼容性问题]ACE x86在1.5.x后无法使用dpkg #15

Open shenmo7192 opened 3 months ago

shenmo7192 commented 3 months ago

ACE x86是一个方便的x86容器,可以在龙芯上安装和运行x86的应用程序

在1.4.4时代,可以直接当作qemu-user-static用,全静态

当时的版本是 https://pan.shenmo.tech/index.php?share/file&user=1&sid=qCN2tnxe

1.5.x时,lat-x86_64变成动态链接了,我改成启动时库直通,可以启动了,但是无法使用dpkg,报错如下

dpkg: 处理归档 /tmp/apt-dpkg-install-1mwwIU/048-fontconfig_2.14.1-4_amd64.deb (--unpack)时出错:
 dpkg-deb --control 子进程返回错误状态 2
dpkg-deb: 无法恢复的致命错误,中止:
 等待 粘贴 子进程失败: 没有子进程
dpkg: 出现过多错误,正在停止
在处理时有错误发生:

更换lat 1.4.4后恢复正常 新版本 https://pan.shenmo.tech/index.php?share/file&user=1&sid=ZbInTg5D

复现环境 deepin 23 preview

shenmo7192 commented 3 months ago
lat:
  已安装:1.5.2~rc1
  候选: 1.5.2~rc1
  版本列表:
 *** 1.5.2~rc1 500

lat_1.5.2~rc1_loong64.zip

来源于release中的arch

shenmo7192 commented 3 months ago

除此之外,使用lat 1.5.2~rc1似乎会造成pvz启动速度的下降


https://wyl01.d.spark-app.store:23333/loong64-store/games/com.pvzhz.spark/

因为wine打包涉及的依赖比较多,也许可以直接在星火商店安装比较好配置

deuso commented 3 months ago

在docker中运行动态的latx确实比较麻烦,一个可行的办法是映射以下文件到容器,并关闭库直通export LATX_KZT=0

ldd /tmp/latx-x86_64 

        libcrypto.so.1.1 => /lib/loongarch64-linux-gnu/libcrypto.so.1.1 (0x000000fff45a0000)
        libdl.so.2 => /lib/loongarch64-linux-gnu/libdl.so.2 (0x000000fff4594000)
        librt.so.1 => /lib/loongarch64-linux-gnu/librt.so.1 (0x000000fff4584000)
        libglib-2.0.so.0 => /lib/loongarch64-linux-gnu/libglib-2.0.so.0 (0x000000fff4428000)
        libm.so.6 => /lib/loongarch64-linux-gnu/libm.so.6 (0x000000fff4368000)
        libgcc_s.so.1 => /lib/loongarch64-linux-gnu/libgcc_s.so.1 (0x000000fff430c000)
        libpthread.so.0 => /lib/loongarch64-linux-gnu/libpthread.so.0 (0x000000fff42d8000)
        libc.so.6 => /lib/loongarch64-linux-gnu/libc.so.6 (0x000000fff4150000)
        /lib64/ld.so.1 (0x000000fff486d940)
        libpcre.so.3 => /lib/loongarch64-linux-gnu/libpcre.so.3 (0x000000fff4100000)

但对于lib目录不区分架构的os,可能会导致不同架构的二进制覆盖。

shenmo7192 commented 3 months ago
admin@3A5000:~/Desktop$ export LATX_KZT=0
admin@3A5000:~/Desktop$ bookworm-run-x86 
admin@AmberCE-Bookworm-x86:~/Desktop$ sudo apt install unzip -y
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
建议安装:
  zip
下列【新】软件包将被安装:
  unzip
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 0 B/166 kB 的归档。
解压缩后会消耗 388 kB 的额外空间。
dpkg-deb: 无法恢复的致命错误,中止:
 等待 粘贴 子进程失败: 没有子进程
dpkg: 处理归档 /var/cache/apt/archives/unzip_6.0-28_amd64.deb (--unpack)时出错:
 dpkg-deb --control 子进程返回错误状态 2
在处理时有错误发生:
 /var/cache/apt/archives/unzip_6.0-28_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
admin@AmberCE-Bookworm-x86:~/Desktop$ echo $LATX_KZT
0

看起来没有解决呢

deuso commented 3 months ago

这个是设计上的一个疏漏,目前可以使用下面的方法绕过,后面进行修复: export LATX_DOCKER=1

docker参数增加 -v /proc/sys/fs/binfmt_misc:/binfmt_misc

shenmo7192 commented 3 months ago

这个是设计上的一个疏漏,目前可以使用下面的方法绕过,后面进行修复: export LATX_DOCKER=1

docker参数增加 -v /proc/sys/fs/binfmt_misc:/binfmt_misc

ACE容器并非docker,而是bwrap容器

是需要挂载 /proc/sys/fs/binfmt_misc 到容器内的/binfmt_misc吗?目前/proc直接直通进去了

deuso commented 3 months ago

这个是设计上的一个疏漏,目前可以使用下面的方法绕过,后面进行修复: export LATX_DOCKER=1 docker参数增加 -v /proc/sys/fs/binfmt_misc:/binfmt_misc

ACE容器并非docker,而是bwrap容器

是需要挂载 /proc/sys/fs/binfmt_misc 到容器内的/binfmt_misc吗?目前/proc直接直通进去了

如果不设置export LATX_DOCKER=1,需要确保容器内/proc/sys/fs/binfmt_misc有对应的binfmt配置项 如果设置了,需要确保/binfmt_misc有对应的binfmt配置项

容器内可使用 mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc (此时不用设置export LATX_DOCKER=1)

shenmo7192 commented 3 months ago

这个是设计上的一个疏漏,目前可以使用下面的方法绕过,后面进行修复: export LATX_DOCKER=1 docker参数增加 -v /proc/sys/fs/binfmt_misc:/binfmt_misc

ACE容器并非docker,而是bwrap容器 是需要挂载 /proc/sys/fs/binfmt_misc 到容器内的/binfmt_misc吗?目前/proc直接直通进去了

如果不设置export LATX_DOCKER=1,需要确保容器内/proc/sys/fs/binfmt_misc有对应的binfmt配置项 如果设置了,需要确保/binfmt_misc有对应的binfmt配置项

容器内可使用 mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc (此时不用设置export LATX_DOCKER=1)

admin@AmberCE-Bookworm-x86:~$ cat /proc/sys/fs/binfmt_misc/
cat: /proc/sys/fs/binfmt_misc/: 是一个目录
admin@AmberCE-Bookworm-x86:~$ ls /proc/sys/fs/binfmt_misc/
DOSWin  lat-i386-static  lat-x86_64-static  python3.11  register  status
admin@AmberCE-Bookworm-x86:~$ ls /binfmt_misc/
DOSWin  lat-i386-static  lat-x86_64-static  python3.11  register  status
admin@AmberCE-Bookworm-x86:~$ sudo apt install unzip -y
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
建议安装:
  zip
下列【新】软件包将被安装:
  unzip
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 0 B/166 kB 的归档。
解压缩后会消耗 388 kB 的额外空间。
dpkg-deb: 无法恢复的致命错误,中止:
 等待 粘贴 子进程失败: 没有子进程
dpkg: 处理归档 /var/cache/apt/archives/unzip_6.0-28_amd64.deb (--unpack)时出错:
 dpkg-deb --control 子进程返回错误状态 2
在处理时有错误发生:
 /var/cache/apt/archives/unzip_6.0-28_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
admin@AmberCE-Bookworm-x86:~$ echo $LATX_DOCKER
1
admin@AmberCE-Bookworm-x86:~$ 

这看起来和binfmt无关

shenmo7192 commented 1 week ago

update: 原下载链接失效,这里是新的

ACE: https://pan.huang1111.cn/s/jRDv7Uy

lat: https://mirrors.sdu.edu.cn/spark-store/loong64-store/depends/lat/lat_1.5.3-rc1_loong64.deb

dg1vg4 commented 1 week ago

最好能修快点,但凡ACE-x86能打通,就有可能在deepin v23上跑起那些x86平台的Linux原生应用,我们也就用不着顶着wine那慢吞吞的反应操作Steam了。