<?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>Trisummit Technologies &#187; Systems Administration</title>
	<atom:link href="http://trisummit.net/category/systems-administration/feed/" rel="self" type="application/rss+xml" />
	<link>http://trisummit.net</link>
	<description></description>
	<lastBuildDate>Fri, 23 Dec 2011 20:45:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to Force URLs to be Lowercase</title>
		<link>http://trisummit.net/2010/08/12/how-to-force-urls-to-be-lowercase/</link>
		<comments>http://trisummit.net/2010/08/12/how-to-force-urls-to-be-lowercase/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 15:00:48 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=433</guid>
		<description><![CDATA[First off, I do not recommend doing this.  You may have undesireable effects such as images that use upper and lower case names all of a sudden no longer displaying because they must be lower case to work.
The general concensus among members of the SEO community seem to be that there is really no [...]]]></description>
			<content:encoded><![CDATA[<p>First off, I do not recommend doing this.  You may have undesireable effects such as images that use upper and lower case names all of a sudden no longer displaying because they must be lower case to work.</p>
<p>The general concensus among members of the SEO community seem to be that there is really no reason to do this.  There is little to no SEO benefit.  The user experience really is not effected by this.  Nevertheless, as a systems administrator, you may be asked to make this happen &#8211; just in case there is a benefit.</p>
<p>My solution here works on the CentOS Linux operating system.  I have not tested it elsewhere.  It assumes mod_rewrite is installed which by default it is.</p>
<p>You cannot do this from the .htaccess file.  It can only be done by making a change in the httpd.conf file.  At that, it is an entry in the host section for each individual site on your server.</p>
<p>Here is the change.</p>
<p><pre><code>
&lt;VirtualHost an_ip_address:80&gt;
&nbsp;&nbsp;A bunch of virtual host information needed for the site.

&nbsp;&nbsp;RewriteEngine on
&nbsp;&nbsp;RewriteMap lowercase int:tolower
&nbsp;&nbsp;RewriteCond $1 [A-Z]
&nbsp;&nbsp;RewriteRule ^/(.*)$ /${lowercase:$1} [R=301,L]

&lt;/VirtualHost&gt;
</code></pre></p>
<p>I found the solution in this discussion thread after striking out from others &#8211;  http://www.daniweb.com/forums/thread46647.html</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/08/12/how-to-force-urls-to-be-lowercase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connecting Jive SBS to an SSL Protected Webservice</title>
		<link>http://trisummit.net/2010/08/09/connecting-jive-sbs-to-an-ssl-protected-webservice/</link>
		<comments>http://trisummit.net/2010/08/09/connecting-jive-sbs-to-an-ssl-protected-webservice/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 21:11:29 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=427</guid>
		<description><![CDATA[This was the task.  We are hooking up Jive SBS to an SSO server for authentication and I am writing a plugin to handle this task.  In the plugin, I come to the part of the code where I need to communicate with an external webservice.  In order for java to communicate [...]]]></description>
			<content:encoded><![CDATA[<p>This was the task.  We are hooking up Jive SBS to an SSO server for authentication and I am writing a plugin to handle this task.  In the plugin, I come to the part of the code where I need to communicate with an external webservice.  In order for java to communicate with this webservice, the security certificate must be part of the keystore of the jre and the keystore must be recognized by the application.  By default, Jive SBS does not have an assigned keystore.  </p>
<p>Here is how I resolved it.</p>
<p>1.  Download the security certificate of the webservice using a browser.  You should be able to save the certificate as a .cer or .crt file name.  Then transfer the certificate to your Linux server that is running Jive SBS.  Save this file in a unique place we will call &#8220;somedirectory&#8221;.  If the step of downloading a certificate is new to you, from IE, go to File -> Properties -> Certificates -> Details -> Copy to File.</p>
<p>2.  Run these commands from the Linux console, modified to your environment.</p>
<p>/usr/local/jive/java/bin/keytool -import -alias somename -file /usr/local/jive/etc/httpd/ssl/somename.cer -keystore /usr/local/jive/java/jre/lib/security/cacerts</p>
<p>When it asks for the password, use the default of &#8211; changeit</p>
<p>3.  Test getting a connection using the SSLPoke class &#8211; described below.</p>
<p>4.  Add the truststore into the setenv file located at /usr/local/jive/applications/sbs/bin/setenv.<br />
export JAVA_OPTS=&#8221;\<br />
-XX:+UseParNewGC \<br />
-XX:+UseConcMarkSweepGC \<br />
-XX:CMSInitiatingOccupancyFraction=75 \<br />
-XX:+CMSParallelRemarkEnabled \<br />
-XX:+CMSScavengeBeforeRemark \<br />
-XX:CMSMaxAbortablePrecleanTime=1000 \<br />
-XX:+PrintGCDetails \<br />
-XX:+PrintGCTimeStamps \<br />
-XX:+PrintClassHistogram \<br />
-Djava.awt.headless=true \<br />
-Djava.net.preferIPv4Stack=true \<br />
<strong>-Djavax.net.ssl.trustStore=/somedirectory/keystore.jks \</strong><br />
-Xloggc:${JIVE_LOGS}/${JIVE_NAME}-gc.log&#8221;</p>
<p>Another command I found useful in troubleshooting this issue was as follows:<br />
ps -ef | grep java</p>
<p><strong>Using SSLPoke</strong><br />
I actually picked this up from an attlasian web page so I am not the original author.  But here is the source code.</p>
<p><pre><code>
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

/** Establish a SSL connection to a host and port, writes a byte and
 * prints the response. See
 * http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services
 */
public class SSLPoke {
&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {
&nbsp;&nbsp;&nbsp;&nbsp;if (args.length != 2) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Usage: &quot;+SSLPoke.class.getName()+&quot; &lt;host&gt; &lt;port&gt;&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(1);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;try {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(args[0], Integer.parseInt(args[1]));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream in = sslsocket.getInputStream();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream out = sslsocket.getOutputStream();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Write a test byte to get a reaction :)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(1);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (in.available() &gt; 0) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(in.read());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Successfully connected&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;} catch (Exception exception) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exception.printStackTrace();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
}
</code></pre></p>
<p>Compile this simple class and test your connection with this expected behavior:</p>
<p>works<br />
java -Djavax.net.ssl.trustStore=/somedirectory/keystore.jks SSLPoke webserviceurl.com 443<br />
Successfully Connected</p>
<p>Does not work<br />
java SSLPoke webserviceurl.com 443</p>
<p>javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bui                                                                                                                  lding failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find vali                                                                                                                  d certification path to requested target<br />
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)<br />
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1623)<br />
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:198)<br />
        at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:192)<br />
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.j                                                                                                                  ava:1074)<br />
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java                                                                                                                  :128)<br />
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:529)<br />
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:465)<br />
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)<br />
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.j                                                                                                                  ava:1120)<br />
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)<br />
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)<br />
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:73)<br />
        at SSLPoke.main(SSLPoke.java:23)<br />
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security                                                                                                                  .provider.certpath.SunCertPathBuilderException: unable to find valid certification path to re                                                                                                                  quested target<br />
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:294)<br />
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:200)<br />
        at sun.security.validator.Validator.validate(Validator.java:218)<br />
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.ja                                                                                                                  va:126)<br />
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustMana                                                                                                                  gerImpl.java:209)<br />
        at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustMana                                                                                                                  gerImpl.java:249)<br />
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.j                                                                                                                  ava:1053)<br />
        &#8230; 9 more<br />
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid c                                                                                                                  ertification path to requested target<br />
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.j                                                                                                                  ava:174)<br />
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)<br />
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:289)<br />
        &#8230; 15 more</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/08/09/connecting-jive-sbs-to-an-ssl-protected-webservice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crowd Authentication Server Review</title>
		<link>http://trisummit.net/2010/04/27/crowd-authentication-server-review/</link>
		<comments>http://trisummit.net/2010/04/27/crowd-authentication-server-review/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 02:29:10 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=393</guid>
		<description><![CDATA[I started working with the Crowd application for single sign-on and identity management about four months ago.  I have been quite impressed with it.  The application allows your applications to use a centralized repository for user authentication.  Additionally, it provides an OpenID service for your same users as well.
The Crowd application is [...]]]></description>
			<content:encoded><![CDATA[<p>I started working with the Crowd application for single sign-on and identity management about four months ago.  I have been quite impressed with it.  The application allows your applications to use a centralized repository for user authentication.  Additionally, it provides an OpenID service for your same users as well.</p>
<p>The Crowd application is a java based program which runs on Tomcat.  It is best installed by downloading the stand-alone application from Atlassian and installing it on a dedicated server.  If you do plan to run other java applications on this same server, then you should use a separate instance of Tomcat. </p>
<p>Managing users is rather simple.  It gives you an out of the box directory for you to use as the listing of your users.  It also gives you the ability to integrate with your Active Directory.  And best of all, it allows you to manage the users of your application by allowing the application to draw from the users of the Active Directory and the users of your own directories.  So now you can give contractors access to the applications without adding them to the AD.</p>
<p>Crowd has been well developed to easily integrate with your Java applications that use well known standards such as Acegi.  Getting the other Atlassian products to use Crowd takes about 20 minutes each (if that long).  Set up the application in Crowd and establish the user base and establish the groups used by the application.  Next, go to the application, add the version compatible jar file, make some minor modifications in a couple of xml files and you are good to go &#8211; actual instructions are on the Atlassian site. </p>
<p>I have never seen an implementation of single sign-on go so easily as it does with Jira, Confluence, Fisheye, and Bamboo.  Even getting Subversion over Apache to work with Crowd was not a difficult task.  Crowd integration with all of these applications is well documented.  The next application I need to try this on will be Jive SBS &#8211; this integraton is not well documented except I do know that Jive does make use of Acegi.  I am hoping this will be easy.</p>
<p>Lastly, Crowd will work as an OpenID server for you.  If you are not familiar with OpenID, it is a standard that many applications have adopted.  By logging onto the Crowd OpenID application, you can get a URL that OpenID compliant applications will accept for authentication.  When you drop the url into the third party application the first time, it will send notification to your Crowd server for you to allow Crowd to acknowledge the third party application as a valid application of yours for authentication.  From that time forward, you no longer need to remember your password -just drop in the URL and you are logged in.  I tested the functionality on the Teligent community application and it worked beautifully.</p>
<p>One current weakness is the lack of documentation of getting dotNet applications to work with Crowd.</p>
<p>I really like this Crowd Application.  I intend to continue working with it for some time now.</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/04/27/crowd-authentication-server-review/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>VPSLand Review</title>
		<link>http://trisummit.net/2010/04/22/vpsland-review/</link>
		<comments>http://trisummit.net/2010/04/22/vpsland-review/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 03:15:05 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=385</guid>
		<description><![CDATA[I was in need of some external facing virtualized servers and ran across the website at http://vpsland.com.  I was skeptical at first as the specs on the website said nothing about them running on ESX servers.  But I decided to give it a try.  I tried both Fedora virtualized servers and a [...]]]></description>
			<content:encoded><![CDATA[<p>I was in need of some external facing virtualized servers and ran across the website at http://vpsland.com.  I was skeptical at first as the specs on the website said nothing about them running on ESX servers.  But I decided to give it a try.  I tried both Fedora virtualized servers and a CentOS virtualized server.</p>
<p><strong>Performance &#8211; Fedora</strong><br />
My first concern came when I tried to log on to my first server which was on the Fedora operating system.  There seems to be some pretty serious latency between the time you get your user prompt and the time it takes for the password prompt to show up and let you in.  This problem also translated into problems when trying to ftp files to the server. The FTP client would often time out while simply making the initial connection.  Once the connection is made the file transfers worked just fine.</p>
<p>The second issue I had with the fedora server had to do with running PHP / MySQL applications such as OSCommerce.  While static web pages and dynamic web pages from the shopping cart displayed well, when someone tried to add information to the database, it was extremely slow &#8211; even unusable.  My first customer to purchase on my shopping cart while hosted on this server ended up being listed in the shopping cart as having three purchases.  I also discovered that as one uses any php to database operations, the application would seemingly hang for about 30 seconds prior to completing the processing of the data and taking you to the next page.</p>
<p>On the positive side, I had some java based applications sitting on Tomcat that were not serious database consumers.  These applications worked acceptably well in this environment as these apps tended to be more memory intensive and less dependent on processor / disk IO / database performance.</p>
<p><strong>Performance &#8211; CentOS</strong><br />
I tried using one of the CentOS servers.  This server seemed to work better.  The logon latency was much improved.  I did not test my php applications on this CentOS server.  I only tested my java apps with one instance of Tomcat running.  This particular application was Fisheye &#8211; an Atlassian product.  This application works well on this virtual machine.  It is memory intensive and comes close to using the entire 1GB of memory that is allocated to this server.</p>
<p><strong>Customer Service:</strong><br />
In spite of them not giving out thier phone number, I found thier customer support to actually be quite effective.  It is not good for 24/7 support, but if you are okay with submitting a trouble ticket and waiting about 4 hours, they appear to be fairly reliable.</p>
<p><strong>Conclusion:</strong><br />
In the end, my review is mixed.  I continue to be a customer with them as I have the Fisheye application running on the CentOS server.  The rest of my applications I got back onto a dedicated server where they seem to work much better.  If you decide to try thier services, I recommend starting with the CentOS flavor of a virtual server and not use the Fedora servers.</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/04/22/vpsland-review/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Running Multiple Instances of Tomcat</title>
		<link>http://trisummit.net/2010/04/19/running-multiple-instances-of-tomcat/</link>
		<comments>http://trisummit.net/2010/04/19/running-multiple-instances-of-tomcat/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 04:02:22 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=361</guid>
		<description><![CDATA[There are times when you need to run multiple instances of Tomcat on the same Linux based server.  My need came as I tried to run Jive Clearspace, Jira, and Bamboo all on the same instance of Tomcat in different directories.  The first thing I noticed was that the logs were cluttered with [...]]]></description>
			<content:encoded><![CDATA[<p>There are times when you need to run multiple instances of Tomcat on the same Linux based server.  My need came as I tried to run Jive Clearspace, Jira, and Bamboo all on the same instance of Tomcat in different directories.  The first thing I noticed was that the logs were cluttered with all sorts of conflicting classes.  The next thing I noticed was that the reporting graphs in Bamboo were not displaying.  As I took my issues to Atlassian, they informed me that Bamboo and Jira have conflicting ognl files and cannot be run to on the same instance of Tomcat.  Hence, I was in the situation where I needed to run separate instances of Tomcat to get the applications to work.</p>
<p>Don&#8217;t be overwhelmed.  Once you have gotten one Tomcat instance to work with Apache, the second (and third for that matter) is no big deal.</p>
<p>By the way, this is all being run on a dedicated CentOS Linux server sitting in the racks of Godaddy.</p>
<p><strong>Download Tomcat</strong><br />
Go ahead and download Apache Tomcat and store them in separate locations.  For example: </p>
<p>/var/tomcat/jira<br />
/var/tomcat/bamboo<br />
/var/tomcat/clearspace</p>
<p>Go ahead and download Tomcat into each of the directories:</p>
<p>wget http://download.nextag.com/apache/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz (or whatever the latest version is at the time)</p>
<p><strong>Deconflict the Ports</strong><br />
There are three ports which need to be deconflicted which are all configured in the server.xml file in the conf directory for each Tomcat installation.</p>
<p>1.  The shutdown port &#8211; default 8005<br />
2.  The connector port &#8211; default 8080<br />
3.  The AJP port &#8211; default &#8211; default 8009</p>
<p>So you might as well designate the first to use the default ports, and the second to use port 8006, 8081, and 8010 (and the third using port 8007, 8082, and 8011). Simply change those numbers in the server.xml file.</p>
<p><pre><code>
&lt;Server port=&quot;8005&quot; shutdown=&quot;SHUTDOWN&quot;&gt; 

&lt;Connector port=&quot;8080&quot; protocol=&quot;HTTP/1.1&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout=&quot;20000&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort=&quot;8443&quot; /&gt;

&lt;Connector port=&quot;8009&quot; protocol=&quot;AJP/1.3&quot; redirectPort=&quot;8443&quot; /&gt;
</code></pre></p>
<p>It is a good idea at this time to make certain that each of these instances can be started up and the default page viewed one at a time.  Start the first one, test it, and then stop it.  This is done by going to the bin directory and invoking ./startup.sh and ./shutdown.sh.</p>
<p>To test each one, use the appropriate command<br />
wget http://localhost:8080<br />
wget http://localhost:8081<br />
wget http://localhost:8082 </p>
<p>and simply see that each command downloads the index.jsp page with the default Tomcat page written to file.</p>
<p>Now make certain that stop each instance of Tomcat before starting and testing the next one &#8211; otherwise, you will have conflicting CATALINA_HOME variable values which should break things.</p>
<p><strong>Establish Ownership and Create Startup Files</strong><br />
What originally concerned me about running multiple instances of Tomcat was that each instance needs a unique CATALINA_HOME environment / user variable.  It use to be that you were required to establish the CATALINA_HOME as a variable in order to start the application.  Today, if you do not have it defined, the application will assign it automatically during the startup process.  So now you need to create a startup script which assigns the application to be automatically started by its own user.</p>
<p>In this example, create three users on your Linux operating system &#8211; clearspace, jira and bamboo.  Go ahead and assign these three users a password.  Then run the chown -Rf command to assign ownership of each application and all of the files to the appropriate user.  Go to the</p>
<p>/var/tomcat</p>
<p>directory and call from the root user </p>
<p>chown -Rf bambo.bamboo bamboo/<br />
chown -Rf jira.jira jira/<br />
chown -Rf clearspace.clearspace clearspace/</p>
<p>Now create a startup script in the /etc/init.d directory for each of these.  This particular script works for me. </p>
<p>Notice the /bin/su bamboo command.  Replace bamboo with the appropriate user name which specifies the user you want to run the application as.</p>
<p>vi bamboo</p>
<blockquote><p>
#!/bin/sh<br />
#<br />
# Tomcat Server<br />
#<br />
# chkconfig: 345 96 30<br />
# description: Java servlet container</p>
<p>TOMCAT_START=/var/tomcat/bamboo/apache-tomcat-6.0.26/bin/startup.sh<br />
TOMCAT_STOP=/var/tomcat/bamboo/apache-tomcat-6.0.26/bin/shutdown.sh</p>
<p>start()<br />
{<br />
        if [ -x ${TOMCAT_START} ]; then<br />
                echo &#8220;Starting bamboo server&#8230;&#8221;<br />
                /bin/su bamboo $TOMCAT_START &#038;<br />
        else<br />
                echo &#8220;Cannot start bamboo server&#8221;<br />
        fi<br />
}</p>
<p>stop()<br />
{<br />
        if [ -x ${TOMCAT_STOP} ]; then<br />
                echo &#8220;Stopping bamboo server&#8230;&#8221;<br />
                /bin/su bamboo $TOMCAT_STOP &#038;<br />
        else<br />
                echo &#8220;Cannot stop bamboo server&#8221;<br />
        fi<br />
}</p>
<p>restart()<br />
{<br />
        stop<br />
        sleep 10<br />
        start<br />
}</p>
<p>status()<br />
{<br />
        echo &#8220;No status available for tomcat server&#8221;<br />
}</p>
<p>case &#8220;$1&#8243; in<br />
&#8217;start&#8217;)<br />
        start<br />
        ;;<br />
&#8217;stop&#8217;)<br />
        stop<br />
        ;;<br />
&#8216;restart&#8217;)<br />
        restart<br />
        ;;<br />
&#8217;status&#8217;)<br />
        status<br />
        ;;<br />
*)<br />
echo &#8220;Please supply an argument [start|stop|restart]&#8221;<br />
esac
</p></blockquote>
<p>Do the same for all three applications.</p>
<p>After creating the unique files for each application, you will want to call the chkconfig command to establish these files to autostart when the server gets a physical reboot.  While this is an optional step, it is necessary if you want the applications to automatically come up when the server gets rebooted.  You can choose to do this later once you have completed all troubleshooting.</p>
<p>Now you can start up each instance of Tomcat logged in as the root user by starting each Tomcat instance as a service.</p>
<p>cd /etc/init.d<br />
./bamboo start<br />
./clearspace start<br />
./jira start</p>
<p>Now check that all three are running by either using a browser or the wget command from the command prompt.  Using the command prompt is the most reliable as a firewall my be blocking your browser from accessing the non-standard ports.</p>
<p>wget http://localhost:8080<br />
wget http://localhost:8081<br />
wget http://localhost:8082 </p>
<p>You should see that you get the default Tomcat page from each of these wget calls just like you did before.</p>
<p><strong>Get them working with Apache</strong><br />
Now that each instance of Tomcat is running, you need to get all three of them to work with Apache.  Not intending to replace the Apache documentation, here is what you need to do in a nutshell.</p>
<p>Download the <a href="http://apache.cs.utah.edu/tomcat/tomcat-connectors/jk/binaries/" target="_blank">mod_jk libraries</a>, place it into the modules directory (/etc/httpd/modules), rename it, and make it executable.</p>
<p>cd /etc/httpd/modules<br />
wget http://apache.cs.utah.edu/tomcat/tomcat-connectors/jk/binaries/mod_jk-1.2.30-httpd-2.0.53.so (this may be different)<br />
mv mod_jk-1.2.30-httpd-2.0.53.so mod_jk.so<br />
chmod 755 mod_jk.so</p>
<p>Now add the following to your httpd.conf file (more details of where to get the files is in the Tomcat documentation).  Place it immediately below the rest of where the LoadModule commands are listed.</p>
<p>LoadModule    jk_module  modules/mod_jk.so<br />
jkWorkersFile /etc/httpd/conf/workers.properties<br />
jkMountFile   /etc/httpd/conf/uriworkermap.properties<br />
JkShmFile     /var/log/httpd/mod_jk.shm<br />
JkLogFile     /var/log/httpd/mod_jk.log<br />
JkLogLevel    info<br />
JkLogStampFormat &#8220;[%a %b %d %H:%M:%S %Y] &#8221;</p>
<p>Next, create the workers.properties file in the specified location you just added to the httdp.conf file and add the following lines to it.</p>
<blockquote><p>
# Define real workers using ajp13<br />
worker.list=worker1, worker2, worker3</p>
<p># Set properties for workers (ajp13)<br />
worker.worker1.type=ajp13<br />
worker.worker1.host=localhost<br />
worker.worker1.port=8009<br />
worker.worker2.type=ajp13<br />
worker.worker2.host=localhost<br />
worker.worker2.port=8010<br />
worker.worker3.type=ajp13<br />
worker.worker3.host=localhost<br />
worker.worker3.port=8011
</p></blockquote>
<p>The contents of the uriworkermap.properties are optional depending on your applications.  You can remove it from the httpd.conf file but for now it is best to include it and create a blank  uriworkermap.properties file.</p>
<p><strong>Configure and Start Apache</strong><br />
Now go back to your httpd.conf file and establish the workers in the appropriate sites:</p>
<p><pre><code>
NameVirtualHost 173.201.176.190:80
&lt;VirtualHost 173.201.176.190:80&gt;
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin brian@trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ServerName clearspace.trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog logs/clearspace.trisummit.net-error_log
&nbsp;&nbsp;&nbsp;&nbsp;CustomLog logs/clearspace.trisummit.net-access_log common
&nbsp;&nbsp;&nbsp;&nbsp;jkMount /* worker1
&lt;/VirtualHost&gt;
&lt;VirtualHost 173.201.176.190:80&gt;
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin brian@trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ServerName jira.trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog logs/jira.trisummit.net-error_log
&nbsp;&nbsp;&nbsp;&nbsp;CustomLog logs/jira.trisummit.net-access_log common
&nbsp;&nbsp;&nbsp;&nbsp;jkMount /* worker2
&lt;/VirtualHost&gt;
&lt;VirtualHost 173.201.176.190:80&gt;
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin brian@trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ServerName bamboo.trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog logs/bamboo.trisummit.net-error_log
&nbsp;&nbsp;&nbsp;&nbsp;CustomLog logs/bamboo.trisummit.net-access_log common
&nbsp;&nbsp;&nbsp;&nbsp;jkMount /* worker3
&lt;/VirtualHost&gt;
</code></pre></p>
<p>Now restart apache.  As long as your DNS settings are correct (or Hosts file), you should access the default Tomcat page from all three of the appropriate URLs all over port 80 through Apache.   Congratulations, you did it.</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/04/19/running-multiple-instances-of-tomcat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrating Crowd with Subversion</title>
		<link>http://trisummit.net/2010/04/04/integrating-crowd-with-subversion/</link>
		<comments>http://trisummit.net/2010/04/04/integrating-crowd-with-subversion/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 04:42:16 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=324</guid>
		<description><![CDATA[This blog post is not intended to replace the installation documentation put out by Atlassian.  Instead, I would like to share information about the integration and installation that you may find useful.
Crowd is a single sign on server application that allows multiple web applications to log on using a centralized user repository.  The [...]]]></description>
			<content:encoded><![CDATA[<p>This blog post is not intended to replace the installation documentation put out by Atlassian.  Instead, I would like to share information about the integration and installation that you may find useful.</p>
<p>Crowd is a single sign on server application that allows multiple web applications to log on using a centralized user repository.  The greatest beauty of Crowd is that it integrates with LDAP (Active Directory) and also allows you to create additional users not associated with the Active Directory giving system administrators the ability to grant contractors access to selected resources without bringing them full onto the network. </p>
<p>Subversion is a source control tool that integrates well with Apache.  When integrated with Apache, subversion becomes a read only web application with exposed APIs for active source control management with a subversion client.  </p>
<p>When Subversion is integrated with Apache, and Apache is integrated with Crowd, Subversion is then easily integrated with Crowd.</p>
<p>By integrating Apache with Crowd, any web application can make use of Basic Authentication requiring a user to log on with the credentials stored in Crowd.  These applications are best run under https so as to avoid sending plain text authentication information over the network.</p>
<p>When integrating Apache with Crowd, the Subversion server instance which by default allows connections over port 3690 is not used.  There is no need to start or kill the svnserve services on the Linux server when integrated with Apache.  The configuration files in the subversion conf directory are not used.  However, you can still start the service running independent of your Crowd / Apache instance if desired &#8211; making full use of the configuration files that come out of the box with Subversion.</p>
<p>In doing the installation, I ran into two issues.</p>
<p><strong>Issue 1 &#8211; Perl Modules</strong><br />
When doing the installation of setting up Apache, Crowd, and Subversion, there are several perl modules which must be downloaded and installed onto your linux box.  I ran into an issue with these libraries which took some time to figure out.  I have recommended to Atlassian that they update thier documentation accordingly.</p>
<p><a href="http://trisummit.net/2010/04/04/integrating-crowd-with-subversion/perl-requirements/" rel="attachment wp-att-327"><img src="http://trisummit.net/wp-content/uploads/2010/04/perl-requirements-150x150.gif" alt="perl-requirements" title="perl-requirements" width="150" height="150" class="alignleft size-thumbnail wp-image-327" /></a></p>
<p>The SOAP::Lite libraries did not properly install out of the box due to one of the Core Perl packages not being part of the default installations of Fedora and Cent OS.  The missing Core Perl package is the perl &#8211; version package.</p>
<p>I would get to the installation of the Apache-CrowdAuth-1.2.3 and I get the following message.</p>
<p>[root@trisummitjira Apache-CrowdAuth-1.2.3]# perl Makefile.PL</p>
<p>Checking for required modules:</p>
<p>Atlassian::Crowd is installed&#8230; no<br />
Cache::Cache is installed&#8230; yes<br />
Digest::SHA1 is installed&#8230; yes<br />
Error is installed&#8230; yes<br />
SOAP::Lite is installed&#8230; yes</p>
<p>You must install Atlassian::Crowd, Cache::Cache, Digest::SHA1, Error, SOAP::Lite<br />
[root@trisummitjira Apache-CrowdAuth-1.2.3]#</p>
<p>This problem was solved by downloading the Perl Version modules from CPAN at<br />
http://search.cpan.org/dist/version/ then doing the installation using</p>
<p>perl Makefile.PL<br />
make<br />
make install</p>
<p>Afterwards, I was able to properly install the SOAP-Lite package.<br />
Then the rest of the installation worked.</p>
<p><strong>Issue 2 &#8211; Running Subversion in the sites Root directory</strong><br />
The answer is &#8211; don&#8217;t do it.  It does not work.  I was attempting to use the site http://svn.trisummit.net and have this serve as the web based repository for my source control.  It origninally had the appearance of working.  Or shall I say that it works for the Read-only functionality of Subversion.  However, when I would try to commit files to subversion, I would get a Permission Denied error.  I discovered a web posting where I was told not use the / root of the website (sorry I don&#8217;t have the link).  So instead, I moved Subversion to http://trisummit.net/svn &#8211; a subdirectory of this blog.  Then it worked like a charm.  It was even better when I changed to using https://trisummit.net/svn; because then the basic authentication plain text security issue was solved.</p>
<p><strong>Don&#8217;t do this</strong><br />
<pre><code>
&lt;pre&gt;
&lt;VirtualHost 173.201.176.190:80&gt;
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin brian@trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ServerName svn.trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog logs/svn.trisummit.net-error_log
&nbsp;&nbsp;&nbsp;&nbsp;CustomLog logs/svn.trisummit.net-access_log common
&nbsp;&nbsp;&lt;location /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;DAV svn
&nbsp;&nbsp;&nbsp;&nbsp;SVNPath /var/svn/projects
&nbsp;&nbsp;&nbsp;&nbsp;AuthName subversion
&nbsp;&nbsp;&nbsp;&nbsp;AuthType Basic
&nbsp;&nbsp;&nbsp;&nbsp;PerlAuthenHandler Apache::CrowdAuth
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdAppName subversion
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdAppPassword myPasswordInCrowd
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdSOAPURL http://localhost:8095/crowd/services/SecurityServer
&nbsp;&nbsp;&nbsp;&nbsp;PerlAuthzHandler Apache::CrowdAuthz
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdAllowedGroups subversion-users
&nbsp;&nbsp;&nbsp;&nbsp;Require valid-user
&nbsp;&nbsp;&lt;/location&gt;
&lt;/VirtualHost&gt;
&lt;/pre&gt;
</code></pre></p>
<p><strong>The below implementation will work &#8211; however the &lt;location /svn&gt; tag is best placed in the ssl.conf directory where your security certificate is configured</strong>:<br />
<pre><code>
&lt;pre&gt;
&lt;VirtualHost 173.201.176.190:80&gt;
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin brian@trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot /var/www/html/trisummit
&nbsp;&nbsp;&nbsp;&nbsp;ServerName trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ServerAlias trisummit.net www.trisummit.net
&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog logs/trisummit.net-error_log
&nbsp;&nbsp;&nbsp;&nbsp;CustomLog logs/trisummit.net-access_log common
&nbsp;&nbsp;&lt;location /svn&gt;
&nbsp;&nbsp;&nbsp;&nbsp;DAV svn
&nbsp;&nbsp;&nbsp;&nbsp;SVNPath /var/svn/projects
&nbsp;&nbsp;&nbsp;&nbsp;AuthName subversion
&nbsp;&nbsp;&nbsp;&nbsp;AuthType Basic
&nbsp;&nbsp;&nbsp;&nbsp;PerlAuthenHandler Apache::CrowdAuth
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdAppName subversion
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdAppPassword mypasswordInCrowd
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdSOAPURL http://localhost:8095/crowd/services/SecurityServer
&nbsp;&nbsp;&nbsp;&nbsp;PerlAuthzHandler Apache::CrowdAuthz
&nbsp;&nbsp;&nbsp;&nbsp;PerlSetVar CrowdAllowedGroups subversion-users
&nbsp;&nbsp;&nbsp;&nbsp;Require valid-user
&nbsp;&nbsp;&lt;/location&gt;
&lt;/VirtualHost&gt;

&lt;/pre&gt;
</code></pre></p>
<p>Following this change, I was able to save my commits to Subversion using the user credentials stored in Crowd.  Pretty slick.  A C program on Linux authenticating to the crowd SSO server.  I like it.</p>
<p>Anyways, I am really very pleased with this implementation.  My source code is now externally accessible yet password protected with a single sign on server.  The application is configurable so that I can give access to certain projects to certain people while holding back access to others.  And best of all, I don&#8217;t have to worry about being on the network when I am on the road.</p>
<p>Two thumbs up for integrating Subversion with Crowd and Apache.</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/04/04/integrating-crowd-with-subversion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Still Can&#8217;t get Apache mod.rewrite to Work?</title>
		<link>http://trisummit.net/2010/03/27/still-cant-get-apache-mod-rewrite-to-work/</link>
		<comments>http://trisummit.net/2010/03/27/still-cant-get-apache-mod-rewrite-to-work/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 19:05:17 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=305</guid>
		<description><![CDATA[Seems like everytime I need to configure Apache to use mod.rewrite, I follow all of the instructions to ensure that the library files are installed with Apache and also check that the .htaccess file is all correct&#8230;yet it still does not work.  There is one extra step that seems to be left out of [...]]]></description>
			<content:encoded><![CDATA[<p>Seems like everytime I need to configure Apache to use mod.rewrite, I follow all of the instructions to ensure that the library files are installed with Apache and also check that the .htaccess file is all correct&#8230;yet it still does not work.  There is one extra step that seems to be left out of all of the online documentation &#8211; and it is such a simple fix.  I wish Apache would add it to the documentation.</p>
<p>Look at the Directory section of the httpd.conf file.  By default on most operating systems (Red Hat, Fedora, CentOS) the default value for AllowOverride is &#8220;None&#8221;.  Change the value to &#8220;All&#8221; and it is likely the solution to your problem.</p>
<p><pre><code>&lt;pre&gt;
#
# This should be changed to whatever you set DocumentRoot to.
#
&lt;Directory &quot;/var/www/html&quot;&gt;

#
# Possible values for the Options directive are &quot;None&quot;, &quot;All&quot;,
# or any combination of:
#&nbsp;&nbsp; Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that &quot;MultiViews&quot; must be named *explicitly* --- &quot;Options All&quot;
# doesn&#039;t give it to you.
#
# The Options directive is both complicated and important.&nbsp;&nbsp;Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
&nbsp;&nbsp;&nbsp;&nbsp;Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be &quot;All&quot;, &quot;None&quot;, or any combination of the keywords:
#&nbsp;&nbsp; Options FileInfo AuthConfig Limit
#
&nbsp;&nbsp;&nbsp;&nbsp;AllowOverride All

#
# Controls who can get stuff from this server.
#
&nbsp;&nbsp;&nbsp;&nbsp;Order allow,deny
&nbsp;&nbsp;&nbsp;&nbsp;Allow from all

&lt;/Directory&gt;
&lt;/pre&gt;</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/03/27/still-cant-get-apache-mod-rewrite-to-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This script must be run as root &#8211; Failed Jive SBS Installation</title>
		<link>http://trisummit.net/2010/03/12/this-script-must-be-run-as-root-failed-jive-sbs-installation/</link>
		<comments>http://trisummit.net/2010/03/12/this-script-must-be-run-as-root-failed-jive-sbs-installation/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 04:42:50 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=262</guid>
		<description><![CDATA[You ever run into this statement when you are already logged in as root?  Quite confusing.  I encountered it while installing Jive SBS on a Red Hat Linux 4.0 machine.  I would run the installation script as rpm -ip jive-sbs-versionnumber.rpm and would encounter the error message.  To continue I had to [...]]]></description>
			<content:encoded><![CDATA[<p>You ever run into this statement when you are already logged in as root?  Quite confusing.  I encountered it while installing Jive SBS on a Red Hat Linux 4.0 machine.  I would run the installation script as rpm -ip jive-sbs-versionnumber.rpm and would encounter the error message.  To continue I had to uninstall the failed installation of Jive using the following commands:</p>
<p>rpm -qa j*  and then find the name of the jive installed package.<br />
rpm -e jive-sbs_versionnumber<br />
rm -rf /usr/local/jive</p>
<p>Afterwards, I successfully installed the application by running the command prepended with sudo.</p>
<p>sudo rpm -ip jive-sbs-versionnumber.rpm</p>
<p>What I come to find out is that the Jive application runs as the Jive user.  All start | stop | restart commands are inteded to be run as the user &#8220;Jive&#8221;.  You can run all of these commands as root by prepending them with sudo.  Or you can change the password of the jive user to a password you know, login as the jive user, and then run the commands without prepending with sudo.</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/03/12/this-script-must-be-run-as-root-failed-jive-sbs-installation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>java.lang.IllegalArgumentException: When not aligning with a user install you must specify a local repository location using the setLocalRepositoryDirectory( File ) method.</title>
		<link>http://trisummit.net/2010/02/21/java-lang-illegalargumentexception-when-not-aligning-with-a-user-install-you-must-specify-a-local-repository-location-using-the-setlocalrepositorydirectory-file-method/</link>
		<comments>http://trisummit.net/2010/02/21/java-lang-illegalargumentexception-when-not-aligning-with-a-user-install-you-must-specify-a-local-repository-location-using-the-setlocalrepositorydirectory-file-method/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 05:36:28 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=253</guid>
		<description><![CDATA[I encountered this error while setting up a continous build system using the Bamboo system from Atlassian Software.  Setting up Bamboo was not difficult at all.  However, this problem occurred when I attempted to add a Maven2 project.  If you are not familiar with Maven2, it is a build system for java [...]]]></description>
			<content:encoded><![CDATA[<p>I encountered this error while setting up a continous build system using the Bamboo system from Atlassian Software.  Setting up Bamboo was not difficult at all.  However, this problem occurred when I attempted to add a Maven2 project.  If you are not familiar with Maven2, it is a build system for java web applications.  When doing java web applications, most people either use ANT or Maven2 as the build tool.  Anyways, I set up a valid project with a working pom.xml file, proper artifacts, struts framework, and the application builds and runs perfectly on my local machine.  I even added some Test Cases so as to make certain the build server properly invoked the test cases.  I added the project to subversion and attempted to add the project to the Bamboo continuous build server.   Unfortuneatly, when I sumbitted the project, I was immediately handed a stack trace.</p>
<p>java.lang.IllegalArgumentException: When not aligning with a user install you must specify a local repository location using the setLocalRepositoryDirectory( File ) method.<br />
	at org.apache.maven.embedder.MavenEmbedder.createMavenSettings(MavenEmbedder.java:699)<br />
	at org.apache.maven.embedder.MavenEmbedder.start(MavenEmbedder.java:628)<br />
	at com.atlassian.bamboo.ww2.actions.admin.ImportMavenPlanCheckoutPomAction.parsePom(ImportMavenPlanCheckoutPomAction.java:219)<br />
	at com.atlassian.bamboo.ww2.actions.admin.ImportMavenPlanCheckoutPomAction.doExecute(ImportMavenPlanCheckoutPomAction.java:118)<br />
	at com.atlassian.bamboo.ww2.BambooActionSupport.execute(BambooActionSupport.java:705)<br />
&#8230;&#8230;..</p>
<p>As I searched for the solution to the problem, it appeared that this problem had been reported quite commonly to the Maven team &#8211; However, getting the details on how to fix it were not offered.  The solution was rather simple.</p>
<p>MAVEN2 needed to be installed on the Linux server running the Tomcat instance with the Bamboo application.  The M2_HOME and M2 path variables also needed to be set on the server.  </p>
<p>One last thing to check on the Bamboo application is to make certain you have established a builder that works.  The default Maven2 builder in Bamboo may not have the same path as the one you have installed.  So you may have to specify your own builder to match the path of your Maven installation.</p>
<p><img src="http://trisummit.net/wp-content/uploads/2010/02/bamboo-builders.png" alt="bamboo-builders" title="bamboo-builders" width="717" height="377" class="alignleft size-full wp-image-259" /></p>
<p>Once I had taken these steps, the Bamboo application no longer threw that stack trace and I was able to complete the installation of the project to the continuous build system.</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/02/21/java-lang-illegalargumentexception-when-not-aligning-with-a-user-install-you-must-specify-a-local-repository-location-using-the-setlocalrepositorydirectory-file-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Excessive Page Count in the Google Mini</title>
		<link>http://trisummit.net/2010/02/17/excessive-page-count-in-the-google-mini/</link>
		<comments>http://trisummit.net/2010/02/17/excessive-page-count-in-the-google-mini/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 00:46:54 +0000</pubDate>
		<dc:creator>Brian Nettles</dc:creator>
				<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://trisummit.net/?p=249</guid>
		<description><![CDATA[We needed a solution that would integrate search between various independent web applications.  For example, in the case with PowerGUI.org, we had the Jive Forums / Jive Integrated site which housed the discussion forums and a library of downloadable powerpacks &#8211; mostly XML files.  Additionally, we had a wiki using MediaWiki that was [...]]]></description>
			<content:encoded><![CDATA[<p>We needed a solution that would integrate search between various independent web applications.  For example, in the case with PowerGUI.org, we had the Jive Forums / Jive Integrated site which housed the discussion forums and a library of downloadable powerpacks &#8211; mostly XML files.  Additionally, we had a wiki using MediaWiki that was used for a collaborative approach at internationalizing the application.  There were also a small handful of bloggers that were active participants on the site who all blogged extensively on the topic of Powershell.  Our chosen solution was the Google Mini.  For the most part, the solution was perfect.  However, we ran into one problem.  The Google Mini was only licensed for 100,000 pages.  When looking at the number of threads in the PowerGUI forums and the size of the wiki and blogs, we expected the page usage on the Mini to be maybe 15,000.  However, it maxed out the 100,000 page count on the initial crawl.  </p>
<p>After much investigation, we determined that the reason for the unusually high page count had to do with the Jive Application.  Jive allows for an independent URL of not only threads, but for each message of each thread as well.  This resulted in a high amount of duplicate content in the Google Mini.  The problem was made worse with the user profiles.  We had multiple websites all sharing the same user base.  So for each website, each users profile was crawled again and again and again.  No wonder our page count was out of site.</p>
<p>From the Crawl Diagnostics, I was able to determine that we were experiencing duplicate content with the following three pages: message.jspa, accountView.jspa, and profile.jspa.  Furthermore &#8220;tstart&#8221; was also a part of the URL with a lot of duplicate content.</p>
<p>The solution was in the &#8220;Crawl URLs&#8221; section of the Google Mini.  In that section is a subsection called &#8220;Do Not Crawl URLs with the following Patterns:&#8221;</p>
<p>From there, we added the following:</p>
<p>http://domainname.com/profile.jspa$<br />
http://domainname.com/accountView.jspa$<br />
http://domainname.com/message.jspa$<br />
contains:tstart</p>
<p>These four lines added to the &#8220;Do Not Crawl&#8221; list (of course modified with the proper domain name) wiped out virtually all of the duplicate content while keeping in all of the necessary content to be searched on.  The results were a success.  We had a successful implementation of the Google Mini which we later ported to numerous communities.</p>
]]></content:encoded>
			<wfw:commentRss>http://trisummit.net/2010/02/17/excessive-page-count-in-the-google-mini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

