VyOS とは Debian GNU/Linux を基盤に開発されている network OS の一種である。広く software router として使用されている。 VyOS はその前身となる Vyatta の権利が買収されたことにより無償版の開発が終了した結果、Vyatta Core 6.6 R1 より分岐する形で誕生し、今なお精力的に開発が行われている。 VyOS 1.1.8 とそれ以降で開発元の方針が変更され、1.1.8 まではインストール用のシステムイメージが公開されているが、1.2 以降は公開がなされていない。 VyOS 1.2 からは LTS (Long Term Support) Release と Rolling Release の二つに分けて公開されており、前者はいわゆる安定版の Release であり、 後者は最新版の Release と考えて良い。VyOS 1.2 以降のシステムイメージが必要な場合は subscription に参加するか、source code から作成する必要性がある。 ここでは source code から作成する方法について簡単に纏めておく。

VyOS と docker

適当なバージョンの Debian を予め用意しておく。仮想環境がお勧めである。VyOS の build では docker を用いる方法が推奨されている。docker を導入していない場合、差し当たって必要とみられる次のパッケージをインストールしておく。
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common tmux
先ずは docker を導入するため、Repository 情報を変更してパッケージをインストールする。
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 docker-ce
インストール後に systemctl start docker とすれば docker が起動する。通常は呼ばなくても起動している。

docker container 用 image の準備

先ず最初に現在の VyOS の開発状況を把握する。

cd $HOME
mkdir vyos-build
git clone https://github.com/vyos/vyos-build
cd vyos-build
git branch -a

最後のコマンドにより現在の branch の一覧を取得できる。現在有効な branch は current, crux, ami, master であった。 現在の VyOS LTS Release に該当するのは VyOS 1.2.x Crux の crux である。 現在の VyOS Rolling release に該当するのは VyOS 1.3.x Equuleus で current である。 ami は AWS (Amazon Web Services) 用であるという。今回は crux の branch を選び git clone で指定することにする。

cd ../
rm -r vyos-build
git clone -b crux --single-branch https://github.com/vyos/vyos-build.git
mv vyos-build vyos-build_crux
cd vyos-build_crux

docker container に使う image を用意するには二通りの方法がある。一つは Docker Hub から取ってくることであり、その場合は次の様にする。

sudo docker pull vyos/vyos-build:crux

ダウンロードするだけなのでこれは二、三分で終了する。利用できるイメージは Docker Hub の tag で確認できる。もう一つは source code からビルドする方法であり、その場合は次の様にする。

sudo docker build -t vyos/vyos-build:crux docker

これは小一時間ほどかかる作業である。vyos/vyos-build:crux は docker container の識別名であるが Docker Hub と共通にしている。現在の container 用 image の容量、変更日などは次のコマンド

sudo docker images

を実行することによって把握することができる。要らなくなった image は

sudo docker rmi "<Image ID>"

を実行することによって削除できる。<Image ID> は container の識別名とは別に存在する独立な値で sudo docker images で確認したものを指定する。 現在のところ、必要とする VyOS のバージョンに従って container は複数必要である。VyOS 1.2 Crux は Debian 8 Jessie を元にし、VyOS 1.3 Equuleus は Debian 10 Buster を元にするといった様に基盤が異なるためである。 また container 作製後は不要になった container が存在し続けることもある。その場合は sudo docker ps -a で全ての container を確認の上、 sudo docker rm "<Conainer ID>" で削除する。<Conainer ID> は sudo docker ps -a で確認した conainer に固有の値である。

docker container の起動と VyOS の build

docker container を起動する用意が整ったならばいよいよ次のコマンドを実行して docker container を起動させる。

sudo docker run -it --privileged -v /home/$USER/vyos-build_crux:/vyos -w="/vyos" vyos/vyos-build:crux bash

ここで /home/$USER/vyos-build_cruxgit で同期した directory を、vyos/vyos-build:crux は container の識別名である。 無事画面が遷移して docker 環境の shell に切り替われば起動完了である。そこから VyOS の ISO ファイルを作るため、次のコマンドを実行する事で build できる。

./configure --build-type release --version 1.2.6
sudo make iso

--version には現在の LTS と同じ 1.2.6 を指定しているが任意で良い。 環境にもよるが二十分ほどで終了する。make-j は依存関係があって上手く働かないので指定しなかった。 cross-compilation が必要な場合は --architecture を指定すれば良い。現状では amd64, i386, armhf を指定できる。 詳しいことは ./configure -h を参照すると良いだろう。 恙無く終了すれば ISO ファイルが作業 directory の build/ に "live-image-amd64.hybrid.iso" などとして作成される。 作業が完了したならば exit で shell を閉じることで元の shell に戻る。

VyOS のインストール

作成した ISO ファイル を scp などで build 環境から取り出したら、VyOS のインストールを行う。 現状既に導入している環境であれば、殆どの場合は image インストールを選択していると考えられる。 インストール済みの image は show system image で確認できる。 ISO ファイルをインストールするには次の通りする。

add system image "<ISO File Path>"
add system image "<ISO URL>"

作成した ISO ファイルを転送して直接してするか、URL を指定する方法とが存在する。 image の名前や設定の複製が必要かどうかなど聞かれるので適宜答える。 set system image default-boot で起動時に使う image を選べ、 delete system image で不要な image を削除できる。

add system image "<ISO File Path>"
add system image "<ISO URL>"

VyOS の直接的な build

VyOS を docker によらず作成する方法も公式の案内では紹介されているが、依存関係が複雑でインストールが困難であった。 少なくとも次のパッケージが必要になったが、python3-git など幾つかは obsoleted であった。

sudo apt-get install git autoconf automake dpkg-dev syslinux genisoimage qemu jq libz-dev zip python3 live-build pbuilder devscripts python3-pystache python3-distutils python3-git
  1. GitHub - VyOS toplevel build
  2. VyOS Documents - Build VyOS
  3. VyOS Wiki - Building images using vyos-build Docker container
  4. VyOS Wiki - Howto build VyOS 1.2 ISO image and VMWare .OVF
  5. VyOS Wiki - Howto build an ISO image
  6. Qiita - VyOS 1.2.x のisoイメージをビルドしてみる
  7. Qiita - Docker イメージとコンテナの削除方法
  8. Creating VyOS ISO Image
  9. VyOSをソースからビルドしてみた
  10. VyOSと戯れてみた

技術考󠄁 > VyOS LTS Release の build と docker 環境
Copyright© R2[2020]. All Rights Reserved.