designetwork

ネットワークを軸としたIT技術メモ

自宅LinuxVMでPCF Dev(Cloud Foundry)を構築する

PaaS基盤ソフトウェアとして広いシェアを持つCloud Foundry。その商用ディストリビューションの1つであるPivotal Cloud Foudryは商用サービスでも多く使用されている。

Cloud Foundryは多くのコンポーネントから構成されており、IaaSとして大規模な基盤を要する。今回は、オールインワンの1台で構成できるPCF Dev (Pivotal Cloud Foundry Develop)で自宅で簡単にCloud Foundryを構築する。

PCF Devシステム要件

PCF Devのシステム要件はこちら

PCFの要件はVirtualBox 5.0以上。土台のマシンはWindows, Mac OS X, Linuxのいずれでも可能。

PCF Dev uses VirtualBox version 5.0 and above as its virtualizer.

システム要件の概要は以下の通り。PCF Dev, Pivotal Cloud Foundry, Cloud FoundryのHDD容量、メモリー容量が並べられている。(Pivotal Docsから引用)

注目すべきポイント(メリット)はメモリーの必要数。CPUは快適さを我慢すればよく、HDDは増やせばいい。しかし、メモリーはないとそもそも起動しない。そして、メモリーは増やせる上限がサーバー(マザーボード)に依存し、大容量メモリーのマシンはそれなりの価格がする。メモリー3GBであれば、デスクトップPC、ノートPCでも十分に搭載可能である。

index PCF Dev PCF CF
Space required 20 GB 100GB+ 50GB+
Memory required 3 GB 50GB+ variable

(参考) PCF Dev Overview | Pivotal Docs

自宅サーバー構成

友人から譲り受けた古いサーバーでESXiを使用している。ボードの関係でCPUはCore 2 Quad

PCF Devをインストールする

PCF DevをLinuxにインストールする手順の目次は以下の通り。

  1. Prerequisites
    1. VirtualBox
    2. Cloud Foundry Command Line Interface
  2. Install PCF Dev
  3. Stop PCF Dev
  4. Uninstall PCF Dev

(参考) Installing PCF Dev on Linux | Pivotal Docs

UbuntuVirtualBoxをインストールする

LinuxはPCFでも使われているUbuntuとする。VirtualBoxが動作するLinuxであればどれでもよい。

Ubuntuはこちらからダウンロードできる。

今回はLong Term SupportのUbuntu Server 16.04.1 LTSを使用する。

VirtualBoxはこちらから。

Linux_Downloads – Oracle VM VirtualBox

先に記載のvSphereにLinuxVMを作成し、Ubuntuのisoをマウントしてインストールする。 ※社内NWなどProxy環境の場合はProxyサーバーの指定が必要

(ここでは詳細手順割愛)

インストール時になんとなくVMにチェックを入れてvirbr0インタフェースが現れ戸惑った。 ここではデフォルトのまま(standard system utilitiesのみ)にする。

f:id:daichi703n:20161127183456p:plain

UbuntuIPアドレスを設定する

初期セットアップとしてIPアドレスを設定する。(コンソールから作業)以下の通りDHCP設定をコメントアウトして、固定IPアドレスを設定する。

$ sudo -s
[user password]    // describe with root account from here
# vi /etc/network/interfaces

"/etc/network/interfaces" 21L, 493C
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens160
#iface ens160 inet dhcp  //Comment Out DHCP
iface ens160 inet static   // Add Static Config as below;
address 192.168.1.55
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.5
dns-nameserver 192.168.1.77
dns-nameserver 8.8.8.8

SSH接続許可設定

以下のコマンドでSSHサーバーをインストールする。これによりTeraTermなどでSSH接続できる。

# apt-get install openssh-server

Ubuntu16.04.1にVirtualBoxをインストールする。

基本的にオフィシャルの手順でインストールできる。

リポジトリを追加する。 /etc/apt/sources.listに以下の行を追加する。

# vi /etc/apt/sources.list
<Last Row>
## Add for VirtualBox
deb http://download.virtualbox.org/virtualbox/debian xenial contrib

ここから失敗したため除外 Oracleの公開鍵を取得する。OSに合わせて以下のコマンドを実行する。

for Debian 8 ("Jessie") / Ubuntu 16.04 ("Xenial") and later
# apt-key add oracle_vbox_2016.asc
for older distributions.
# apt-key add oracle_vbox.asc

root@ubuntu-pcf:~# apt-key add oracle_vbox_2016.ascgpg: can't open `oracle_vbox_2016.asc': No such file or directory
root@ubuntu-pcf:~# apt-key add oracle_vbox_2016.asc
gpg: can't open `oracle_vbox_2016.asc': No such file or directory

次のコマンドでインターネットから明示的に取得して公開鍵を追加する。上記の通りOSに合わせて_2016は調整する。

root@ubuntu-pcf:~# wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
OK

パッケージをアップデートしてVirtualBoxをインストールする。

root@ubuntu-pcf:~# apt-get update
0% [Working]            Get:1 http://download.virtualbox.org/virtualbox/debian xenial InRelease [7,894 B]
<snip>
The following packages will be upgraded:
  libc6
1 upgraded, 240 newly installed, 0 to remove and 61 not upgraded.
Need to get 149 MB of archives.
After this operation, 591 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
<about 5 minutes takes from here>
Processing triggers for dbus (1.10.6-1ubuntu3.1) ...
root@ubuntu-pcf:~#
root@ubuntu-pcf:~# apt-get install virtualbox
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  diffstat gdbserver libaacs0 libapt-pkg-perl libasprintf-dev libbabeltrace-ctf1 libbabeltrace1 libbdplus0 libc6-dbg libexpat1:i386
  libffi6:i386 libglib2.0-0:i386 libnm-util2 libpam-systemd:i386 libpolkit-agent-1-0:i386 libpolkit-backend-1-0:i386
  libpolkit-gobject-1-0:i386 librarian0 libspeexdsp1 libsynctex1 libwebrtc-audio-processing-0 os-prober policykit-1:i386 rtkit t1utils xvt
Use 'sudo apt autoremove' to remove them.

<snip>
DKMS: install completed.
Setting up virtualbox (5.0.24-dfsg-0ubuntu1.16.04.1) ...

インストール完了。

PCF Devをインストールする

やっと本題のPCF Devのインストール。

PCF Devをインストールする

以下の流れでPCF Devをインストールする。

  1. cfCLIをインストールする
  2. PCF Devをダウンロードする
  3. PCF Dev Pluginをインストールする

cfCLIをインストールする

cfCLI (Cloud Foundry Command Line Interface)をGithubからダウンロードしてインストールする。PCFの設定・アプリデプロイはcfCLIを通して実行する。

インストール手順はGithubに記載の通り。

# ...first add the Cloud Foundry Foundation public key and package repository to your system
$ wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
$ echo "deb http://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
# ...then, update your local package index, then finally install the cf CLI
$ sudo apt-get update
$ sudo apt-get install cf-cli

cf -vでバージョンが表示されればcfCLIのインストールは完了。

root@ubuntu-pcf:~# cf -v
cf version 6.22.2+a95e24c-2016-10-27

PCF Devをダウンロードする

まず、Pivotal NetworksからPCF Devをダウンロードする。

なお、Pivotalの製品は基本的にライセンス(有償)が必要になる。しかし、オープンソースとして公開されているものについてはOSSライセンス(無償)、Beta版についてはEULA(無償)で使用できる。ライセンス詳細はこちら。

PCF Devダウンロードはこちらから。Pivotal Networkへのユーザ登録が必要。(無料・ライセンス不要)

Download PCF Dev — Pivotal Network

今回はLinux版をダウンロードする。

f:id:daichi703n:20161127183148p:plain

ダウンロードしたPCF Devのzipファイルを、TeraTermSSH SCPなどでサーバに送信する。

サーバーにunzipがインストールされていない場合はapt install unzipでインストールする。 以下の通り解凍する。バージョンはダウンロードしたものに合わせて要修正。

root@ubuntu-pcf:~# unzip pcfdev-v0.22.0+PCF1.8.2-linux.zip
Archive:  pcfdev-v0.22.0+PCF1.8.2-linux.zip
  inflating: pcfdev-v0.22.0+PCF1.8.2-linux
root@ubuntu-pcf:~# ls -l
total 16264
-rwxr-xr-x 1 root   root   12566384 Nov 18 22:57 pcfdev-v0.22.0+PCF1.8.2-linux
-rw-r--r-- 1 ubuntu ubuntu  4085585 Nov 24 23:50 pcfdev-v0.22.0+PCF1.8.2-linux.zip
root@ubuntu-pcf:~#

PCF Devプラグインをインストールする。

以下のコマンドでPCF Devプラグインをインストールする。

root@ubuntu-pcf:~# ./pcfdev-v0.22.0+PCF1.8.2-linux
Plugin successfully installed. Current version: 0.22.0. For more info run: cf dev help

インストールが完了したら、PCF Devを起動する。このとき、空きメモリーが3072MBより少ないと警告が表示される。PCF Devシステム要件が3GBだったのでUbuntuを3GBで作成したが、OS部分を考慮していなかった...Linuxサーバ自体はメモリー4GBで作るのが適切だと考えられる。

root@ubuntu-pcf:~# cf dev start

Less than 3072 MB of free memory detected, continue (y/N): > y
Please sign in with your Pivotal Network account.
Need an account? Join Pivotal Network: https://network.pivotal.io

Email> <Enter Your Pivotal Networks Account>

Password> <Enter Your Pivotal Networks Password>

BETA SOFTWARE END USER LICENSE AGREEMENT
<Documents>
[y] Accept
[n] Do Not Accept
y

Downloading VM...
<It takes about 20 minutes>
Progress: |====================>| 100%
VM downloaded.
Allocating 3072 MB out of 3008 MB total system memory (2815 MB free).
Importing VM...
Starting VM...
FAILED
Error: failed to start VM: failed to execute 'VBoxManage startvm pcfdev-v0.389.0 --type headless': exit status 1: VBoxManage: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
Waiting for VM "pcfdev-v0.389.0" to power on...
.

VirtualBoxのエラーで起動に失敗している...エラーログから調査する。

トラブルシューティング

状態を確認しながら、トラブルシューティングする。

FAILED
Error: failed to start VM: failed to execute 'VBoxManage startvm pcfdev-v0.389.0 --type headless': exit status 1: VBoxManage: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
Waiting for VM "pcfdev-v0.389.0" to power on...

VBoxManage: error: VT-x is not available (VERR_VMX_NO_VMX)

VT-x(CPU仮想化機構)が動作していないというように見える。しかし、前述の通り私のUbuntuはvSphere上の仮想マシンだ。仮想化できている。

こちらを参考に、以下の通り動作確認してみた。

root@ubuntu-pcf:~# VBoxManage list vms
"pcfdev-v0.389.0" {9ba0d031-fd10-4260-8f83-698432259210}
root@ubuntu-pcf:~# VBoxManage modifyvm 9ba0d031-fd10-4260-8f83-698432259210 --ioapic off
root@ubuntu-pcf:~# VBoxManage startvm 9ba0d031-fd10-4260-8f83-698432259210 --type separate
Waiting for VM "9ba0d031-fd10-4260-8f83-698432259210" to power on...
VM "9ba0d031-fd10-4260-8f83-698432259210" has been successfully started.

しかし、最終的にcf dev startコマンドで起動を試みると同様に失敗する。

ESXiのネストのための設定

冷静に考えたら、ゲストOSのUbuntu(Linux)ではVT-xが動作しているか分からなかった。今回はネスト(Nested)構成になるため、追加設定が必要だった。ゲストOSのVT-xを有効化してサービスを再起動する。

# vi /etc/vmware/config

libdir = "/usr/lib/vmware"
authd.proxy.nfc = "vmware-hostd:ha-nfc"
authd.proxy.nfcssl = "vmware-hostd:ha-nfcssl"
authd.proxy.vpxa-nfcssl = "vmware-vpxa:vpxa-nfcssl"
authd.proxy.vpxa-nfc = "vmware-vpxa:vpxa-nfc"
authd.fullpath = "/sbin/authd"
vhv.enable = TRUE    // add

# /etc/init.d/hostd restart
watchdog-hostd: Terminating watchdog process with PID 98940
hostd stopped.
Ramdisk 'hostd' with estimated size of 127MB already exists
hostd started.
~ #

vSphereのゲストOSはデフォルトではVT-xが有効になっていない。 仮想マシンをpoweroffし、設定を変更する。「オプション」タブの「CPU/MMU 仮想化」はデフォルトで”自動”になっているところを”Intel VT-x/AMD-vを命令セット仮想化に使用し、ソフトウェアをMMU仮想化に使用”を選択する。 仮想マシンpoweroff > 設定変更 > 仮想マシンパワーオン の順で作業する。

f:id:daichi703n:20161127193325p:plain

しかし、パワーオンしようとした際にエラーが発生した。失敗...

f:id:daichi703n:20161127193339p:plain

仮想 msg.intel.hvhwmmu には msg.intel.hvhwmmu の優先モードが必要です。自動に戻しています。

仮想マシンが起動できない。サマリ画面ではこのようなエラーが表示されている。

Virtualized Intel VT-x/EPT is not supported on this platform.
仮想 msg.intel.hvhwmmu を使わずに続行しますか?

f:id:daichi703n:20161127211308p:plain

CPU(Core 2 Quad)がゲスト仮想化に対応していない

原因が分からず調査していたら以下のディスカッションを発見。

こちらによると、Core 2 QuadではNested VMをサポートしていない...

まとめ

自宅LinuxでPCF Devをインストールした。ただし、私の環境のCore 2 QuadではネストVMをサポートしておらず、VirtualBox上のPCF Devは起動しなかった...

(認識違い等ありましたらご指摘ください。)