ここで言う「私でもできる!」は筆者でもできるという意味であり、これを読んだ全ての人ができるという意味ではないので注意
2024/11/22追記
もうできなくなっちゃいました。
10/03追記
vyos1.5で動作することの検証をしました
- おまけ(docker hubに任意のイメージをpushする)
を追加しました
やりたいこと
AppleSiliconチップのMacBookにインストールしたDockerで動くarm64のVyOSコンテナの作成
(執筆時は現在最新バージョンの1.4のDockerイメージを作成)
結論
arm v8が悪い
環境
実行環境 | PC | OS | CPU | Ram |
---|---|---|---|---|
ローカル | MacBookAir | macOS 13.3.1 | Apple M2 | 16GB |
仮想環境 | (UTM) | debian-12.1.0 | ARM64(aarch64) | 4GB |
大まかな手順
- dockerが動作するまでの環境構築
- VyOSのビルド公式リポジトリ とlinux-kernelのクローン
- クローンしたファイルの編集
- dockerコンテナ内に入る
- linuxカーネルのビルド
- そのほかのビルド
- isoのビルド
- isoからDockerイメージの作成
手順
ホストマシン上でdebianをvmwareやUTMなどを使って仮想環境を作成
今回はUTM
とdebian-12.1.0-arm64-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.43"
)
cd ./linux/
git checkout v6.1.43
ファイルの編集
公式リポジトリの状態だとarmでは動作しないのでファイルの書き換えを行う
cd ~/vyos/vyos-build/
vim ./data/architectures/arm64.toml
/vyos-build/data/architectures/arm64.toml
はほぼ全書き換えなので書き換え後を載せます
additional_repositories = [
"deb [arch=arm64] https://repo.saltproject.io/py3/debian/11/arm64/3004 bullseye main"
]
kernel_flavor = "arm64-vyos"
# Packages included in ARM64 images by default
packages = ["vyos-linux-firmware", "telegraf", "grub-efi-arm64", "openvpn-dco"]
bootloaders = "grub-efi"
変えたものは
-
additional_repositories
の変更 -
kernel_flavor
からv8-
を削除 - パッケージの追加
(~~省略~~)/linux-kernel/arch/arm64/configs/vyos_defconfig
の編集
cat ./vyos_defconfig |grep CONFIG_LOCALVERSION
CONFIG_LOCALVERSION="-v8" <-ここのv8を消す!!!!
編集後
cat ./vyos_defconfig |grep CONFIG_LOCALVERSION
CONFIG_LOCALVERSION=""
のようになってればOK
telegrafの導入
telegrafをインストールしないといけない[参考文献3]ので
cd ./packages
curl -OL https://dl.influxdata.com/telegraf/releases/telegraf_1.27.3-1_arm64.deb
curlで指定しているリンクはhttps://github.com/influxdata/telegraf/releases のarm64
Debian
のダウンロードリンクを指定
ビルド
/vyos-build
ディレクトリに移動してからdockerコンテナに入る。
cd ../
sudo docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current-arm64 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 arm64 --build-by "yanbaru"
Dockerイメージの作成
まず作成したisoを/vyos
にコピー
cd ~/vyos
cp ./vyos-build/build/vyos-1.4-rolling-202308081319-arm64.iso .
次に作業ディレクトリを作ってisoをマウント
mkdir rootfs
sudo mount -o loop ./vyos-1.4-rolling-202308081319-arm64.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-arm64
動作確認
イメージを動かしてみる
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vyos-1.4-arm64 latest 735deca60d6b 8 seconds ago 1.6GB
sudo docker run -d --rm --privileged -v /lib/modules:/lib/modules vyos-1.4-arm64 /sbin/init
sudo docker ps
sudo docker exec -it 4df0601f89dc 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]。
おまけ 10/03追加
docker hubに任意のイメージをpushする
docker login
docker tag {イメージID} {dockerID}/{イメージ名:tag}
docker push {dockerID}/{イメージ名:tag}
最後に
公式ビルドガイドとRPi版のビルドとその解説記事に基づいて作成しました。参考サイトに感謝申し上げます。 また時間があれば編集とビルドを行うスクリプトを作成予定です。
Special Thanks
cffnpwrに手伝ってもらいました。ありがとうございます。
参考文献
[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/
動作確認済み環境
- vyos1.4
- arm64
- amd64
- vyos1.5
- arm64