A key aspect of cloudlet-based cyber-foraging is cloudlet provisioning—configuring and deploying the Service VM that contains the server code (i.e., server portion of the application) on the cloudlet so that it is ready to use by the client running on the mobile device.
The cloudlet provisioning mechanisms share a set of common components.
The Mobile Client is an Android-based smartphone.
The Cloudlet Client and Cloudlet-Ready Apps are implemented as Android apps (Java).
The VM Manager is QEMU-KVM. KVM arbitrates access to the CPU and memory and QEMU creates and manages VMs using the KVM kernel module [KVM 2014, QEMU 2014].
The API used to interact with QEMU is libvirt [Libvirt 2014].
The qemu-img tool is a QEMU disk image utility [Bellard 2013].
Each Service VM is a guest VM in QEMU-KVM that runs the Application Server that corresponds to the server portion of the Cloudlet-Ready App.
The Cloudlet Server is implemented as an HTTP Server using CherryPy for most mechanisms, except for Application Virtualization, which uses Jetty [CherryPy 2014, Eclipse 2014].
The Discovery Service is a Zeroconf-based implementation [Zeroconf 2014].
Port Forwarding (NAT) (for Network Address Translation) is used to forward packets received by the Cloudlet Host to the port on which each Service VM is listening.
Each cloudlet provisioning mechanism will include descriptions of components that are specific to the implementation of the mechanism.
KVM. Kernel Based Virtual Machine. (2014) http://www.linux-kvm.org/
QEMU Open Source Processor Emulator. (2014) http://wiki.qemu.org
Libvirt. Virtualization API. (2014) http://libvirt.org/
Bellard, F. QEMU disk image utility (2013) http://manpages.ubuntu.com/manpages/raring/man1/qemu-img.1.html
CherryPy. CherryPy: A Minimalist Python Web Framework. (2014) http://www.cherrypy.org/
Eclipse. Jetty - Servlet Engine and Http Server. (2014) http://www.eclipse.org/jetty/
Zeroconf. Zero Configuration Networking. (2014) http://www.zeroconf.org/