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
コマンドに./configure
とmake
を実行させています。
$ 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が開放され課金されなくなります。
最近のコメント