.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0



Installation Guide
==================

.. contents::
   :depth: 3
   :local:

Abstract
--------

This document describes how to install <Component>, it's dependencies and required system resources.


Version history

+--------------------+--------------------+--------------------+--------------------+
| **Date**           | **Ver.**           | **Author**         | **Comment**        |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 20XX-XX-XX         | 0.1.0              | 		       | First draft        |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
|                    | 0.1.1              |                    |                    |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
|                    | 1.0                |                    |                    |
|                    |                    |                    |                    |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+


Introduction
------------

.. <INTRODUCTION TO THE SCOPE AND INTENTION OF THIS DOCUMENT AS WELL AS TO THE SYSTEM TO BE INSTALLED>

.<EXAMPLE>:

This document describes the supported software and hardware configurations for the reference component as well as providing guidelines on how to install and configure such reference system.

The audience of this document is assumed to have good knowledge in RAN network nd Linux system.


Preface
-------
.. <DESCRIBE NEEDED PREREQUISITES, PLANNING, ETC.>

<EXAMPLE>:

Before starting the installation of <project name>, some planning must preceed.

.. note:any preperation you need before setting up sotfware and hardware 


Hardware Requirements
---------------------
.. <PROVIDE A LIST OF MINIMUM HARDWARE REQUIREMENTS NEEDED FOR THE INSTALL>

<EXAMPLE>:

Following minimum hardware requirements must be met for installation of <project name>:

+--------------------+----------------------------------------------------+
| **HW Aspect**      | **Requirement**                                    |
|                    |                                                    |
+--------------------+----------------------------------------------------+
| **# of servers**   | 		                                          |
+--------------------+----------------------------------------------------+
| **CPU**            | 						          |
|                    |                                                    |
+--------------------+----------------------------------------------------+
| **RAM**            | 							  |
|                    |                                                    |
+--------------------+----------------------------------------------------+
| **Disk**           | 					                  |
|                    |                                                    |
+--------------------+----------------------------------------------------+
| **NICs**           | 							  |
|                    |                                                    |
|                    | 							  |
|                    |                                                    |
|                    |  					 	  |
|                    |                                                    |
+--------------------+----------------------------------------------------+



Software Installation and Deployment
------------------------------------
.. <DESCRIBE THE FULL PROCEDURES FOR THE INSTALLATION OF THE O-RAN COMPONENT INSTALLATION AND DEPLOYMENT>

<EXAMPLE>:

This section describes the installation of the <project name> installation on the reference hardware.



References
----------
.. <PROVIDE NEEDED/USEFUL REFERENCES>




