メカトラックス社が提供しているLinuxカーネル(以下、メカトラカーネル)をAmazon EC2上でビルドしてみました。メカトラカーネルはRaspbianのLinuxカーネルをベースに作成されていますので、RaspbianのLinuxカーネルをビルドする際の参考にもなるかと思います。
##環境
・AWSマネジメントコンソールへの接続ブラウザはGoogle Chromeを推奨
・EC2のOSはDebian 10 Buster (ARM)を使用
・EC2への接続ツールはAWSのSession Managerを利用。Tera Term等のリモートログオンクライアントは使用しません。
##作業の流れ
- EC2作成
- Session ManagerからEC2への接続
- メカトラカーネルのビルド
##1. EC2の作成
AWSマネジメントコンソールにログインして以下を設定します。
「※」はSession Managerを利用するために必要な設定です。
(1-1) VPCを作成してインターネットゲートウェイをアタッチします。※
(1-2) EC2用のIAMロールを新規作成し、AmazonSSMManagedInstanceCoreポリシーをアタッチします。※
(1-3) 下表のポイントを参考にEC2を作成します。
EC2設定項目 | 設定値 |
---|---|
AMI | AWS MarketplaceでDebianが提供しているDebian 10 Buster (ARM)を選択 |
インスタンスタイプ | t4g.xlarge を選択。OSがDebian 10 Buster (ARM)の場合に選択可能なインスタンスタイプは t4g、a1、c6g、m6g、r6gのみ(2021年1月時点) |
VPC | (1-1)で作成したVPCを選択 |
IAMロール | (1-2)で作成したIAMロールを選択 |
自動割り当てパブリックIP※ | 有効 |
キャパシティーの予約 | なし |
クレジット仕様 | 無制限のチェックを外す |
ユーザーデータ※ | #!/bin/bash mkdir /tmp/ssm cd /tmp/ssm sudo wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm64/amazon-ssm-agent.deb sudo dpkg -i amazon-ssm-agent.deb sudo systemctl enable amazon-ssm-agent |
##2. Session ManagerからEC2への接続
AWSマネジメントコンソールのSession Managerを利用してEC2へリモート接続します。
(2-1) AWS Systems Managerのセッションマネージャー画面を開き、「セッションの開始」ボタンをクリックします。
(2-2) 作成したEC2を選択し、「セッションを開始する」ボタンをクリックします。
(2-3) コンソールが表示されたら接続完了です。※接続ユーザーは ssm-user となります。
##3. メカトラカーネルのビルド
メカトラカーネルをEC2上にダウンロードしてビルドします。
セッションマネージャ上で以下のコマンドを実行します。
(3-1) ビルドに必要となるLinuxパッケージ、クロスコンパイラをダウンロードします。
$ sudo apt update
$ sudo apt install git bc bison flex libssl-dev make crossbuild-essential-armhf
(3-2) githubからメカトラカーネルのソースをダウンロードします。
$ cd /home/ssm-user
$ git clone --depth=1 https://github.com/mechatrax/linux
(3-3) .configファイルを作成し、メカトラカーネルをビルドします。
※ラズパイのモデルによりKERNELの指定方法が異なります。詳細は下記URL参照。
https://www.raspberrypi.org/documentation/linux/kernel/building.md
※「-j」オプションはジョブの同時実行数です。t4g.xlargeのvCPU数は4なので「-j4」とします。
$ cd /home/ssm-user/linux
$ KERNEL=kernel7l
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs
t4g.xlargeの場合、ビルドに要した時間は13分44秒でした。
##4. ビルド時間の比較
t4g系(ARMベース)の各インスタンスタイプのビルド時間を比較してみました。
ビルドに要する時間はvCPU数にほぼ反比例する形で短縮されます。~~ビルド時間が1時間未満であれば、~~下表のインスタンスタイプの中ではt4g.mediumが最もコスパが良いです。
インスタンスタイプ | vCPU数 | -jオプション | ビルド時間 | AWS利用料※1 |
---|---|---|---|---|
t4g.2xlarge | 8 | 8 | 6:48 | 0.3456USD |
t4g.xlarge※2 | 4 | 4 | 13:44 | 0.1728USD |
t4g.large | 2 | 2 | 27:10 | 0.0864USD |
t4g.medium | 2 | 2 | 27:17 | 0.0432USD |
※1) ~~ビルド時間は1時間未満のため、~~AWS利用料はEC2(Linux)の1時間の料金です。Debianは1秒単位での課金になります。 | ||||
※2) -jオプションを8としてもビルド時間は13分55秒でほぼ同じ。 |
なお、x86系のt3a.2xlarge(OSはARM版ではないDebian 10 Busterを使用)は、ビルド時間はt4g.xlargeとほぼ同じですが、AWS利用料は2倍となるためt4g系のほうが安価です。
インスタンスタイプ | vCPU数 | -jオプション | ビルド時間 | AWS利用料※1 |
---|---|---|---|---|
t3a.2xlarge | 8 | 8 | 13:53 | 0.3917USD |
ちなみに、EC2ではなくRaspberry Pi 3 Model Bでビルドすると2時間2分34秒を要しました。
##5. 最後に
AWS利用料だけを見ると、メカトラカーネルをビルドするだけならt4g.mediumのコスパが良さそうです!