在IBM i

时间:2018-10-10 20:46:29

标签: bash git composer-php ibm-midrange

下面提供了更多详细信息,但是当我在对包含的项目使用自定义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存储库。只要我在“存储库”部分中有该条目,我就会收到上述错误。即使我没有从存储库中require打包程序,也会发生这种情况。

存储库条目:

"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$

1 个答案:

答案 0 :(得分:1)

我猜测安装时路径有些问题。也许是在查看Zend PHP库,而不是/ usr / lib中的预期库?

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