LoginSignup
0

More than 5 years have passed since last update.

PHP-Git2 を CentOS7 上の php7 で使えるようにインストールする

Last updated at Posted at 2018-12-21

記念すべき初投稿、
いろいろググっても見つからなくて、
だいぶ自力でやってインストール自体は成功したものの、
肝心な使い方がよくわからんというか
これ以上無理しなくていいか、と諦めたので、
腹いせがてら作業メモとして残しておくことに。

PHP-Git2 とは

なんと php からダイレクトに( exec や system ではなく)、
Git コマンドが実行できるらしいPECL拡張モジュール。
その中身は libgit2 というライブラリらしい。

諸事情あって必要になったので入れようと思ったのだが、
参考にした以下の情報の通りに作業してもなんかエラーで止まったり、
無事に入ったはずなのに phpinfo() で見てもロードしてない?!てなったり。

PHP で git を使うライブラリ "PHP-Git2" を CentOS 環境にインストールしてみた
PHP bindings for libgit2

はて、なんでやと思ったら、入れようとしてる環境が php7 だからだったんじゃないかと。
んで試行錯誤してるうちにようやく「インストールは」無事にできた。

php7 で使える(っぽい?) PHP-Git2 を入れる

順番に作業をメモ。

上記のGitHubリポジトリではなく、別の人がつくったphp7用のソースをダウンロードする。
New libgit2 bindings for PHP

[root@host ~] git clone https://github.com/MagicalTux/php-git2
[root@host ~] cd php-git2
[root@host php-git2] ./libgit2_build.h
[root@host php-git2] phpize
[root@host php-git2] ./configure
[root@host php-git2] make
[root@host php-git2] make install

しかし、自分の環境では make の段階でエラーが出て失敗。

/bin/ld: cannot find -lhttp_parser
/bin/ld: cannot find -lcurl
collect2: error: ld returned 1 exit status

えー、http_parser とか curl なんて普通に入ってるしなんで・・・?
とここでしばらく格闘し、どうやらそれぞれの追加パッケージを入れれば
いけそうな予感がしたので入れる。

[root@host ~] yum -y install http-parser-devel.x86_64 libcurl-devel.x86_64

そして改めて make すると、

Build complete.
Don't forget to run 'make test'.

いけた!
いざ make install!
そして .ini を書く!

/etc/php.d/git2.ini
extension=git2.so

そして php-fpm を reload して phpinfo() で確認!

・・・で、一般的にはロードできてるはず。
自分の環境ではそれでもロードされていなかった。

php 複数バージョン同居環境の対応

なぜかというと、
CentOS7 ではあるものの、KUSANAGI の AMI によるインスタンスだったので、
php7 のための仕込みが必要なのであった。
KUSANAGI や複数バージョンの php を同居させてる場合、

[root@host ~] git clone https://github.com/MagicalTux/php-git2
[root@host ~] cd php-git2
[root@host php-git2] ./libgit2_build.h
[root@host php-git2] /usr/local/php7/bin/phpize
[root@host php-git2] ./configure --with-php-config=/usr/local/php7/bin/php-config
[root@host php-git2] make
[root@host php-git2] make install

といった具合に phpize や php-config の場所を指定してあげる必要がある。
同じく .ini ファイルも、

/etc/php.d/git2.ini

ではなく

/etc/php7.d/extensions/git2.ini

等の、php7 用ディレクトリに置かないといけないケースもある。
というか KUSANAGI はそうだった。

これにより、自分の環境でも無事「git2.so のインストールとロード」は完了した。

んで、実際にこれを使ったスクリプトを書こうとまたもや試行錯誤したものの、
ドキュメント類があまりない上に PHP-Git2 も libgit2 も C で書かれてて
いまいち追いかけきれぬので、
結局お蔵入りになりましたとさ。。。

ただ、C がもりもり書ける人だったら、
大した量でもないし全部読めば使い方は把握できると思う。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0