2023.07.26 Web制作
システム開発 - cURLでhttpsが使えなかったのでアップデートしてみた
エラー発生
環境は、あるお客様のCentOS環境で、Composerのアップデートを行おうとしたら、下記のエラーがでました。
$ composer self-update
In CurlDownloader.php line 365:
curl error 1 while downloading https://getcomposer.org/versions: Protocol "https"
not supported or disabled in libcurl
ライブラリのインストールもできない状態で、curlがhttpsに対応していないというのが理由のようです。
色々しらべていたところ、SSLが設定されていない状況で、curlをphpのインストールで追加すると、httpsでのアクセスが設定されないようです。逆にSSLが設定されていれば、この問題は起きないので、もしかしたらレアな現象なのかもしれません。
今回の場合、初期構築時点では、SSLが設定されておらず、のち公開されるときに、SSLが設定されたので、この現象が起こったようです。
解決方法
解決方法は、SSLが設定されている状態でのcurlのアップデートです。しかし、この設定が環境により微妙なところが多かったので、メモ書きとして残そうと思います。
php.iniの確認
まずは、php.iniの設定を確認してみます。phpからでは、phpinfo()
のコマンド確認できますが、コマンドライン上からは、下記のように入力します。
$ php -i
全部表示されてしまい、探すのが大変ですが、phpモジュールはABC順に並んでいるので上の方にスクロールし、curlの部分を確認します。
curl
~
SSL => Yes
~
Protocols => dict, file, ftp, gopher, http, imap, mqtt, pop3, rtsp, smtp, telnet, tftp
注目すべきは、SSLの設定があること、Protocolsにhttpsが入っていないことです。SSLが設定されているのにhttpsが無いということは、SSLの設定が無いときにcurlがインストールされたのだと推測できます。
また下記コマンドでも、httpsに対応していないことが確認できます。
$ curl -V
curl 7.84.0 (x86_64-pc-linux-gnu) libcurl/7.84.0 zlib/1.2.7
Release-Date: 2022-06-27
Protocols: dict file ftp gopher http imap mqtt pop3 rtsp smtp telnet tftp
Features: alt-svc AsynchDNS IPv6 Largefile libz UnixSockets
curlのアップデート
今回は、トライ&エラーを繰り返している中、結局バージョンは上げていませんが、インストールの手順をご紹介します。
全てスーパー権限にて行っています。
最初にcurlの圧縮ファイルをダウンロードしますので、作業が行えるフォルダへ移動します。下記の例ではユーザー用のxxxフォルダへ移動しています。
# cd /home/xxx
ファイルを取得します。
# wget https://curl.haxx.se/download/curl-7.84.0.tar.gz
~
2023-07-01 00:00:00 (71.6 MB/s) - `curl-7.84.0.tar.gz' へ保存完了 [4173236/4173236]
# ll
-rw-r--r-- 1 root root 4173236 6月 27 2022 curl-7.84.0.tar.gz
ファイルを解凍します。
# tar xfvz curl-7.84.0.tar.gz
~
curl-7.84.0/buildconf.bat
# ll
drwxr-xr-x 14 fhw1 fhw1 4096 6月 27 2022 curl-7.84.0
-rw-r--r-- 1 root root 4173236 6月 27 2022 curl-7.84.0.tar.gz
curl-7.84.0という名前のディレクトリが作成されました。
ディレクトリを移動します。
# cd 2022 curl-7.84.0
ここから下記のコマンドを順に実行してインストールを行っていきます。
- .configure
- make
- make test
- make install
ここで一番大事なのは、「.configure」の部分です。ここがうまくいけば、あとはすんなりと進みます。
設定上、結局一番参考になったのは、curl本体のFAQです。
https://curl.se/docs/install.html
英語の表記ですが、今は翻訳も優秀ですし、自分の環境でうまくいかない場合は、ここが参考になると思います。
今回の設定では、一般的に表記されている下記のコマンドだけでは、うまくいきませんでした。
# ./configure --enable-libcurl-option
上記コマンドだけでは、何度かerrorが出て処理が止まってしまいました。
それでも無理やり「make」コマンドを実行すると、エラーが出まくってしまいました(少し前の作業なのでエラー画面を取得しわすれてしまいここで記述することはできませんが。。。)。
最初に見えてきたのは、nghttp2のところでエラーがでていることがわかり、下記コマンドに変更しました。
# ./configure --enable-libcurl-option --without-nghttp2
環境によって、--without-xxxxxx オプションは必要になるかもしれません。
上記コマンド後にmakeをしてみましたが、やはりエラーがでます。エラーでは複数のライブラリが見つからないということなので、それぞれのライブラリを一つずつ検索したところ、opensslに関するファイルばかりでした。
今回、一番必要なSSLの設定がみつからないということなので、このまま進めても「https」に対応することは難しそうです。
さらにしらべてみるうちに「pkgconfig」というキーワードが見つかりました。このファイルを探してみます。
# find / -name pkgconfig
/usr/lib64/pkgconfig
/usr/share/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/lib64/pkgconfig
/opt/lampp/lib/pkgconfig
以前に、SSLのアップデートを行っていたり、xamppを利用していたりと、ゴミファイルが多く、上記のように複数のファイルが見つかってしまいました。
このpkgconfigの場所を指定してあげないと、デフォルトの設定の場所を探しに行ってしまいpkgconfigが見つからずエラーが出てしまっていたようです。
ここで公式サイトの説明が訳に立ちました。
If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL) and you have pkg-config installed, set the pkg-config path first, like this:
env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-openssl
https://curl.se/docs/install.html
上記、記述を参考にし、最終的に下記コマンドに変更しました。
# env PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig ./configure --enable-libcurl-option --with-openssl --without-nghttp2
これにより無事./configureが通り、その後のコマンドも無事問題なく実行できました。
結果、php_infoは下記のようになりました。
# php -i
curl
~
SSL: enabled (OpenSSL v3+)
~
Protocols: DICT FILE FTP FTPS GOPHER GOPHERS HTTP HTTPS IMAP IMAPS LDAP LDAPS MQTT POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP
そして、curlのバージョンも確認してみます。
$ curl -V
curl 8.1.2 (x86_64-pc-linux-gnu) libcurl/8.1.2 OpenSSL/3.0.7 zlib/1.2.7 brotli/1.0.9
Release-Date: 2023-05-30
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli HSTS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets
それぞれ無事「https」が追加されました。
まとめ
今回ここまで到達するのに約2日かかってしまいました。達成すると喉元過ぎれば熱さを忘れるがごとく、あっという間に色々と忘れてしまいますが、クリアした時の喜びはひとしおですね。
文責:フライング・ハイ・ワークス代表 松田 治人(まつだ はるひと)
会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによるWebアプリケーションの構築や東京でホームページ制作をしています。
エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。
WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします
フライング・ハイ・ワークスの紹介
フライング・ハイ・ワークスは、東京のホームページ制作・Web制作会社・システム開発会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。
実績
デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。
また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。
500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください!
東京のホームページ制作・Web制作のお問い合わせ、お見積り依頼、相談、質問は
こちらのお問い合わせフォームよりお願いいたします