<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Curious &#187; Java</title>
	<atom:link href="http://blogs.plexibus.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.plexibus.com</link>
	<description>It&#039;s easy if you know how</description>
	<lastBuildDate>Tue, 22 Jun 2010 14:45:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Eucalyptus: Configuring your private cloud to resemble Amazon EC2</title>
		<link>http://blogs.plexibus.com/2010/05/26/eucalyptus-configuring-your-private-cloud-to-resemble-amazon-ec2/</link>
		<comments>http://blogs.plexibus.com/2010/05/26/eucalyptus-configuring-your-private-cloud-to-resemble-amazon-ec2/#comments</comments>
		<pubDate>Wed, 26 May 2010 19:54:27 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Appistry]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloudiq]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[datacenter]]></category>
		<category><![CDATA[eucalyptus]]></category>
		<category><![CDATA[eucalyptus centos install]]></category>
		<category><![CDATA[eucalyptus install]]></category>
		<category><![CDATA[infrastructure as a service]]></category>
		<category><![CDATA[MANAGED]]></category>
		<category><![CDATA[managed networking]]></category>
		<category><![CDATA[plexibus]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[private cloud]]></category>
		<category><![CDATA[private IP address]]></category>
		<category><![CDATA[public]]></category>
		<category><![CDATA[public cloud]]></category>
		<category><![CDATA[public IP address]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/05/26/eucalyptus-configuring-your-private-cloud-to-resemble-amazon-ec2/</guid>
		<description><![CDATA[You can reduce your hardware infrastructure expenditure by using Eucalyptus to efficiently run and manage your virtual machines on existing hardware. This in turn effectively leads to larger energy savings &#8211; less physical machines equals less power needed to run the hardware. 

In my previous post on setting up a private cloud, we looked at [...]]]></description>
			<content:encoded><![CDATA[<p>You can reduce your hardware infrastructure expenditure by using <a href="http://www.eucalyptus.com/" target="_blank">Eucalyptus</a> to efficiently run and manage your virtual machines on existing hardware. This in turn effectively leads to larger energy savings &#8211; less physical machines equals less power needed to run the hardware. </p>
<p>
In my <a href="http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/">previous</a> post on setting up a private cloud, we looked at getting Eucalyptus &#8220;Infrastructure-as-a-Service&#8221; platform installed and running. If you recall, we stated to keep things simple but still practical enough such that you could use this as a reference guide to &#8220;Building and running a private cloud&#8221;. Hence in this post we will look at tweaking the default configuration &#8211; primarily changing the default out-of-the-box enabled networking to something similar to Amazon EC2.
</p>
</p>
<p>
<br/><br />
<strong><a name="networking">Networking in Eucalyptus</a></strong>
</p>
<p>
Eucalyptus comes with 4 <a href="http://open.eucalyptus.com/wiki/EucalyptusNetworking_v1.6" target="_blank">networking</a> modes.
</p>
<ul>
<li>SYSTEM</li>
<li>STATIC</li>
<li>MANAGED</li>
<li>MANAGED-NOVLAN</li>
</ul>
<p>
<br/><br />
<strong><a name="systemnetworking">SYSTEM networking mode</a></strong>
</p>
<p>
SYSTEM networking mode is the default &#8220;<i>no-frills</i>&#8221; networking that is offered as part of an <i>out-of-the-box</i> Eucalyptus install.<br />
In this networking mode, Eucalyptus relies on the existence of a DHCP server (<i>non-Eucalyptus controlled</i>) located on the LAN. Virtual machines obtain their IP address from this DHCP server the same way other machines (such as your desktop, laptop, etc.) on the LAN do.<br />
In this mode, you cannot set up create VLANs or isolate network traffic. There is only one IP address that gets assigned to the VMs i.e. the IP address obtained from the DHCP server setup by your administrator.<br />
This mode is useful when you are just <a href="http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/" target="_blank">getting started</a> with Eucalyptus. If you have only a single machine (server/laptop/desktop) to try out Eucalyptus, then SYSTEM (or STATIC) networking mode is the way to go.
</p>
</p>
<p>
As described in my <a href="http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/" target="_blank">previous</a> post, I had setup Eucalyptus with 1 Cluster Controller (CC), 2 Node Controllers (NC) and SYSTEM networking mode. But we will tweak this to use MANAGED mode.
</p>
</p>
<p>
<br/><br />
<strong><a name="managednetworking">MANAGED networking mode</a></strong>
</p>
<p>
This mode <i>almost</i> resembles the networking setup of Amazon EC2 cloud in that you can define:</p>
<ul>
<li>a large private VLAN from which VMs can obtain IP addresses</li>
<li>a pool of public IP addresses that can be assigned to VMs. Similar to Amazon&#8217;s <i>elastic IP addresses</i></li>
<li>define security groups where users can define ingress rules that apply to the VM that runs within that security group</li>
</ul>
<p>In this mode, Eucalyptus maintains a DHCP server, fully manages the local VM instance network and provides all the networking features Eucalyptus currently supports.</p>
<p>Before we jump into configuring Eucalyptus for MANAGED networking there are some requirements that need to be met. Namely:</p>
<ul>
<li>Available range of IP addresses unused on the network. These IP addresses will be used to create private VLANs.</li>
<li>Any switch ports that the Eucalyptus components are connected to allow and forward VLAN tagged packets</li>
<li>There is either no firewall running on the Cluster Controller or the firewall is compatible with dynamic changes Eucalyptus will make to the front-end netfilter rules</li>
</ul>
</p>
<p>
<br/><br />
<strong><a name="checklist1">Checklist #1: Available range of IP addresses for private VLAN</a></strong>
</p>
<p>
Before you start configuring Eucalyptus for MANAGED networking mode, you need to find a range of IP addresses that is unused on the network. We will configure Eucalyptus to use this range to create a private VLAN. </p>
<p>When Eucalyptus boots a virtual machine instance it will assign the instance a private IP address from this range. This is similar to the private IP address assigned to an instance running on Amazon EC2.</p>
<p>In my case, I have <font face="Courier New">10.10.0.0 &#8211; 10.10.255.255</font> unused as an example.
</p>
</p>
<p>
<br/><br />
<strong><a name="checklist2">Checklist #2: Allow/forward VLAN tagged packets</a></strong>
</p>
<p>
Next we need to verify that the local network will allow/forward VLAN tagged packets between machines running Eucalyptus components.<br />
To test this, we will create, on the front-end and Nodes, virtual ethernet devices assigned with an IP address from the above range of IP addresses. And then attempt to ping them. </p>
<p>Let&#8217;s start with the front-end. In my case, <font face="Courier New">192.168.0.114</font> if you have been following this series (see post on <a href="http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/" target="_blank">Setting up a private cloud using Eucalyptus</a> for list of machines involved).</p>
<pre class="java-codeface">
vconfig add eth0 10
</pre>
<p>where,<br />
<i>eth0</i> &#8211; is the value of the VNET_PRIVINTERFACE in my <font face="Courier New">eucalyptus.conf</font> on my front-end</p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Added VLAN with VID == 10 to IF -:eth0:-
</div>
<p>We can verify we created a VLAN device on eth0 by checking <font face="Courier New">/proc/net/vlan/config</font></p>
<pre class="java-codeface">
cat /proc/net/vlan/config
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
VLAN Dev name	 | VLAN ID<br />
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD<br />
eth0.10        | 10  | eth0
</div>
<p>We could also run the following command to verify that the VLAN device was created</p>
<pre class="java-codeface">
ip a sh eth0.10
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
4: eth0.10@eth0: <broadcast,multicast /> mtu 1500 qdisc noop<br />
    link/ether 00:01:80:65:d2:5b brd ff:ff:ff:ff:ff:ff<br />
</broadcast,multicast></div>
<p>Next let&#8217;s pick an IP from the &#8220;<i>Available range of IP addresses for private VLAN</i>&#8220;, 10.10.0.0 &#8211; 10.10.255.255 (in my case). Let&#8217;s pick 10.10.1.2</p>
<pre class="java-codeface">
ifconfig eth0.10 10.10.1.2 up
</pre>
<p>Let&#8217;s verify that the virtual ethernet device <font face="Courier New">eth0.10</font> is up</p>
<pre class="java-codeface">
ip a sh eth0.10
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
4: eth0.10@eth0: &lt;broadcast,multicast,up,lower_up /&gt; mtu 1500 qdisc noqueue<br />
    link/ether 00:01:80:65:d2:5b brd ff:ff:ff:ff:ff:ff<br />
    inet 10.10.1.2/8 brd 10.255.255.255 scope global eth0.10<br />
    inet6 fe80::201:80ff:fe65:d25b/64 scope link<br />
       valid_lft forever preferred_lft forever
</div>
<p>Excellent. Now let&#8217;s do the same on the Nodes with the exception that we will pick a different IP address, say <font face="Courier New">10.10.1.3</font> and <font face="Courier New">10.10.1.5</font> for each of my two Nodes, <font face="Courier New">192.168.0.19</font> and <font face="Courier New">192.168.5.7</font>.</p>
<p>For the sake of brevity, I&#8217;ve detailed the steps on one of my Nodes.</p>
<pre class="java-codeface">
vconfig add eth0 10
</pre>
<p>where,<br />
<i>eth0</i> &#8211; is the value of the VNET_PRIVINTERFACE (and VNET_PUBINTERFACE) in my <font face="Courier New">eucalyptus.conf</font> on my Nodes</p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Added VLAN with VID == 10 to IF -:eth0:-
</div>
<p>Verify that the virtual ethernet device has been created on the Node:</p>
<pre class="java-codeface">
cat /proc/net/vlan/config
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
VLAN Dev name	 | VLAN ID<br />
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD<br />
eth0.10        | 10  | eth0
</div>
<p>Next assign the virtual ethernet device <font face="Courier New">eth0.10</font> IP address <font face="Courier New">10.10.1.3</font> and bring it up</p>
<pre class="java-codeface">
ifconfig eth0.10 10.10.1.3 up
ip a sh eth0.10
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
14: eth0.10@eth0: &lt;broadcast,multicast,up,lower_up /&gt; mtu 1500 qdisc noqueue<br />
    link/ether 00:01:80:66:18:78 brd ff:ff:ff:ff:ff:ff<br />
    inet 10.10.1.3/8 brd 10.255.255.255 scope global eth0.10<br />
    inet6 fe80::201:80ff:fe66:1878/64 scope link<br />
       valid_lft forever preferred_lft forever
</div>
<p>Now comes the test. From the above Node, let&#8217;s ping the front-end&#8217;s virtual ethernet device <font face="Courier New">10.10.1.2</font>:</p>
<pre class="java-codeface">
ping 10.10.1.2
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
PING 10.10.1.2 (10.10.1.2) 56(84) bytes of data.<br />
64 bytes from 10.10.1.2: icmp_seq=1 ttl=64 time=2.80 ms<br />
64 bytes from 10.10.1.2: icmp_seq=2 ttl=64 time=0.691 ms<br />
64 bytes from 10.10.1.2: icmp_seq=3 ttl=64 time=1.13 ms<br />
64 bytes from 10.10.1.2: icmp_seq=4 ttl=64 time=0.576 ms<br />
64 bytes from 10.10.1.2: icmp_seq=5 ttl=64 time=1.01 ms<br />
64 bytes from 10.10.1.2: icmp_seq=6 ttl=64 time=0.326 ms<br />
64 bytes from 10.10.1.2: icmp_seq=7 ttl=64 time=0.901 ms<br />
64 bytes from 10.10.1.2: icmp_seq=8 ttl=64 time=0.344 ms<br />
64 bytes from 10.10.1.2: icmp_seq=9 ttl=64 time=0.788 ms<br />
64 bytes from 10.10.1.2: icmp_seq=10 ttl=64 time=0.228 ms<br />
64 bytes from 10.10.1.2: icmp_seq=11 ttl=64 time=0.672 ms<br />
64 bytes from 10.10.1.2: icmp_seq=12 ttl=64 time=1.11 ms<br />
64 bytes from 10.10.1.2: icmp_seq=13 ttl=64 time=0.565 ms</p>
<p>&#8212; 10.10.1.2 ping statistics &#8212;<br />
13 packets transmitted, 13 received, 0% packet loss, time 12002ms<br />
rtt min/avg/max/mdev = 0.228/0.858/2.807/0.629 ms
</p></div>
<p>Next, from the front-end machine, <font face="Courier New">192.168.0.114</font>, let&#8217;s ping the Node&#8217;s virtual ethernet device, <font face="Courier New">10.10.1.3</font></p>
<pre class="java-codeface">
ping 10.10.1.3
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
PING 10.10.1.3 (10.10.1.3) 56(84) bytes of data.<br />
64 bytes from 10.10.1.3: icmp_seq=1 ttl=64 time=2.24 ms<br />
64 bytes from 10.10.1.3: icmp_seq=2 ttl=64 time=1.33 ms<br />
64 bytes from 10.10.1.3: icmp_seq=3 ttl=64 time=0.748 ms<br />
64 bytes from 10.10.1.3: icmp_seq=4 ttl=64 time=1.15 ms</p>
<p>&#8212; 10.10.1.3 ping statistics &#8212;<br />
4 packets transmitted, 4 received, 0% packet loss, time 3001ms<br />
rtt min/avg/max/mdev = 0.748/1.369/2.242/0.547 ms
</p></div>
<p>Super cool! This proves that my switch allows/forwards VLAN tagged packets. If for some reason, your results do not resemble mine, then your switch, perhaps, needs to be configured to allow/forward VLAN tagged packets. A little bit of googling on your switch may help.</p>
<p>For cleanup sake, you could go ahead and remove the above test vlan devices. You could do this as follows on the front-end and Node:</p>
<pre class="java-codeface">
ip link set eth0.10 down
vconfig rem eth0.10
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Removed VLAN -:eth0.10:-
</div>
<pre class="java-codeface">
cat /proc/net/vlan/config
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
VLAN Dev name	 | VLAN ID<br />
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
</div>
<pre class="java-codeface">
ip a sh eth0.10
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Device &#8220;eth0.10&#8243; does not exist.
</div>
</p>
<p>
<br/><br />
<strong><a name="checklist3">Checklist #3: Firewall configuration on front-end</a></strong>
</p>
<p>
Finally in the list of things to check, we need to make sure the firewall on the front-end does not interfere with Eucalyptus which will dynamically update the <font face="Courier New">nat</font> and <font face="Courier New">filter</font> rules. In my case my <font face="Courier New">iptables</font> on the front-end reveal the following:</p>
<pre class="java-codeface">
iptables -L
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Chain INPUT (policy ACCEPT)<br />
target     prot opt source               destination         </p>
<p>Chain FORWARD (policy ACCEPT)<br />
target     prot opt source               destination         </p>
<p>Chain OUTPUT (policy ACCEPT)<br />
target     prot opt source               destination
</p></div>
<pre class="java-codeface">
iptables -L -t nat
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Chain PREROUTING (policy ACCEPT)<br />
target     prot opt source               destination         </p>
<p>Chain POSTROUTING (policy ACCEPT)<br />
target     prot opt source               destination         </p>
<p>Chain OUTPUT (policy ACCEPT)<br />
target     prot opt source               destination
</p></div>
<p>Ok. Now we are ready to proceed with the MANAGED networking configuration.
</p>
</p>
<p>
<br/><br />
<strong><a name="managednetworkingFrontend">Front-end configuration &#8211; MANAGED networking mode</a></strong>
</p>
<p>
Presently to configure Eucalyptus networking, you need to edit <font face="Courier New">eucalyptus.conf</font>. In my installation, this file is located under <font face="Courier New">/etc/eucalyptus</font>.</p>
<p>All of the options that we plan on configuring are located under the &#8220;Networking options&#8221; section in <font face="Courier New">eucalyptus.conf</font> namely options starting with &#8220;<i>VNET_</i>&#8221;</p>
<p>We, first, start by configuring <font face="Courier New">VNET_PRIVINTERFACE</font> and <font face="Courier New">VNET_PUBINTERFACE</font>. VNET_PRIVINTERFACE should be set to the ethernet device that is attached to the same physical ethernet as the Nodes. In my case, <font face="Courier New">eth0</font>.</p>
<pre class="java-codeface">
VNET_PRIVINTERFACE="eth0"
</pre>
<p>Next, if your front-end has a second ethernet device, say <font face="Courier New">eth1</font>, which is used to access the public network, you could configure <font face="Courier New">VNET_PUBINTERFACE</font> to this. In my case, I have only one ethernet device <font face="Courier New">eth0</font>. Therefore I set <font face="Courier New">VNET_PUBINTERFACE</font> to <font face="Courier New">eth0</font> </p>
<pre class="java-codeface">
VNET_PUBINTERFACE="eth0"
</pre>
<p><i>Ignore</i> the <font face="Courier New">VNET_BRIDGE</font> since it is only valid for the Nodes. </p>
<p>In MANAGED configuration, Eucalyptus maintains a DHCP server that it uses to dole out IP addresses to virtual machine instances. Therefore it needs the location of <font face="Courier New">dhcp</font> daemon. In my case this is <font face="Courier New">/usr/sbin/dhcpd</font> and in my CentOS OS it is configured to run as <font face="Courier New">root</font> user. Therefore I leave the <font face="Courier New">VNET_DHCPUSER</font> commented out since by default Eucalyptus will setup the DHCPD configuration files/directories to be owned by <font face="Courier New">root</font> user.</p>
<pre class="java-codeface">
VNET_DHCPDAEMON="/usr/sbin/dhcpd"
#VNET_DHCPUSER="root"
</pre>
<p>If your DHCP daemon is set to run as a non-root user (for example, in Ubuntu it is set to run under <font face="Courier New">dhcpd</font> user), then un-comment <font face="Courier New">VNET_DHCPUSER</font> and update this value accordingly.</p>
<p>Next, comment out <font face="Courier New">VNET_MODE=SYSTEM</font> (<i>out-of-the-box</i> networking mode) since our objective is to use MANAGED networking.</p>
<p>So, let un-comment out the line <font face="Courier New">VNET_MODE=&#8221;MANAGED&#8221;</font>.</p>
<p>Next, let&#8217;s set the values for <font face="Courier New">VNET_SUBNET</font> and <font face="Courier New">VNET_NETMASK</font>. In my case, according to &#8220;<a href="#checklist1">Checklist #1: Available range of IP addresses for private VLAN</a>&#8220;, we define these values as follows:</p>
<pre class="java-codeface">
VNET_SUBNET="10.10.0.0"
VNET_NETMASK="255.255.0.0"
</pre>
<p>Update your values accordingly. This makes 65536 (<i>256 * 256 = 65536</i>) IP addresses available to Eucalyptus to assign as private IP addresses to virtual machine instances.</p>
<p>Next, I set the number of IP addresses allowed per network (security group per user) to 32 i.e. the option <font face="Courier New">VNET_ADDRSPERNET</font>:</p>
<pre class="java-codeface">
VNET_ADDRSPERNET="32"
</pre>
<p>The setting above allows for 2048 (<i>65536 / 32 = 2048</i>) networks to be <i>active</i> simultaneously. Depending on your <font face="Courier New">VNET_SUBNET</font>, <font face="Courier New">VNET_NETMASK</font>, and <font face="Courier New">VNET_ADDRSPERNET</font> values, the number of concurrent active networks will be different that mine.</p>
<p>Also, in my case if I end up having, say, 100 users, then each user will have a maximum of 20 networks (<i>2048 / 100 = 20.48</i>) in operation at any given point in time.</p>
<p>Next, we set the VNET_DNS to the same DNS server used by my front-end machine. You can find your DNS server by looking in the <font face="Courier New">/etc/resolv.conf</font> file as follows:</p>
<pre class="java-codeface">
cat /etc/resolv.conf
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
; generated by /sbin/dhclient-script<br />
search wave.local<br />
nameserver 192.168.0.2
</div>
<p>So I set VNET_DNS with:</p>
<pre class="java-codeface">
VNET_DNS="192.168.0.2"
</pre>
<p>Next, you will want to assign public IP addresses to your instances &#8211; very much like Amazon EC2 instances. This gives users the ability to log into their instances from outside the cluster/front-end. But first you must find a set of public IP addresses that are not in use.</p>
<p><i>Note:</i> Talk to your LAN administrator at this point to see if he can give you a bunch of IP addresses (a range will be great) that Eucalyptus can use to assign to instances at boot or dynamically at instance run time.</p>
<p>The public IP addresses you pick must be capable of being assigned to the front-end. In my case, I have 192.168.3.1 &#8211; 192.168.3.255 addresses available on my LAN network. I confirm that the IP addresses can be assigned to the front-end NIC <font face="Courier New">eth0</font> as follows:<br />
For example, for IP address 192.168.3.1</p>
<pre class="java-codeface">
ip a add 192.168.3.1/32 dev eth0
ping 192.168.3.1
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.<br />
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=0.099 ms<br />
64 bytes from 192.168.3.1: icmp_seq=2 ttl=64 time=0.054 ms<br />
64 bytes from 192.168.3.1: icmp_seq=3 ttl=64 time=0.062 ms</p>
<p>&#8212; 192.168.3.1 ping statistics &#8212;<br />
3 packets transmitted, 3 received, 0% packet loss, time 2010ms<br />
rtt min/avg/max/mdev = 0.054/0.071/0.099/0.021 ms
</p></div>
<p>Perfect. I now configure VNET_PUBLICIPS as follows:</p>
<pre class="java-codeface">
VNET_PUBLICIPS="192.168.3.1-192.168.3.31"
</pre>
<p><i>Note:</i> I&#8217;ve deliberately, for no particular reason, configured the range to be only allow for 31 public IP addresses. </p>
<p>If you have individual IP addresses instead of range, then separate each IP address with a space.</p>
<p>Next, comes <font face="Courier New">VNET_CLOUDIP</font> and <font face="Courier New">VNET_LOCALIP</font>. Since my Cloud Controller and Cluster Controller are running on the same machine, <font face="Courier New">192.168.0.114</font>, I leave <font face="Courier New">VNET_CLOUDIP</font> commented out.<br />
Also, since I&#8217;m running a single Cluster Controller I leave <font face="Courier New">VNET_LOCALIP</font> commented out as well.</p>
<pre class="java-codeface">
#VNET_LOCALIP="your-public-interface's-ip"
#VNET_CLOUDIP="your-cloud-controller's-ip"
</pre>
<p>If your installation has multiple Cluster Controllers, and you wish to specify the IP of the Cluster Controller that all other Cluster Controllers can reach, you can set <font face="Courier New">VNET_LOCALIP</font> to that Cluster Controller&#8217;s IP address.</p>
<p>That&#8217;s all with configuring Eucalyptus to use MANAGED networking mode on the front-end. To summarize my settings on the front-end are as follows:</p>
<pre class="java-codeface">
VNET_PUBINTERFACE="eth0"
VNET_PRIVINTERFACE="eth0"
...
...
VNET_DHCPDAEMON="/usr/sbin/dhcpd"
#VNET_DHCPUSER="root"
...
...
VNET_MODE="MANAGED"
VNET_SUBNET="10.10.0.0"
VNET_NETMASK="255.255.0.0"
VNET_DNS="192.168.0.2"
VNET_ADDRSPERNET="32"
VNET_PUBLICIPS="192.168.3.1-192.168.3.31"
#VNET_LOCALIP="your-public-interface's-ip"
#VNET_CLOUDIP="your-cloud-controller's-ip"
...
...
#VNET_MODE="SYSTEM"
</pre>
</p>
<p>
<br/><br />
<strong><a name="managednetworkingNode">Node configuration &#8211; MANAGED networking mode</a></strong>
</p>
<p>
Next, we need to configure the Nodes for MANAGED networking mode. In my case, my Nodes are <font face="Courier New">192.168.0.19</font> and <font face="Courier New">192.168.5.7</font>. </p>
<p>Again, all the options that we plan on configuring are located under the &#8220;Networking options&#8221; section in <font face="Courier New">eucalyptus.conf</font>. We are mainly concerned with options <font face="Courier New">VNET_PRIVINTERFACE</font>, <font face="Courier New">VNET_PUBINTERFACE</font>, and <font face="Courier New">VNET_MODE</font>.</p>
<p>Let&#8217;s start with VNET_PRIVINTERFACE and VNET_PUBINTERFACE. Both these options should be set to the ethernet device that is attached to the same physical ethernet as the Cluster Controller. In my case, <font face="Courier New">eth0</font>. </p>
<pre class="java-codeface">
VNET_PUBINTERFACE="eth0"
VNET_PRIVINTERFACE="eth0"
</pre>
<p>We also un-comment the line <font face="Courier New">VNET_MODE=&#8221;MANAGED&#8221;</font> and comment <font face="Courier New">VNET_MODE=&#8221;SYSTEM&#8221;</font></p>
<p>That&#8217;s all with configuring Eucalyptus to use MANAGED networking mode on the Nodes. To summarize my settings on the Nodes are as follows:</p>
<pre class="java-codeface">
VNET_PUBINTERFACE="eth0"
VNET_PRIVINTERFACE="eth0"
...
...
VNET_MODE="MANAGED"
#VNET_MODE="SYSTEM"
</pre>
<p>Now we are ready to restart Eucalyptus on both front-end and Nodes.
</p>
</p>
<p>
<br/><br />
<strong><a name="restartEucalyptus">Restart Eucalyptus with MANAGED networking mode</a></strong>
</p>
<p>
On the front-end, first do a &#8220;clean&#8221; start of the Cluster Controller as follows:</p>
<pre class="java-codeface">
/etc/init.d/eucalyptus-cc cleanstart
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Starting Eucalyptus cluster controller: done.
</div>
<p><i>Note:</i> A clean start of the Cluster Controller is necessary when you update any Eucalyptus settings for the changes to take effect.</p>
<p>Next, start the Cloud Controller:</p>
<pre class="java-codeface">
/etc/init.d/eucalyptus-cloud start
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
Starting Eucalyptus services: walrus sc cloud done.
</div>
<p>Verify that Eucalyptus (Cloud Controller, Cluster Controller) is started on the front-end:</p>
<pre class="java-codeface">
ps auxww | grep euca | grep -v euca
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
root      3583  0.0  0.1   9840  1484 ?        Ss   10:49   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />
500       3584  0.0  0.3  13480  3160 ?        S    10:49   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />
500       3585  0.0  0.3  13480  3160 ?        S    10:49   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />
500       3586  0.0  0.3  13480  3160 ?        S    10:49   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />
500       3587  0.0  0.3  13480  3160 ?        S    10:49   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />
500       3588  0.0  0.3  13480  3160 ?        S    10:49   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />
root      3667  0.0  0.0   1852   220 ?        Ss   10:49   0:00 eucalyptus-cloud &#8211;remote-dns &#8211;disable-iscsi -h / -u eucalyptus &#8211;pidfile //var/run/eucalyptus/eucalyptus-cloud.pid -f -L console-log<br />
root      3668  124 16.0 812212 164964 ?       Rl   10:49   0:29 eucalyptus-cloud &#8211;remote-dns &#8211;disable-iscsi -h / -u eucalyptus &#8211;pidfile //var/run/eucalyptus/eucalyptus-cloud.pid -f -L console-log
</div>
<p>Moving on to the Nodes, start the Node Controllers as follows:</p>
<pre class="java-codeface">
/etc/init.d/eucalyptus-nc start
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
You should have at least 32 loop devices<br />
Starting Eucalyptus services:<br />
Enabling bridge netfiltering for eucalyptus.<br />
done.
</div>
<p>Verify that Eucalyptus (Node Controller) is started on the Nodes:</p>
<pre class="java-codeface">
ps auxww | grep euca | grep -v euca
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
root      4375  0.0  0.1   9856  1484 ?        Ss   10:55   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-nc.conf<br />
500       4376  0.0  0.3  15376  3448 ?        S    10:55   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-nc.conf
</div>
</p>
<p>
<br/><br />
<strong><a name="test">Testing our Eucalyptus MANAGED networking</a></strong>
</p>
<p>
Recall in our post on <a href="http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/#test" target="_blank">Setting up a private cloud using Eucalyptus</a>, we had installed the Amazon EC2 API Tools. Let&#8217;s run a few commands to test Eucalyptus MANAGED networking, especially some of the settings such as the public IP addresses that we set in the Eucalyptus configuration on the front-end:</p>
<pre class="java-codeface">
ec2-describe-availability-zones verbose
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
[Deprecated] Xalan: org.apache.xml.res.XMLErrorResources_en_US<br />
AVAILABILITYZONE	rosh-cluster1	192.168.0.114<br />
AVAILABILITYZONE	|- vm types	free / max   cpu   ram  disk<br />
AVAILABILITYZONE	|- m1.small	0002 / 0004   1    128     2<br />
AVAILABILITYZONE	|- c1.medium	0002 / 0004   1    256     5<br />
AVAILABILITYZONE	|- m1.large	0001 / 0002   2    512    10<br />
AVAILABILITYZONE	|- m1.xlarge	0000 / 0000   2   1024    20<br />
AVAILABILITYZONE	|- c1.xlarge	0000 / 0000   4   2048    20
</div>
<p>You will notice in the above output that it seems like I have some instances running &#8211; <i>free < max</i>. Infact I did start an instance (using <font face="Courier New">ec2-run-instances</font> command) so we could see MANAGED networking in action.</p>
<pre class="java-codeface">
ec2-describe-instances
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
[Deprecated] Xalan: org.apache.xml.res.XMLErrorResources_en_US<br />
RESERVATION	r-352406B2	admin	default<br />
INSTANCE	i-4BAA0834	emi-839A0EC7	192.168.3.1	10.10.1.2	running	test2_key	0		m1.large	2010-05-26T18:20:47+0000	rosh-cluster1	eki-9065137F	eri-E86014C4		monitoring-false
</div>
<p>As you can see my instance <font face="Courier New">i-4BAA0834</font> has a public IP address of <font face="Courier New">192.168.3.1</font> and a private IP address of <font face="Courier New">10.10.1.2</font>. </p>
<p>When Eucalyptus booted up my instance it assigned the instance <font face="Courier New">192.168.3.1</font> from the list of public IP addresses (see <font face="Courier New">VNET_PUBLICIPS</font> in section <a href="#managednetworkingFrontend">Front-end configuration &#8211; MANAGED networking mode</a>). Eucalyptus also assigned the instance a private IP address <font face="Courier New">10.10.1.2</font> from the range of unused IP addresses (see <font face="Courier New">VNET_SUBNET</font> in section <a href="#managednetworkingFrontend">Front-end configuration &#8211; MANAGED networking mode</a>).</p>
<p>Also, if you run ec2-describe-addresses you will see the public IP addresses (VNET_PUBLICIPS) that are in use and available.</p>
<pre class="java-codeface">
ec2-describe-addresses
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
[Deprecated] Xalan: org.apache.xml.res.XMLErrorResources_en_US<br />
ADDRESS	192.168.3.1	i-4BAA0834 (eucalyptus)<br />
ADDRESS	192.168.3.10	nobody<br />
ADDRESS	192.168.3.11	nobody<br />
ADDRESS	192.168.3.12	nobody<br />
ADDRESS	192.168.3.13	nobody<br />
ADDRESS	192.168.3.14	nobody<br />
ADDRESS	192.168.3.15	nobody<br />
ADDRESS	192.168.3.16	nobody<br />
ADDRESS	192.168.3.17	nobody<br />
ADDRESS	192.168.3.18	nobody<br />
ADDRESS	192.168.3.19	nobody<br />
ADDRESS	192.168.3.2	nobody<br />
ADDRESS	192.168.3.20	nobody<br />
ADDRESS	192.168.3.21	nobody<br />
ADDRESS	192.168.3.22	nobody<br />
ADDRESS	192.168.3.23	nobody<br />
ADDRESS	192.168.3.24	nobody<br />
ADDRESS	192.168.3.25	nobody<br />
ADDRESS	192.168.3.26	nobody<br />
ADDRESS	192.168.3.27	nobody<br />
ADDRESS	192.168.3.28	nobody<br />
ADDRESS	192.168.3.29	nobody<br />
ADDRESS	192.168.3.3	nobody<br />
ADDRESS	192.168.3.30	nobody<br />
ADDRESS	192.168.3.31	nobody<br />
ADDRESS	192.168.3.4	nobody<br />
ADDRESS	192.168.3.5	nobody<br />
ADDRESS	192.168.3.6	nobody<br />
ADDRESS	192.168.3.7	nobody<br />
ADDRESS	192.168.3.8	nobody<br />
ADDRESS	192.168.3.9	nobody
</div>
</p>
<p>
<br/><br />
So now when Eucalyptus boots up instances, the instances will be assigned a private address and a public address, similar to Amazon EC2 instances.</p>
<p>So you are now running a <i>Amazon EC2-like</i> cloud in your datacenter using Eucalyptus!</p>
<p>In up-coming posts in this series of &#8220;Building a private Cloud&#8221;, we will look how to bundle/register images, run instances, and more importantly how Platform-as-a-Service complements Infrastructure-as-a-Service.
</p></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/05/26/eucalyptus-configuring-your-private-cloud-to-resemble-amazon-ec2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eucalyptus: Setting up a private infrastructure cloud</title>
		<link>http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/</link>
		<comments>http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/#comments</comments>
		<pubDate>Wed, 19 May 2010 22:18:57 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Appistry]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloudiq]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[eucalyptus]]></category>
		<category><![CDATA[eucalyptus centos install]]></category>
		<category><![CDATA[eucalyptus configuration]]></category>
		<category><![CDATA[eucalyptus install]]></category>
		<category><![CDATA[eucalyptus setup]]></category>
		<category><![CDATA[eucalyptus tutorial]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[infrastructure as a service]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[installing eucalyptus]]></category>
		<category><![CDATA[opennebula]]></category>
		<category><![CDATA[plexibus]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[setup]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/</guid>
		<description><![CDATA[There are a few Infrastructure-as-a-Service offerings that available to download and use. Eucalyptus and OpenNebula are two such offerings. I ended up installing and experimenting with both Eucalyptus and OpenNebula. In this blog post, I&#8217;ll detail my experience of installing and setting up Eucalyptus 1.6.2 on CentOS.
For the sake of keeping things simple but still [...]]]></description>
			<content:encoded><![CDATA[<p>There are a few Infrastructure-as-a-Service offerings that available to download and use. <a href="http://www.eucalyptus.com/" target="_blank">Eucalyptus</a> and <a href="http://www.opennebula.org/" target="_blank">OpenNebula</a> are two such offerings. I ended up installing and experimenting with both Eucalyptus and OpenNebula. In this blog post, I&#8217;ll detail my experience of installing and setting up Eucalyptus 1.6.2 on CentOS.</p>
<p>For the sake of keeping things simple but still practical enough, we will have:</p>
<ul>
<li>1 front-end machine. This will house the Cloud Controller (CLC) and  Walrus. Since we intend to keep things fairly simple we will limit ourselves to a single cluster and setup the Cluster Controller (CC) and Storage Controller (SC) on this same machine. In my case, this machine has one network interface (NIC) with an IP address of 192.168.0.114.</li>
<p>
<li>2 machines (Nodes) that will serve as hosts running <a href="http://www.xen.org/" target="_blank">Xen</a> hypervisor for the virtual machines i.e. each machine will have a Node Controller (NC) installed. In my case, each machine has a single NIC and the IP addresses are 192.168.0.19 and 192.168.5.7 respectively. </li>
<p></ul>
<p>Before we install Eucalyptus we need to first prep these machines. </p>
<p><i>Note:</i> For the rest of this document, run the commands as <font face="Courier New">root</font> user. 
</p>
<p></p>
<p>
This document is organized as below. Feel free to skip any sections if you have already implemented the steps in that section. <br/></p>
<table>
<tr>
<td><a href="#prepwork">Prepare the machines</a></td>
</tr>
<tr>
<td><a href="#download">Download Eucalyptus</a></td>
</tr>
<tr>
<td><a href="#installfront">Install Eucalyptus on the Front-end</a></td>
</tr>
<tr>
<td><a href="#installnode">Install Eucalyptus on the Nodes</a></td>
</tr>
<tr>
<td><a href="#run">Run Eucalyptus</a></td>
</tr>
<tr>
<td><a href="#register">Register Eucalyptus components</a></td>
</tr>
<tr>
<td><a href="#configure">First-time Configuration</a></td>
</tr>
<tr>
<td><a href="#test">Test your Eucalyptus install</a></td>
</tr>
</table>
<p><br/>
</p>
<p></p>
<p>
<br />
<strong><a name="prepwork">Prep work</a></strong></p>
<p>
On the front-end machine, we first install <a href="http://java.sun.com/" target="_blank">Java</a> and <a href="http://ant.apache.org" target="_blank">Ant</a>. You can download Sun JDK from <a href="http://java.sun.com/javase/downloads/widget/jdk6.jsp" target="_blank">here</a> and Ant from <a href="http://ant.apache.org/bindownload.cgi" target="_blank">here</a> . I&#8217;m using JDK version 1.6u20 (jdk-6u20-linux-i586-rpm.bin) and Ant version 1.8.0 (apache-ant-1.8.0-bin.tar.gz).</p>
<p>Once you have downloaded Sun JDK to a directory, install it as follows:</p>
<pre class="java-codeface">
chmod +x jdk-6u20-linux-i586-rpm.bin
./jdk-6u20-linux-i586-rpm.bin
</pre>
<p>You can confirm that java is on the PATH by running the following command:</p>
<pre class="java-codeface">java -version</pre>
<p>You should output similar to:
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">java version &#8220;1.6.0_19&#8243;<br />Java(TM) SE Runtime Environment (build 1.6.0_19-b04)<br />Java HotSpot(TM) Client VM (build 16.2-b04, mixed mode, sharing)</div>
<p>Next, install Ant under <font face="Courier New">/opt</font> directory as follows:</p>
<pre class="xml-codeface">
cd /opt
mkdir ant
cd ant
tar zxvf ~/apache-ant-1.8.0-bin.tar.gz
ln -s apache-ant-1.8.0 latest
</pre>
<p>
Next, we need to add an environment variable ANT_HOME that points to <font face="Courier New">/opt/ant/latest</font> and append the <font face="Courier New">$ANT_HOME/bin</font> to the PATH environment variable. Add this to the <font face="Courier New">/etc/profile</font> file as follows:</p>
<pre class="java-codeface">
cd /etc
cp profile profile.ORIG
echo "export ANT_HOME=/opt/ant/latest" &gt;&gt; profile
echo "export PATH=\$PATH:\$ANT_HOME/bin" &gt;&gt; profile
</pre>
<p>Next we need to install a few dependencies (dhcp, bridge-utils, httpd, xen-libs, ntp) and synchronize the system clock on the front-end machine. You can do this as follows:</p>
<pre class="java-codeface">
yum update
yum install dhcp xen-libs httpd bridge-utils ntp
ntpdate pool.ntp.org
</pre>
<p>I have the following versions installed:</p>
<pre class="java-codeface">
yum list dhcp xen-libs httpd bridge-utils
</pre>
<p></p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">Loaded plugins: fastestmirror<br />Loading mirror speeds from cached hostfile<br /> * addons: mirror.fdcservers.net<br /> * base: mirrors.ecvps.com<br /> * extras: mirror.ubiquityservers.com<br /> * updates: mirror.ubiquityservers.com<br />Installed Packages<br />bridge-utils.i386                                                                                       1.1-2                                                                                                           installed<br />dhcp.i386                                                                                               12:3.0.5-21.el5_4.1                                                                                             installed<br />httpd.i386                                                                                              2.2.3-31.el5.centos.4                                                                                           installed<br />xen-libs.i386                                                                                           3.0.3-94.el5_4.3                                                                                                installed<br />Available Packages<br />dhcp.i386                                                                                               12:3.0.5-23.el5                                                                                                 base     <br />httpd.i386                                                                                              2.2.3-43.el5.centos                                                                                             base     <br />xen-libs.i386                                                                                           3.0.3-105.el5                                                                                                   base     
</div>
<p>We also allow the front-end machine to forward IP packets as follows:</p>
<pre class="java-codeface">
cd /etc
cp sysctl.conf sysctl.conf.ORIG
sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/" sysctl.conf
</pre>
<p>
To change this value immediately without rebooting, run the following command:</p>
<pre class="java-codeface">
sysctl -p /etc/sysctl.conf
</pre>
<p>Next, we need to configure firewall rules to permit the various Eucalyptus communicate with each other. Since we are planning on using security groups in Eucalyptus, let&#8217;s start with disabling SELinux on the front-end machine as follows:</p>
<pre class="java-codeface">
cd /etc/selinux
cp config config.ORIG
sed -i "s/SELINUX=permissive/SELINUX=disabled/" config
</pre>
<p>Let&#8217;s reboot the front-end machine at this point.</p>
<p>Next, we need to prep the two Nodes. We start by installing xen hypervisor and also synchronize the system clock on each Node as follows:</p>
<pre class="java-codeface">
yum update
yum install xen ntp
ntpdate pool.ntp.org
</pre>
<p>I have the following versions of xen installed:</p>
<pre class="java-codeface">
yum list xen
</pre>
<p></p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">Loaded plugins: fastestmirror<br />Loading mirror speeds from cached hostfile<br /> * addons: mirror.ash.fastserv.com<br /> * base: mirror.ubiquityservers.com<br /> * extras: mirror.steadfast.net<br /> * updates: hpc.arc.georgetown.edu<br />Installed Packages<br />xen.i386                                                                                                3.0.3-94.el5_4.3                                                                                                installed<br />Available Packages<br />xen.i386                                                                                                3.0.3-105.el5                                                                                                   base     
</div>
<p>Once we have Xen installed we need to configure it to allow for the hypervisor to be controlled via HTTP from localhost. We can do this by editing <font face="Courier New">/etc/xen/xend-config.sxp</font> file and then restart xen daemon as follows:</p>
<pre class="java-codeface">
cd /etc/xen
cp xend-config.sxp xend-config.sxp.ORIG
sed -i "s/#(xend-http-server no)/(xend-http-server yes)/" xend-config.sxp
sed -i "s/#(xend-address localhost)/(xend-address localhost)/" xend-config.sxp
/etc/init.d/xend restart
</pre>
<p>Next we need to make sure the correct kernel with xen enabled is started at boot. We do this by editing the GRUB configuration file (<font face="Courier New">grub.conf</font>) under <font face="Courier New">/boot/grub</font>. If grub.conf is not available, then edit <font face="Courier New">menu.lst</font> which should be a file instead of a symlink to <font face="Courier New">grub.conf</font>. <br />In my case, <font face="Courier New">/boot/grub/grub.conf</font> is:</p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);"># grub.conf generated by anaconda<br />#<br /># Note that you do not have to rerun grub after making changes to this file<br /># NOTICE:  You have a /boot partition.  This means that<br />#          all kernel and initrd paths are relative to /boot/, eg.<br />#          root (hd0,0)<br />#          kernel /vmlinuz-version ro root=/dev/sda3<br />#          initrd /initrd-version.img<br />#boot=/dev/sda<br />default=1<br />timeout=5<br />splashimage=(hd0,0)/grub/splash.xpm.gz<br />hiddenmenu<br />title CentOS (2.6.18-164.15.1.el5xen)<br />	root (hd0,0)<br />	kernel /xen.gz-2.6.18-164.15.1.el5<br />	module /vmlinuz-2.6.18-164.15.1.el5xen ro root=LABEL=/<br />	module /initrd-2.6.18-164.15.1.el5xen.img<br />title CentOS (2.6.18-164.15.1.el5)<br />	root (hd0,0)<br />	kernel /vmlinuz-2.6.18-164.15.1.el5 ro root=LABEL=/<br />	initrd /initrd-2.6.18-164.15.1.el5.img<br />title CentOS (2.6.18-164.el5)<br />	root (hd0,0)<br />	kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/<br />	initrd /initrd-2.6.18-164.el5.img</div>
<p>The <i>default</i> line is the line we want to change. The first <i>title</i> is 0. Since we want <i>title</i> <b>CentOS (2.6.18-164.15.1.el5xen)</b> to be the default kernel we would set <i>default</i> to 0.<br />
We can do this as follows:</p>
<pre class="java-codeface">
cd /boot/grub
cp grub.conf grub.conf.ORIG
sed -i "default=1/default=0/" grub.conf
</pre>
<p>
Next, we disable SELinux on the Node machines as follows:</p>
<pre class="java-codeface">
cd /etc/selinux
cp config config.ORIG
sed -i "s/SELINUX=permissive/SELINUX=disabled/" config
</pre>
<p>Let&#8217;s reboot both Node machines at this point. We are not ready to proceed with the installation of Eucalyptus.<br />

</p>
<p></p>
<p>
<br />
<strong><a name="download">Download Eucalyptus</a></strong></p>
<p>You could choose to install Eucalyptus via <font face="Courier New">yum</font> if needed which is easier that <br />You can downloaded Eucalyptus from <a href="http://open.eucalyptus.com/downloads" target="_blank">here</a>. I picked the 32-bit CentOS 5 rpms that come bundled in a <a href="http://open.eucalyptus.com/sites/all/modules/pubdlcnt/pubdlcnt.php?file=http://eucalyptussoftware.com/downloads/releases/eucalyptus-1.6.2-centos-i386.tar.gz&amp;nid=1346" target="_blank">gzip compressed tar</a> file.</p>
<p><i>Note:</i> Different Eucalyptus components need to be installed on the front-end and each of the Node machines. The aforementioned tar.gz file contains all Eucalyptus components though. Therefore download it once on the front-end and then copy this file over to each of the Node machines.<br />

</p>
<p></p>
<p>
<br />
<strong><a name="installfront">Install Eucalyptus on the front-end</a></strong></p>
<p>
Once you have downloaded Eucalyptus (in my case, <font face="Courier New">eucalyptus-1.6.2-centos-i386.tar.gz</font>) on the front-end, untar it to root&#8217;s home folder <font face="Courier New">/root</font>.</p>
<pre class="java-codeface">
tar zxvf eucalyptus-1.6.2-centos-i386.tar.gz
cd eucalyptus-1.6.2-centos-i386
</pre>
<p>We are ready to install. Let&#8217;s start by installing the 3rd-party dependency RPMs included in the <font face="Courier New">eucalyptus-1.6.2-rpm-deps-i386</font> directory. Install all the rpms in this directory as follows: </p>
<pre class="java-codeface">
cd eucalyptus-1.6.2-rpm-deps-i386
rpm -Uvh aoetools-21-1.el4.i386.rpm euca-axis2c-1.6.0-1.i386.rpm euca-rampartc-1.3.0-1.i386.rpm vblade-14-1mdv2008.1.i586.rpm groovy-1.6.5-1.noarch.rpm vtun-3.0.2-1.el5.rf.i386.rpm lzo2-2.02-3.el5.rf.i386.rpm
cd ..
</pre>
<p>
Note the above &#8220;<font face="Courier New">rpm -Uvh&#8230;</font>&#8221; command might fail with an error about &#8220;<i>Failed dependencies&#8230;java-sdk &gt; 1.6.0 is needed&#8230;.</i>&#8220;. To get past this error, run the above <font face="Courier New">rpm -Uvh&#8230;</font> with <b>&#8211;nodeps</b>. The error is because it is trying to look for Openjdk during installation. But we have installed Sun Java instead. Adding <font face="Courier New">&#8211;nodeps</font> will get us past this error message. Don&#8217;t worry, the Eucalyptus components will start up fine when the time comes to run them. </p>
<p>Next, let&#8217;s install the Cloud Controller, Walrus, Cluster Controller, Storage Controller, and a few other dependencies on the front-end machine as follows:</p>
<pre class="java-codeface">
rpm -Uvh eucalyptus-1.6.2-1.i386.rpm eucalyptus-common-java-1.6.2-1.i386.rpm eucalyptus-cloud-1.6.2-1.i386.rpm eucalyptus-walrus-1.6.2-1.i386.rpm eucalyptus-sc-1.6.2-1.i386.rpm eucalyptus-cc-1.6.2-1.i386.rpm eucalyptus-gl-1.6.2-1.i386.rpm
</pre>
<p>Now let&#8217;s move on the installing Eucalyptus components on the Node.<br />

</p>
<p></p>
<p>
<br />
<strong><a name="installnode">Install Eucalyptus on the Nodes</a></strong></p>
<p>
First, copy (or download) the Eucalyptus tar.gz file on each Node. Untar it to root&#8217;s home folder <font face="Courier New">/root</font>. </p>
<p><i>Note:</i> The steps in this section need to be performed on each Node (in my case on each of the two Nodes).</p>
<p>Let&#8217;s begin by installing a few 3rd-party dependency RPMs. </p>
<pre class="java-codeface">
tar zxvf eucalyptus-1.6.2-centos-i386.tar.gz
cd eucalyptus-1.6.2-centos-i386
cd eucalyptus-1.6.2-rpm-deps-i386
rpm -Uvh aoetools-21-1.el4.i386.rpm euca-axis2c-1.6.0-1.i386.rpm euca-rampartc-1.3.0-1.i386.rpm
cd ..
</pre>
<p>Next, we install the Node Controller (and a couple of dependencies) on each Node as follows:</p>
<pre class="java-codeface">
rpm -Uvh eucalyptus-1.6.2-1.i386.rpm eucalyptus-gl-1.6.2-1.i386.rpm eucalyptus-nc-1.6.2-1.i386.rpm
</pre>
<p>Next, confirm that the user <font face="Courier New">eucalyptus</font> can connect with the hypervisor through <font face="Courier New">libvirt</font>.</p>
<pre class="java-codeface">
su eucalyptus -c "virsh list"
</pre>
<p>
The output of the above command should look something like:</p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);"> Id Name                 State<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />  0 Domain-0             running</div>
<p><i>Note:</i> If you don&#8217;t have <font face="Courier New">libvirt</font> installed/running on the Nodes, you could install it: <font face="Courier New">yum install libvirt</font></p>
<p>That&#8217;s it with the installation!<br />

</p>
<p></p>
<p>
<br />
<strong><a name="run">Running Eucalyptus</a></strong></p>
<p>
You are now ready to start Eucalyptus up. </p>
<p>SSH to the front-end machine and start the Cluster Controller and Cloud Controller as follows:</p>
<pre class="java-codeface">
/etc/init.d/eucalyptus-cc start
/etc/init.d/eucalyptus-cloud start
</pre>
<p>Run ps command to confirm Eucalyptus is running on the front-end:</p>
<pre class="java-codeface">
ps auxww | grep euca
</pre>
<p></p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">root     30499  0.0  0.1   9840  1480 ?        Ss   May13   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      30500  0.3  4.7 1103496 48552 ?       S    May13  33:14 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      30501  0.3  4.7 1103496 48704 ?       S    May13  33:26 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      30502  0.3  7.3 1136720 75808 ?       R    May13  33:22 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      30503  0.3  3.9 1103484 40232 ?       S    May13  32:56 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      30504  0.3  5.0 1103568 51416 ?       S    May13  32:55 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />root     30586  0.0  0.0   1852   224 ?        Ss   May13   0:00 eucalyptus-cloud &#8211;remote-dns &#8211;disable-iscsi -h / -u eucalyptus &#8211;pidfile //var/run/eucalyptus/eucalyptus-cloud.pid -f -L console-log<br />500      30587  6.5 39.3 937236 403344 ?       Sl   May13 569:24 eucalyptus-cloud &#8211;remote-dns &#8211;disable-iscsi -h / -u eucalyptus &#8211;pidfile //var/run/eucalyptus/eucalyptus-cloud.pid -f -L console-log<br />500      30840  0.1  0.4 1137232 4824 ?        S    May13  12:53 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      31612  0.3  3.9 1103636 40556 ?       S    May13  32:50 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      31676  0.3  3.9 1103568 40400 ?       S    May13  33:09 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf<br />500      31678  0.3  4.7 1103636 48628 ?       S    May13  32:54 /usr/sbin/httpd -f //etc/eucalyptus/httpd-cc.conf
</div>
<p>
Next, SSH to each Node and start Node Controller as follows:</p>
<pre class="java-codeface">
/etc/init.d/eucalyptus-nc start
</pre>
<p>Confirm eucalyptus is running on the Nodes:</p>
<pre class="java-codeface">
ps auxww | grep euca
</pre>
<p></p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">root     20637  0.0  0.3   9856  1488 ?        Ss   May13   0:00 /usr/sbin/httpd -f //etc/eucalyptus/httpd-nc.conf<br />500      20639  0.9 10.2  80688 50904 ?        Sl   May13  78:15 /usr/sbin/httpd -f //etc/eucalyptus/httpd-nc.conf
</div>
<p>
</p>
<p></p>
<p>
<br />
<strong><a name="register">Registering Eucalyptus components</a></strong></p>
<p>
Now that you have started all components, you will need to register them so that they can talk to each other.</p>
<p>SSH to the front-end machine (in my case, 192.168.0.114) and run the following commands:</p>
<pre class="java-codeface">
euca_conf --register-walrus 192.168.0.114
euca_conf --register-cluster rosh-cluster1 192.168.0.114
euca_conf --register-sc rosh-cluster1 192.168.0.114
</pre>
<p>where,<br />
<i>192.168.0.114</i> &#8211; is the IP address of my front-end machine which has CLC, Walrus, CC and SC installed/running. Replace this with the IP address of your front-end machine in all the above commands.<br />
<i>rosh-cluster1</i> &#8211; is the cluster name that I used. Replace it with your own cluster name.</p>
<p>Next, we need to register the 2 Nodes. On the front-end machine, run the following command:</p>
<pre class="java-codeface">
euca_conf --register-nodes "192.168.0.19 192.168.5.7"
</pre>
<p>where,<br />
<i>192.168.0.19, 192.168.5.7</i> &#8211; are the 2 Nodes in my case. Replace the above IP addresses with the IP addresses of your Nodes. Add additional Nodes separated with a space.</p>
<p>You can verify that the nodes are registered by verifying that value of the <font face="Courier New">NODES</font> element in the <font face="Courier New">eucalyptus.conf</font> file on the front-end reflects the node IP addresses added via the above <font face="Courier New">euca_conf &#8211;register-nodes</font> command. In my case:</p>
<pre class="java-codeface">
grep NODES /etc/eucalyptus/eucalyptus.conf
</pre>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
NODES=&#8221; 192.168.0.19 192.168.5.7&#8243;
</div>
<p>We are done with registering the Eucalyptus components.<br />

</p>
<p></p>
<p>
<br />
<strong><a name="configure">First-time Configuration</a></strong></p>
<p>
We are now ready to perform some quick configuration. </p>
<p>Using a browser, browse to <a href="https://&lt;front-end-ip-address&gt;:8443" target="_blank">https://&lt;front-end-ip-address&gt;:8443</a>. In my case, https://192.168.0.114:8443. You will get a warning page stating that the &#8220;<i>site&#8217;s security certificate is not trusted</i>&#8220;. Since Eucalyptus is using a self-signed certificate which is not verified by a third-party that the browser trusts, shows you this warning. Accept the certificate and you will be prompted for a user_id/password. Enter <font face="Courier New">admin</font> for both.</p>
<p>Once you have logged in for the first time, you will be asked to change the password, set the admin email address, etc. Enter the relevant details and hit &#8220;Submit&#8221;.</p>
<p>On the &#8220;Configuration&#8221; web page you will see Cloud Configuration, Walrus Configuration, Clusters, etc. These should all be pre-populated. You could make changes to the configurations if you wish. I left these unchanged for now.</p>
<p>Next, browse to &#8220;Credentials&#8221; web page and click the &#8220;Download Credentials&#8221; zip file. Save the &#8220;euca2-admin-x509.zip&#8221; to a directory. You will need these credentials when you use client tools such as <font face="Courier New">euca2ools</font> to manage virtual machines, images, etc.<br />Create a <font face="Courier New">.euca</font> folder and unzip the contents of this file in this folder. Run the following command from under <font face="Courier New">.euca</font> folder:</p>
<pre class="java-codeface">
unzip euca2-admin-x509.zip
</pre>
<p>
Once you have unzipped the contents, you will find a <font face="Courier New">.eucarc</font> file that exports some variables. The <font face="Courier New">EC2_URL</font> in this case will point to your front-end machine. In my case, 192.168.0.114.</p>
<pre class="java-codeface">
cat .eucarc
</pre>
<p></p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">
EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE}))<br />export S3_URL=http://192.168.0.114:8773/services/Walrus<br />export EC2_URL=http://192.168.0.114:8773/services/Eucalyptus<br />&#8230;<br />&#8230;
</div>
<p>Before you run any client tools, you will need to <font face="Courier New">source</font> this file.<br />

</p>
<p></p>
<p>
<br />
<strong><a name="test">Testing our Eucalyptus install</a></strong></p>
<p>
To keep things simple and quickly test our Eucalyptus installation, download <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351" target="_blank">Amazon EC2 API Tools</a>. Unzip the downloaded <font face="Courier New">ec2-api-tools.zip</font> to under the <font face="Courier New">.euca</font> folder that you created in the &#8220;First-time Configuration&#8221; section.</p>
<pre class="java-codeface">
unzip ec2-api-tools.zip
</pre>
<p>Next <font face="Courier New">source</font> the .eucarc file under and run the <font face="Courier New">ec2-describe-availability-zones</font> command provided by the <font face="Courier New">ec2-api-tools</font>. From under <font face="Courier New">.euca</font> folder run the following commands:</p>
<pre class="java-codeface">
cd .euca
source .eucarc
cd ec2-api-tools-1.3-46266/bin
ec2-describe-availability-zones verbose
</pre>
<p>You should see output <i>similar</i> to the following:</p>
<div style="width: 90%; border: 1px solid black; background-color: rgb(0, 0, 0); font-size: 11px; color: rgb(255, 255, 255);">[Deprecated] Xalan: org.apache.xml.res.XMLErrorResources_en_US<br />AVAILABILITYZONE	rosh-cluster1	192.168.0.114		<br />AVAILABILITYZONE	|- vm types	free / max   cpu   ram  disk		<br />AVAILABILITYZONE	|- m1.small	0004 / 0004   1    128     2		<br />AVAILABILITYZONE	|- c1.medium	0004 / 0004   1    256     5		<br />AVAILABILITYZONE	|- m1.large	0002 / 0002   2    512    10		<br />AVAILABILITYZONE	|- m1.xlarge	0000 / 0000   2   1024    20		<br />AVAILABILITYZONE	|- c1.xlarge	0000 / 0000   4   2048    20		
</div>
<p>where,<br />
<i>rosh-cluster1</i> &#8211; is the cluster I registered using euca_conf and in my case, it corresponds to the Cluster Controller running on my front-end machine (192.168.0.114)</p>
<p>If you see something like the above, give yourself a pat on the back!<br />

</p>
<p></p>
<p>You are now ready to bundle images and create instances from those images on your own private infrastructure cloud!<br />
</p>
</p>
<p>
<br />
<strong>Related Articles:</strong><br />
<a href="http://blogs.plexibus.com/2010/05/26/eucalyptus-configuring-your-private-cloud-to-resemble-amazon-ec2/">Configuring your private cloud</a><br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/05/19/eucalyptus-setting-up-a-private-infrastructure-cloud/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Appistry CloudIQ Maven plugin: Update fabric / far version</title>
		<link>http://blogs.plexibus.com/2010/05/11/appistry-cloudiq-maven-plugin-update-fabric-far-version/</link>
		<comments>http://blogs.plexibus.com/2010/05/11/appistry-cloudiq-maven-plugin-update-fabric-far-version/#comments</comments>
		<pubDate>Tue, 11 May 2010 16:24:16 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Appistry]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloudiq]]></category>
		<category><![CDATA[appistry cloud platform]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[maven-cloudiq-plugin]]></category>
		<category><![CDATA[production]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/05/11/appistry-cloudiq-maven-plugin-update-fabric-far-version/</guid>
		<description><![CDATA[Ever since Appistry CloudIQ Maven plugin has been open-sourced on Google code, enhancements and features are being added regularly. A recent feature that was added was the update fabric/far version goal.
Update fabric/far versionThe update fabric/far version goal of the Appistry CloudIQ Maven plugin automates the version update of the fabric/far artifact and integrates this process [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since <a href="http://code.google.com/p/maven-cloudiq-plugin/" target="_blank">Appistry CloudIQ Maven plugin</a> has been <a href="http://blogs.plexibus.com/2010/04/20/appistry-cloudiq-maven-plugin-on-google-code/">open-sourced on Google code</a>, enhancements and features are being added regularly. A recent feature that was added was the <i><a href="http://code.google.com/p/maven-cloudiq-plugin/issues/detail?id=2&amp;can=1" target="_blank">update fabric/far version</a></i> goal.</p>
<p><strong>Update fabric/far version</strong><br />The update fabric/far version goal of the Appistry CloudIQ Maven plugin automates the version update of the fabric/far artifact and integrates this process into the Maven build life-cycle of the CloudIQ artifact.</p>
<div style="float: right; margin: 10px 0pt 10px 30px; padding: 10px 20px 20px; width: 33%; border: 1px solid black; background-color: rgb(244, 244, 244); font-size: 11px;"><strong>What is fabric/far versioning and why is it necessary?</strong>?
<p>The <font face="Courier New">version</font> attribute in the <a href="http://www.appistry.com/community/wiki/display/cloudiq43/Fabric+Application+Definition+XML" target="_blank">fabric</a> and <a href="http://www.appistry.com/community/wiki/display/cloudiq43/Fabric+Archive+%28FAR%29+Definition+XML" target="_blank">far</a> application descriptors enable CloudIQ platform to distinguish between older and newer versions of the application. </p>
<p>When a fabric/far file is deployed with a version higher than the existing, CloudIQ platform ensures that the new version of the fabric/far will replace the existing version on all nodes in the cloud. </p>
<p>So if you want to deploy your updated application to Appistry CloudIQ platform, increment the version in the fabric or far application descriptor, package the app and then deploy it.</p>
<p></div>
<p>During development or build/run/test cycle, the process of manually having to update the version of the fabric/far becomes painful real quick. And heaven forbid that your forget to update the version and attempt a deploy &#8211; Appistry CloudIQ rejects the artifact with a nasty message stating that the version that you are attempting to deploy is older than the version it has currently.</p>
<p>The <font face="Courier New">cloudiq:update-far-version</font> goal alleviates the above problem by automating the update of the <font face="Courier New">version</font> value.</p>
<p><strong>Usage</strong><br />To update the version of the fabric/far application, run this goal as:
<pre class="java-codeface">
mvn cloudiq:update-far-version
</pre>
<p>Assuming you have configured the Appistry CloudIQ Maven plugin as follows in your project pom:
<pre class="xml-codeface">
&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
		&lt;groupId&gt;com.appistry.maven.plugins&lt;/groupId&gt;
		&lt;artifactId&gt;maven-cloudiq-plugin&lt;/artifactId&gt;
		&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
		&lt;configuration&gt;
			&lt;appName&gt;CreditRules_App&lt;/appName&gt;
			&lt;appFilename&gt;CreditRules_App&lt;/appFilename&gt;
			&lt;remoteSshHost&gt;192.168.5.55&lt;/remoteSshHost&gt;
			&lt;remoteSshPort&gt;22&lt;/remoteSshPort&gt;
			&lt;remoteSshUsername&gt;fabricuser&lt;/remoteSshUsername&gt;
			&lt;remoteSshPassword&gt;fabricuser&lt;/remoteSshPassword&gt;
			&lt;!--
				&lt;farVersionUpdateSkip&gt;false&lt;/farVersionUpdateSkip&gt;
				&lt;farVersion&gt;99&lt;/farVersion&gt;
			--&gt;
		&lt;/configuration&gt;
	&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
</pre>
<p>the <font face="Courier New">mvn package cloudiq:update-far-version</font> command will update (increment by 1) the version value in the fabric/far application descriptor (in this case, <font face="Courier New">CreditRules_App.xml</font>). <i>Currently the only requirement is that the version defined in the application descriptor is an integer</i>. We will talk a little more about this requirement a little later.</p>
<p><strong><i>Note</i></strong>: This goal (<font face="Courier New">cloudiq:update-far-version</font>) is part of the <font face="Courier New">cloudiq:package</font> goal which essentially performs the following:
<ol>
<li>copies the resources/scripts files (<font face="Courier New">cloudiq:copy-resources</font> goal) to a work directory,</li>
<p>
<li>updates the version of the fabric/far application descriptor (<font face="Courier New">cloudiq:update-far-version</font> goal),</li>
<p>
<li>gathers the dependent (if any) jars (<font face="Courier New">cloudiq:assemble-dependencies</font> goal), and</li>
<p>
<li>runs fabric_pkg to create the actual fabric/far artifact.</li>
<p></ol>
<p><i>99.99%</i> of the time you will run the <font face="Courier New">cloudiq:package</font> goal which as described above will update the version and package the app as a deployable CloudIQ artifact.</p>
<p><strong>Configuration</strong><br />The <font face="Courier New">cloudiq:update-far-version</font> goal does not need any configuration since all it does is read the existing version and increment it. But there are some configuration parameters around this goal that come in handy when needed.</p>
<p><font face="Courier New">farVersionUpdateSkip</font><br />Setting this parameter to true will skip the execution of the <font face="Courier New">cloudiq:update-far-version</font> goal. This comes in handy if you want to update the version by hand or using some other process. The default is <font face="Courier New">false</font> i.e. the version gets updated when either <font face="Courier New">cloudiq:package</font> goal or <font face="Courier New">cloudiq:update-far-version</font> goal is run.</p>
<p><font face="Courier New">farVersion</font><br />This parameter allows you to specify a version that will be used and hence overrides the default behavior of the <font face="Courier New">cloudiq:update-far-version</font> goal which is to increment the version by 1.<br />This parameter takes a <font face="Courier New">string</font> as it value. That&#8217;s right, a <b>String</b> rather than an integer. So you could set it to a value like &#8220;1.0&#8243; or &#8220;5.0.2&#8243;.<br />I generally use this parameter when I tag my build in my source control management (SCM) and then use the tag value as the <font face="Courier New">version</font>. Of course, the version (SCM tag) is higher than the version deployed (which generally is an older SCM tag). This helps in co-relating what the version deployed to the version tagged in SCM.</p>
<p><strong>Best Practices</strong><br />Recall, a little above I stated that one of the requirements is that the version defined in the application descriptor is an integer. But then in the <font face="Courier New">farVersion</font> property I contradicted it by saying that you could pass in a string. <br />Well, let&#8217;s clear this up. </p>
<p><i>Development environment/cloud</i><br />Generally during development, you are building from HEAD (or TRUNK or MAIN branch) of your SCM and deploying to a development cloud. And during development you frequently build, deploy and test your changes. During this time, you don&#8217;t really care what the <font face="Courier New">version</font> is of the fabric/far as long as it is greater than the existing one so you can deploy it without Appistry CloudIQ baulking at your deploy attempts. Therefore during this time the <i>&#8220;increment by 1&#8243;</i> strategy comes in handy. Hence it is a good practice to:
<ul>
<li>Set the initial version in the fabric/far application descriptor to an integer, say 1 </li>
<p>
<li>Do not specify a <font face="Courier New">farVersion</font> property</li>
<p></ul>
<p>and let the plugin do the job of updating the version every time you build.</p>
<p><i>Test or QA or Production environment/cloud</i><br />Once you are ready to deploy to a test/QA/production cloud, tag your code in SCM and use the tag as the value of the <font face="Courier New">farVersion</font> property. This way you know what version of code is deployed in your test/qa/production environments and you can reproduce those artifacts at will.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/05/11/appistry-cloudiq-maven-plugin-update-fabric-far-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appistry CloudIQ: Java bindings for CloudIQ APIs</title>
		<link>http://blogs.plexibus.com/2010/04/26/appistry-cloudiq-java-bindings-for-cloudiq-apis/</link>
		<comments>http://blogs.plexibus.com/2010/04/26/appistry-cloudiq-java-bindings-for-cloudiq-apis/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 17:42:11 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Appistry]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloudiq]]></category>
		<category><![CDATA[cloudiq apis]]></category>
		<category><![CDATA[java binding]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/04/26/appistry-cloudiq-java-bindings-for-cloudiq-apis/</guid>
		<description><![CDATA[For some time now there has been a whole flurry of development around Java bindings for CloudIQ APIs. We have also been using it on internal and client projects quite successfully. While we know there is a lot of work that still needs to be done, we figured we would share this with the community [...]]]></description>
			<content:encoded><![CDATA[<p>For some time now there has been a whole flurry of development around Java bindings for CloudIQ APIs. We have also been using it on internal and client projects quite successfully. While we know there is a lot of work that still needs to be done, we figured we would share this with the community via Google code with the intention that it will help users integrate these APIs easily in their Java apps</p>
<p>The source and jars are hosted <a href="https://code.google.com/p/cloudiq-api/" target="_blank">here</a>.</p>
<p><strong>Goals</strong><br />The Java bindings around CloudIQ APIs can be used to:</p>
<ul>
<li>manage public/private clouds (Appistry CloudIQ clouds) from within Java apps</li>
<p>
<li>deploy fabric, far and resource files to clouds </li>
<p>
<li>push / get / delete / move files to and from CloudIQ Storage and administer CloudIQ Storage workers</li>
<p></ul>
<p>
</p>
<p>See the <a href="https://code.google.com/p/cloudiq-api/wiki/FAQ" target="_blank">FAQ</a> for more usage and additional info.</p>
<p>Please use and contribute (feedback, feature request, bug fixes, etc.) to the development of these Java wrappers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/04/26/appistry-cloudiq-java-bindings-for-cloudiq-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appistry CloudIQ Maven plugin: Birth and moving forward</title>
		<link>http://blogs.plexibus.com/2010/04/21/appistry-cloudiq-maven-plugin-birth-and-moving-forward/</link>
		<comments>http://blogs.plexibus.com/2010/04/21/appistry-cloudiq-maven-plugin-birth-and-moving-forward/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 21:24:03 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Appistry]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloudiq]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[google code]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[maven-cloudiq-plugin]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/04/21/appistry-cloudiq-maven-plugin-birth-and-moving-forward/</guid>
		<description><![CDATA[I finally added some wiki pages around maven-cloudiq-plugin. And I will be continually adding to the wiki in the days to come. But I thought I would take a moment to give some background on the plugin and describe some of the goals.

Origins&#8230;
maven-cloudiq-plugin currently started off as a simple way to integrate the creation of [...]]]></description>
			<content:encoded><![CDATA[<p>I finally added some wiki pages around <a href="http://code.google.com/p/maven-cloudiq-plugin/" target="_blank">maven-cloudiq-plugin</a>. And I will be continually adding to the wiki in the days to come. But I thought I would take a moment to give some background on the plugin and describe some of the goals.</p>
<p>
<strong>Origins&#8230;</strong></p>
<p><i>maven-cloudiq-plugin</i> currently started off as a simple way to integrate the creation of <a href="http://www.appistry.com/products" target="_blank">CloudIQ</a> artifacts (fabric and far files) while building a Maven project on the Mac OS. As you may know, you create CloudIQ artifacts using <font face="Courier New"><a href="http://www.appistry.com/community/wiki/display/latest/fabric_pkg" target="_blank">fabric_pkg</a></font> tool.</p>
<p>But, currently, there is no <font face="Courier New">fabric_pkg</font> for the Mac OS X. Therefore to create a fabric or far file you end up having to do the following:<br />
</srong></p>
<ol>
<li>
SCP all your files &#8211; fabric/far resources, primary artifact (jar, war, etc.), dependent libraries, scripts, etc. &#8211; to a remote host that has Appistry CloudIQ installed
</li>
<li>
SSH to the above remote host and run <font face="Courier New">fabric_pkg</font> to create the fabric or far artifact
</li>
<li>
Deploy the fabric / far artifact to the cloud
</li>
</ol>
<p>Too <u>time-consuming</u> in my opinion! And you end up repeating these steps over and over again. <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank">DRY principle</a>, anyone?</p>
<p>Heck if you are developing (on Windows or Linux) a Java application, installation package or service that get packaged as a Fabric or Far file and are using Maven as a build tool, to create the actual fabric or far file, you have to manually run <font face="Courier New">fabric_pkg</font>. Still a <i>pain</i>.</p>
<p>Since I use Maven a heck lot, I had to eliminate some of the repeated tasks. And thus the <a href="http://code.google.com/p/maven-cloudiq-plugin/" target="_blank">maven-cloudiq-plugin</a> came forth. The primary objective of which was to integrate and make easy the building of CloudIQ artifacts while building a Maven project.</p>
<p>
<strong>Looking forward&#8230;</strong></p>
<p>Enough with the origins. What can we expect moving forward?</p>
<p>Although I won&#8217;t go into every single enhancement or new feature here (I haven&#8217;t thought about everything; that&#8217;s where you could contribute), I will list out some of the pressing issues that would greatly improve the usability of the plugin.</p>
<p>Some enhancements and features:
</p>
<ol>
<li>
Auto-increment the fabric or far version in the application descriptors by looking up the latest version running in the cloud. Also, allow for manual override by user. <i>Currently, the user has to update the application descriptors manually.</i>
</li>
<li>
Auto-creation of <a href="http://www.appistry.com/community/wiki/display/latest/Fabric+Application+Definition+XML" target="_blank">Fabric</a> and <a href="http://www.appistry.com/community/wiki/display/latest/Fabric+Archive+%28FAR%29+Definition+XML" target="_blank">Far</a> application descriptors. <i>Currently, the user has to create these application descriptors by hand.</i>
</li>
<li>
Auto-discover the appropriate CloudIQ artifact (.fabric or .far) that needs to be generated. <i>Currently, the default is fabric. This is configurable though via the <font face="Courier New">appExtension</font> parameter.</i>
</li>
<li>
Ability to deploy CloudIQ artifacts (and files) to clouds.
</li>
<li>
Ability to specify the list of dependent jars required at fabric package time. <i>Currently, the entire kitchen sink of Maven dependencies get downloaded even though only a handful of jars gets included in the fabric file</i>
</li>
<li>
Capture <i>remote</i> <font face="Courier New">fabric_pkg</font> output &amp; error stream and log it out to the standard output during the Maven build.
</li>
</ol>
<p>So, above are some features/enhancements that need working on along with unit tests.</p>
<p>
<strong>Interested enough to contribute?</strong></p>
<p>If you are interested in contributing to the enhancements, features, and bug-fixes and making the maven-cloudiq-plugin robust and easy to use, feel free to <a href="http://code.google.com/p/maven-cloudiq-plugin/source/checkout" target="_blank">clone the repository</a>, send/attach code snippets, add additional enhancement/feature requests, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/04/21/appistry-cloudiq-maven-plugin-birth-and-moving-forward/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appistry CloudIQ Maven plugin on Google Code</title>
		<link>http://blogs.plexibus.com/2010/04/20/appistry-cloudiq-maven-plugin-on-google-code/</link>
		<comments>http://blogs.plexibus.com/2010/04/20/appistry-cloudiq-maven-plugin-on-google-code/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 21:49:09 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Appistry]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloudiq]]></category>
		<category><![CDATA[fabric package]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[maven-cloudiq-plugin]]></category>
		<category><![CDATA[maven2]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/04/20/appistry-cloudiq-maven-plugin-on-google-code/</guid>
		<description><![CDATA[I finally decided to bite the bullet and publish the work-in-progress maven-cloudiq-plugin code to Google code.

Google Code and Mercurial
While I did not spend a ton of time evaluating a public project hosting provider, some of key things I was looking for in a project hosting provider was:


Must provide DVCS (distributed version control system)
Must provider some [...]]]></description>
			<content:encoded><![CDATA[<p>I finally decided to bite the bullet and publish the <i>work-in-progress</i> maven-cloudiq-plugin code to <a href="http://code.google.com/p/maven-cloudiq-plugin/" target="_blank">Google code</a>.</p>
<p>
<strong>Google Code and Mercurial</strong><br />
While I did not spend a ton of time evaluating a public project hosting provider, some of key things I was looking for in a project hosting provider was:
</p>
<ul>
<li>Must provide DVCS (distributed version control system)</li>
<li>Must provider some type of issue tracking system</li>
</ul>
<p>Although <a href="http://github.com/" target="_blank">GitHub</a> and <a href="http://bitbucket.org/" target="_blank">BitBucket</a> seemed to fit the bill, I decided to go with <a href="http://code.google.com/p/maven-cloudiq-plugin/" target="_blank">Google  code</a> since it offers <a href="http://mercurial.selenic.com/" target="_blank">Mercurial DVCS</a> (and Subversion as well). Mercurial (<font face="Courier New">hg</font>), IMHO, is faster and easier to learn than other DVCS. <i>Again, this is purely my opinion</i>. </p>
<p>Eclipse IDE has a nice <a href="http://www.javaforge.com/project/HGE" target="_blank">plugin</a> for <font face="Courier New">hg</font>. And NetBeans comes with support for <font face="Courier New">hg</font> out of the box.</p>
<p>
<strong>How to contribute</strong><br />
If you are reading this post, I would encourage you to contribute to the development of maven-cloudiq-plugin. You can do so easily by cloning the project, fixing bugs, developing new features, requesting new features, and so on.
</p>
<p>
What is the purpose of the Appistry CloudIQ Maven plugin? See <a href="http://blogs.plexibus.com/2010/04/21/appistry-cloudiq-maven-plugin-birth-and-moving-forward/">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/04/20/appistry-cloudiq-maven-plugin-on-google-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>REST-esting with cURL: File Handling</title>
		<link>http://blogs.plexibus.com/2010/04/12/rest-esting-with-curl-file-handling/</link>
		<comments>http://blogs.plexibus.com/2010/04/12/rest-esting-with-curl-file-handling/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 18:22:19 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Appistry]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[GET file]]></category>
		<category><![CDATA[headers]]></category>
		<category><![CDATA[PUT]]></category>
		<category><![CDATA[PUT file]]></category>
		<category><![CDATA[PUT files]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[testing REST applications]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/04/12/rest-esting-with-curl-file-handling/</guid>
		<description><![CDATA[The preview of CloudIQ Storage brings Amazon S3-like functionality to Managed Service Providers, organizations, and businesses. It opens up new possibilities with distributed, reliable storage of data and and importantly, computational storage. 

CloudIQ Storage exposes a RESTful interface that clients can use to store and retrieve files. Using cURL you can be on your way [...]]]></description>
			<content:encoded><![CDATA[<p>The preview of <a href="http://www.appistry.com/products/cloud-iq-storage" target="_blank">CloudIQ Storage</a> brings Amazon S3-like functionality to Managed Service Providers, organizations, and businesses. It opens up new possibilities with distributed, reliable storage of data and and importantly, <a href="http://www.appistry.com/products/cloud-iq-storage" target="_blank">computational storage</a>. </p>
<p>
CloudIQ Storage exposes a RESTful interface that clients can use to store and retrieve files. Using <font face="Courier New">cURL</font> you can be on your way to PUTing and GETing files to CloudIQ Storage or any RESTful server that accepts files. This post is a follow-up to the REST-esting with cURL.
</p>
<p>
<strong>The following are basic curl commands to test PUT/GET of files</strong>
</p>
<p>
<strong>PUT a file</strong></p>
<pre class="java-codeface">
curl -i -u fabric-admin:fabric-admin -X PUT -T "test" http://192.168.0.165:16088/files/test
</pre>
<p>where,<br />
i &#8211; show response headers<br />
u &#8211; server authentication information, in the form of <font face="Courier New">user:password</font><br />
X &#8211; pass a HTTP method name<br />
T &#8211; name of file to upload<br />
The above command <strong>PUT</strong>s <font face="Courier New">test</font> file.</p>
<p>Optionally, you can leave out the file part in the URL, ending the URL with a trailing slash. <font face="Courier New">cURL</font> will append the local file name in this case. Note that you must use a trailing slash (/) on the last directory to tell <font face="Courier New">cURL</font> to use the file name as specified in the <font face="Courier New">-T</font> argument or <font face="Courier New">cURL</font> will use your last directory name as the remote file name to use.</p>
<pre class="java-codeface">
curl -i -u fabric-admin:fabric-admin -X PUT -T "test" http://192.168.0.165:16088/files/
</pre>
<p>The above command transfers <font face="Courier New">test</font> file to <font face="Courier New">http://192.168.0.165:16088/files/</font>.</p>
<p>
<strong>PUT multiple files in single command</strong> </p>
<p>You can PUT multiple files via a single command by enclosing them within braces as shown below:</p>
<pre class="java-codeface">
curl -i -u fabric-admin:fabric-admin -X PUT -T "{test4,test5}" http://192.168.0.165:16088/files/
</pre>
<p>The above command transfers files <font face="Courier New">test4</font> and <font face="Courier New">test5</font> to <font face="Courier New">http://192.168.0.165:16088/files/</font>.</p>
<p>If you have many files with the almost the same name but differentiated from each other by a number (say, test4, test5, test6, test7), you could use an alternative to the above command to transfer all these files in one cURL command:</p>
<pre class="java-codeface">
curl -i -u fabric-admin:fabric-admin -X PUT -T "test[4-6]" http://192.168.0.165:16088/files/
</pre>
</p>
<p>
<strong>GET a file</strong></p>
<pre class="java-codeface">
curl -u fabric-admin:fabric-admin -O http://192.168.0.165:16088/files/test4
</pre>
<p>where,<br />
O &#8211; use the remote file name for the local file<br />
The above command <strong>GET</strong>s the contents of file <font face="Courier New">test4</font> from remote location <font face="Courier New">http://192.168.0.165:16088/files/test4</font> and writes the output to local file named like the remote file (in this case, <font face="Courier New">test4</font>).</p>
<p>If you want to store the contents in a local file with a name different from the remote file name, you could use the <font face="Courier New">-o <file_name></font> option:</p>
<pre class="java-codeface">
curl -u fabric-admin:fabric-admin -o test10 http://192.168.0.165:16088/files/test4
</pre>
<p>The above command <strong>GET</strong>s the contents of file <font face="Courier New">test4</font> from remote location <font face="Courier New">http://192.168.0.165:16088/files/test4</font> and writes the output to local file <font face="Courier New">test10</font>.</p>
<p>
<strong>Get HEADers</strong><br />
There are times when you just need the headers for a file. You could retrieve the headers for a file by running the following command:
</p>
<pre class="java-codeface">
curl -I -u fabric-admin:fabric-admin http://192.168.0.165:16088/files/test4
</pre>
<p>where,<br />
I &#8211; fetches the HTTP headers only<br />
The above command will display the HTTP headers returned by <font face="Courier New">http://192.168.0.165:16088/files/test4</font></p>
<p>If you want to capture the file contents and the HTTP headers at the same time, you can use the <font face="Courier New">-D <dump-headers-file></font> option:</p>
<pre class="java-codeface">
curl -u fabric-admin:fabric-admin -D "test4-headers" -O http://192.168.0.165:16088/files/test4
</pre>
<p>The above command <strong>GET</strong>s the contents of file <font face="Courier New">test4</font> from remote location <font face="Courier New">http://192.168.0.165:16088/files/test4</font> and at the same time outputs the HTTP headers to file <font face="Courier New">test4-headers</font></p>
<p>For more examples using cURL for testing web services, see <a href="http://blogs.plexibus.com/2009/01/15/rest-esting-with-curl/" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/04/12/rest-esting-with-curl-file-handling/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Running multiple Eclipse editor instances on Mac OS X</title>
		<link>http://blogs.plexibus.com/2010/01/05/running-multiple-eclipse-editor-instances-on-mac-os-x/</link>
		<comments>http://blogs.plexibus.com/2010/01/05/running-multiple-eclipse-editor-instances-on-mac-os-x/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 19:22:32 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/2010/01/05/running-multiple-eclipse-editor-instances-on-mac-os-x/</guid>
		<description><![CDATA[I recently started using a MacBook Pro and it is turning into my primary development machine. And in the process I&#8217;m learning more about Mac OS X every day. For instance, when I first started using Eclipse on the Mac, I could not figure out how to start multiple instances of Eclipse. 
I generally categorize [...]]]></description>
			<content:encoded><![CDATA[<p>I recently started using a MacBook Pro and it is turning into my primary development machine. And in the process I&#8217;m learning more about Mac OS X every day. For instance, when I first started using Eclipse on the Mac, I could not figure out how to start multiple instances of Eclipse. </p>
<p>I generally categorize my projects into multiple Eclipse workspaces and at times like having them open at the same time. In Windows/Linux OSes, this is a no-brainer &#8211; just click on the shortcut and this will start up a new process. But in Mac OS X, clicking on the Eclipse launcher in the taskbar just brought the existing Eclipse process into the foreground.</p>
<p>Finally I found out that I could accomplish what I wanted with the <font face="Courier New">open</font> command. Add it to a script as shown below and bingo, starting up multiple Eclipse workspaces is a piece of cake.</p>
<pre class="java-codeface">
#!/bin/bash

ECLIPSE_HOME=~/tools/editors/eclipse35-JEE-x86_64/eclipse
open -n $ECLIPSE_HOME/Eclipse.App
</pre>
<p>
</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=2cba6ac9-bbf6-88be-800e-4fe29fb8cc8c" /></div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2010/01/05/running-multiple-eclipse-editor-instances-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Community One East and Cloud Application Platforms</title>
		<link>http://blogs.plexibus.com/2009/03/19/community-one-east-and-cloud-application-platforms/</link>
		<comments>http://blogs.plexibus.com/2009/03/19/community-one-east-and-cloud-application-platforms/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 21:18:56 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[appistry cloud platform]]></category>
		<category><![CDATA[community one]]></category>
		<category><![CDATA[community one east]]></category>
		<category><![CDATA[plexibus]]></category>
		<category><![CDATA[sun cloud]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/?p=90</guid>
		<description><![CDATA[First of all a big thank you to all who made it for my talk at Community One East, NY. It was on &#8220;Cloud Computing for Enterprise Software Developers&#8221;. After the talk I had a chance to network with some really smart people and talk about Appistry&#8217;s CloudIQ Platform and Sun Cloud. 
Pete Koomen, the [...]]]></description>
			<content:encoded><![CDATA[<p>First of all a big thank you to all who made it for my talk at Community One East, NY. It was on &#8220;Cloud Computing for Enterprise Software Developers&#8221;. After the talk I had a chance to network with some really smart people and talk about <a href="http://www.appistry.com/products">Appistry&#8217;s CloudIQ Platform</a> and Sun Cloud. </p>
<p>Pete Koomen, the product manager for <a href="http://code.google.com/appengine">Google App Engine</a> showed interested in the CloudIQ Engine piece of CloudIQ especially given that Goople App Engine is one of the key players in the Cloud Platform area &#8211; Hosted Cloud Platforms or PaaS, to be precise.<br />
Some folks were interested in whether CloudIQ supports scaling out .NET components. While some asked if C, C++ code was supported. <i>Yes</i> and <i>Yes</i>.</p>
<p>I&#8217;m glad I used <a href="http://www.virtualbox.org/">Sun&#8217;s VirtualBox</a> to provision VMs installed with only CloudIQ and the sample application for the demo. I call it the <i>cloud-in-a-box</i>. Also it doesn&#8217;t hurt when VirtualBox is part of Sun Cloud.<br />
Anyway, one of the slides in the presentation was that </p>
<blockquote><p>CloudIQ complements Virtualization</p></blockquote>
<p>And here is how you can do this with VirtualBox:</p>
<ol>
<li>Use VirtualBox (or Sun Cloud when it is released this summer) to provision VMs with an OS and CloudIQ installed </li>
<li>Use <a href="http://www.appistry.com/products/cloud-iq-manager">CloudIQ Manager</a> to provision and manage applications and middleware such as Tomcat, GlassFish, JBoss, etc. </li>
<li>And once you are comfortable with this setup, deploy (&#8221;touchless&#8221; or otherwise) your compute intensive code to <a href="http://www.appistry.com/products/cloud-iq-engine">CloudIQ Engine</a> to achieve linear scalability and reliability at the component level </li>
</ol>
<p>I will blog about my experience with VirtualBox and running Appistry CloudIQ platform on Ubuntu VMs soon. And when Sun&#8217;s cloud offering is released, I will tweak it to use Sun&#8217;s Cloud APIs. But if you cannot wait until then, sign up for the <a href="http://www.appistry.com/community/go/beta-program">Appistry CloudIQ 4.0 beta program</a> or download the community edition of <b>Appistry CloudIQ</b> from <a href="http://www.appistry.com/community/">here</a> and <i>start creating your very own cloud-in-a-box now!</i></p>
<p>Back to the session, I do wish I had time for Q&#038;A. My <a href="http://www.appistry.com/blogs/marksu">boss</a> had warned me about that when he gave me feedback about my presentation slides. What I&#8217;m thinking is that people must have been hungry since my session was just before lunch-break and the guy waving the &#8220;time-remaining&#8221; sign pitied the crowd and decided to cut my session short by 5 minutes. <i>Kidding!</i></p>
<p>Anyway great crowd, good times.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2009/03/19/community-one-east-and-cloud-application-platforms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Community One East, Project Kenai and extensions to support Cloud Application Platforms?</title>
		<link>http://blogs.plexibus.com/2009/03/19/community-one-east-project-kenai-and-extensions-to-support-cloud-application-platforms/</link>
		<comments>http://blogs.plexibus.com/2009/03/19/community-one-east-project-kenai-and-extensions-to-support-cloud-application-platforms/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 20:05:52 +0000</pubDate>
		<dc:creator>roshanallan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[appistry cloud platform]]></category>
		<category><![CDATA[cloudiq]]></category>
		<category><![CDATA[plexibus]]></category>
		<category><![CDATA[project kenai]]></category>
		<category><![CDATA[sun cloud]]></category>

		<guid isPermaLink="false">http://blogs.plexibus.com/?p=84</guid>
		<description><![CDATA[As mentioned in my earlier post, Project Kenai is the home for Sun&#8217;s Open Cloud APIs which is a single point of management for the Sun Cloud. Sun is releasing these APIs under a open source license. Sun is looking forward to receiving feedback on these APIs so as to improve it and make it [...]]]></description>
			<content:encoded><![CDATA[<p>As mentioned in my earlier <a href="http://blogs.plexibus.com/2009/03/19/community-one-east-and-sun-cloud/">post</a>, <a href="http://kenai.com/">Project Kenai</a> is the home for Sun&#8217;s Open Cloud APIs which is a single point of management for the Sun Cloud. Sun is releasing these APIs under a open source license. Sun is looking forward to receiving feedback on these APIs so as to improve it and make it as standard.</p>
<p>I attended the Birds-of-a-feather talk hosted by <a href="http://www.tbray.org/ongoing/">Tim Bray</a>, <a href="http://blogs.sun.com/craigmcc/">Craig McClanahan</a> and Lew Tucker where they presented the APIs and answered questions. Both Tim and Craig and their team have done an excellent job of coming up with these APIs that adhere so well to the REST principles. Kudos! Tim has blogged about the Sun Cloud APIs <a href="http://www.tbray.org/ongoing/When/200x/2009/03/16/Sun-Cloud">here</a>. And so has Craig <a href="http://blogs.sun.com/craigmcc/entry/sun_shining_on_the_cloud">here</a>.</p>
<p>During the session, one of the questions was</p>
<blockquote><p>how do you upgrade middleware or applications or framework libraries (say, Hiberate) used by applications that are deployed in the cloud?</p></blockquote>
<p><b>Answer:</b> Use Cloud Application Platforms such as <a href="http://www.appistry.com/">Appistry&#8217;s</a> <a href="http://www.appistry.com/products/cloud-iq-manager">CloudIQ</a>.</p>
<p>In my humble opinion, it would be great if the folks at Project Kenai designed the APIs with extensibility in mind to support Cloud Application Platform APIs such as Appistry&#8217;s CloudIQ APIs (which are also REST based) to deploy, install, update, uninstall applications and middleware. I say this because infrastructure level APIs are limiting. </p>
<p>With infrastructure level APIs you could create a VM, clone it with application servers/applications installed and go live. But what happens when you want to deploy a new version of say, <a href="https://glassfish.dev.java.net/">GlassFish</a> (perhaps with some critical updates) to your existing production cloud? Now suddenly you are back to home-grown scripting or creating additional VMs with the new updates. Now take it to the next level where you have to create and manage these scripts for various OS&#8217;s. <em>Ewwwwww!</em></p>
<p>The solution is to use CloudIQ which abstracts out the virtual machines. Using CloudIQ you could easily deploy the new version of GlassFish to your existing production cloud without resorting to crazy, complex scripts. Save the time from creating additional VMs for every update and spend that time focusing on your business!</p>
<p><b>Another great example to drive home the importance of CloudIQ in the Cloud Computing arena:</b><br />
Assume you are using Hibernate 2.x in a couple of your several web applications running on Tomcat in your production cloud. And now you want to upgrade to the 3.x version of Hibernate for only one of your web applications. So how would you do this easily using infrastructure? </p>
<ol>
<li>Clone a production VM</li>
<li>Replace Hibernate 2.x with 3.x jars in the target web application</li>
<li>Clone that VM</li>
<li>Deploy the new VMs to the production cloud and delete the existing VMs</li>
</ol>
<p><em>Ewwwwwwww!</em></p>
<p>Using CloudIQ, you could do this in half the steps and so fast that it will make your <del datetime="2009-03-19T21:20:10+00:00">VMs</del> head spin.</p>
<ol>
<li>Replace Hibernate 2.x with 3.x jars in the target web application</li>
<li>Deploy the web application using CloudIQ Manager.</li>
</ol>
<p><em>Sweeeeeeeet!</em></p>
<p>The point I&#8217;m trying to make is that CloudIQ <i>virtualizes</i> virtualization <img src='http://blogs.plexibus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   It gives you more fine-grained control or application level control.</p>
<p>Therefore it would be great to have Project Kenai allow for extensibility to support popular Cloud Application Platforms APIs.</p>
<p><em>What do you think?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.plexibus.com/2009/03/19/community-one-east-project-kenai-and-extensions-to-support-cloud-application-platforms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.487 seconds -->
