【问题标题】:Git dependency errors when using Composer with private VCS repository on IBM i在 IBM i 上将 Composer 与私有 VCS 存储库一起使用时出现 Git 依赖错误
【发布时间】:2018-10-12 02:37:02
【问题描述】:

下面有更多详细信息,但是当我对使用自定义 VCS 存储库的项目发出 composer installcomposer update 命令时遇到以下错误。这是通过 SSH 会话在 IBM i v7r3 系统上进行的。我已经没有关于如何进一步排除故障的想法,所以我在这里。有没有人见过这个错误或对如何进一步排除故障有任何想法?

错误:

bash-4.4$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 113 installs, 0 updates, 0 removals
  - Installing sshUser/myPackage (v1.0.26): Cloning a2db0666b1


  [RuntimeException]
  Failed to clone gitUser:/opt/git/myPackage.git, git was not found, check that
   it is installed and in your PATH env.

  Could not load program git:
        Dependent module /usr/local/zendphp7/lib/libz.so.1(shr_64.o) could not be loaded.

        File /usr/local/zendphp7/lib/libz.so.1 is not an

          archive or the file could not be read properly.

  System error: Exec format error

我有一个有两个用户的远程 IBM i 服务器。第一个用户“gitUser”用于我的私有 Git 存储库(无头)。然后我有另一个用户“sshUser”,用于通过 SSH 登录并完成我的典型工作。我配置了 SSH 密钥以简化用户的连接,并且“gitUser”ssh 密钥不需要密码,因此我可以将其用于自动脚本。

我的 composer.json 文件中包含一个用于项目的私有 VCS 存储库。只要我在“存储库”部分中有条目,我就会收到上述错误。即使我不是 requireing 来自存储库的包,也会发生这种情况。

存储库条目:

"repositories": [
    {
        "type": "vcs",
        "url":  "gitUser:/opt/git/myPackage.git"
    }
]

IBM i 上的 Composer 是最新的 1.7.2。

很明显,问题在于 git 并且无法在 libz.so.1 中找到依赖项。

但是,如果我遵循路径中 Git 版本的依赖链,则所有适当的文件都具有足够的权限:

bash-4.4$ which git                                                   
/QOpenSys/pkgs/bin/git                                                
bash-4.4$ dump -X64 -H /QOpenSys/pkgs/bin/git                         

/QOpenSys/pkgs/bin/git:                                               

                        ***Loader Section***                          
                      Loader Header Information                       
VERSION#         #SYMtableENT     #RELOCent        LENidSTR           
0x00000001       0x000000df       0x0000433f       0x0000009d         

#IMPfilID        OFFidSTR         LENstrTBL        OFFstrTBL          
0x00000006       0x00044910       0x00000a18       0x000449ad         


                        ***Import File Strings***                     
INDEX  PATH                          BASE                MEMBER       
0      /QOpenSys/pkgs/lib:/QOpenSys/usr/lib                           
1                                    libz.so.1           shr_64.o     
2                                    libiconv.so.2       shr_64.o     
3                                    libcrypto.so.1.0.0  shr_64.o     
4                                    libpthread.a        shr_xpg5_64.o
5                                    libc.a              shr_64.o     
bash-4.4$                                                             

我可以确认所有这些都没有权限失败。所以这似乎不是权限不足的结果。另外,我认为问题不在于用户配置文件gitUser,就像我从另一台机器(使用适当的密钥)发出composer installcomposer update 一样,一切正常。所以它似乎特定于 IBM i 和 sshUser 配置文件。

我开始认为 Composer 正在使用不同的 git 可执行文件,并且该可执行文件的依赖项不存在。虽然我认为 Composer 只会使用我的路径。

注意*:我尝试在 ./.profile 中指定我的 LIBPATH,如下所示。但这似乎没有任何区别:

LIBPATH=/usr/local/zendphp7/lib
LIBPATH=$LIBPATH:/QOpenSys/pkgs/lib:/QOpenSys/usr/lib
export LIBPATH

回显时:

bash-4.4$ echo $LIBPATH
/usr/local/zendphp7/lib:/QOpenSys/pkgs/lib:/QOpenSys/usr/lib
bash-4.4$

如果我不将上述内容添加到我的./.profile,那么echo $LIBPATH 会在屏幕上打印一个空白行。

解决方案: 我只是将 ZENDPHP7 目录结构中的符号链接更改为 repo 版本。或者,您可以操作您的库路径,但我无法在 IBM i 上找到正确的方法。

bash-4.4$ pwd
/usr/local/zendphp7/lib
bash-4.4$ ln -s /QOpenSys/pkgs/lib/libz.so.1 ./libz.so.1
bash-4.4$ ls -la /usr/local/zendphp7/lib/libz.so.1
lrwxrwxrwx 1 dl 0 56 Oct 11 14:21 /usr/local/zendphp7/lib/libz.so.1 -> /QOpenSys/pkgs/lib/libz.so.1
bash-4.4$

【问题讨论】:

    标签: bash git composer-php ibm-midrange


    【解决方案1】:

    我猜您在安装时遇到了一些问题。是不是在看 Zend PHP 库而不是 /usr/lib 中的预期库?

    请注意,错误显示路径为 /usr/local/zendphp7/lib/ libz.so.1(shr_64.o),而您的 git 转储显示的是 /QOpenSys/pkgs /lib:/QOpenSys/usr/lib.

    【讨论】:

    • 谢谢,在 IBM i 上,我将如何查看我当前的 LIBPATH(或 IBM i 上的等效路径)?我试过echo $LIBPATH,但它会在屏幕上打印出一个空白行。另外,我如何操作我的 LIBPATH(或 IBM i 上的等价物)?我尝试将以下内容添加到我的~/.profile,但它似乎破坏了位于/QOpenSys/pkgs/bin/ 的大多数命令:LIBPATH=$LIBPATH:/usr/local/zendphp7/lib 然后export LIBPATH
    • 我用与此相关的更多信息更新了我的问题。
    • 不幸的是,我无法访问 SSH 会话以在 IBM i 上使用 bash 进行测试,但问题几乎可以肯定是 /usr/local/zendphp7/lib 使用的是不同版本的 libz .so.1 比 /usr/lib 中的存在。您还拥有 /usr/lib 前面的 zendphp 路径,因此它将尝试使用该路径,因为它首先找到了它。至少,我会尝试将 zendphp7 路径完全从我的 PATH 和 LIBPATH 环境变量中删除。至于解决依赖问题,在不了解您的系统的情况下很难给出细节。
    • 作为一个持续的建议,您可能需要更新 composer 项目以从 zendphp 库而不是 repo 中包含的库构建和链接。我的猜测是它正在使用 repo 中的版本进行构建,但在安装时它使用的是 zendphp 中的版本。这很可能是导致冲突的原因。
    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2016-03-18
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多