OracleCloud 仮想マシンの移行をしてみた (VyOSをOCIに移行)

# はじめに

Oracle Cloud Infrastructure 上で動かすインスタンスは、Oracle側で用意したOSのイメージやマーケットプレイス上のイメージを使用して作成することが出来ます。Windows, Oracle Linux, Cent OS, Ubuntu などが標準で用意されています。
これに対して、独自に用意した仮想マシンイメージを Custom Image としてBYOI(仮想マシンの移行)することで、任意の仮想マシンイメージを使用してインスタンスを起動することができます。

今回の記事は、Virtual Box で作成した仮想マシン をインポートして、インスタンスとして稼働させる方法を記載していきます。



# Custom Imageについて

独自の仮想マシンイメージをBYOIする時には、2つの選択肢が存在しています。

- 準仮想化モード : Linux(カーネルバージョンが3.4以上)のものが対応
- エミュレーションモード(完全仮想化モード) : 古いLinux, Windows イメージが対応

詳細は省略しますが、パフォーマンスの面で準仮想化モードを選択するのが推奨です。カーネルバージョンが3.4以上のLinuxイメージをBYOIする場合は、積極的に準仮想化モードを使用するのが良いと思います。

その他注意事項は以下のDocumentに記載があります。

準仮想化モード
<https://docs.cloud.oracle.com/iaas/Content/Compute/References/customimagesparavirtualizedmode.htm>

エミュレーションモード
<https://docs.cloud.oracle.com/iaas/Content/Compute/References/customimagesemulationmode.htm>



# 移行元のイメージを作成

## Virtual Box で仮想マシン作成

移行元のイメージを、VirtualBoxを使用して準備します。個人的な理由で、オープンソースの仮想ネットワークOSで有名なVyOS(元vyatta)をOCI上で使いたいため、VyOSの仮想マシンをVirtualBoxに作成します。

Virtual Box で仮想ディスクのフォーマットを選択可能です。OCIではVMDKとQCOW2の2種類の形式がサポートされているため、今回はVMDKを選択します。既存の仮想マシンのフォーマットが異なる場合は、変換などを行うことが出来るようです。

![001.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/d1e3ea8c-ee58-3786-6031-dce9d4db55cc.gif)



仮想マシンのスペック

- Disk : 50GBのVMDKファイル
- ネットワークインターフェース : 1個



## VyOS Install

VyOSのインストール用ISOイメージを読み込ませ、仮想マシンを起動します。
VyOS Download
https://downloads.vyos.io/?dir=rolling/current/amd64

VyOSのインストールは、下の手順に従います。
インストーラのLiveISOのアカウントは、ID : vyos  Pass : vyos でログインが可能です。
<https://support.vyos.io/en/guides/vyos-user-guide/user-guide/installation>

インストール完了後、ISOイメージを取り外し再起動すると、VyOSのログインプロンプトが表示されるので、入力したパスワードでログインをします。



## VyOS Configure

configure mode に入ります

```
vyos@vyos$ configure
vyos@vyos#
```



ネットワークインターフェースを、DHCP有効にします。

```
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'OUTSIDE'
```



SSHを有効にします。

```
set service ssh port '22'
```



設定値を保存します。commitしたタイミングで、DHCPやSSHが有効になり、SSHを使用したアクセスが出来るようになります。

```
commit
save
```



InterfaceのMacAddressを削除します

```
delete interfaces ethernet eth0 hw-id
```



config を確認します

```
vyos@vyos# show
 interfaces {
     ethernet eth0 {
         address dhcp
         description OUTSIDE
-        hw-id 08:00:27:a0:e1:fa
     }
     loopback lo {
     }
 }
 service {
     ssh {
         port 22
     }
 }
 system {
     config-management {
         commit-revisions 100
     }
     console {
         device ttyS0 {
             speed 9600
         }
     }
     host-name vyos
     login {
         user vyos {
             authentication {
                 encrypted-password secret
                 plaintext-password ""
             }
             level admin
         }
     }
     ntp {
         server 0.pool.ntp.org {
         }
         server 1.pool.ntp.org {
         }
         server 2.pool.ntp.org {
         }
     }
 }
```



configuration を保存します

```
commit
save
```



VyOSのLinux Kernel バージョンを確認します。4.16.36が使われています。

```
# uname -a
Linux vyos 4.19.36-amd64-vyos #1 SMP Sun Apr 21 10:39:20 CEST 2019 x86_64 GNU/Linux
```



VyOSを停止します

```
poweroff
```



## BYOIのための準備

以下のDocumentに、BYOI(仮想マシンイメージの持ち込み)をする前に、推奨される準備作業が記載されています。これに従って、作業を進めます。
<https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/preparingcustomimage.htm>

(VyOSの場合はGRUBのmkconfigに失敗したので、実施しないで次の手順に進みます)


# Custom Imageの作成

## VMDKファイルをアップロード

以下のディレクトリに、Virtual Box で作成した VyOSの VMDK ファイルが格納されています。

```
C:\Users\susugiya\VirtualBox VMs
```



これを、OCIのObject Storage へ アップロードします。

```
oci os object put --bucket-name customimage --file 'vyos-1.2.0.vmdk' --name vyos-1.2.0.vmdk --profile ashburn
```



## VMDKファイルを、Custom Image として Import

Object Storage へアップロードした VMDK ファイルの、URLをコピーします。Object Storage のコンソール上から、URLを表示することができます。

![002.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/b9e2e76c-8f93-fba5-24b3-35ae817a9fda.gif)



Compute メニューの、Custom Image から、vmdk ファイルをImportすることができます

![003.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/739d6eb6-882a-ac55-3221-139dff4c86c8.gif)



Image Import を押すと、IMPORTING ステータスとなります。Available となるまで一定時間待機します。自自分の環境の場合、500MBのイメージで、約15分ほど待機する必要がありました。



# Instanceの設定
## IPアドレス

Custom Image を使用して、OCIでInstanceを作成します。自分のVyOSの設定方法が悪かったのか、移行元で設定したeth0が消えており、eth1として認識されてしまったため、DHCPで接続することができない状態です。設定変更するために、VNCコンソールで作成したInstanceに接続します。

Interface eth1 に対して、DHCPを有効にするconfig を設定します

```
set interfaces ethernet eth1 address dhcp
set interfaces ethernet eth1 description 'OUTSIDE'
```

OCI上で名前解決が行えるように、DNSサーバの設定を行います

```
set system name-server 127.0.0.53
```

設定を保存します

```
commit
save
```



これで、InterfaceにIPアドレスが設定され、他のInstanceからSSHが出来るようになりました。

```
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:00:17:01:08:1c brd ff:ff:ff:ff:ff:ff
    inet 10.100.0.3/24 brd 10.100.0.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::200:17ff:fe01:81c/64 scope link
       valid_lft forever preferred_lft forever
```

## パスワードの変更

安全のために、パスワードを変更します

```
set system login user vyos authentication plaintext-password <new-password>
```

設定の保存

```
commit
save
```

## SSHのポート番号変更

さらに安全のために、SSHのポートを変更します

```
set service ssh port <port>
delete service ssh port 22
```

設定の保存

```
commit
save
```







# 参考URL

Custom Imageについて
<https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm>

準仮想化モード用のカスタムイメージの作成
https://docs.cloud.oracle.com/iaas/Content/Compute/References/customimagesparavirtualizedmode.htm

エミュレーションモード用のカスタムイメージの作成
<https://docs.cloud.oracle.com/iaas/Content/Compute/References/customimagesemulationmode.htm#drivers>

VirtualBoxの仮想マシンを簡単にOracle Cloud(OCI)へBYOIできた
<https://qiita.com/feifo/items/6810b5635854175a0c4f>

Virtual Box から OCI へ Export
<https://docs.oracle.com/cd/E97728_01/E97727/html/ovf.html#ovf-export-oci>



VyOS QuickStart Guide
<https://support.vyos.io/en/guides/vyos-user-guide/user-guide/quick-start-guide>