Linux Guest VM IP does not appear in WAP
You may run into difficulty with Linux VMs created from templates when using Windows Azure Pack (WAP). The IP address does not appear in the WAP Admin Console. You may see the error: KVPDataExchangeNotAvailable (30101) .
You should see events such as the one below. ‘Microsoft-WindowsAzurePack-MgmtSvc-TenantSite’ Warning 226 points out in the description ‘KVPDataExchangeNotAvailable.’
VMM Trace
Further, a VMM trace will show the following Key Value Pair (KVP) errors: “KVPDataExchangeNotAvailable (30101)”
16014 [0]2798.5838::2014-10-30 14:54:46.926 [Microsoft-VirtualMachineManager-Debug]4,4,WCVmMethodsImpl.cs,549,Failing ClientConnection.GetGuestInfo [s#a8e66a0 261ms] [ex#cb60a] New exception = [[(CarmineException#3a4798) { Microsoft.VirtualManager.Utils.CarmineException: Virtual machine NewVM cannot be modified because Virtual Guest Services is not installed on the guest operating system or because the installed Virtual Guest Services does not support the Heartbeat and Data Exchange Integration Services in the current virtual machine status. Verify the virtual machine is in a Running status, the Virtual Guest Services is installed, and the Heartbeat and Data Exchange Integration Services are enabled. at Microsoft.VirtualManager.Engine.VmOperations.VmGuestInfoManager.PerformKVPOperation(Guid vmObjectId, Dictionary`2 kvpMap, Boolean isGetKVP) at Microsoft.VirtualManager.Engine.Remoting.ClientConnection.GetGuestInfo(Guid vmObjectId, Dictionary`2 kvpMap, OnBehalfOf obo) at SyncInvokeGetGuestInfo(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) *** Carmine error was: KVPDataExchangeNotAvailable (30101) *** NewVM ** [s#a8e66a0] ClientConnection.GetGuestInfo(this: (ClientConnection#bc4f), vmObjectId: (guid) ef249307-8ed5-4cf7-82ff-ca1a0ea92628, kvpMap: (Dictionary`2#19605da) System.Collections.Generic.Dictionary`2[System.String,System.String], obo: (OnBehalfOf#0) null) in WCVmMethodsImpl.cs:line 549 Full call stack from when the exception was thrown: at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace() at Microsoft.VirtualManager.Utils.CarmineException..ctor(ErrorInfo error) at Microsoft.VirtualManager.Engine.VmOperations.VmGuestInfoManager.PerformKVPOperation(Guid vmObjectId, Dictionary`2 kvpMap, Boolean isGetKVP) at Microsoft.VirtualManager.Engine.Remoting.ClientConnection.GetGuestInfo(Guid vmObjectId, Dictionary`2 kvpMap, OnBehalfOf obo) at SyncInvokeGetGuestInfo(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext) at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext) at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result) at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.TransportDuplexSessionChannel.TryReceiveAsyncResult.OnReceive(IAsyncResult result) at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object state) at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state) at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.Net.LazyAsyncResult.Complete(IntPtr userToken) at System.Net.Security.NegotiateStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.NegotiateStream.ReadCallback(AsyncProtocolRequest asyncRequest) at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes) at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult) at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.ConnectionStream.IOAsyncResult.OnAsyncIOComplete(Object state) at System.ServiceModel.Channels.SocketConnection.OnReceiveAsync(Object sender, SocketAsyncEventArgs eventArgs) at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(SocketError socketError, Int32 bytesTransferred, SocketFlags flags) at System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP); error = (ErrorInfo#62bdf7) KVPDataExchangeNotAvailable (30101) }]] ,{00000000-0000-0000-0000-000000000000}
Remediation
Many Linux distributions have Microsoft drivers built-in to the kernel. CentOS and RedHat are two that still require ‘Linux Integration Services 3.5 for Hyper-V,’ https://www.microsoft.com/en-us/download/details.aspx?id=41554.
For a full listing of Linux and FreeBSD supported VMs in Hyper-V, see:
https://technet.microsoft.com/en-us/library/dn531030.aspx.
In this example we will work with Ubuntu 14.04 Server. It has Hyper-V drivers built-in, but still needs some packages installed.
Ubuntu Virtual Machines on Hyper-V
https://technet.microsoft.com/en-us/library/dn531029.aspx
If you want to enable all integration pack features you have a bit of work to do. At the bottom of the article you will see the following commands. We’ll discuss how to parse this.
sudo apt-get update
sudo apt-get install hv-kvp-daemon-init
uname –r
<kernel release>
sudo apt-get install linux-tools-<kernel release>
sudo apt-get install linux-cloud-tools-<kernel release>
Install Remaining Integration Components
1. Back up your system (easy with Hyper-V. Just export a copy).
2. Boot Linux and log in as a regular user (or root if you prefer)
3. Install an update.
a. Sudo apt-get update
b. Sudo apt-get install hv-kvp-daemon-init
4. Get the version of your Linux kernel
a. Type: uname -r
b. The result of this command will be used by the next two commands as <kernel release>
c. Example: sudo apt-get install linux-tools-3.13.0-32-generic
5. Install Linux-Tool and Linux-Cloud-Tools
a. sudo apt-get install linux-tools-<kernel release>
b. sudo apt-get install linux-cloud-tools-<kernel release>
Done! Refresh WAP and the IP address should be present.
Test that all integration components are installed
The PDF that accompanies Linux Integration Components explains how to determine if you have everything installed as it should be.
To verify that all subcomponents are running as the root user, run the following command:
/sbin/lsmod | grep hv
The output should include lines similar to the following:
hv_balloon 10538 0 [permanent] hv_netvsc 24309 0
hv_utils 9499 0 hv_timesource 1079 0 [permanent]
hv_storvsc 11641 2 hv_vmbus 146721 7
hv_balloon,hid_hyperv,hv_netvsc,hv_utils,hv_timesource,hyperv_fb,hv_storvsc
What do these services do?
• “hv_balloon” provides Dynamic Memory support for virtual machines.
• “hv_netvsc” provides support for a Hyper-V-specific (or “synthetic”) network adapter.
• “hv_utils” provides integrated shutdown, key-value pair data exchange, heartbeat, mouse and live backup.
• “hv_timesource” is the pluggable time source module to assist in accurate timekeeping in the virtual machine.
• “hv_storvsc” provides support for all storage devices attached to a virtual machine.
• “hv_vmbus” is the fast communication channel between the server running Hyper-V and the virtual machine.
jonjor