Git 在 IBM i 上将 Composer 与私有 VCS 存储库一起使用时出现依赖性错误
Git dependency errors when using Composer with private VCS repository on IBM i
下面有更多详细信息,但是当我对使用自定义 VCS 存储库的项目发出 composer install
或 composer 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 存储库。只要我在 "repository" 部分中有条目,我就会收到上述错误。即使我没有 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 install
或 composer 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$
我猜您在安装时遇到了问题。它可能会查看 Zend PHP 库而不是 /usr/lib 中的预期库吗?
请注意,错误显示 /usr/local/zendphp7/lib/ libz.so.1(shr_64.o) 的路径,而您的 git转储显示 /QOpenSys/pkgs/lib:/QOpenSys/usr/lib.
下面有更多详细信息,但是当我对使用自定义 VCS 存储库的项目发出 composer install
或 composer 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 存储库。只要我在 "repository" 部分中有条目,我就会收到上述错误。即使我没有 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 install
或 composer 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$
我猜您在安装时遇到了问题。它可能会查看 Zend PHP 库而不是 /usr/lib 中的预期库吗?
请注意,错误显示 /usr/local/zendphp7/lib/ libz.so.1(shr_64.o) 的路径,而您的 git转储显示 /QOpenSys/pkgs/lib:/QOpenSys/usr/lib.