[小ネタ] Amazon Linux に最新バージョンの HAProxy をインストールする

Linux

こんにちは、藤本です。

先日、Amazon Linux で Yum リポジトリ提供外のバージョンの HAProxy をインストールを試す機会がありましたので、備忘録としてインストール手順を残しておきます。といっても、ソースコードからコンパイルするだけで特にハマるところもありませんでした。

HAProxy

HAProxy に関しては下記ブログで簡単に紹介されているのでご参照ください。

HAProxy 1.6.5での動的名前解決における不具合と対処法

Amazon Linux と HAProxy

Amazon Linux に提供されている Yum リポジトリでも HAProxy は提供されています。ただし、あまりバージョンが新しいものではありません。

2017/02/22現在、1.5.2 が提供されています。

$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2016.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2016.09"
PRETTY_NAME="Amazon Linux AMI 2016.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2016.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"

$ yum info haproxy
Loaded plugins: priorities, update-motd, upgrade-helper
Available Packages
Name        : haproxy
Arch        : x86_64
Version     : 1.5.2
Release     : 2.5.amzn1
Size        : 882 k
Repo        : amzn-main/latest
Summary     : HAProxy is a TCP/HTTP reverse proxy for high availability environments
URL         : http://www.haproxy.org/
License     : GPLv2+
Description : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
            : availability environments. Indeed, it can:
            :  - route HTTP requests depending on statically assigned cookies
            :  - spread load among several servers while assuring server persistence
            :    through the use of HTTP cookies
            :  - switch to backup servers in the event a main one fails
            :  - accept connections to special ports dedicated to service monitoring
            :  - stop accepting connections without breaking existing ones
            :  - add, modify, and delete HTTP headers in both directions
            :  - block requests matching particular patterns
            :  - persists clients to the correct application server depending on
            :    application cookies
            :  - report detailed status as HTML pages to authenticated users from a URI
            :    intercepted from the application

今回は 1.6以降で提供される DNS 名前解決を利用することが要件でしたので、Yum リポジトリで提供されるパッケージでは要件を満たすことができません。2017/02/22時点のStable最新バージョンは 1.6.11、1.7.2 です。Yum リポジトリでの提供がないので、ソースコードからコンパイルして、インストールします。

インストール手順

今回は Amazon Linux への 1.6.11 のインストール手順を記載しますが、1.7.2 も同じ手順でインストールできます。

事前準備

ソースコード(C)からコンパイルするので事前にgccをインストールします。

$ sudo yum install -y gcc
:

Installed:
  gcc.noarch 0:4.8.3-3.20.amzn1

Dependency Installed:
  cpp48.x86_64 0:4.8.3-9.111.amzn1    gcc48.x86_64 0:4.8.3-9.111.amzn1  glibc-devel.x86_64 0:2.17-157.169.amzn1  glibc-headers.x86_64 0:2.17-157.169.amzn1  kernel-headers.x86_64 0:4.4.44-39.55.amzn1
  libgomp.x86_64 0:4.8.3-9.111.amzn1  libmpc.x86_64 0:1.0.1-3.3.amzn1   mpfr.x86_64 0:3.1.1-4.14.amzn1

Dependency Updated:
  glibc.x86_64 0:2.17-157.169.amzn1                                                               glibc-common.x86_64 0:2.17-157.169.amzn1

Complete!

ダウンロード

HAProxy のオフィシャルページにソースコード(tar.gz)のダウンロード URL が記載されています。

$ wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz
--2017-02-21 13:16:11--  http://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz
Resolving www.haproxy.org (www.haproxy.org)... 195.154.117.161, 2001:7a8:363c:2::2
Connecting to www.haproxy.org (www.haproxy.org)|195.154.117.161|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1574029 (1.5M) [application/x-gzip]
Saving to: ‘haproxy-1.6.11.tar.gz’

haproxy-1.6.11.tar.gz                             100%[=============================================================================================================>]   1.50M   372KB/s    in 4.1s

2017-02-21 13:16:17 (372 KB/s) - ‘haproxy-1.6.11.tar.gz’ saved [1574029/1574029]

バージョン 1.7.2 のソースコードのダウンロード URL は http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz です。

コンパイル

アーカイブを展開し、makeでコンパイルします。

$ tar xzf haproxy-1.6.11.tar.gz
$ cd haproxy-1.6.11
$ make TARGET=generic
gcc -Iinclude -Iebtree -Wall  -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement       -DTPROXY -DENABLE_POLL  -DCONFIG_HAPROXY_VERSION=\"1.6.11\" -DCONFIG_HAPROXY_DATE=\"2016/12/25\" \
      -DBUILD_TARGET='"generic"' \
      -DBUILD_ARCH='""' \
      -DBUILD_CPU='"generic"' \
      -DBUILD_CC='"gcc"' \
      -DBUILD_CFLAGS='"-O2 -g -fno-strict-aliasing -Wdeclaration-after-statement"' \
      -DBUILD_OPTIONS='""' \
       -c -o src/haproxy.o src/haproxy.c
:
(略)

配置

コンパイルによって作成したバイナリや、docs を配置します。

$ sudo make install
install -d "/usr/local/sbin"
install haproxy  "/usr/local/sbin"
install -d "/usr/local/share/man"/man1
install -m 644 doc/haproxy.1 "/usr/local/share/man"/man1
install -d "/usr/local/doc/haproxy"
for x in configuration management proxy-protocol architecture cookie-options lua linux-syn-cookies network-namespaces close-options intro; do \
    install -m 644 doc/$x.txt "/usr/local/doc/haproxy" ; \
done 

以上で、インストールは完了です。

動作確認

$ haproxy -v
HA-Proxy version 1.6.11 2016/12/25
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>

正常にインストールされているようです。

1.7.2 でも同様の手順でインストールできます。

1.7.2 の場合
$ haproxy -v
HA-Proxy version 1.7.2 2017/01/13
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>

まとめ

いかがでしたでしょうか? 昔のソフトウェアはソースコードからインストールだと環境によってインストールがうまくいかないことも多いですが、Amazon Linux に HAProxy は問題なくインストールすることができました。