[小ネタ] Amazon Linux に最新バージョンの HAProxy をインストールする
こんにちは、藤本です。
先日、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 が記載されています。
- オフィシャルページ
- http://www.haproxy.org/
$ 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 は問題なくインストールすることができました。