ここで言う「私でもできる!」は筆者でもできるという意味であり、これを読んだ全ての人ができるという意味ではないので注意
この記事は私でもできる!M2MacBookでarm 64版VyOSのコンテナ作成をもとに作成しています。
やりたいこと
- vyos1.4のDockerコンテナ作成
- 私の書いた記事をもとにamd64で動くコンテナの作成
環境
実行環境 | PC | OS | CPU | Ram |
---|---|---|---|---|
ローカル | 自作PC | Windows10 | i7-10700 | 16GB |
仮想環境 | VirtualBox | debian-12.1.0 | 4コア | 4GB |
大まかな手順
- dockerが動作するまでの環境構築
- VyOSのビルド公式リポジトリ とlinux-kernelのクローン
- dockerコンテナ内に入る
- linuxカーネルのビルド
- そのほかのビルド
- isoのビルド
- isoからDockerイメージの作成
手順
ホストマシン上でdebianをvmwareやUTMなどを使って仮想環境を作成
今回はVirtualBox
とdebian-12.1.0-amd64-netinst
を使用
名前だけ指定して他のパラメータはデフォルト設定
初期設定後ip a
でネットワークを確認してターミナルからssh
$ ip a
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:20:5a:33 brd ff:ff:ff:ff:ff:ff
altname enp2s0
inet 192.168.137.131/24 brd 192.168.137.255 scope global dynamic ens160
valid_lft 1593sec preferred_lft 1593sec
inet6 fe80::20c:29ff:fe20:5a33/64 scope link
valid_lft forever preferred_lft forever
これ以降は全てsshで作業を行う(コピペが面倒なので)
初期設定
- sudoの追加
sudoがないのでsudoのインストール
~$ su
apt update
apt upgrade
apt install sudo
sudoグループにユーザを追加
su -
visudo
%wheel ALL=(ALL) ALL
[ユーザ名] ALL=(ALL) ALL
保存してsudo pwd
などを実行してsudo権限があることを確認[参考文献1]
- dockerのインストール
スクリプトを使用してインストールと動作確認[参考文献2]
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo docker run hello-world
リポジトリのクローン
まず作業ディレクトリを作成して公式のリポジトリをクローンする
mkdir vyos
cd ./vyos/
git clone https://github.com/vyos/vyos-build.git
/vyos-build/packages/linux-kernel/
にlinuxのカーネルをクローン
cd ./vyos-build/packages/linux-kernel/
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
クローンが終わったら/vyos-build/data/defaults.toml
を見てkernel_version
に合わせてlinuxのリポジトリをチェックアウトする(今回はkernel_version = "6.1.45"
)
cd ./linux/
git checkout v6.1.45
telegrafの導入
telegrafをインストールしないといけない[参考文献3]ので
cd ./packages
curl -OL https://dl.influxdata.com/telegraf/releases/telegraf_1.27.3-1_amd64.deb
curlで指定しているリンクはhttps://github.com/influxdata/telegraf/releases のamd64
Debian
のダウンロードリンクを指定
ビルド
/vyos-build
ディレクトリに移動してからdockerコンテナに入る。
cd ../
sudo docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current bash
カーネルのビルドを行う。
cd ./packages/linux-kernel/
sudo ./build-kernel.sh
ファームウェアのクローンとビルド
git clone https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
sudo ./build-linux-firmware.sh
accel-pppのクローンとビルド
git clone https://github.com/accel-ppp/accel-ppp.git
sudo ./build-accel-ppp.sh
最後にisoのビルド
--build-by
は自分の名前を入れておく。適当でも動く
cd /vyos
sudo ./build-vyos-image iso --architecture amd64 --build-by "yanbaru"
Dockerイメージの作成
まず作成したisoを/vyos
にコピー
cd ~/vyos
cp ./vyos-build/build/vyos-1.4-rolling-202308140706-amd64.iso .
次に作業ディレクトリを作ってisoをマウント
mkdir rootfs
sudo mount -o loop ./vyos-1.4-rolling-202308140706-amd64.iso ./rootfs/
read-only
の警告が出ても無視して継続
squashfs-tools
のインストール
sudo apt install -y squashfs-tools
マウントしたisoからファイルを取り出す
sudo unsquashfs -f -d unsquashfs/ rootfs/live/filesystem.squashfs
取り出したファイルをtarでアーカイブしてdockerイメージを作成
sudo tar -C unsquashfs -c . | sudo docker import - vyos-1.4-amd64
動作確認
イメージを動かしてみる
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yanbaru/vyos-1.4 amd64 9b8933195e41 45 minutes ago 1.77GB
sudo docker run -d --rm --privileged -v /lib/modules:/lib/modules vyos-1.4-amd64 /sbin/init
sudo docker ps
sudo docker exec -it d53801b306d9 su - vyos
vyos@4df0601f89dc:~$c
動いた!!
あとはこれをお手元になんらかの方法で持ってきてDockerで動かせばOK(Docker Hub)とか
困ったこと
ビルドやiso作成中に以下のようなエラーが発生してビルド等が終了する。
E: Release file for http://〜〜〜 is not valid yet (invalid for another 37min 22s). Updates for this repository will not be applied.
これはコンテナの時刻がズレて発生しているので1度コンテナを出てから再度入って止まったコマンドを実行すると動く[参考文献4]。
最後に
公式ビルドガイドに基づいて作成しました。参考サイトに感謝申し上げます。
参考文献
[1] 【CeontOS7】「sudoers ファイル内にありません。この事象は記録・報告されます」というメッセージが出た時の対処
https://it.notepad-blog.com/tool/207/
[2] Linux に Docker を一発インストールするワンライナー
https://qiita.com/KEINOS/items/bdc9450c1a88c210aa88
[3]Raspberry Pi 4 Model B 上で VyOS を動かす
https://qiita.com/DJ_Kaosun/items/6fc072e8490725e6c037
[4] WSLのapt updateでRelease file is not valid yetと言われたらWSLの時刻がずれてるかも。
https://ginpen.com/2021/06/05/apt-update-release-file-is-not-valid-yet/