3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【もうできない】私でもできる!M2MacBookでarm 64版VyOSコンテナ作成

Last updated at Posted at 2023-08-09

ここで言う「私でもできる!」は筆者でもできるという意味であり、これを読んだ全ての人ができるという意味ではないので注意

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などを使って仮想環境を作成
今回はUTMdebian-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
/etc/sudoers
%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はほぼ全書き換えなので書き換え後を載せます

/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の編集

linux-kernel/arch/arm64/configs/vyos_defconfig
cat ./vyos_defconfig  |grep CONFIG_LOCALVERSION
CONFIG_LOCALVERSION="-v8" <-ここのv8を消す!!!!

編集後

vyos_defconfig
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/releasesarm64 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
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?