<?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-Environment">
  <title>Environment</title>
  <para>
      Before you begin, you need to prepare the environment before you install CloudStack. 
      We will go over the steps to prepare now.
  </para>
  <section id="sect-qig-Environment-operatingsys">
    <title>Operating System</title>
    <para>
      Using the CentOS 6.4 x86_64 minimal install ISO, you'll need to install CentOS
      on your hardware. The defaults will generally be acceptable for this installation.
    </para>
    <para>
      Once this installation is complete, you'll want to connect to your freshly
      installed machine via SSH as the root user. Note that you should not allow root 
      logins in a production environment, so be sure to turn off remote logins once you 
      have finished the installation and configuration.
    </para>
    <section id="sect-qig-Environment-operatingsys-network">
      <title>Configuring the network</title>
      <para>
        By default the network will not come up on your hardware and you
        will need to configure it to work in your environment. Since we 
        specified that there will be no DHCP server in this environment
        we will be manually configuring your network interface. We will
        assume, for the purposes of this exercise, that eth0 is the only network
        interface that will be connected and used. 
      </para>
      <para>
        Connecting via the console you should login as root. Check the 
        file <filename>/etc/sysconfig/network-scripts/ifcfg-eth0</filename>,
        it will look like this by default:
        <screen>
DEVICE="eth0"
HWADDR="52:54:00:B9:A6:C0"
NM_CONTROLLED="yes"
ONBOOT="no"
        </screen>
      </para>
      <para>
        Unfortunately, this configuration will not permit you to connect to the network,
        and is also unsuitable for our purposes with CloudStack. We want to 
    configure that file so that it specifies the IP address, netmask, etc., as shown
    in the following example:
      </para>
      <important>
        <title>Hardware Addresses</title>
    <para>You should not use the hardware address (aka MAC address) from our example
        for your configuration. It is network interface specific, so you should keep the 
        address already provided in the HWADDR directive.
        </para>
      </important>
      <screen>
DEVICE=eth0
HWADDR=52:54:00:B9:A6:C0
NM_CONTROLLED=no
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.16.10.2
NETMASK=255.255.255.0
GATEWAY=172.16.10.1
DNS1=8.8.8.8
DNS2=8.8.4.4
      </screen>
      <note>
        <title>IP Addressing</title>
        <para>Throughout this document we are assuming that you will
        have a /24 network for your CloudStack implementation. This can be any
        RFC 1918 network. However, we are assuming that you will match the 
        machine address that we are using. Thus we may use 
        <userinput><replaceable>172.16.10</replaceable>.2</userinput> and because
        you might be using the 192.168.55.0/24 network you would use 
        <userinput><replaceable>192.168.55</replaceable>.2</userinput>
        </para>
      </note>
      <para> Now that we have the configuration files properly set up, we need to run a
      few commands to start up the network</para>
      <screen><prompt># </prompt><userinput><command>chkconfig</command> network on</userinput></screen>
      <screen><prompt># </prompt><userinput><command>service</command> network start</userinput></screen>
    </section>
    <section id="sect-qig-Environment-operatingsys-hostname">
      <title>Hostname</title>
      <para>
        Cloudstack requires that the hostname be properly set. If you used the default
        options in the installation, then your hostname is currently set to 
        localhost.localdomain. To test this we will run: </para>
        <screen><prompt># </prompt><userinput>hostname --fqdn</userinput></screen>
        <para>At this point it will likely return:</para>
        <screen>localhost</screen>
        <para>To rectify this situation - we'll set the hostname by editing the
        <filename>/etc/hosts</filename> file so that it follows a similar format to this example:<screen>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.10.2 srvr1.cloud.priv
</screen>
        </para>
        <para>After you've modified that file, go ahead and restart the network using:</para>
<screen><prompt># </prompt><userinput><command>service</command> network restart</userinput></screen>
        <para>Now recheck with the <command>hostname --fqdn</command> command and ensure that it returns 
        a FQDN response</para>
    </section>
    <section id="sect-qig-Environment-operatingsys-selinux">
      <title>SELinux</title>
      <para>At the moment, for CloudStack to work properly SELinux must be 
      set to permissive. We want to both configure this for future boots and modify it
      in the current running system.
      </para>
      <para>To configure SELinux to be permissive in the running system we need to run 
      the following command:</para>
      <screen><prompt># </prompt><userinput><command>setenforce</command> 0</userinput></screen>
      <para> 
        To ensure that it remains in that state we need to configure the file 
        <filename>/etc/selinux/config</filename> to reflect the permissive state, 
    as shown in this example: </para>
      <screen>

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
      </screen>

    </section>
    <section id="sect-qig-Environment-operatingsys-ntp">
      <title>NTP</title>
      <para>NTP configuration is a necessity for keeping all of the clocks in your cloud
      servers in sync. However, NTP is not installed by default. So we'll install and 
      and configure NTP at this stage. Installation is accomplished as follows:
      </para>
      <screen><prompt># </prompt><userinput><command>yum</command> -y install ntp</userinput></screen>
      <para>The actual default configuration is fine for our purposes, so we merely need to
      enable it and set it to start on boot as follows:</para>
      <screen><prompt># </prompt><userinput><command>chkconfig</command> ntpd on</userinput></screen>
      <screen><prompt># </prompt><userinput><command>service</command> ntpd start</userinput></screen>
    </section>
    <section id="sect-qig-Environment-operatingsys-repoconfig">
      <title>Configuring the CloudStack Package Repository</title>
      <para>
        We need to configure the machine to use a CloudStack package repository.
        <important>
          <title>The below repository is not an official Apache CloudStack project repository</title>
          <para>
            The Apache CloudStack official releases are source code. As such there are no
            'official' binaries available. The full installation guide describes how to take
            the source release and generate RPMs and and yum repository. This guide attempts
            to keep things as simple as possible, and thus we are using one of the
            community-provided yum repositories.
          </para>
        </important>
      </para>
      <para>To add the CloudStack repository, create <filename>/etc/yum.repos.d/cloudstack.repo</filename> and insert the following information.</para>
      <programlisting>
[cloudstack]
name=cloudstack
baseurl=http://cloudstack.apt-get.eu/rhel/4.1/
enabled=1
gpgcheck=0
      </programlisting>
    </section>
  </section>
  <section id="sect-qig-Environment-nfs">
    <title>NFS</title>
    <para>
      Our configuration is going to use NFS for both primary and secondary
      storage. We are going to go ahead and setup two NFS shares for those 
      purposes. We'll start out by installing
      <application>nfs-utils</application>.
    </para>
    <screen><prompt># </prompt><userinput><command>yum</command> install nfs-utils</userinput></screen>
    <para>
      We now need to configure NFS to serve up two different shares. This is handled comparatively easily
      in the <filename>/etc/exports</filename> file. You should ensure that it has the following content:
    </para>
    <screen>
/secondary *(rw,async,no_root_squash)
/primary   *(rw,async,no_root_squash)
    </screen>
    <para>
      You will note that we specified two directories that don't exist (yet) on the system. 
      We'll go ahead and create those directories and set permissions appropriately on them with the following commands:
    </para>
    <screen>
<prompt># </prompt><userinput><command>mkdir</command> /primary</userinput>
<prompt># </prompt><userinput><command>mkdir</command> /secondary</userinput>
    </screen>
    <para>CentOS 6.x releases use NFSv4 by default. NFSv4 requires that domain setting matches on all clients. 
    In our case, the domain is cloud.priv, so ensure that the domain setting in <filename>/etc/idmapd.conf</filename>
    is uncommented and set as follows:</para>
    <screen>Domain = cloud.priv</screen>
    <para>Now you'll need uncomment the configuration values in the file <filename>/etc/sysconfig/nfs</filename></para>
    <screen>
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020
    </screen>
    <para> Now we need to configure the firewall to permit incoming NFS connections. 
    Edit the file <filename>/etc/sysconfig/iptables</filename>
    </para>
    <screen>
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p tcp --dport 32803 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p udp --dport 32769 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p tcp --dport 892 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p udp --dport 892 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p tcp --dport 875 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p udp --dport 875 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p tcp --dport 662 -j ACCEPT
-A INPUT -s 172.16.10.0/24 -m state --state NEW -p udp --dport 662 -j ACCEPT
    </screen>
    <para>Now you can restart the iptables service with the following command:
    </para>
    <screen><prompt># </prompt><userinput><command>service</command> iptables restart</userinput></screen>
    <para>We now need to configure nfs service to start on boot and actually start it on the host by
    executing the following commands:</para>
    <screen>
<prompt># </prompt><userinput><command>service</command> rpcbind start</userinput>
<prompt># </prompt><userinput><command>service</command> nfs start</userinput>
<prompt># </prompt><userinput><command>chkconfig</command> rpcbind on</userinput>
<prompt># </prompt><userinput><command>chkconfig</command> nfs on</userinput>
    </screen>
  </section>
</chapter>
