ちょっとBGPとかISISとかのお勉強をしたいなと思い、VyOSを実験マシンで動かすことにしました。
VyOSはVyattaというソフトウェアルーターのオープンソース版から派生したLinuxベースのルーティングソフトです。
実験に使う機材は例によってIntel VTの使えないシングルコアCeleron 550マシンなのでXenの準仮想化(PV)モードで動かします。
環境はLinux Mint Mate 18.3 + Xen 6.4。Ubuntu 16.04 LTSでも同じ手順で行けると思います。
そしてまたまたハマりました(笑)
Xenを使い始めた頃にUbuntu ServerをXen PVモードで起動出来るまで2週間かかったのに比べると今回は約3晩、時間にして10時間くらいで解決できました。だいぶ準仮想化でLinux動かすノウハウがついてきました。
備忘録としてハマりポイントとか書いていきます。
- ISOイメージ入手
https://vyos.io/
のDownloadsからLive CDのISOイメージを入手します。2018/4/13時点の最新stable版は1.1.8でvyos-1.1.8-amd64.isoというのが物理サーバー上でも仮想マシンでも動く64bit版のVyOSのLive CDイメージです。
- ISOをloopbackマウントし、kernelとramdiskイメージを取り出す
PVモードではBIOSのエミュレーションが出来ないので、kernelイメージを取り出して、それを元にLive CDを起動する必要があります。とりあえず、下記の様に/mnt下にマウントします。# sudo mount -o loop -t iso9660 vyos-1.1.8-amd64.iso /mnt
/mntの下を見るとdoc,isolinux,liveというディレクトリがあります。
liveの下にvmlinuzとinitrd.imgがあるので適当なディレクトリにコピーします。# ls /mnt doc isolinux live md5sum.txt # ls /mnt/live filesystem.packages initrd.img parameters.txt filesystem.squashfs packages.txt vmlinuz # cp /mnt/live/vmlinuz /home/foo/xen-work/vyos/ # cp /mnt/live/initrd.img /home/foo/xen-work/vyos/
ちなみにliveの下にあるparameters.txtには起動時に使えるkernelオプション一覧が載っているので、これも参考用に取り出しておくと良いです。これとisolinuxの下にあるisolinux.cfgがインストーラを起動するためのKernelオプション指定の参考なりました。
# cp /mnt/live/parameters.txt /home/foo/xen-work/vyos/ # cp /mnt/isolinux/isolinux.cfg /home/foo/xen-work/vyos/
必要なファイルを取り出したら、ISOイメージをアンマウントします。
# cd /home/foo/xen-work/ # sudo umount /mnt
- イメージファイルを作成する
最低スペックはHDD 2Gということで2GBのRAWイメージファイルを作成します。
(ストレージに余裕がある人はもっと大きいイメージファイルを作っても構いません)# truncate -s 2G vyos.img
- インストール用のxl.cfgを作成する。
vyos-inst.cfgというファイル名で下記の内容のファイルを作成しました。
/home/foo/xen-work/下にisoイメージ、/home/foo/xen-work/vyos下に先ほどのkernelとramdiskがあるものとします。name = "vyos" kernel = "/home/toy/xen-work/vyos/vmlinuz" ramdisk = "/home/toy/xen-work/vyos/initrd.img" # 最低メモリ量512MB(実際は256MBでも起動はできる) memory = 512 vcpu = 1 disk = [ 'file:/home/foo/xen-work/vyos.img,xvda,w','file:/home/foo/xen-work/vyos-1.1.8-amd64.iso,xvdb:cdrom,r' ] # networkインターフェイス xx:xx:xxには任意のMACアドレス下位3オクテットを記載 vif = [ 'mac=00:16:3e:xx:xx:xx,bridge=xenbr0'] hostname=vyos" # Kernel Bootオプション # console=hvc0 xencons=ttyはXen用の仮想コンソール # boot=liveはVyOS用kernelの最低限の起動オプション extra = "console=hvc0 xencons=tty boot=live" # インストール時VGAコンソールが必要なのでVNCを有効化 vnc=1
ここでのポイントは以下の通りです。
- Kernel起動オプションは"boot=live"がミニマム。これはisolinux.cfgを見て判断しました。
- Kernel起動オプションに"console=hvc0 xencons=tty"を付ける。デフォルトではttyS0を使おうとしてブート中にpanicを起こすため、Xen用のコンソール指定を付けています。"xencons=tty"は要らないかもしれませんが一応付けました。
- VNCを有効にする。実はconsole=hvc0を指定していても、ある程度までbootが進んだところでコンソールは無応答になります。ここの解決にハマったのですが、実はVGAコンソール側にコマンドプロンプトが出ており、そちらからインストール作業が出来る状態になります。vnc=1を指定しておいて、ある程度bootが進んだところで適当なvnc viewerでVGAコンソールに接続します。
- Kernel起動オプションは"boot=live"がミニマム。これはisolinux.cfgを見て判断しました。
- LiveCD起動
# sudo xl create -c vyos-inst.cfg
これでkernel bootが始まります。以下にようなメッセージがコンソールに出力されるまで待ちます。
Starting routing daemons: ripd ripngd ospfd ospf6d bgpd. Mounting VyOS Config...done. Starting VyOS router: migrate rl-system firewall configure. Starting vyos-intfwatchd: vyos-intfwatchd.
この状態でvncviewerを起動します。vnc=1のみの設定ではlocalhost:5900にvncviewerを繋げばLiveCDの操作画面にアクセス出来ます。
Linux vyatta 3.13.11-1-amd64-vyatta #1 SMP Sat Nov 11 12:10:30 CET 2017 x86_64 Welcome to VyOS. This system is open-source software. The exact distribution terms for each module comprising the full system are described in the individual files in /usr/share/doc/*/copyright. vyos@vyos:~$
こんな感じの画面がvncviewer側に表示されていますので、公式のwikiを参考にインストールコマンドを入力するとインストールが進みます。
vyos@vyos:~$ install image
インストールが終わったらrebootするか聞かれるので、yesと入力しますが、このままでは、またLiveCDが起動するため、起動したのを見届けたら適当に別端末開いて
# sudo xl destroy vyos
としてVMを止めます。
- インストール済みイメージ起動用のxl.cfgを作成
ファイル名をvyos.cfgとすると下記の内容になります。name = "vyos" memory = 512 vcpu = 1 disk = [ 'file:/home/foo/xen-work/vyos.img,xvda,w'] vif = [ 'mac=00:16:3e:xx:xx:xx,bridge=xenbr0'] # VNC設定は不要。 # vnc = 1 bootloader = "/usr/lib/xen-4.6/bin/pygrub"
- vyos.imgをloopbackマウントしてgrub.cfgを書き換え
vyos.imgをkpartxを使いloopbackマウント、/boot/grub/grub.cfgを編集します。# sudo kpartx -av vyos.img add map loop0p1 (253:0): 0 4192256 linear 7:0 2048 # sudo mount /dev/mapper/loop0p1 /mnt # sudo vi /mnt/boot/grub/grub.cfg
grub.cfg内には「VyOS 1.1.8 Linux (KVM console)」というメニューアイテムが定義されていますがこれを「VyOS 1.1.8 Linux (Xen console)」に書き換えると共に、console指定をconsole=hvc0に書き換えます。オリジナルはconsole=ttyS0等になっていますが、ttyS0ではXenのPVモードで起動出来ないためです。
# Generated by /opt/vyatta/sbin/vyatta-grub-setup at Thu Apr 12 13:56:00 UTC 2018 set default=0 set timeout=5 serial --unit=0 --speed=9600 terminal_output --append serial echo -n Press ESC to enter the Grub menu... if sleep --verbose --interruptible 5 ; then terminal_input console serial fi menuentry "VyOS 1.1.8 linux (Xen PV console)" { linux /boot/1.1.8/vmlinuz boot=live quiet vyatta-union=/boot/1.1.8 console=hvc0 initrd /boot/1.1.8/initrd.img } menuentry "Lost password change 1.1.8 (Xen PV console)" { linux /boot/1.1.8/vmlinuz boot=live quiet vyatta-union=/boot/1.1.8 selinux=0 console=hvc0 init=/opt/vyatta/sbin/standalone_root_pw_reset initrd /boot/1.1.8/initrd.img }
# sudo umount /mnt # sudo kpartx -d vyos.img loop deleted : /dev/loop0
これで後はxlコマンドで先ほど作成したvyos.cfgを使ってVMイメージを起動します。
# sudo xl create -c vyos.cfg
後はコンソールからユーザーガイド
ユーザーガイド - VyOS jp
に従って各種設定を実施しますが、コンソールに関して以下の設定をしておくと余計なメッセージがコンソールに出なくなります。$ configure # delete system console device ttyS0 # set system console device hvc0 # commit # save
ネットワークの設定などは特殊な部分は無いのでVyOSのユーザーガイドを参照してください。
ユーザーガイド - VyOS jp
- インストール時のkernelの起動オプションを解析
- コンソール指定の各所での書き換え(ttyS0をhvc0に変更)
の2点でした。