LoginSignup
0
1

More than 1 year has passed since last update.

vyosをまたisoからbuildした

Last updated at Posted at 2023-03-06

vyosのdocker imageをisoからbuildした話し

vyosがまた使えなくなった

会社のansible勉強会的な取り組みで、vyosをdockerで使っています。
vyosは無料で使えるので、ありがたい限りなのですが、たまに想定外なふるまいをします。
2年前くらいには先人が作成してくださったdocker imageを使っていたのですが、routerのoperation modeに入るためのuserが突如作られなくなってしまい、その時に初めて自分でisoからbuildしてみました。
しかし、その時ちゃんと記録を残していなかったので、今回また苦労することに。
というわけで、今回こそちゃんと記録を残します

今回起こったこと

今回はconfigをcommitできなくなってしまいました。
それどころか、起動時の初期configも読み込めないです。

# 初期configがない!
vyos@vyos:~$ show configuration 
Configuration under specified path is empty
vyos@vyos:~$ 

# commitもできない!      
vyos@vyos:~$ configure 
[edit]
vyos@vyos# set system host-name 'vyos_test'
[edit]
vyos@vyos# compare 
+system {
+    host-name vyos_test
+}
[edit]
vyos@vyos# commit

Invalid host name vyos_test

[[]] failed
Commit failed
Failed to generate committed config
[edit]
vyos@vyos# 

起動ログを読んでみても、

Mar  5 13:18:48 vyos vyos-configd[48]: Sending response 1
Mar  5 13:18:48 vyos systemd[1]: opt-vyatta-config-tmp-new_config_660.mount: Succeeded.
Mar  5 13:18:48 vyos vyos-router[105]:  configure
Mar  5 13:18:48 vyos vyos-router[885]:  failed!
Mar  5 13:18:48 vyos systemd[1]: Reloading.
Mar  5 13:18:49 vyos vyos-config[121]: Configuration error

起動時のconfigureさえできてないんだなーという程度のことしか分からず...

ということで、imageを再度buildしてみることにしました。

手順

ざっくりと流れを説明すると、

  1. vyosのisoをbuildするためのdocker imageをpull
  2. isoをmakeするためのscriptをgit clone
  3. build用のdocker containerでscriptを動かして、isoをmakeする
  4. hostに戻って、squashfs-toolsでごにょごにょしてdocker imageを作る(よく分かってない)
  5. vyosのdocker imageをdocker runして確認

てな感じです。

公式Doc
https://docs.vyos.io/en/equuleus/contributing/build-vyos.html
https://docs.vyos.io/en/latest/contributing/build-vyos.html
https://docs.vyos.io/en/latest/installation/virtual/docker.html

下準備

今回はEC2でAmazon Linuxを立てて、dockerをinstallして、そこでもちゃもちゃしました。
というのも、今まで使ってたvyosのimageが何故かubuntuのdockerやrhel系のpodmanで、operation modeに入れない現象が解決しておらず、Amazon Linuxだけは改善していたんです。
(今回imageを作り直したら、その問題も無事解決しました!)

vyosのisoをbuildする用のdocker imageをpull

今回は最初は上手くいく見通しが全く立ってなかったので、vyosのversion1.3と1.4を並行して進めました。

# 1.3
$ docker pull vyos/vyos-build:equuleus

# 1.4
$ docker pull vyos/vyos-build:current

makeするためのscriptをcloneしてmake

# 1.3
$ cd ~
$ mkdir vyos13
$ cd vyos13
$ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build
$ cd vyos-build
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:equuleus bash

# ここでdocker containerに入るので、pormptが"vyos_bld@d4220bb519a0:/vyos"に変わる
$ ./configure --architecture amd64
$ sudo make iso

これで1hくらい待つと、buildというディレクトリにvyos-1.3-rolling-<datetime>-amd64.isoができあがります。
dockerの中で作ったファイルですが、ちゃんとvolume mountされているので、host側にも残ってます。

1.4もほぼ同じなのですが、scriptがconfigureではなくbuild-vyos-imageでした。

# 1.4
$ cd ~
$ mkdir vyos14
$ cd vyos14
$ git clone -b current --single-branch https://github.com/vyos/vyos-build
$ cd vyos-build
$ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current bash

# ここでdocker containerに入るので、pormptが"vyos_bld@8153428c7e1f:/vyos$"に変わる

$ sudo ./build-vyos-image iso --architecture amd64
$ sudo make iso

isoからcontainer imageを作成

ここからは1.3も1.4もファイル名程度の差分しかないので、1.3を例に書いていきます。
このあたりは、前回buildしたときはちゃんとコマンドの意味を調べたのですが、それはとうの昔の話し。
もうさっぱり覚えていません。
そして、今回は何も考えずに公式Docのコピペで済ませてしまいました。

$ pwd
# -> /home/ec2-user/vyos13

$ cp vyos-build/build/vyos-1.3-rolling-<datetime>-amd64.iso .
$ mkdir rootfs
$ sudo mount -o loop vyos-1.3-rolling-<datetime>-amd64.iso rootfs
$ sudo yum install -y squashfs-tools
$ mkdir unsquashfs
$ sudo unsquashfs -f -d unsquashfs/ rootfs/live/filesystem.squashfs
$ sudo tar -C unsquashfs -c . | docker import - vyos-1.3-rolling-<datetime>-amd64

docker imagesしてみたら、無事できてました。

REPOSITORY        TAG                        IMAGE ID       CREATED       SIZE
vyos              1.3-rolling-202303060135   51b2597b0b75   4 hours ago   1.25GB
vyos/vyos-build   equuleus                   d561207f43bd   3 days ago    4.06GB
vyos/vyos-build   current                    85c2221781ca   11 days ago   4.63GB

恐る恐るのdocker runからのshow configuration

$ docker run -d --rm --name vyos13 --privileged -v /lib/modules:/lib/modules vyos:1.3-rolling-202303060135 /sbin/init
$ docker exec -it vyos13 su - vyos

# containerに入りました

vyos@vyos:~$ show configuration 
interfaces {
    loopback lo {
    }
}
system {
    config-management {
        commit-revisions 100
    }
    conntrack {
        modules {
            ftp
            h323
            nfs
            pptp
            sip
            sqlnet
            tftp
        }
    }
    console {
        device ttyS0 {
            speed 115200
        }
    }
    host-name vyos
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
        }
    }
    ntp {
        server time1.vyos.net {
        }
        server time2.vyos.net {
        }
        server time3.vyos.net {
        }
    }
    syslog {
        global {
            facility all {
                level info
            }
            facility protocols {
                level debug
            }
        }
    }
}
vyos@vyos:~$ 

ひゅー!vyattaね!

その後

commitもできたし、ansibleでの設定変更も無事できることが確認できました。
というわけで、docker pushしましたので、vyosで遊んでみたい方はどうぞ使ってみてください。
ちゃんとしたメンテナンスは全然してないので、その点は悪しからずで。

docker run -d --rm --privileged -v /lib/modules:/lib/modules shihou/vyos13:latest /sbin/init

docker run -d --rm --privileged -v /lib/modules:/lib/modules shihou/vyos14:latest /sbin/init
0
1
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
0
1