<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "qig.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.
-->


<chapter id="chap-qig-Management">
  <title>Installation of the management server</title>
  <para>
    Now it is time to start installing CloudStack's management server
    and some of the related components. 
  </para>
  <section id="sect-qig-Management-database">
    <title>Database Installation and Configuration</title>
      <para>
        We'll start out by installing <application>MySQL</application> and configuring 
        some options to ensure CloudStack runs well.
      </para>
      <para>
        To install <application>MySQL</application> run the following command:
        <screen><prompt># </prompt><userinput><command>yum</command> -y install mysql-server</userinput></screen>
      </para>
      <para>With <application>MySQL</application> installed we need to make
      a few configuration changes to <filename>/etc/my.cnf</filename>. 
      Specifically we need to add the following options to the [mysqld] section:
        <screen>
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW' 
        </screen>
      </para>
      <para>
        Now that <application>MySQL</application> is properly configured we can
        start it and configure it to start on boot as follows:
        <screen>
<prompt># </prompt><userinput><command>service</command> mysqld start</userinput>
<prompt># </prompt><userinput><command>chkconfig</command> mysqld on</userinput>
        </screen>
      </para>

  </section>
    
  <section id="sect-qig-Management-installation">
    <title>Installation</title>
    <para>We are now going to install the management server. We do that by executing the following command:
      <screen><prompt># </prompt><userinput><command>yum</command> -y install cloud-client</userinput></screen>
    </para>
    <para>With the application itself installed we can now setup the database, we'll do that with the following command
      and options: 
    </para>
    <screen><prompt># </prompt><userinput><command>cloudstack-setup-databases</command> cloud:<replaceable>password</replaceable>@localhost --deploy-as=root</userinput></screen>
    <para>When this process is finished, you should see a message like "CloudStack has successfully initialized the database."
    </para>
    <para>Now that the database has been created, we can take the final step in setting up the management server by issuing the following command:</para>
    <screen><prompt># </prompt><userinput><command>cloudstack-setup-management</command></userinput></screen>
  </section>
  <section id="sect-qig-Management-templatesetup">
    <title>System Template Setup</title>
    <para>CloudStack uses a number of system VMs to provide functionality for 
      accessing the console of virtual machines, providing various networking 
      services, and managing various aspects of storage. This step will 
      acquire those system images ready for deployment when we bootstrap
      your cloud.
    </para>
    <para>
      Now we need to download the system VM template and deploy that to the
      share we just mounted. The management server includes a script to properly
      manipulate the system VMs images. 
    </para>
    <screen><prompt># </prompt><userinput><command>/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt</command> -m  /secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -F</userinput>
    </screen>
    <para>
      That concludes our setup of the management server. We still need to 
      configure CloudStack, but we will do that after we get our hypervisor
      set up. 
    </para>
  </section>
</chapter>
