Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor version bugs and TODO list | 重构版已知 Bug 和待完成任务 #32

Closed
40 tasks done
crazywhalecc opened this issue Mar 18, 2023 · 31 comments
Closed
40 tasks done
Labels
help wanted Extra attention is needed

Comments

@crazywhalecc
Copy link
Owner

crazywhalecc commented Mar 18, 2023

Bugs

TODO List

@crazywhalecc crazywhalecc added bug Something isn't working help wanted Extra attention is needed labels Mar 18, 2023
@jingjingxyk
Copy link
Contributor

jingjingxyk commented Mar 18, 2023

libmcrypt 这个先放一放,,这个和PHP 版本有关系。php8 就不要支持了

@crazywhalecc crazywhalecc pinned this issue Mar 18, 2023
@jingjingxyk
Copy link
Contributor

jingjingxyk commented Mar 19, 2023

Bugs

* [x]  mbstring support is good, but it cannot be compiled with pcntl. (after adding mbstring, configure shows `pcntl_fork()` not supported by this platform). Fixed via [c93a4e8](https://github.com/crazywhalecc/static-php-cli/commit/c93a4e843f1b1bcf287325f6066f1dac0ff4a5cb)

* [ ]  cannot compile libmcrypt on macOS. Maybe this bug will never be fixed. (source is too old to compile)

* [ ]  swoole extension for macOS has a dynamic library linked: `/usr/lib/libc++.dylib`.

大佬666。我先熟悉一下。

@jingjingxyk
Copy link
Contributor

目前我知道的问题有:

  1. swoole 版本 内置 nghttp2 和 curl nghttp2 出现的多重定义, 最近刚解决:curl 启用nghttp2时出现 multiple definition of `nghttp2_strerror'; 函数多重定义 swoole/swoole-cli#38 (comment)
  2. swoole 和 snow 不能同时安装
  3. libmcrypt 不支持 高版本的 PHP。待验证确定

@crazywhalecc
Copy link
Owner Author

  1. swoole 的问题主要是我现在还没写完 Linux 环境的 builder,macOS 环境主要是 C++ 库的问题。这个后续遇到了再看看。
  2. swoole 和 swow 不能同时安装属于一个 feature 了,不是问题。
  3. libmcrypt 甚至识别不出来 Apple Silicon 芯片的电脑,所以无法安装。

@TNT-ma
Copy link

TNT-ma commented Mar 19, 2023

怒我直言就PHP来说支不支持 macOS 根本无关紧要,如果是调试环境 MACOS自身就有PHP环境,如果是生产环境,我不信谁服务器装MACOS,PHP任然得靠LINUX 发挥最大性能 windows 都逐渐淘汰

@ikilobyte
Copy link
Contributor

@TNT-ma 这可不是这么说,MacOS的用户群体还是很大的,直接在Mac上使用的话更是方便,而且macOS 12 Monterey已经移除了自带的php版本,我知道可以用docker去代替,有总比没有好

@crazywhalecc
Copy link
Owner Author

@TNT-ma 静态 PHP 最大的作用是可以让开发项目的人把 PHP 嵌入到项目内发行,这样一来,写一些 CLI 工具你可以使用 PHP 进行编写,使用 static-php-cli 中的 php 或 micro,集成到项目内。正因如此,不可能每个项目都一定只会在 Linux 平台运行。

@crazywhalecc crazywhalecc changed the title Refactor version bugs | 重构版已知 Bug Refactor version bugs and TODO list | 重构版已知 Bug 和待完成任务 Mar 28, 2023
@crazywhalecc crazywhalecc added kind/extension Issues related to extensions kind/dependency Issues related to dependencies question Further information is requested and removed kind/extension Issues related to extensions kind/dependency Issues related to dependencies labels Mar 28, 2023
@crazywhalecc crazywhalecc added this to the 2.0 robust version milestone Apr 21, 2023
@jingjingxyk
Copy link
Contributor

jingjingxyk commented Apr 21, 2023

今天(2023-04-21)刚收获的经验: cmake 默认链接 动态库,指定静态链接库缺不生效,解决办法

例子: 比如 libssh2 链接openssl 默认就是链接到动态库。我指定了-DOpenSSL_ROOT都不生效

解决思路是: -DCMAKE_POLICY_DEFAULT_CMP0074=NEW 设置这个参数

cmake find_package 默认 找的都是动态库
例子:

find_package(OpenSSL)

find_package(NGHTTP2 REQUIRED)

find_package(LibSSH2)

找静态库,通常设置如下

-DCMAKE_POLICY_DEFAULT_CMP0074=NEW \
-DOpenSSL_ROOT={$openssl_prefix} \

我为什么把这个发到这里:请看这里 swoole-cli衍生分支图 build_native_php

@jingjingxyk
Copy link
Contributor

symfony 我不太熟, 本项目 预处理是如何设置 PATH PKG-CONFIG 配置

就是类似截图里面设置 PATH
image

@jingjingxyk
Copy link
Contributor

C++ 链接库,我试着解决 之前 有解决过这个 swoole/swoole-cli#56

@crazywhalecc
Copy link
Owner Author

symfony 我不太熟, 本项目 预处理是如何设置 PATH PKG-CONFIG 配置

就是类似截图里面设置 PATH image

直接命令行加入参数的设置,例如 Unix 通过 export PATH=xxx bin/spc build xxx。理论上来说,这个不应该由使用角度设置 PATH 和 PKG_CONFIG_PATH。如果是指的在本项目内配置 PKG_CONFIG_PATH,可以去 LinuxBuilderMacOSBuilder 中设置 $this->configure_env 中的值。PATH 建议在命令行手动插入,不做内部指定地方。

@crazywhalecc
Copy link
Owner Author

C++ 链接库,我试着解决 之前 有解决过这个 swoole/swoole-cli#56

C++ 链接确实是这样的,目前链接 C++ 库没有什么问题,但我似乎遇到了一些与 C++ 库有关的其他奇怪问题,与 -lc++ 应该无关。

@jingjingxyk
Copy link
Contributor

这是扩展依赖库 关系图图 ;昨天(2023-04-21)我刚做完的
可以按照这个图,来解决依赖问题

@jingjingxyk
Copy link
Contributor

jingjingxyk commented Apr 21, 2023

我试着把 GD 依赖库 给补全了

依赖: 'libjpeg', 'freetype', 'libwebp', 'libpng', 'libgif'
实际依赖 不仅仅这几个 ,主要是 静态编译不太容易,比如libXpm ,到现在也没有搞定

@crazywhalecc
Copy link
Owner Author

我试着把 GD 依赖库 给补全了

依赖: 'libjpeg', 'freetype', 'libwebp', 'libpng', 'libgif' 实际依赖 不仅仅这几个 ,主要是 静态编译不太容易,比如libXmp ,到现在也没有搞定

这个可以慢慢一个一个来,分好模块和计划。我发现这个工程必须得划分多个不同的阶段来实施,否则每次修改和补充新功能都灾难性地添加一堆文件会增加维护难度和编写难度。

@TNT-ma
Copy link

TNT-ma commented Apr 26, 2023

event 和 gd 啥时候能尽快搞起来啊。等着用生产环境呢

@crazywhalecc
Copy link
Owner Author

crazywhalecc commented Apr 26, 2023

event 和 gd 啥时候能尽快搞起来啊。等着用生产环境呢

@TNT-ma 我最近工作太忙了,等周六放假后我抓紧弄好这些个 PR 和 Bug 就弄一下。

@crazywhalecc
Copy link
Owner Author

@TNT-ma 目前 event 扩展和 gd 扩展均已搞定。cac3ffc

gd 库的部分依赖为可选项:libjpeglibaviflibwebpfreetype,强制依赖 libpnggiflib。如果在编译 gd 时想支持可选特性,可以使用 --with-libs=xxx 参数作为编译选项,例如将所有 gd 的特性全部编译进去:

bin/spc build gd --build-all --with-libs=libjpeg,libavif,libwebp,freetype

@abinxx
Copy link

abinxx commented May 1, 2023

可以增加oci、pdo_oci和sqlserver的扩展库吗

@xywf221
Copy link

xywf221 commented May 6, 2023

建议增加ssh2跟ffi扩展

@crazywhalecc
Copy link
Owner Author

建议增加ssh2跟ffi扩展

@xywf221 ssh2 应该可以,ffi 理论上只能给 macOS 版本加入了,因为 Linux 的纯 static link 的二进制即使编译了 ffi 也没有用处。

@jingjingxyk
Copy link
Contributor

jingjingxyk commented May 6, 2023

@xywf221
这不巧了 ,看上面 #32 (comment) ,静态编译 libssh2 遇到的问题

你参照这里 ,https://github.com/jingjingxyk/swoole-cli/blob/f915eb555eae30276d7e415e7d4dc34775cd8946/conf.d/curl.php#L156 把 源码静态编译的代码 搬运到本项目,执行构建就行了。

得益于本项目大佬的静态编译指导,同时借助 jingjingxyk/swoole-cli 项目构建的依赖库,我在 build_native_php 分支下 能编译 包含libssh2 扩展 PHP 运行时。可以先试试能不能用

附件(需要解包两次): 一个是包含swow 的; 一个是包含swoole 的;

php-cli-v8.2.4-linux-x64-ssh2-swow.tar.xz.zip

php-cli-v8.2.4-linux-x64-ssh2-swoole.tar.xz.zip

临时找了个空间: 放这里了: https://github.com/jingjingxyk/swoole-cli/releases/tag/build-native-php-v0.0.5

@TNT-ma
Copy link

TNT-ma commented May 7, 2023

@xywf221 这不巧了 ,看上面 #32 (comment) ,静态编译 libssh2 遇到的问题

你参照这里 ,https://github.com/jingjingxyk/swoole-cli/blob/f915eb555eae30276d7e415e7d4dc34775cd8946/conf.d/curl.php#L156 把 源码静态编译的代码 搬运到本项目,执行构建就行了。

得益于本项目大佬的静态编译指导,同时借助 jingjingxyk/swoole-cli 项目构建的依赖库,我在 build_native_php 分支下 能编译 包含libssh2 扩展 PHP 运行时。可以先试试能不能用

附件(需要解包两次): 一个是包含swow 的; 一个是包含swoole 的;

php-cli-v8.2.4-linux-x64-ssh2-swow.tar.xz.zip

php-cli-v8.2.4-linux-x64-ssh2-swoole.tar.xz.zip

临时找了个空间: 放这里了: https://github.com/jingjingxyk/swoole-cli/releases/tag/build-native-php-v0.0.5

我看你一直搞那个 swoole分支,可有方法让 sfx 加载指定或固定路径的.so文件
我一直想把SwooLoad加密扩展弄来整合在一起

@xywf221
Copy link

xywf221 commented May 7, 2023

建议增加ssh2跟ffi扩展

@xywf221 ssh2 应该可以,ffi 理论上只能给 macOS 版本加入了,因为 Linux 的纯 static link 的二进制即使编译了 ffi 也没有用处。

我有点看不懂现在重构后的逻辑了,麻烦大佬有空加上ssh2扩展

@jingjingxyk 原版的ssh2扩展不支持协程我fork的版本是支持协程的

@jingjingxyk
Copy link
Contributor

jingjingxyk commented May 7, 2023

@xywf221
他俩并没有没有啥大区别,无非 依赖库的 静态链接 目录有点区别,关于编译PHP 部分是一样的呀。

最大的区别就是: 库链接 时  指定库所在目录有点区别。 

static-php-cli 把多个静态库放在一个目录,链接时 可以少写很多目录
swoole-cli 把每个静态库单独存放 (我需要用到它构建好的依赖库,静态编译其它软件【 opencv 、ffmpeg 、ovs、ovn、dpdk 、 socat 等 】。

大佬已经加好了依赖库: https://github.com/crazywhalecc/static-php-cli/blob/refactor/src/SPC/builder/unix/library/libssh2.php

照着这里 https://github.com/crazywhalecc/static-php-cli/tree/refactor/src/SPC/builder/extension 加上一个配置文件ssh2.php 就可以了

@crazywhalecc
Copy link
Owner Author

贡献指南我觉得可以提上日程了,就是写清楚怎么添加扩展。

不过想起来上面还有那么一坨 TODO,再加上还得写一份中文一份英文的就头疼。(我还打算写一个命令做辅助开发的:bin/spc dev:add-ext xxx,写点向导自动生成框架和提示做什么)

但我最近工作忙得不可开交,可能这些事情都要放一段时间了。

@jingjingxyk
Copy link
Contributor

jingjingxyk commented May 8, 2023

@xywf221 这个添加ssh2 扩展(我没有编译验证)基本差不多了 ,你照这个来就行了

@xywf221
Copy link

xywf221 commented May 8, 2023

@xywf221 这个添加ssh2 扩展(我没有编译验证)基本差不多了 ,你照这个来就行了

多谢按照你这个成功编译了,这里顺便贴下 我修改后的 ssh2 repo
配合swow扩展实现协程,以下是测试代码

<?php

use Swow\Coroutine;
use Swow\Sync\WaitReference;


$wr1 = new WaitReference();
Coroutine::run(static function () use($wr1): void {
    $wr = new WaitReference();
    echo "start connect\r\n";
    $session = ssh2_connect("127.0.0.1", 22);
    echo "connect done!\r\n";

    Coroutine::run(static function () use ($session, $wr): void {
        echo "start auth\r\n";
        $flag = ssh2_auth_password($session, 'root', 'x');
        echo "auth done\r\n";

        Coroutine::run(static function () use ($session,$wr): void {
            // exec command
            echo "Exec Command : sleep 5 && echo 'done 1!' \r\n";
            ssh2_exec($session, "sleep 5 && echo 'done 1!'");
    
            echo "Exec Command : sleep 5 && echo 'done 2!' \r\n";
            ssh2_exec($session, "sleep 5 && echo 'done 2!'");
        });
    });
    echo "auth 挂起\r\n";
    WaitReference::wait($wr);
    var_dump('done');
});

echo "connect 挂起\r\n";

WaitReference::wait($wr1);

echo "整体结束\r\n";

测试输出

root@dmls:/root/static-php-cli# ./buildroot/bin/php run-swow-tests.php 
start connect
connect 挂起
connect done!
start auth
auth 挂起
auth done
Exec Command : sleep 5 && echo 'done 1!' 
Exec Command : sleep 5 && echo 'done 2!' 
string(4) "done"
整体结束

@crazywhalecc
Copy link
Owner Author

@jingjingxyk @xywf221 @TNT-ma 有关议题建议新开 Issue 或 PR 讨论。

@kdkd
Copy link

kdkd commented Jul 22, 2023

Would you consider adding FreeBSD support? I can open a new issue for this and possibly assist if it would be welcomed.

@crazywhalecc
Copy link
Owner Author

Would you consider adding FreeBSD support? I can open a new issue for this and possibly assist if it would be welcomed.

@kdkd FreeBSD is not difficult to support in theory, because it uses almost the same tool chain as Linux. But there is no guarantee that all dependent libraries will work properly, and it will take time to port it. I can try it out in my spare time if I need to, but I'll probably only be able to try it in a FreeBSD virtual machine. (Better than Windows support)

@crazywhalecc crazywhalecc removed bug Something isn't working question Further information is requested labels Jul 27, 2023
@crazywhalecc crazywhalecc unpinned this issue Aug 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

7 participants