2014/12/23(火)CoreOS on BHyVe

BHyVeにCoreOSを載せてみた。

あんまり情報が見つからないが、ハンドブックなどを参考にしながら進める。
22.4. FreeBSD as a Host with bhyve

前提として、
  • CoreOSをディスクイメージファイル(*.img)にインストールする
  • zvolを追加のディスクとして使う
  • ネットワークインタフェースは tap0 を使い、bridge0 にブリッジする
  • IPアドレスはDHCPでもらう
  • CoreOS は 444.5.0
というモノを作る。


前提条件を作成。ディスクイメージ、ネットワークデバイスなど。
sysctl net.link.tap.up_on_open=1 をすることで、bhyveがtapを使い始めると勝手に up される。手動で ifconfig tap0 up しなくていい。
sudo truncate -s 16G coreos01.img
sudo zfs create -V 64G tank/coreos01

sudo ifconfig bridge0 create
sudo ifconfig bridge0 addm ${外の世界につながるNIC}
sudo ifconfig tap0 create
sudo ifconfig bridge0 addm tap0
sysctl net.link.tap.up_on_open=1
インストール:

いろいろファイルの準備
device.map
grub にディスク名とデバイスファイルの対応付けを教えてあげる。
(hd0) /bhyve/coreos01/coreos01.img
(hd1) /dev/zvol/tank/coreos01                                
(cd0) /ISO/Linux/coreos_production_iso_image.iso
grub.cfg
grub-bhyve から起動するため、ゲストのディスクイメージ内にある grub.cfg は読めないので、こちらで用意してあげる必要がある。何を書けばいいのか、調べるのが割と面倒くさい。
linux (cd0)/coreos/vmlinuz coreos.autologin                                     
initrd (cd0)/coreos/cpio.gz                                                     
boot 
BHyVeのインスタンスを作成・起動して CoreOS LiveCD を起動
sudo grub-bhyve -m device.map -M 4096 < grub.cfg
sudo bhyve -w -AI -H -P \
-s 0:0,hostbridge -s 1:0,lpc\
-s 2:0,virtio-net,tap0\
-s 3:0,virtio-blk,/bhyve/coreos01/coreos01.img\
-s 4:0,virtio-blk,/dev/zvol/tank/coreos01\
-s 5:0,ahci-cd,/ISO/coreos_production_iso_image.iso\
-l com1,stdio -m 4096M coreos01
実際に運用に入ったら、com1 は stdio より nmdm の方が便利。stdio だと端末を占拠されてしまう。
  • l com1,/dev/nmdm0A と指定すれば NullModem インタフェース経由でシリアルコンソールにつながる。
cu -l /dev/nmdm0B でシリアルコンソールが開く。

ディスクが /dev/hda や /dev/sda として出てこないけど、/dev/disk/ 以下にいた。fdisk -l で容量を見たりして識別する。
core@localhost ~ $ ls /dev/disk/by-id/
virtio-BHYVE-72F0-297E-B61
virtio-BHYVE-E1C2-C7E1-F56
CoreOS をインストール
coreos-install -d /dev/disk/by-id/virtio-BHYVE-72F0-297E-B61
インストールが完了したら、HDDイメージから起動してみる。
一旦、インストール時に使った grub.cfg で起動してから
cat (hd0,gpt1)/boot/grub/menu.lst
などとしてHDD起動用のパラメータを抜き出して grub-hdd.cfgを作成する。
grub-hdd.cfg
linux (hd0,gpt1)/syslinux/vmlinuz.A console=tty0 ro noswap cros_legacy  console=hvc0 root=LABEL=ROOT rootflags=subvol=root usr=PARTUUID=7130c94a-213a-4e5a-8e26-6cce9662f132 coreos.autologin
boot
起動したら、zvol ストレージを確認。
core@localhost ~ $ sudo fdisk -l /dev/disk/by-id/virtio-BHYVE-E1C2-C7E1-F56 

Disk /dev/disk/by-id/virtio-BHYVE-E1C2-C7E1-F56: 64 GiB, 68719476736 bytes, 134217728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

core@localhost ~ $ 
見えてる。

ネットワーク。
core@localhost ~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.43  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2a0:98ff:fe96:8c4e  prefixlen 64  scopeid 0x20<link>
        inet6 2408:104:228c:0:2a0:98ff:fe96:8c4e  prefixlen 64  scopeid 0x0<global>
        ether 00:a0:98:96:8c:4e  txqueuelen 1000  (Ethernet)
        RX packets 764  bytes 143569 (140.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 153  bytes 14203 (13.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 99  bytes 13832 (13.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 99  bytes 13832 (13.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

core@localhost ~ $ ping coreos.org
PING coreos.org (174.36.138.29) 56(84) bytes of data.
64 bytes from 174.36.138.29-static.reverse.softlayer.com (174.36.138.29): icmp_seq=1 ttl=52 time=128 ms
64 bytes from 174.36.138.29-static.reverse.softlayer.com (174.36.138.29): icmp_seq=2 ttl=52 time=123 ms
64 bytes from 174.36.138.29-static.reverse.softlayer.com (174.36.138.29): icmp_seq=3 ttl=52 time=120 ms
64 bytes from 174.36.138.29-static.reverse.softlayer.com (174.36.138.29): icmp_seq=4 ttl=52 time=123 ms
^C
--- coreos.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 120.633/124.063/128.383/2.808 ms

オッケー。


updateとかもろもろはまた後日。BHyVe環境だと若干の手運用が介在してしまう気配。

参考資料
https://wiki.freebsd.org/bhyve
https://www.freebsd.org/doc/handbook/virtualization-host-bhyve.html
https://coreos.com/docs/
Docker
bhyve
OK キャンセル 確認 その他