Windows Tips

Ubuntu 16.04 TLS (WSL) に HTTP/2 に対応した curl コマンドをインストールする

投稿日:2018年11月1日 更新日:

WSL で導入している Ubuntu 16.04 TLS ですが、この中に入っている curl コマンドは HTTP/2 に対応していません。

$ curl -I --http2 https://www.yahoo.co.jp/
curl: (1) Unsupported protocol

本ページでは、HTTP/2 を有効にした curl コマンドを、ソースファイルをコンパイルしてインストールする手順を紹介します。

使用しているユーザーアカウントのホームディレクトリ内にインストールするだけなので、apt のパッケージとしてインストールされている curl コマンドに影響はありません。

curl を独自にコンパイルしてインストールする手順

今回行う操作は、ターミナルエミュレータ上で全て行います。
適当なパスに作業用ディレクトリを作成し、そこに移動してから以下の作業を行います。

(1) libnghttp2-dev パッケージのインストールを行います。

まず、curl のプログラムでは、HTTP/2 に対応するために nghttp2 というソフトウェアを使っているため、nghttp2のライブラリをインストールします。

$ sudo apt install libnghttp2-dev

(2) curl が依存しているパッケージをインストールします。

$ sudo apt-get build-dep curl

このコマンドを実行する前に

/etc/apt/sources.list ファイル内の「deb-src」で始まる行がコメントになっている場合は、先頭の「#」を外して有効にしておきます。

(3) curl のソースファイルをダウンロードします。

curl – Download ページから、最新のソースファイルをダウンロードします。

この時は、curl 7.62.0 が最新版でした。

$ wget https://curl.haxx.se/download/curl-7.62.0.tar.gz

解凍して、できたディレクトリに移動します。

$ tar zxf curl-7.62.0.tar.gz
$ cd curl-7.62.0/

(4) configure スクリプトを実行します。

以下のコマンドではいろいろオプションが指定してありますが、HTTP/2 対応のために必要となる オプションは、--with-nghttp2--with-ssl の2つです。それから、インストール先のディレクトリを ~/local/curl-7.62.0 にしたいので、--prefix オプションで指定してあります。この3つ以外は指定しなくても構いません。

$ ./configure --prefix=$HOME/local/curl-7.62.0 \
  --with-nghttp2 \
  --with-ssl \
  --disable-dependency-tracking \
  --disable-symbol-hiding \
  --enable-versioned-symbols \
  --enable-threaded-resolver \
  --with-lber-lib=lber \
  --with-gssapi=/usr \
  --with-zsh-functions-dir=/usr/share/zsh/vendor-completions

このコマンドが問題なく終了すると、以下のように表示されます。

  curl version:     7.62.0
  Host setup:       x86_64-pc-linux-gnu
  Install prefix:   /mnt/c/Users/foo/local/curl-7.62.0
  Compiler:         gcc
  SSL support:      enabled (OpenSSL)
  SSH support:      no      (--with-libssh2)
  zlib support:     enabled
  brotli support:   no      (--with-brotli)
  GSS-API support:  enabled (MIT Kerberos/Heimdal)
  TLS-SRP support:  enabled
  resolver:         POSIX threaded
  IPv6 support:     enabled
  Unix sockets support: enabled
  IDN support:      no      (--with-{libidn2,winidn})
  Build libcurl:    Shared=yes, Static=yes
  Built-in manual:  enabled
  --libcurl option: enabled (--disable-libcurl-option)
  Verbose errors:   enabled (--disable-verbose)
  SSPI support:     no      (--enable-sspi)
  ca cert bundle:   /etc/ssl/certs/ca-certificates.crt
  ca cert path:     no
  ca fallback:      no
  LDAP support:     enabled (OpenLDAP)
  LDAPS support:    enabled
  RTSP support:     enabled
  RTMP support:     enabled (librtmp)
  metalink support: no      (--with-libmetalink)
  PSL support:      no      (libpsl not found)
  HTTP2 support:    enabled (nghttp2)
  Protocols:        DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3 POP3S RTMP RTSP SMB SMBS SMTP SMTPS TELNET TFTP

※ ユーザー名は foo にしてあります。

(5) コンパイルします。

$ make

(6) 最後にインストールします。

$ make install

これで、~/local/curl-7.62.0 に curl がインストールされました。いらなくなったらこのディレクトリを消すだけです。

curl コマンドは、~/local/curl-7.62.0/bin/ の中にあります。apt でインストールされている curl コマンドではなく、こちらを常時使用したいのであれば、このディレクトリを環境変数 PATHの先頭に追加するなどしてください。

それでは実行してみましょう。

$ ~/local/curl-7.62.0/bin/curl -I --http2 https://www.yahoo.co.jp/
HTTP/2 200
date: Thu, 01 Nov 2018 13:35:33 GMT
p3p: policyref="http://privacy.yahoo.co.jp/w3c/p3p_jp.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
expires: -1
pragma: no-cache
cache-control: private, no-cache, no-store, must-revalidate
x-xrds-location: https://open.login.yahooapis.jp/openid20/www.yahoo.co.jp/xrds
content-type: text/html; charset=UTF-8
age: 0
via: http/1.1 edge2428.img.djm.yahoo.co.jp (ApacheTrafficServer [c sSf ])
server: ATS
set-cookie: TLS=v=1.2&r=1; path=/; domain=.yahoo.co.jp; Secure

HTTP/2 でレスポンスが返ってきました。成功です。

--http2 オプションを指定しなくても、デフォルトで HTTP/2 は有効になっているようです。
HTTP/1.0 を使いたい場合は --http1.0 オプション、HTTP /1.1 を使いたい場合は --http1.1 オプションを指定します。

参考

📂-Windows Tips

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Windows

【Windows】廃棄するストレージのデータを SDelete コマンドで完全に消去する

目次1. SDelete とは?2. SDelete の導入3. SDelete で USBメモリを完全に消去する手順1. USBメモリを Windows パソコンに接続する2. USBメモリの「ディ …

エクスプローラーでフォルダを開いた時に、1つ目の項目を選択するキー操作

問題点 Windows のエクスプローラー上でフォルダを開いた時、上から1つ目の項目(ファイルもしくはフォルダ)をキーボードの操作によって選択したい場合、どうすればよいでしょうか? エクスプローラーを …

Windows

Cmder のバージョンを上げる方法

目次1. Cmder とは?2. Cmder のバージョンを上げる必要性3. Cmder の更新手順4. おわりに関連 1. Cmder とは? Cmder は、Windows用のコンソールエミュレー …

WSL

WSL のターミナルから Windows側のGUIアプリを実行する

WSL のターミナルエミュレータ(以下「ターミナル」と記述します)上から、Windows側のGUIアプリを起動する場合は、以下のようなコマンドで実行することをお勧めします。 $ {Windows側の実 …

Windows

【Windows】まとめて複数のURLを開く方法

目次1. はじめに2. 手順3. おわりに 1. はじめに Windows 環境で、複数のURLをまとめてブラウザで開く方法を紹介します。 バッチファイルを使う方法なのですが、ブラウザに依存しない と …