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 10】スタートメニューからアプリの一覧を消して、アプリを素早く起動する

目次1. はじめにスタートメニューのデフォルトの状態2. アプリの一覧を消す3. タイルをカスタマイズする4. ショートカットキーでアプリを起動する5. まとめ 1. はじめに スタートメニューのデフ …

Windows

【Windows 10】ノートPCのバッテリーのヘタり具体を調べる

Windows 10において、バッテリーのヘタり具体を調べる方法を紹介します。

Windows

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

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

docker

Windows 10 Home のための、Docker Toolbox をインストールして WSL から使う方法

Windows 10 Home に Docker を導入し、WSL を利用してインストールした Ubuntu から使う手順について説明します。 目次はじめにDocker Toolbox の仕組みと W …

WSL

WSL用ユーティリティ「wslu」を使ってみる

目次1. はじめに2. 前提とする環境3. wslu に関する情報4. wslu のインストール5. 各コマンドを使ってみるwslsys概要ヘルプを表示主なオプション実行サンプルwslfetch概要ヘ …