root/build-tools/build-docker-images
Davlet Panech 3908e68fb3 debian: loci: allow tweaking of apt/yum repos
build-stx-images.sh:
- auto-detect OS
- allow wheels tar to be a local file
- patch loci Dockerfile:
  * add a script to tweak package manager configuration
  * copy wheels tar into docker file, instead of downloading
    it over HTTP; this allows wheels to be a local file
  * call our own custom script when building, instead of whats provided
    with loci. The custom script: tweaks apt or yum repos if necessary,
    calls the original Loci build script, then deletes the wheels
    tarball.
- new parameter DIST_REPOS in Loci docker config files. Allows one to
  enable or disable upstream (bullseye etc) repositories when building.

TESTS
=============
1) CentOS: build 2 representative images:
  stx-audit (Dockerfile builder)
  stx-heat (Loci builder)

  Compare filesystems in docker images before and after the patch

  Make sure the difference is trivial/expected

2) Debian: build 2 representative images:

  stx-audit (Dockerfile builder)
  stx-heat (Loci builder)

  stx-heat fails to compile due to openstack requirements file being
  incompatible with debian/bullseye. This will addressed as a separate
  patch.

Story: 2009897
Task: 44693

Signed-off-by: Davlet Panech <davlet.panech@windriver.com>
Change-Id: I70ea968d343d1f59e96eee73907e6999bf4050ec
2022-04-14 16:02:21 -04:00
..
2019-03-24 21:03:21 -04:00

## Example commands for building StarlingX images

PRIVATE_REGISTRY_USERID=myuser
PRIVATE_REGISTRY=xxx.xxx.xxx.xxx:9001
VERSION=2018.11.13
OS=centos
OS_VERSION=7.5.1804
BUILD_STREAM=stable
HOST_PORT=8088

## Step 1: Build stx-centos
time $MY_REPO/build-tools/build-docker-images/build-stx-base.sh \
    --os ${OS} \
    --os-version ${OS_VERSION} \
    --version ${VERSION} \
    --user ${PRIVATE_REGISTRY_USERID} \
    --registry ${PRIVATE_REGISTRY} \
    --push \
    --repo stx-local-build,http://${HOSTNAME}:${HOST_PORT}/${MY_WORKSPACE}/std/rpmbuild/RPMS \
    --repo stx-mirror-distro,http://${HOSTNAME}:${HOST_PORT}/${MY_REPO}/cgcs-root/cgcs-${OS}-repo/Binary \
    --clean


## Step 2: Build wheels (output as tarball)
time $MY_REPO/build-tools/build-wheels/build-wheel-tarball.sh \
    --os ${OS} \
    --os-version ${OS_VERSION} \
    --stream ${BUILD_STREAM}

## Step 3: Build images
time $MY_REPO/build-tools/build-docker-images/build-stx-images.sh \
    --os ${OS} \
    --version ${VERSION} \
    --stream ${BUILD_STREAM} \
    --base ${PRIVATE_REGISTRY}/${PRIVATE_REGISTRY_USERID}/stx-${OS}:${VERSION} \
    --wheels http://${HOSTNAME}:${HOST_PORT}/${MY_WORKSPACE}/std/build-wheels-${OS}-${BUILD_STREAM}/stx-${OS}-${BUILD_STREAM}-wheels.tar \
    --user ${PRIVATE_REGISTRY_USERID} \
    --registry ${PRIVATE_REGISTRY} \
    --push --latest \
    --clean


## Note: Verify that lighttpd is not bound to "localhost"
vi /etc/lighttpd/lighttpd.conf
# server.bind = "localhost"
systemctl restart lighttpd

## Note: You may need to add an iptables rule to allow the docker
## containers to access the http server on your host. For example:
iptables -I INPUT 6 -i docker0 -p tcp --dport ${HOST_PORT} -m state --state NEW,ESTABLISHED -j ACCEPT