#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.
msgid ""
msgstr ""
"Project-Id-Version: 0\n"
"POT-Creation-Date: 2013-02-02T20:11:59\n"
"PO-Revision-Date: 2013-02-02T20:11:59\n"
"Last-Translator: Automatically generated\n"
"Language-Team: None\n"
"MIME-Version: 1.0\n"
"Content-Type: application/x-publican; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Tag: title
#, no-c-format
msgid "Minimum System Requirements"
msgstr ""

#. Tag: title
#, no-c-format
msgid "Management Server, Database, and Storage System Requirements"
msgstr ""

#. Tag: para
#, no-c-format
msgid "The machines that will run the Management Server and MySQL database must meet the following requirements. The same machines can also be used to provide primary and secondary storage, such as via localdisk or NFS. The Management Server may be placed on a virtual machine."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Operating system:"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Preferred: CentOS/RHEL 6.3+ or Ubuntu 12.04(.1)"
msgstr ""

#. Tag: para
#, no-c-format
msgid "64-bit x86 CPU (more cores results in better performance)"
msgstr ""

#. Tag: para
#, no-c-format
msgid "4 GB of memory"
msgstr ""

#. Tag: para
#, no-c-format
msgid "50 GB of local disk (When running secondary storage on the management server 500GB is recommended)"
msgstr ""

#. Tag: para
#, no-c-format
msgid "At least 1 NIC"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Statically allocated IP address"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Fully qualified domain name as returned by the hostname command"
msgstr ""

#. Tag: title
#, no-c-format
msgid "Host/Hypervisor System Requirements"
msgstr ""

#. Tag: para
#, no-c-format
msgid "The host is where the cloud services run in the form of guest virtual machines. Each host is one machine that meets the following requirements:"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Must support HVM (Intel-VT or AMD-V enabled)."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Hardware virtualization support required"
msgstr ""

#. Tag: para
#, no-c-format
msgid "36 GB of local disk"
msgstr ""

#. Tag: para
#, no-c-format
msgid "If DHCP is used for hosts, ensure that no conflict occurs between DHCP server used for these hosts and the DHCP router created by &PRODUCT;."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Latest hotfixes applied to hypervisor software"
msgstr ""

#. Tag: para
#, no-c-format
msgid "When you deploy &PRODUCT;, the hypervisor host must not have any VMs already running"
msgstr ""

#. Tag: para
#, no-c-format
msgid "All hosts within a cluster must be homogenous. The CPUs must be of the same type, count, and feature flags."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Hosts have additional requirements depending on the hypervisor. See the requirements listed at the top of the Installation section for your chosen hypervisor:"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Be sure you fulfill the additional hypervisor requirements and installation steps provided in this Guide. Hypervisor hosts must be properly prepared to work with CloudStack. For example, the requirements for XenServer are listed under Citrix XenServer Installation."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<xref linkend=\"hypervisor-kvm-requirements\" />"
msgstr ""

#. Tag: para
#, no-c-format
msgid "<xref linkend=\"system-requirements-xenserver-hosts\" />"
msgstr ""

#. Tag: para
#, no-c-format
msgid "<xref linkend=\"vmware-requirements\" />"
msgstr ""

