AWS IoT セキュアトンネリングの「ローカルプロキシ」をAmazon Linux2にインストールする
まいど、大阪の市田です。
前回、「AWS IoT セキュアトンネリング」の記事を書かせていただきました。その際、デバイスに見立てたEC2にローカルプロキシをインストールしましたが、思ったよりも手間がかかりました。せっかくなのでその手順を残しておきたいと思います。
前提
利用したOSは下記の通りです。
- Amazon Linux2
- AMI:ami-011facbea5ec0363b
- kernel 4.14 ,systemd 219, GCC 7.3, Glibc 2.26, Binutils 2.29.1
要件
インストールに必要な環境の要件は下記に記載があります。
- C++ 14 compiler
- CMake 3.2+
- Development libraries required:
- Boost 1.68 or 1.69
- Protobuf 3.6.x
- zlib
- OpenSSL 1.0+
- Catch2 test framework
上記の内、必要なものをそれぞれインストールしていきます。githubにインストール手順が書かれているので、その順番で進めたいと思います。
Zlibダウンロードとインストール
zlibはすでにインストール済みなのでスキップします。
$ rpm -q zlib zlib-1.2.7-17.amzn2.0.2.x86_64
Boost依存関係のダウンロードとインストール
2020年1月20日時点での最新バージョンは、「1.72.0」ですが、「Boost 1.68 or 1.69」という指定があるので、今回は「1.69」をインストールします。
$ wget https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.gz -O /tmp/boost.tar.gz $ tar xzvf /tmp/boost.tar.gz $ cd boost_1_69_0 ./bootstrap.sh
最後のスクリプト実行時に下記のようなエラーが出ます。
./bootstrap.sh Building Boost.Build engine with toolset ... Failed to build Boost.Build build engine Consult 'bootstrap.log' for more details
メッセージに従いbootstrap.log
を見ると、次のエラーが出ていました。
### ### Using 'cc' toolset. ### rm -rf bootstrap mkdir bootstrap cc -o bootstrap/jam0 command.c compile.c constants.c debug.c execcmd.c frames.c function.c glob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c object.c option.c output.c parse.c pathsys.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c class.c cwd.c native.c md5.c w32_getreg.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c execunix.c fileunix.c pathunix.c ./build.sh: 行 17: cc: コマンドが見つかりません
要件にあるとおり、C++のコンパイラが必要なのでインストールします。
$ sudo yum -y install gcc-c++
続きから再開しましょう。
$ ./bootstrap.sh $ sudo ./b2 install
Protobuf依存関係のダウンロードとインストールする
次も手順の通りに実行したいところですが、コマンドの記載にミスがあるのでそのままコピペすると失敗します。下記のとおり修正して実行します。
$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz -0 /tmp/protobuf-all-3.6.1.tar.gz ↓ $ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz -O /tmp/protobuf-all-3.6.1.tar.gz
$ tar xzvf /tmp/protobuf-all-3.6.1.tar.gz $ cd protobuf-3.6.1/ $ mkdir build $ cd build $ cmake ../cmake
ここでまたエラーが出ました。
-bash: cmake: command not found
ここでyum
コマンドでcmake
をインストールしたいところですが、標準ではバージョン「2.8」となります。
$ sudo yum info cmake Loaded plugins: extras_suggestions, langpacks, priorities, update-motd Available Packages Name : cmake Arch : x86_64 Version : 2.8.12.2 Release : 2.amzn2.0.2 Size : 6.9 M Repo : amzn2-core/2/x86_64 Summary : Cross-platform make system URL : http://www.cmake.org License : BSD and MIT and zlib Description : CMake is used to control the software compilation process using simple : platform and compiler independent configuration files. CMake generates : native makefiles and workspaces that can be used in the compiler : environment of your choice. CMake is quite sophisticated: it is possible : to support complex environments requiring system configuration, preprocessor : generation, code generation, and template instantiation.
CMakeを「2.8」のままインストールすると下記のようなエラーが発生します。
CMake Error at CMakeLists.txt:2 (cmake_minimum_required): CMake 3.1.3 or higher is required. You are running version 2.8.12.2
冒頭の要件ではCMakeは「3.2」以上のバージョンが必要なので、ソースからインストールすることにします。
$ cd ${home} $ wget https://cmake.org/files/v3.16/cmake-3.16.0.tar.gz $ tar xvzf cmake-3.16.0.tar.gz $ cd cmake-3.16.0 # ./bootstrap && make && make install
CMakeのインストール中に次のようなエラーが出ました。openssl-develパッケージをインストールするのが簡単そうです。
-- Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR) CMake Error at Utilities/cmcurl/CMakeLists.txt:454 (message): Could not find OpenSSL. Install an OpenSSL development package or configure CMake with -DCMAKE_USE_OPENSSL=OFF to build without OpenSSL. -- Configuring incomplete, errors occurred! See also "/home/ec2-user/cmake-3.16.0/CMakeFiles/CMakeOutput.log". See also "/home/ec2-user/cmake-3.16.0/CMakeFiles/CMakeError.log". --------------------------------------------- Error when bootstrapping CMake: Problem while running initial CMake ---------------------------------------------
openssl-develをインストールします。
$ sudo yum -y install openssl-devel
再度、cmakeのインストールに挑戦します。
# ./bootstrap && make && make install
これでcmakeのインストールが完了しました。
先ほどのprotobuf
の作業ディレクトリに戻って、改めてBoost依存関係のインストールに再挑戦します。
$ cmake ../cmake $ make $ sudo make install
しかしmake
コマンドの実行中に下記のエラーが出てしまいました。
virtual memory exhausted: Cannot allocate memory
「t3.micro」を利用していましたが、インスタンスタイプは変更せずに512MBのswap領域を作成して対応しました。
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k $ sudo mkswap /swapfile $ sudo chmod 600 /swapfile $ sudo swapon /swapfile $ swapon
Catch2テストフレームワークのダウンロードとインストール
ここはgithubの手順のままですが、予めgit
をインストールしておきます。
$ sudo yum -y install git
Catch2テストフレームワークをインストールします。
$ cd ${home} $ git clone https://github.com/catchorg/Catch2.git $ cd Catch2 $ mkdir build $ cd build $ cmake ../ $ make $ sudo make install
これでローカルプロキシ用の環境構築が完了です。
ローカルプロキシのダウンロードとビルド
最後にローカルプロキシをビルドします。githubにある手順の通りで問題ありません。
$ cd ${home} $ git clone https://github.com/aws-samples/aws-iot-securetunneling-localproxy $ cd aws-iot-securetunneling-localproxy $ mkdir build $ cd build $ cmake ../ $ make
ビルドが正常に完了すると「bin」ディレクトリの下に2つのバイナリの実行ファイルが保存されます。
$ ls -l ./bin/ total 8320 -rwxrwxr-x 1 ec2-user ec2-user 4028704 Jan 20 00:00 localproxy -rwxrwxr-x 1 ec2-user ec2-user 4486720 Jan 20 00:01 localproxytest
最後に
基本的にソースからゴリゴリとインストールしていくので、少し時間がかかりました。
また環境構築時は、メモリ1GBの「t3.micro」を利用しましたが、それでは不足するようなので「RaspberryPi 3 B+」を使う場合は、スワップファイルの作成が必要になると思います。
手元にラズパイ4があるのでインストールして試してみたいと思います。
以上です。