2017年12月20日水曜日

Oracle VM Guest Additions で ゲスト OS カスタマイズ。

Oracle VM では、Oracle VM Guest Additions を利用した
ゲスト OS のカスタマイズが可能です。

Oracle VM リリース 3.4 の管理者ガイド
第 7 章 Oracle VM Guest Additionsのインストールおよび使用方法
https://docs.oracle.com/cd/E90714_01/e88293/vmadm-guestadd.html

以前に投稿した、Oracle VM でのメッセージ送信とあわせて利用します。

下記のあたりにも、簡単に説明があります。

Oracle VM 概要ガイド リリース 3.4
7.10 仮想マシンへのメッセージの送信
https://docs.oracle.com/cd/E90714_01/e88292/vmcon-vm-message.html

メッセージ渡しについては、どうやるのが正解なのかいまだに謎なのですが
今回は ovmcli からメッセージ送信して利用してみます。

今回のテンプレートの構成。

今回は、ORACLE が提供している Oracle Linux 7.4 の VM Template を利用します。
これは OS の初回起動時に Oracle VM Guest Additions が作用する状態で提供されています。
VM Template は、下記のように準備しています。

テンプレート名はデフォルトだと長いので、「OL7U4」という名前に変更しています。
OVM> show Vm name=OL7U4
  Status = Template
  Memory (MB) = 512
  Max. Memory (MB) = 512
  Processors = 1
  Max. Processors = 1
  Priority = 50
  Processor Cap = 100
  High Availability = No
  Operating System = Oracle Linux 7
  Mouse Type = OS Default
  Domain Type = Xen HVM
  Keymap = en-us
  Start Policy = Current Server
  Boot Order 1 = Disk
  Origin = http://192.168.1.239/vmimg/ol74/OVM_OL7U4_x86_64_PVHVM.ova
  Disk Limit = 4
  Huge Pages Enabled = No
  Config File Absolute Path = 192.168.4.119:/nfs/repo01/Templates/0004fb0000140000259e67e80e204686/vm.cfg
  Config File Mounted Path = /OVS/Repositories/0004fb000003000085a55bcfe9b5cff4/Templates/0004fb0000140000259e67e80e204686/vm.cfg
  Repository = 0004fb000003000085a55bcfe9b5cff4  [st-repo-01]
  Vnic 1 = 0004fb0000070000ef51310280718d36  [Template Vnic]
  VmDiskMapping 1 = 0004fb0000130000aaa6c881a9735308  [Mapping for disk Id (30cdce19a6c24c6e941f07a62661fa81.img)]
  Restart Action On Crash = Restart
  Id = 0004fb0000140000259e67e80e204686  [OL7U4]
  Name = OL7U4
  Locked = false
  DeprecatedAttrs = [Huge Pages Enabled (Deprecated for PV guest)]
OVM>

VM 作成と起動~カスタマイズ。

テンプレートから VM を作成します。
[gowatana@vm01 ~]$ ovmcli clone Vm name=OL7U4 destName=custom-vm-0 destType=Vm serverPool=sv-pool-01
OVM> clone Vm name=OL7U4 destName=custom-vm-0 destType=Vm serverPool=sv-pool-01
Command: clone Vm name=OL7U4 destName=custom-vm-0 destType=Vm serverPool=sv-pool-01
Status: Success
Time: 2017-12-20 22:15:25,585 JST
JobId: 1513775725417
Data:
  id:0004fb00000600008d330aa83d2b662f  name:custom-vm-0
OVM> Connection closed.
[gowatana@vm01 ~]$

VM の起動して、ovm-template-config が作動する前に
Oracle VM のメッセージを送信します。
手で入力すると たいてい間に合わないので、
下記のようにコマンドを羅列したファイルを用意しておいて実行しました。

ファイルを実行すると下記のような感じになります。
[gowatana@vm01 ~]$ sh first_boot.sh
OVM> start Vm name=custom-vm-0
Command: start Vm name=custom-vm-0
Status: Success
Time: 2017-12-20 22:16:54,869 JST
JobId: 1513775805503
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.hostname message=custom-vm-0
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.hostname message=custom-vm-0
Status: Success
Time: 2017-12-20 22:16:55,414 JST
JobId: 1513775815035
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.device.0 message=eth0
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.device.0 message=eth0
Status: Success
Time: 2017-12-20 22:16:55,977 JST
JobId: 1513775815589
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.onboot.0 message=yes
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.onboot.0 message=yes
Status: Success
Time: 2017-12-20 22:16:56,614 JST
JobId: 1513775816198
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.bootproto.0 message=none
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.bootproto.0 message=none
Status: Success
Time: 2017-12-20 22:16:57,202 JST
JobId: 1513775816811
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.ipaddr.0 message=192.168.4.222
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.ipaddr.0 message=192.168.4.222
Status: Success
Time: 2017-12-20 22:16:57,759 JST
JobId: 1513775817364
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.netmask.0 message=255.255.255.0
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.netmask.0 message=255.255.255.0
Status: Success
Time: 2017-12-20 22:16:58,341 JST
JobId: 1513775817947
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.gateway.0 message=192.168.4.254
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.gateway.0 message=192.168.4.254
Status: Success
Time: 2017-12-20 22:16:58,929 JST
JobId: 1513775818526
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.dns-servers.0 message=192.168.1.254,192.168.1.253
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.network.dns-servers.0 message=192.168.1.254,192.168.1.253
Status: Success
Time: 2017-12-20 22:16:59,490 JST
JobId: 1513775819113
OVM> Connection closed.
OVM> sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.root-password message=Merry-Xmas!
Command: sendVmMessage Vm name=custom-vm-0 log=Yes key=com.oracle.linux.root-password message=Merry-Xmas!
Status: Success
Time: 2017-12-20 22:17:00,069 JST
JobId: 1513775819692
OVM> Connection closed.
[gowatana@vm01 ~]$

Oracle VM Manager から見ると、このような感じになります。



VM 起動直後は、GRUB メニューでのカウントダウンがあったりするので
だいたい今回のようなメッセージ投入であれば間に合うと思います。



おそらくは、下記のあたりに間に合えばよいでしょう。



投入したメッセージは、ovmcli でも確認することができます。
ただし、実際にゲスト OS でも受け取れているかは、ゲスト側で確認することになるはずです。
OVM> getVmSentMessages Vm name=custom-vm-0
  Key:com.oracle.linux.network.bootproto.0  Value:none
  Key:com.oracle.linux.network.onboot.0  Value:yes
  Key:com.oracle.linux.network.hostname  Value:custom-vm-0
  Key:com.oracle.linux.root-password  Value:Merry-Xmas!
  Key:com.oracle.linux.network.dns-servers.0  Value:192.168.1.254,192.168.1.253
  Key:com.oracle.linux.network.ipaddr.0  Value:192.168.4.222
  Key:com.oracle.linux.network.device.0  Value:eth0
  Key:com.oracle.linux.network.netmask.0  Value:255.255.255.0
  Key:com.oracle.linux.network.gateway.0  Value:192.168.4.254
OVM>

ゲスト OS の様子。

起動完了したゲスト OS を見てみます。

メッセージで指定した IP アドレス宛に SSH 接続して、
同じく メッセージで指定した root パスワードでログインしてみます。
ログインすると、プロンプトからホスト名が設定されたこともわかります。
[gowatana@vm01 ~]$ ssh root@192.168.4.222
The authenticity of host '192.168.4.222 (192.168.4.222)' can't be established.
ECDSA key fingerprint is 54:d5:6a:51:4a:41:08:fa:5c:72:f9:80:67:25:11:0c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.4.222' (ECDSA) to the list of known hosts.
root@192.168.4.222's password: ★パスワード入力
[root@custom-vm-0 ~]#
[root@custom-vm-0 ~]# cat /etc/oracle-release
Oracle Linux Server release 7.4

ネットワーク設定もされています。
テンプレートには NetworkManager がインストールされていません。
nmcli / nmtui ではなく設定ファイルに設定されます。
[root@custom-vm-0 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DNS2=192.168.1.253
DNS1=192.168.1.254
GATEWAY=192.168.4.254
NETMASK=255.255.255.0
IPADDR=192.168.4.222
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
DEVICE=eth0
[root@custom-vm-0 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:21:f6:db:be:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.222/24 brd 192.168.4.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::221:f6ff:fedb:be19/64 scope link
       valid_lft forever preferred_lft forever
[root@custom-vm-0 ~]#

何かうまくいかないときは、Syslog や systemd journal、
/var/log/ovm-template-config.log ファイルあたりを確認しながら
対処することになるはずです。

以上、Oracle VM でのゲスト OS のカスタマイズでした。

0 件のコメント:

コメントを投稿