[Developer Guide] Dockerfile Unification

The current building process involves a serie of steps that can be simplified
in order to do the process/experience more user friendly for our end users:

- Unification of Docker files into one allows to build base container via a
  single make call.
- Remove the copy of git configuration file since it will be generated.

Based on the unification to one Dockerfile, our Developer Guide
new "flow" is:

- Prepare Base Docker Image
  - Build "base image"
- Build the CentOS Mirror Repository
  - Run container from "base image"
  - Get mirror files
- Create StarlingX Packages
  - Run container from "base image"
  - Get StarlingX source code
  - Build StarlingX packages
- Build StarlingX ISO

Story: 2003712
Task: 28010

Change-Id: I5776a7c515a7f2f1f3355644092b1d0a913f1ee8
Signed-off-by: Abraham Arce <abraham.arce.moreno@intel.com>
This commit is contained in:
Abraham Arce 2019-01-10 04:53:00 -06:00
parent 0b40b03837
commit f4dfbc4ec5
1 changed files with 90 additions and 109 deletions

View File

@ -116,18 +116,6 @@ Install Public SSH Key
- `Upload to
Gerrit <https://review.openstack.org/#/settings/ssh-keys>`__
*************************
Install stx-tools Project
*************************
#. While in your $HOME directory, create a local copy of the stx-tools project
based on the "r/2018.10" branch:
.. code:: sh
$ cd $HOME
$ git clone -b r/2018.10 https://git.starlingx.io/stx-tools
****************************
Create a Workspace Directory
****************************
@ -140,27 +128,68 @@ Create a Workspace Directory
$ mkdir -p $HOME/starlingx/
----------------------------------
Build the CentOS Mirror Repository
----------------------------------
*************************
Install stx-tools Project
*************************
This section describes how to build the CentOS Mirror Repository.
#. Under your $HOME directory, clone the <stx-tools> project:
*********************************
Setup Repository Docker Container
*********************************
.. code:: sh
| Run the following commands under a terminal identified as "**One**".
$ cd $HOME
$ git clone https://git.starlingx.io/stx-tools
#. Navigate to the *$HOME/stx-tools/centos-mirror-tool* project
#. Navigate to the *<$HOME/stx-tools>* project
directory:
.. code:: sh
$ cd $HOME/stx-tools/centos-mirror-tools/
$ cd $HOME/stx-tools/
#. If necessary, set the http/https proxy in your
Dockerfile before building the docker image.
-----------------------------
Prepare the Base Docker Image
-----------------------------
StarlingX base docker image handles all steps related to StarlingX ISO
creation. This section describes how to customize the base Docker image
building process.
********************
Configuration Values
********************
You can customize values for the StarlingX base Docker image using a
text-based configuration file named ``localrc``:
- ``HOST_PREFIX`` points to the directory that hosts the 'designer'
subdirectory for source code, the 'loadbuild' subdirectory for
the build environment, generated RPMs, and the ISO image.
- ``HOST_MIRROR_DIR`` points to the directory that hosts the CentOS mirror
repository.
^^^^^^^^^^^^^^^^^^^^^^^^^^
localrc Configuration File
^^^^^^^^^^^^^^^^^^^^^^^^^^
Create your ``localrc`` configuration file. For example:
.. code:: sh
# tbuilder localrc
MYUNAME=$USER
PROJECT=starlingx
HOST_PREFIX=$HOME/starlingx/workspace
HOST_MIRROR_DIR=$HOME/starlingx/mirror
***************************
Build the Base Docker Image
***************************
Once the ``localrc`` configuration file has been customized, it is time
to build the base Docker image.
#. If necessary, you might have to set http/https proxy in your
Dockerfile before building the docker image:
.. code:: sh
@ -169,47 +198,54 @@ Setup Repository Docker Container
ENV ftp_proxy " http://your.actual_ftp_proxy.com:your_port "
RUN echo " proxy=http://your-proxy.com:port " >> /etc/yum.conf
#. Build your *<user>:<tag>* base container image. For example, use
*user:centos-mirror-repository*:
#. The Makefile automates the Base Docker image build:
.. code:: sh
$ docker build --tag $USER:centos-mirror-repository --file Dockerfile .
make
#. Launch a *<user>* docker container using the previously created Docker
base container image *<user>:<tag>* (e.g.
*-centos-mirror-repository*). As /localdisk is defined as the workdir
of the container, the same folder name should be used to define the
volume. The container will start to run and populate the output folders
*logs* and *output* in this directory. The container is run from the
same directory where the other scripts are stored:
----------------------------------
Build the CentOS Mirror Repository
----------------------------------
The creation of the StarlingX ISO relies on a repository of RPM Binaries,
RPM Sources, and Tar Compressed files. This section describes how to build
this CentOS mirror repository.
*******************************
Run Repository Docker Container
*******************************
| Run the following commands under a terminal identified as "**One**":
#. Navigate to the *$HOME/stx-tools/centos-mirror-tool* project
directory:
.. code:: sh
$ docker run -itd --name $USER-centos-mirror-repository --volume $(pwd):/localdisk $USER:centos-mirror-repository
$ cd $HOME/stx-tools/centos-mirror-tools/
**NOTE**: The above command creates the container in the background.
With the container running in the background, you must attach to it
manually. An advantage of attaching to the container manually is that
you can enter and exit from the container as many times as you want.
#. Launch the Docker container using the previously created base Docker image
*<repository>:<tag>*. As /localdisk is defined as the workdir of the
container, you should use the same folder name to define the volume.
The container starts to run and populate 'logs' and 'output' folders in
this directory. The container runs from the same directory in which the
scripts are stored.
.. code:: sh
$ docker run -it --volume $(pwd):/localdisk local/$USER-stx-builder:7.4 bash
*****************
Download Packages
*****************
#. Attach to the docker repository previously created:
#. Inside the Docker container, enter the following commands to download
the required packages to populate the CentOS mirror repository:
::
$ docker exec -it <CONTAINER ID> /bin/bash
#. Inside Repository Docker container, enter the following command to
download the required packages to populate the CentOS Mirror
Repository:
::
# bash download_mirror.sh
# cd localdisk && bash download_mirror.sh
#. Monitor the download of packages until it is complete. When the download
is complete, the following message appears:
@ -293,9 +329,9 @@ as "**Two**", run the following commands:
Create StarlingX Packages
-------------------------
*******************************
Setup Building Docker Container
*******************************
*****************************
Run Building Docker Container
*****************************
#. From the terminal identified as "**Two**", create the workspace folder:
@ -309,74 +345,19 @@ Setup Building Docker Container
$ cd $HOME/stx-tools
#. Copy your Git options to *toCopy* folder:
.. code:: sh
$ cp ~/.gitconfig toCOPY
#. Create a *localrc* file:
.. code:: sh
$ cat <<- EOF > localrc
# tbuilder localrc
MYUNAME=$USER
PROJECT=starlingx
HOST_PREFIX=$HOME/starlingx/workspace
HOST_MIRROR_DIR=$HOME/starlingx/mirror
EOF
#. If necessary, you might have to set the http/https proxy in your
*Dockerfile.centos73* file before building the docker image:
.. code:: sh
ENV http_proxy "http://your.actual_http_proxy.com:your_port"
ENV https_proxy "https://your.actual_https_proxy.com:your_port"
ENV ftp_proxy "http://your.actual_ftp_proxy.com:your_port"
RUN echo "proxy=$http_proxy" >> /etc/yum.conf && \
echo -e "export http_proxy=$http_proxy\nexport https_proxy=$https_proxy\n\
export ftp_proxy=$ftp_proxy" >> /root/.bashrc
#. Set up the base container:
If you are using a Fedora distribution, you will
see the following error:
.. code:: sh
.makeenv:88: \**\* missing separator. Stop.
To continue, do the following:
- delete the functions define in the .makeenv ( module () { ... } )
- delete the line 19 in the Makefile and ( NULL := $(shell bash -c
"source buildrc ... ).
.. code:: sh
$ make base-build
#. Set up the build container:
.. code:: sh
$ make build
#. Verify environment variables:
.. code:: sh
$ bash tb.sh env
#. Run the build container:
#. Run the building Docker container:
.. code:: sh
$ bash tb.sh run
#. Execute the built container:
#. Execute the buiding Docker container:
.. code:: sh