.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2017 Huawei Technologies Co., Ltd.

SO Install & Configure
==========================================

Get Ubuntu
----------
Get the Ubuntu ISO image from ubuntu.com. The recommended version is 16.04.3 LTS (Long Term Support), desktop edition.

Get VirtualBox and VirtualBox Guest Additions
---------------------------------------------
Make sure you have the VirtualBox Guest Additions ISO for your version of VirtualBox.  I'm using VirtualBox 5.1.28.  Save the Guest Additions ISO on your host computer along with the Ubuntu ISO.  Get the Guest Additions ISO from here:
    http://download.virtualbox.org/virtualbox
*NOTE*: Guest Additions versions prior to 5.1 will not work with Ubuntu 16.04.3.  If you have an earlier version of VirtualBox, you should upgrade to the latest 5.1 version.

Create a new VM in VirtualBox for Ubuntu
----------------------------------------
Type: Linux

Version: Ubuntu (64-bit)

At least 2048 MB memory

At least 40 GB VDI

Network: Attached to: NAT

Create a port-forwarding rule for SSH
-------------------------------------
Create a port-forwarding rule so that you can use PuTTY (or other SSH client) to connect to the VM.

Go to "Network" settings in VirtualBox, add a port forwarding rule:

Name: SSH

Protocol: TCP

Host IP: 127.0.0.1

Host Port: 1022

Guest IP: <leave blank>

Guest Port: 22

.. image:: ../images/Configure_ubuntu_SO_1.png

.

.. image:: ../images/Configure_ubuntu_SO_2.png

Create Shared Folder
--------------------
This is oriented to Windows users.  If you're using a MAC or a Linux host computer, the details may be different.  You can share any folder on the host computer with the Ubuntu VM.  On Windows, a practical choice is to share the C:\Users folder, so that your Windows home directory will be accessible from the Ubuntu VM.

Go to "Shared Folders" settings in VirtualBox, add a share:

Folder Path: C:\Users

Folder Name: Users

Auto-mount: <checked>

Read-only: <unchecked>

.. image:: ../images/Configure_ubuntu_SO_3.png

.

.. image:: ../images/Configure_ubuntu_SO_4.png

Install Ubuntu in the VM
------------------------
On the "Storage" panel in VirtualBox, click on "[ optical drive ]" and then "Choose Disk Image".  Select your Ubuntu ISO image.

.. image:: images/Configure_ubuntu_SO_5.png

After selecting the ISO image, start the VM.

Follow the prompts to install Ubuntu.

Proxy Configuration (optional)
------------------------------
If you're behind a corporate firewall, configure some proxy settings.  NOTE: your proxy configuration may require username and password credentials, not shown here.
**Ubuntu system proxy setting:**

	System Settings → Network → Network proxy
	
	(Replace "proxyhost" and port with your actual proxy information)

.. image:: images/Configure_ubuntu_SO_6.png
	
**apt proxy setting:**
	Edit /etc/apt/apt.conf and add one line at the top (replace "proxyhost:port" with your actual proxy information):
	
		Acquire::http::Proxy "http://proxyhost:port";
		
	Reboot the VM.
	
Install SSH Server
------------------

.. code-block:: bash

    sudo apt update
    sudo apt install openssh-server

Connect to the VM from your host computer
-----------------------------------------
	The PuTTY SSH client is popular.  A connection to localhost:1022 (or whatever port you have forwarded) will go to the VM.

.. image:: ../images/Configure_ubuntu_SO_7.png
	
Install VirtualBox Guest Additions
----------------------------------
On the "Storage" panel in VirtualBox, click on "[ optical drive ]" and then "Choose Disk Image".  Select your VirtualBox Guest Additions ISO image.

.. image:: images/Configure_ubuntu_SO_8.png

In a VM terminal window, mount the cdrom:

.. code-block:: bash

	sudo mkdir -p /media/cdrom
	sudo mount /dev/cdrom /media/cdrom
	
Install necessary dependencies:

.. code-block:: bash

    sudo apt update
    sudo apt install gcc g++ dkms
	
Install the guest additions.  NOTE: look for errors in the command output!  If you see an error that says you are missing kernel headers, the most likely cause is that you are using a VirtualBox version that is too old.  The error message is misleading.

.. code-block:: bash

	cd /media/cdrom
	sudo ./VBoxLinuxAdditions.run

.. image:: ../images/Configure_ubuntu_SO_9.png	
	
Add yourself to the vboxsf user group (replace "userid" with your user ID):
	
.. code-block:: bash	
	
	sudo usermod -a -G vboxsf userid
	
Reboot the VM.

In a VM terminal window, verify that you can access your home directory on the host computer, which should be mounted under here:
	/media/sf_Users
	
Further Reading
----------------------------------------	

.. toctree::
   :maxdepth: 1

   Install_Docker.rst
   Configure_git_and_gerrit.rst
   Workspace_and_Development_Tools.rst