evshiron / swarm-ng-build

6 stars 0 forks source link

请问可以提供 Linux 构建吗 #1

Open sihuan opened 2 years ago

sihuan commented 2 years ago

请问可以提供 Linux 构建吗,或者是否有计划开源代码呢🙈

lzusa commented 2 years ago

请问可以提供 Linux 构建吗,或者是否有计划开源代码呢

evshiron commented 2 years ago

我的天,不是还在内部测试吗.jpg

刚花了一些时间编写了 Linux 构建脚本,从 v1.1.0-rc.3 以后的每次更新都会构建 Linux 版本,但我目前没有在 Linux 中测试的条件,且之前的版本是以在 Windows 中运行为前提编写的,所以 Linux 版本的体验预计不会太好。

可以下载并解压swarm-linux.zip,给swarm-core.linuxswarm-ng.linux赋予执行权限后依次运行。如果无法运行,swarm-core.linux其实是 node.js + nexe 构建的,而swarm-ng.linux其实是 sciter 的 scapp,这个信息也许可以帮助两位调试,也欢迎到 Issues 里提交反馈。

近期不会开源,开源的时间点预计在功能稳定且普及率高于旧版后(虽然这种实现根本藏不住源代码

weilinfox commented 2 years ago

swarm-linux.zip 中附带的 swarm-ng.linux 是一个 32 位的二进制:

$ file ./swarm-ng.linux
./swarm-ng.linux: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=75f602712f11f266bc35a37cc11b421f27d1fe67, stripped

尝试在 32 位环境运行,似乎没有自动加载 scapp.zip 。手动加载 scapp.zip 可以正常启动,但是 Peer Management 有段错误的情况:

$ ./swarm-ng.linux -
Gtk-Message: 09:30:50.549: Failed to load module "colorreload-gtk-module"
Gtk-Message: 09:30:50.549: Failed to load module "window-decorations-gtk-module"
core spawn failed
websocket open
websocket open
Unhandled rejection:SyntaxError: unexpected token: '<'
    at https://api.github.com/repos/evshiron/swarm-ng-build/releases:2
    at json (native)
    at <anonymous> (file:///home/hachi/Downloads/swarm/scapp.zip/components/Updater.js)

zsh: segmentation fault (core dumped)  ./swarm-ng.linux -

swarm-core.linux 重命名为 swarm-core 后可以被 swarm-ng 正常调用,但不能随 swarm-ng 的关闭而退出。

evshiron commented 2 years ago

感谢测试与反馈。

今天发现 sciter 在 Ubuntu 18.04 上无法工作(链接了更新的 glibc),临时在虚拟机里安装 Ubuntu 20.04 并做了一些修复。

Peer Management 和 Updater 在 Linux 版本中将被临时禁用,直到修复工作完成。

v1.1.0-rc.5 中进行了如下修改:

sihuan commented 2 years ago

环境信息:

操作系统: ArchLinux,内核版本 6.0.1.arch2-1 swarm-ng 版本:v1.1.0-rc.3/swarm-linux.zip

准备:

解压缩 swarm-linux.zip,检查可执行权限,swarm-core.linuxswarm-ng.linux 均有可执行权限

测试1:

步骤:

  1. 在终端执行 ./swarm-core.linux 启动 swarm-core
  2. 在终端执行 ./swarm-ng-linux 启动 swarm-ng-linux

预期结果: swarm-core 和 swarm-ng 均能正常启动,swarm-ng 界面正常显示

实际结果:

  1. swarm-core 输出:
    $ ./swarm-core.linux
    gateway connected
    listen on http://127.0.0.1:61919
  2. swarm-ng 输出:
    $ ./swarm-ng.linux
    Gtk-Message: 20:01:05.722: Failed to load module "colorreload-gtk-module"
    Gtk-Message: 20:01:05.722: Failed to load module "window-decorations-gtk-module"

    image

白屏,无法使用。

测试2:

步骤与测试1一致,将 swarm-ng 启动命令替换为 ./swarm-ng.linux -

启动后手动选择 scapp.zip 加载。

实际结果:

  1. swarm-core 输出:
    $ ./swarm-core.linux
    gateway connected
    listen on http://127.0.0.1:61919
    client connected
    client connected
  2. swarm-ng 输出:
    $ ./swarm-ng.linux -
    Gtk-Message: 20:09:42.874: Failed to load module "colorreload-gtk-module"
    Gtk-Message: 20:09:42.874: Failed to load module "window-decorations-gtk-module"
    core spawn failed
    websocket open
    websocket open
    Unhandled rejection:SyntaxError: unexpected token: '<'
    at https://api.github.com/repos/evshiron/swarm-ng-build/releases:2
    at json (native)
    at <anonymous> (file:///home/sihuan/Downloads/test/swarm-linux/scapp.zip/components/Updater.js)

image image Update Servers 和 Open Relay 工作正常,Peer Management 会出现段错误:

[1]    7040 segmentation fault (core dumped)  ./swarm-ng.linux -

测试3

步骤:

  1. swarm-core.linux 重命名为 swarm-core
  2. 使用 ./swarm-ng.linux - 启动 swarm-ng
  3. 手动选择 scapp.zip 加载

实际结果: 终端输出:

$ ./swarm-ng.linux -
Gtk-Message: 20:15:10.085: Failed to load module "colorreload-gtk-module"
Gtk-Message: 20:15:10.085: Failed to load module "window-decorations-gtk-module"
websocket failed
websocket failed
websocket closed
websocket closed
gateway connected
listen on http://127.0.0.1:61919
client connected
client connected
websocket open
websocket open
Unhandled rejection:SyntaxError: unexpected token: '<'
    at https://api.github.com/repos/evshiron/swarm-ng-build/releases:2
    at json (native)
    at <anonymous> (file:///home/sihuan/Downloads/test/swarm-linux/scapp.zip/components/Updater.js)

Update Servers 和 Open Relay 工作正常,Peer Management 会出现段错误。

点击 Peer Management 报错退出或者点击窗口叉号正常退出后,swarm-core 仍在运行:

$ lsof -i :61919
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
swarm-cor 7506 sihuan   21u  IPv4  80978      0t0  TCP localhost:61919 (LISTEN)

这时再使用启动 swarm-ng 会报端口占用错误,但能正常使用:

events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use 127.0.0.1:61919
    at Server.setupListenHandle [as _listen2] (net.js:1318:16)
    at listenInCluster (net.js:1366:12)
    at doListen (net.js:1503:7)
    at processTicksAndRejections (internal/process/task_queues.js:81:21)
Emitted 'error' event on WebSocketServer instance at:
    at Server.emit (events.js:327:22)
    at emitErrorNT (net.js:1345:8)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) {
  code: 'EADDRINUSE',
  errno: -98,
  syscall: 'listen',
  address: '127.0.0.1',
  port: 61919
}

环境变化:

swarm-ng 版本:v1.1.0-rc.5/swarm-linux.zip

准备: 解压缩 swarm-linux.zip,检查可执行权限,swarm-coreswarm-ng 均有可执行权限

步骤:

  1. 在终端执行 ./swarm-ng

实际结果: 终端输出:

$ ./swarm-ng
gateway connected
listen on http://127.0.0.1:61919
[1]    8704 segmentation fault (core dumped)  ./swarm-ng

直接报段错误退出了,但是可以观察到 swarm-core 被正常启动且 swarm-ng 由于段错误退出后并未退出:

$ ./swarm-ng
gateway connected
listen on http://127.0.0.1:61919
[1]    8704 segmentation fault (core dumped)  ./swarm-ng
$ lsof -i :61919
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
swarm-cor 8707 sihuan   21u  IPv4  86707      0t0  TCP localhost:61919 (LISTEN)
weilinfox commented 2 years ago

OS: Archlinux Kernel: 5.15.73-2-lts DE: Plasma 5.26.0 (Xorg)

遇到玄学问题。本来下载 v1.1.0-rc.5 ,无论是 swarm-core 的自启动和停止,还是界面所有的功能,都是完全正常运行的。随后滚系统, Archlinux 更新了内核和图形驱动后, swarm-ng 再起不能, swarm-core 还是正常的。另外从官网页面下载的 Sciter 也是同样的报错,似乎是 Sciter 本身的问题?

$ ./swarm-ng
gateway connected
listen on http://127.0.0.1:61919
zsh: segmentation fault (core dumped)  ./swarm-ng

OS: Ubuntu 22.04.1 LTS Kernel: 5.15.0-50-generic DE: GNOME (Wayland)

吐核。从官网页面下载的 Sciter 也是同样的报错。

$ ./swarm-ng
websocket failed
websocket closed

(swarm-ng:4607): Gdk-WARNING **: 22:16:47.851: ../../../../../gdk/x11/gdkwindow-x11.c:5653 drawable is not a native X11 window
段错误 (核心已转储)

gateway connected
listen on http://127.0.0.1:61919
evshiron commented 2 years ago

我这边平时是在 macOS 和 Windows 10 上进行开发和调试,macOS 这边也经常吐核,但是重新运行一般不会再次发生。

今天在 Ubuntu 20.04 上调试,打开 Peer Management 绘制异常,中转和复制地址正常,关闭窗口时会吐核,但是 swarm-core 在此之前会被关闭。

现在收到两位详尽的测试反馈,感觉 sciter 在对 Linux 的支持上还存在许多变数,我在开发时也总会遇到莫名其妙的坑。在考虑更换到 webview 或是 wry 甚至 tauri 上,但它们在 Windows 上需要确保 WebView2 的安装,感觉又不那么开箱即用。

sihuan commented 2 years ago

之前 shitama 的 qt 和 swarm 的 rs gtk 跨平台效果都挺好的🙈 现在是想尝试一下前端技术嘛。

查了一下, Windows 11 应该是预装了 webview2 的。不知道旧版本的 Windows 安装这个麻烦不麻烦)

weilinfox commented 2 years ago

我这边平时是在 macOS 和 Windows 10 上进行开发和调试,macOS 这边也经常吐核,但是重新运行一般不会再次发生。

今天在 Ubuntu 20.04 上调试,打开 Peer Management 绘制异常,中转和复制地址正常,关闭窗口时会吐核,但是 swarm-core 在此之前会被关闭。

现在收到两位详尽的测试反馈,感觉 sciter 在对 Linux 的支持上还存在许多变数,我在开发时也总会遇到莫名其妙的坑。在考虑更换到 webview 或是 wry 甚至 tauri 上,但它们在 Windows 上需要确保 WebView2 的安装,感觉又不那么开箱即用。

Archlinux 这里的情况是稳定吐核w 。关闭窗口时吐核之前也有出现,还有奇怪的 vkEnumeratePhysicalDevices failed: -3 。这里 scapp 是官网页面下的二进制。

$ ./scapp
core spawn failed
vkEnumeratePhysicalDevices failed: -3
websocket open
websocket open
Unhandled rejection:[object Response(https://api.github.com/repos/evshiron/swarm-ng-build/releases)]
#69d2e7
vkEnumeratePhysicalDevices failed: -3
websocket open
#69d2e7
vkEnumeratePhysicalDevices failed: -3
websocket open
#69d2e7
vkEnumeratePhysicalDevices failed: -3
websocket open
websocket closed
pure virtual method called
terminate called without an active exception
zsh: IOT instruction (core dumped)  ./scapp

又用 gdb 瞅了瞅我这吐核时候的情况,似乎是 n 卡驱动的锅?

image

另外重新查看了之前在 Ubuntu 上的报错 https://github.com/evshiron/swarm-ng-build/issues/1#issuecomment-1279090490 ,意识到可能是 Wayland 的问题,果然用 Xorg 启动 Gnome 桌面环境就可以正常运行了。

另外在 Debian11 也测试了一下,同样如果是 Wayland + Gnome 会得到之前在 Ubuntu 上相同的错误,改为 Xorg + Gnome 一切正常。

能正常运行的 Debian11 环境如下:

OS: Debian bullseye Kernel: 5.10.0-18-amd64 DE: GNOME 3.38.6 (Xorg)

能正常运行的 Ubuntu 环境如下:

OS: Ubuntu 22.04.1 LTS Kernel: 5.15.0-50-generic DE: GNOME (Xorg)

evshiron commented 2 years ago

其实最早广泛使用的版本就是构建在 NW.js 上的。后续的 Go 版本,再到现在的 Rust 版本,据说都比上一代更卡(我估计是我驾驭不住)。所以这个版本回归 Node.js 了。

至于 UI 方案的选择,我的愿望是小巧,兼容性好且开箱即用,swarm-ng 之前使用过 egui ,但缺少多窗口支持。还有一个原因是 swarm-ng 实现了一个 RPC 模块,为了只维护一种语言的实现,所以偏好使用 Web 技术。