<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>

<!-- Licensed to the Apache Software Foundation (ASF) under one
	or more contributor license agreements.  See the NOTICE file
	distributed with this work for additional information
	regarding copyright ownership.  The ASF licenses this file
	to you under the Apache License, Version 2.0 (the
	"License"); you may not use this file except in compliance
	with the License.  You may obtain a copy of the License at
	
	http://www.apache.org/licenses/LICENSE-2.0
	
	Unless required by applicable law or agreed to in writing,
	software distributed under the License is distributed on an
	"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
	KIND, either express or implied.  See the License for the
	specific language governing permissions and limitations
	under the License.
-->
<section id="linux-installation">
	<title>Linux OS Installation</title>
	<para>Use the following steps to begin the Linux OS installation:</para>
	<orderedlist>
		<listitem><para>Download the script file cloud-set-guest-password:</para>
		<itemizedlist>
			<listitem><para>Linux: <ulink url="
				http://cloudstack.org/dl/cloud-set-guest-password
				"></ulink>				
			</para></listitem>
			<listitem><para>Windows: <ulink url="
				http://sourceforge.net/projects/cloudstack/files/Password%20Management%20Scripts/CloudInstanceManager.msi/download
				"></ulink>		
			</para></listitem>
		</itemizedlist>
		</listitem>
		<listitem><para>Copy this file to /etc/init.d.</para><para>On some Linux distributions, copy the file to /etc/rc.d/init.d.</para>
			</listitem>
		<listitem><para>Run the following command to make the script executable:</para><programlisting>chmod +x /etc/init.d/cloud-set-guest-password</programlisting>
			</listitem>
		<listitem><para>Depending on the Linux distribution, continue with the appropriate step.</para><para>On Fedora, CentOS/RHEL, and Debian, run:</para><programlisting>chkconfig --add cloud-set-guest-password</programlisting>
			<para condition="community">On Ubuntu with VMware tools, link the script file to the /etc/network/if-up and
				/etc/network/if-down folders, and run the script:</para>
			<programlisting condition="community">#ln -s /etc/init.d/cloud-set-guest-password /etc/network/if-up/cloud-set-guest-password
#ln -s /etc/init.d/cloud-set-guest-password /etc/network/if-down/cloud-set-guest-password</programlisting>
			<para condition="community">If you are using Ubuntu 11.04, start by creating a directory called /var/lib/dhcp3 on your Ubuntu machine (works around a known issue with this version of Ubuntu). On all Ubuntu versions: Run “sudo update-rc.d cloud-set-guest-password defaults 98”. To test, run "mkpasswd" and check that it is generating a new password. If the “mkpasswd” command does not exist, run "sudo apt-get install whois"  (or sudo apt-get install mkpasswd, depending on your Ubuntu version) and repeat.</para>
			</listitem>
	</orderedlist>
	
	</section>
