kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

VyOS rolling releaseのvagrant boxをPackerで作る

f:id:kun432:20201104164552p:plain

VyOSというLinuxをベースにしたルータOSがあります。

これをVagrantで使おうと思うと、以下のhigebuさん作成のvagrantプラグインとvyos boxを使うのが一般的です。

が、公開されているboxはvyos 1.1系で、vyos 1.1自体が本家でもうメンテされておらず、currentは1.2、最新の開発版(rolling release)は1.3とバージョン差異があります。ゆえあって1.3で使いたいので、PackerでVyOS 1.3のboxを作ってみました。

目次

準備

vagrant/virtualbox/packerをインストールしておいてください。Macだとhomebrewでかんたんです。

$ brew install vagrant virtualbox virtualbox-extension-pack packer

PacerでVagrant boxのビルド

packer用のjsonを用意してpacker build JSONファイルすればいいのですが、VyOSだといろいろ必要です。ということで、諸々に対応した自動ビルドスクリプトを以下に用意してます。

  • ISOイメージとチェックサムをisoディレクトリ配下において、./vagrant/build_box.shを実行するだけ
  • debianやvyosのレポジトリを追加
  • virtualbox geust additionsをインストール
  • vagrantの公開鍵を設定(一発目にSSHする場合に限りinsecure_private_keyを使っているのをなんとかしたい・・・)
  • ビルドしたvagrant boxをaddする

までを一気にやります。ビルドが終わったあとでvagrant box list実行するとこんな感じです。

$ vagrant box list
kun432/vyos                                           (virtualbox, 1.3-rolling-202010130117)

では試しにvagrant upしてみましょう。Vagrantfileはこんな感じです。vagrant-vyosプラグインはVyOS 1.3系でもとりあえず動くみたいです。

Vagrant.configure("2") do |config|
  config.vagrant.plugins = ["vagrant-vyos"]
  config.vm.box = "kun432/vyos"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network "private_network", ip: "192.168.34.10"
end

とりあえず。vagrant upします。

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'kun432/vyos'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'kun432/vyos' version '1.3-rolling-202010130117' is up to date...
==> default: Setting the name of the VM: vyos-test_default_1604289125267_77786
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
    default: Adapter 3: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
[default] GuestAdditions 6.1.16 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/kun432/repository/vyos-test

vagrant sshしてみます。

$ vagrant ssh
Linux vyos 4.19.148-amd64-vyos #1 SMP Fri Oct 9 17:19:29 UTC 2020 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Nov  2 03:36:19 2020 from 10.0.2.2
vagrant@vyos:~$

できました!コマンドを叩いてみます。

vagrant@vyos:~$ show configuration
interfaces {
    ethernet eth0 {
        address dhcp
        hw-id 08:00:27:71:88:48
    }
    ethernet eth1 {
        address 192.168.33.10/24
    }
    ethernet eth2 {
        address 192.168.34.10/24
    }
    loopback lo {
    }
}
service {
    ssh {
    }
}
system {
    config-management {
        commit-revisions 100
    }
    host-name vyos
    login {
        user vagrant {
            authentication {
                encrypted-password ****************
                public-keys vagrant {
                    key ****************
                    type ssh-rsa
                }
            }
        }
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
        }
    }
    name-servers-dhcp eth0
    ntp {
        server 0.pool.ntp.org {
        }
        server 1.pool.ntp.org {
        }
        server 2.pool.ntp.org {
        }
    }
    syslog {
        global {
            facility all {
                level info
            }
            facility protocols {
                level debug
            }
        }
    }
}

とりあえずいけてるっぽいです!

まとめ

まだテストまではできてません。vyos 1.3で結構コマンドが変わっていたり、packerのお作法が初めてだったのでいろいろ詰まりましたが、これでISOダウンロード・スクリプト実行するだけで最新のVyOSがいつでもVagrantで使えます。あとは肝心のVyOSのコンフィグをもっと覚えないと・・・

公開しました。 Vagrant box kun432/vyos - Vagrant Cloud

参考

以下を参考にさせてもらいました。ありがとうございました。

テストまで自動化すると便利ですよね。ちょっとやってみよう。