EC2にVyOS isoイメージビルド用のマシンを作成する(VyOS 1.4 LTS対応版)

基本的な説明については、EC2にVyOS isoイメージビルド用のマシンを作成する(VyOS 1.3の記事)をご覧下さい。

VyOS 1.4 LTS(1.4.0-epa1)がいつの間にかリリースされており、今回はこのisoをビルドしたいと思います。

以前VyOS 1.3系のビルドについて記事にしましたが、VyOSのバージョンが上がってビルド方法に多少変更があるのと、ビルドに利用するDebianのバージョンが12系に上がったことで、手順が異なっています。

手動ビルドの方法

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

以下に方法を記載しますが、1.3の頃から相変わらず、ドキュメントに若干誤植っぽい箇所がありましたので、それも示しておきます。

前提条件

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

手順

dockerの環境を整える

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

Debian 11系から12系に変わったことで、gpgキーの保存方法が変わりました。

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

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

buildを実行する

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

誤植については、ドキュメントでは-w /vyosとなっているのですが、このまま実行すると後続の./makeが実行できません。
正しくは、-w /vyos/vyos-buildとする必要があります。(もしくは、./makeを実行する前にcd vyos-buildを実行するのでも大丈夫そうです)
要は./makeを実行するディレクトリをvyos-buildディレクトリにするわけです。

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

$ docker run --rm -i --privileged -v /root:/vyos -w /vyos/vyos-build vyos/vyos-build:sagitta bash -c "os=buster64 branch=sagitta make build; make clean; ./build-vyos-image iso --architecture amd64 --build-type release --version 1.4.0-epa1 --build-by www2.filewo.net"

VyOS 1.3系の頃からisoビルドの方法が変更になっています。
また、VyOS 1.3系の頃はdockerイメージを手動で取得していましたが、VyOS 1.4系ではbuild-vyos-imageが勝手に取得してくれるようになっていました。

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

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

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

自動ビルドの方法

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

前提条件

手動ビルドと同じです。

手順

ユーザーデータの設定

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

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

#!/bin/bash
VER=1.4.0-epa1
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 > /etc/apt/trusted.gpg.d/docker.asc
add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
apt-get update
apt-get install -y docker-ce
cd /root
git clone -b sagitta --single-branch https://github.com/vyos/vyos-build
docker run --rm -i --privileged -v /root:/vyos -w /vyos/vyos-build vyos/vyos-build:sagitta bash -c "os=buster64 branch=sagitta make build; make clean; ./build-vyos-image iso --architecture amd64 --build-type release --version $VER --build-by $BUILDBY"
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.4.0-epa1を変更すれば、別バージョンのビルドも可能のはずです。
ただし1.5系など別の系列のビルドは、VER以外にも変更が必要な箇所があります。

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

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

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

Cloud-init v. 22.4.2 finished at Sat, 23 Mar 2024 12:23:49 +0000. Datasource DataSourceEc2Local. Up 1104.34 seconds

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

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

おすすめ

コメントを残す

Amazon プライム対象