EC2にVyOS isoイメージビルド用のマシンを作成する

2023/6/22に発表されたVyOS 1.3.3 LTSのビルドも同様に実施できることを確認しました。(2023/07/25)

2024/2/22に発表されたVyOS 1.4.0 LTSのビルドについては以下の記事をご覧下さい。(2024/3/9)

VyOSはオープンソースのソフトウェアルータですが、近頃は非課金の一般ユーザではリリースバージョンのisoファイルはダウンロードできず、rollingリリースのものしかダウンロードできません。
ある程度安定性を確保できバグが少ないため、できればリリースバージョンを使いたいところですが、オープンソースなので自分でビルドすることでisoファイルを手に入れることが可能です。

ちょうど数日前にVyOS 1.3.2 LTSのリリースがあったようで、それを機にisoのビルドに挑戦しました。

基本的にはVyOSのドキュメントにある通り実施すればいいのですが、一応方法を記しておきます。
また、EC2で使い捨ての仮想マシンをたて、ビルドまで自動で行うような方法も紹介しておきます。

手動ビルドの方法

基本的には、以下のドキュメントの通りです。

以下に方法を記載しますが、実際にやってみるとドキュメントに若干誤植っぽい箇所がありましたので、それも示しておきます。

前提条件

  • 実行環境
    • Debian 11 bullseye(EC2 AMIの初期状態)
    • EBSは12GB以上を割り当て(デフォルトでは8GBだが、ビルドすると容量が不足するため)
  • ビルドするVyOSバージョン
    • VyOS 1.3.2 LTS

手順

dockerの環境を整える

$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce

ビルドに使うdocker imageを取得する

$ docker pull vyos/vyos-build:equuleus

VyOSのソースコードを取得する

$ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build

buildを実行する

ここについては、ドキュメントに誤植があるのと、ワンライナーで実行出来るようにコマンドをカスタマイズしています。

誤植については、以下の様にドキュメントでは-w /vyosとなっているのですが、このまま実行すると後続の./configureが実行できません。

正しくは、-w /vyos/vyos-buildとする必要があります。(もしくは、./configureを実行する前にcd vyos-buildを実行するのでも大丈夫そうです)
要は./configureを実行するディレクトリをvyos-buildディレクトリにするわけです。

ワンライナーについては、TTYを与えず(-tを削除し)、bashコマンドに./configuremakeを実行させています。

$ docker run --rm -i --privileged -v /root:/vyos -w /vyos/vyos-build vyos/vyos-build:equuleus bash -c "./configure --architecture amd64 --build-type=release --version 1.3.2 --build-by www2.filewo.net; make iso"

EC2の無料利用枠にあるt2.microインスタンスであれば、20分以内でビルドが完了します。

ビルドしたisoファイルを転送する

ビルドしたisoファイルは、vyos-build/build/vyos-1.3.2-amd64.isoに保存されているので、scp等で適当に手元に転送しましょう。

自動ビルドの方法

EC2をビルド用に使い捨てる場合、上記の手順を毎回実行するのは大変です。
なので、仮想マシンの起動からビルドまでを、cloud-initによって自動化してしまいます。

前提条件

手動ビルドと同じです。

手順

ユーザーデータの設定

仮想マシン作成時(インスタンスを起動時)にユーザーデータを設定します。
ユーザーデータの設定場所は「高度な詳細」の下にある「ユーザーデータ」です。

ユーザーデータの中には以下の様なスクリプトを設定します。

#!/bin/bash
VER=1.3.2
BUILDBY=www2.filewo.net

apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
apt-get update
apt-get install -y docker-ce
docker pull vyos/vyos-build:equuleus
cd /root
git clone -b equuleus --single-branch https://github.com/vyos/vyos-build
docker run --rm -i --privileged -v /root:/vyos -w /vyos/vyos-build vyos/vyos-build:equuleus bash -c "./configure --architecture amd64 --build-type=release --version $VER --build-by $BUILDBY; make iso"
mv /root/vyos-build/build/vyos-$VER-amd64.iso ~admin/
chown admin: ~admin/vyos-$VER-amd64.iso

スクリプトの内容を簡単に説明しておきます。
cloud-initはrootユーザで実行されるのでsudoは全て外しています。
また、作業ディレクトリが/になるので、途中でcd /rootをしています。
ビルドしたisoファイルは扱いやすいように、adminユーザのホームディレクトリに移動しています。

スクリプト上部にあるVER=1.3.2を変更すれば、別バージョンのビルドも可能のはずです。
ただし1.4系など別の系列のビルドは、そもそもスクリプトが異なるのでこのままではビルドできません。

ユーザデータを設定した上で、仮想マシンを作成(インスタンスを起動)すると、OSが起動しビルドが実行されます。

ビルドが完了したかを確認する

cloud-initの実行ログは/var/log/cloud-init-output.logに記録されるので、作成した仮想マシンへSSHでログインしてless等で状況を確認して下さい。
ログに以下のような出力が表示されれば完了しています。

Cloud-init v. 20.4.1 finished at Tue, 25 Jul 2023 05:16:33 +0000. Datasource DataSourceEc2Local. Up 774.23 seconds

またビルド完了後は~admin/vyos-1.3.2-amd64.isoにファイルが作成されます。

ビルドが完了したらisoファイルを転送し、仮想マシンを終了しておきましょう。
終了することで、EC2とEBSが開放され課金されなくなります。

おすすめ

コメントを残す

Amazon プライム対象