From b7bf0fac172585c8efb9107fc5d2638373390868 Mon Sep 17 00:00:00 2001 From: Jackie Huang Date: Thu, 19 May 2022 14:39:54 +0800 Subject: [PATCH] build_inf_centos: add build_inf_prepare_jenkins.sh Issue-ID: INF-274 Signed-off-by: Jackie Huang Change-Id: Ic06833f1f18cbf32ed0f0933e22081101c7519eb --- scripts/build_inf.sh | 4 + scripts/build_inf_centos/build_inf_centos.sh | 79 ++--- .../build_inf_centos/build_inf_prepare_jenkins.sh | 297 ++++++++++++++++++ .../build_inf_centos/stx_build_prepare_centos.sh | 340 --------------------- 4 files changed, 334 insertions(+), 386 deletions(-) create mode 100755 scripts/build_inf_centos/build_inf_prepare_jenkins.sh delete mode 100644 scripts/build_inf_centos/stx_build_prepare_centos.sh diff --git a/scripts/build_inf.sh b/scripts/build_inf.sh index 81be9d5..0710d89 100755 --- a/scripts/build_inf.sh +++ b/scripts/build_inf.sh @@ -110,6 +110,7 @@ WORKSPACE_YP=${WORKSPACE}/workspace_yocto WORKSPACE_CENTOS=${WORKSPACE}/workspace_centos SCRIPT_YP=${SCRIPTS_DIR}/build_inf_yocto/build_inf_yocto.sh SCRIPT_CENTOS=${SCRIPTS_DIR}/build_inf_centos/build_inf_centos.sh +SCRIPT_CENTOS_PRE=${SCRIPTS_DIR}/build_inf_centos/build_inf_prepare_jenkins.sh prepare_workspace () { msg_step="Create workspace for the multi-os builds" @@ -161,6 +162,9 @@ fi # dry-run is not supported yet for CentOS build if [ -z "${DRYRUN}" ]; then ${SCRIPT_CENTOS} -w ${WORKSPACE_CENTOS} ${DRYRUN} + if [ "$CI" = "true" ]; then + ${SCRIPT_CENTOS_PRE} -w ${WORKSPACE_CENTOS} + fi fi ${SCRIPT_YP} -w ${WORKSPACE_YP} ${DRYRUN} ${YP_ARGS} diff --git a/scripts/build_inf_centos/build_inf_centos.sh b/scripts/build_inf_centos/build_inf_centos.sh index 911f524..14e70e5 100755 --- a/scripts/build_inf_centos/build_inf_centos.sh +++ b/scripts/build_inf_centos/build_inf_centos.sh @@ -93,7 +93,7 @@ while getopts "w:b:e:r:unh" OPTION; do ;; u) SKIP_UPDATE="No" - ;; + ;; h) help_info exit @@ -230,48 +230,17 @@ repo_init_sync () { echo_step_end } -create_build_docker () { - msg_step="Create build environment docker container" - echo_step_start - - cd ${MY_REPO_ROOT_DIR}/stx-tools/ - export PATH=$PATH:$PWD - - echo "MYUNAME=${USER}" > localrc - echo "PROJECT=${PRJ_NAME}" >> localrc - echo "HOST_PREFIX=${WORKSPACE}" >> localrc - echo "HOST_MIRROR_DIR=${WORKSPACE}/mirror" >> localrc - echo "LAYER=${LAYER}" >> localrc - echo "MY_EMAIL=jackie.huang@windriver.com" >> localrc - - # workarounds - #git checkout master - #sed -i 's/docker /sudo docker /' tb.sh - - #RUN_CMD="tb.sh create" - #run_cmd "Create build environment docker image" - - RUN_CMD="tb.sh run" - run_cmd "Create build environment docker container" +code_adjust () { + echo_step_start "Some codes need to be adjusted for INF project" + sed -i "s|/import/mirrors|${STX_MIRROR_DIR}|" \ + $MY_REPO/stx/metal/installer/pxe-network-installer/centos/build_srpm.data echo_step_end } -exec_build_docker () { - msg_step="Enter a bash shell within the build environment container" - echo_step_start - - cd ${MY_REPO_ROOT_DIR}/stx-tools/ - export PATH=$PATH:$PWD - - RUN_CMD="tb.sh exec" - run_cmd "Enter a bash shell within the build environment container" - - #cd $MY_REPO_ROOT_DIR/stx-tools/centos-mirror-tools/ - #RUN_CMD="sudo -E ./download_mirror.sh" - #run_cmd "Download rpms" - - echo_step_end +populate_dl () { + ${MY_REPO_ROOT_DIR}/stx-tools/toCOPY/generate-centos-repo.sh ${STX_MIRROR_DIR}/stx-6.0 + ${MY_REPO_ROOT_DIR}/stx-tools/toCOPY/populate_downloads.sh ${STX_MIRROR_DIR}/stx-6.0 } # To be removed: @@ -283,9 +252,8 @@ ISO_UP_VER=6.0.0 ISO_UP=http://mirror.starlingx.cengn.ca/mirror/starlingx/release/${ISO_UP_VER}/centos/flock/outputs/iso/${ISO_STX_COS} ISO_INF_COS=inf-image-centos-all-x86-64.iso - -build_image () { - echo_step_start "Build CentOS images" +build_image_rm () { + echo_step_start "Build CentOS images: To be removed" mkdir -p ${STX_PRJ_OUTPUT} cd ${STX_PRJ_OUTPUT} @@ -297,6 +265,24 @@ build_image () { echo_info "Build succeeded, you can get the image in ${STX_PRJ_OUTPUT}/${ISO_INF_COS}" } +build_image () { + echo_step_start "Build CentOS images" + + mkdir -p ${STX_PRJ_OUTPUT} + cd ${MY_BUILD_DIR} + RUN_CMD="build-pkgs --build-avoidance" + run_cmd "Build pkgs" + + RUN_CMD="build-iso" + run_cmd "Build ISO image" + + cp ${MY_BUILD_DIR}/export/bootimage.iso ${STX_PRJ_OUTPUT}/${ISO_INF_COS} + + echo_step_end + + echo_info "Build succeeded, you can get the image in ${STX_PRJ_OUTPUT}/${ISO_INF_COS}" +} + ######################################################################### # Main process @@ -304,7 +290,8 @@ build_image () { prepare_workspace create_env -#repo_init_sync -#create_build_docker -#exec_build_docker -build_image +repo_init_sync +code_adjust +populate_dl +build_image_rm +build_image || true diff --git a/scripts/build_inf_centos/build_inf_prepare_jenkins.sh b/scripts/build_inf_centos/build_inf_prepare_jenkins.sh new file mode 100755 index 0000000..751073d --- /dev/null +++ b/scripts/build_inf_centos/build_inf_prepare_jenkins.sh @@ -0,0 +1,297 @@ +#!/bin/sh +# +# Copyright (C) 2022 Wind River Systems, Inc. +# +# Licensed 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. +# + +# Ensure we fail the job if any steps fail. +set -e -o pipefail + +######################################################################### +# Variables +######################################################################### +WORKSPACE="" +MIRROR_CONTAINER_IMG=infbuilder/inf-centos-mirror:2022.05-stx.6.0 + +export BUILD_GROUP="jenkins" +export WGET_OPENDEV="wget --no-check-certificate" +export LOCALDISK="${WORKSPACE}/localdisk" +export MIRROR_DIR="${WORKSPACE}/mirror" + +######################################################################### +# Common Functions +######################################################################### + +help_info () { +cat << ENDHELP +Usage: +$(basename $0) [-w WORKSPACE_DIR] [-h] +where: + -w WORKSPACE_DIR is the path for the builds + -h this help info +examples: +$0 +$0 -w workspace_1234 +ENDHELP +} + +echo_step_start() { + [ -n "$1" ] && msg_step=$1 + echo "#########################################################################################" + echo "## STEP START: ${msg_step}" + echo "#########################################################################################" +} + +echo_step_end() { + [ -n "$1" ] && msg_step=$1 + echo "#########################################################################################" + echo "## STEP END: ${msg_step}" + echo "#########################################################################################" + echo +} + + +while getopts "w:h" OPTION; do + case ${OPTION} in + w) + WORKSPACE=`readlink -f ${OPTARG}` + ;; + h) + help_info + exit + ;; + esac +done + +get_mirror () { + msg_step="Get rpm mirror from dockerhub image" + echo_step_start + + docker pull ${MIRROR_CONTAINER_IMG} + docker create -ti --name inf-centos-mirror-${i} ${MIRROR_CONTAINER_IMG} sh + docker cp inf-centos-mirror:/mirror ${MIRROR_DIR} + docker rm inf-centos-mirror + + echo_step_end +} + + +######################################################################### +# Main process +######################################################################### + +sudo mkdir -p ${LOCALDISK}/loadbuild/mock-cache +sudo mkdir -p ${LOCALDISK}/loadbuild/mock +mkdir -p ${LOCALDISK}/designer +mkdir -p ${LOCALDISK}/loadbuild + +#sudo mkdir -p ${MIRROR_DIR}/CentOS +get_mirror + +sudo chmod 775 ${LOCALDISK}/loadbuild/mock +sudo chown root:mock ${LOCALDISK}/loadbuild/mock +sudo chmod 775 ${LOCALDISK}/loadbuild/mock-cache +sudo chown root:mock ${LOCALDISK}/loadbuild/mock-cache + +# Download required dependencies by mirror/build processes. +sudo yum install -y \ + anaconda \ + anaconda-runtime \ + autoconf-archive \ + autogen \ + automake \ + bc \ + bind \ + bind-utils \ + bison \ + cpanminus \ + createrepo \ + createrepo_c \ + deltarpm \ + docker-client \ + expat-devel \ + flex \ + isomd5sum \ + gcc \ + gettext \ + git \ + libguestfs-tools \ + libtool \ + libxml2 \ + lighttpd \ + lighttpd-fastcgi \ + lighttpd-mod_geoip \ + net-tools \ + mkisofs \ + mongodb \ + mongodb-server \ + pax \ + perl-CPAN \ + python-deltarpm \ + python-pep8 \ + python-pip \ + python-psutil \ + python2-psutil \ + python36-psutil \ + python36-requests \ + python3-devel \ + python-sphinx \ + python-subunit \ + python-virtualenv \ + python-yaml \ + python2-ruamel-yaml \ + postgresql \ + qemu-kvm \ + quilt \ + rpm-build \ + rpm-sign \ + rpm-python \ + squashfs-tools \ + sudo \ + systemd \ + syslinux \ + udisks2 \ + vim-enhanced \ + wget + +# clone the tools repo +cd ~ +git clone https://opendev.org/starlingx/tools.git + +# mock custumizations +# forcing chroots since a couple of packages naughtily insist on network access and +# we dont have nspawn and networks happy together. +sudo useradd -s /sbin/nologin -u 9001 -g 9001 mockbuild +sudo rmdir /var/lib/mock +sudo ln -s ${LOCALDISK}/loadbuild/mock /var/lib/mock +sudo rmdir /var/cache/mock +sudo ln -s ${LOCALDISK}/loadbuild/mock-cache /var/cache/mock +echo "config_opts['use_nspawn'] = False" | sudo tee -a /etc/mock/site-defaults.cfg +echo "config_opts['rpmbuild_networking'] = True" | sudo tee -a /etc/mock/site-defaults.cfg +echo | sudo tee -a /etc/mock/site-defaults.cfg + +# cpan modules, installing with cpanminus to avoid stupid questions since cpan is whack +sudo cpanm --notest Fatal +sudo cpanm --notest XML::SAX +sudo cpanm --notest XML::SAX::Expat +sudo cpanm --notest XML::Parser +sudo cpanm --notest XML::Simple + +# Install repo tool +sudo wget https://storage.googleapis.com/git-repo-downloads/repo -O /usr/local/bin/repo +sudo chmod a+x /usr/local/bin/repo + +# installing go and setting paths +export GOPATH="/usr/local/go" +export PATH="${GOPATH}/bin:${PATH}" +sudo yum install -y golang +sudo mkdir -p ${GOPATH}/bin +curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sudo sh + +# pip installs +# Install required python modules globally; versions are in the constraints file. +# Be careful not to replace modules provided by RPMs as it may break +# other system packages. Look for warnings similar to "Uninstalling a +# distutils installed project has been deprecated" from pip. +sudo pip install -c ~/tools/toCOPY/builder-constraints.txt \ + testrepository \ + fixtures \ + pbr \ + git-review \ + python-subunit \ + junitxml \ + testtools + +# Create a sane py27 virtualenv +virtualenv /opt/py27 && \ + source /opt/py27/bin/activate && \ + sudo pip install -c ~/tools/toCOPY/builder-opt-py27-constraints.txt \ + tox \ + && \ + for prog in tox ; do \ + ln -s /opt/py27/bin/$prog /usr/bin ; \ + done + +# Inherited tools for mock stuff +# we at least need the mock_cache_unlock tool +# they install into /usr/bin +sudo cp -rf ~/tools/toCOPY/mock_overlay /opt/mock_overlay +cd /opt/mock_overlay +make +sudo make install + +# This image requires a set of scripts and helpers +# for working correctly, in this section they are +# copied inside the image. +sudo cp ~/tools/toCOPY/finishSetup.sh /usr/local/bin +sudo cp ~/tools/toCOPY/populate_downloads.sh /usr/local/bin +sudo cp ~/tools/toCOPY/generate-local-repo.sh /usr/local/bin +sudo cp ~/tools/toCOPY/generate-centos-repo.sh /usr/local/bin +sudo cp ~/tools/toCOPY/lst_utils.sh /usr/local/bin + +# centos locales are broken. this needs to be run after the last yum install/update +sudo localedef -i en_US -f UTF-8 en_US.UTF-8 + +# setup +sudo mkdir -p /www/run +sudo mkdir -p /www/logs +sudo mkdir -p /www/home +sudo mkdir -p /www/root/htdocs/localdisk +sudo ln -s ${LOCALDISK}/loadbuild /www/root/htdocs/localdisk/loadbuild +sudo ln -s ${MIRROR_DIR}/CentOS /www/root/htdocs/CentOS +sudo ln -s ${LOCALDISK}/designer /www/root/htdocs/localdisk/designer +sudo ln -s ${WORKSPACE} /www/root/htdocs/workspace + +# lighthttpd setup +# chmod for /var/log/lighttpd fixes a centos issue +# in place sed for server root since it's expanded soon thereafter +# echo "server.bind = \"localhost\"" >> /etc/lighttpd/lighttpd.conf && \ +sudo mkdir -p /var/log/lighttpd +sudo chmod a+rwx /var/log/lighttpd/ +sudo sed -i -e 's%^var\.log_root.*$%var.log_root = "/www/logs"%g' \ + -e 's%^var\.server_root.*$%var.server_root = "/www/root"%g' \ + -e 's%^var\.home_dir.*$%var.home_dir = "/www/home"%g' \ + -e 's%^var\.state_dir.*$%var.state_dir = "/www/run"%g' \ + -e "s/server.port/#server.port/g" \ + -e "s/server.use-ipv6/#server.use-ipv6/g" \ + -e "s/server.username/#server.username/g" \ + -e "s/server.groupname/#server.groupname/g" \ + -e "s/server.bind/#server.bind/g" \ + -e "s/server.document-root/#server.document-root/g" \ + -e "s/server.dirlisting/#server.dirlisting/g" \ + -e "s/dir-listing.activate/#dir-listing.activate/g" \ + /etc/lighttpd/lighttpd.conf + +echo "server.port = 8088" | sudo tee -a /etc/lighttpd/lighttpd.conf +echo "server.use-ipv6 = \"disable\"" | sudo tee -a /etc/lighttpd/lighttpd.conf +echo "server.username = \"$USER\"" | sudo tee -a /etc/lighttpd/lighttpd.conf +echo "server.groupname = \"$BUILD_GROUP\"" | sudo tee -a /etc/lighttpd/lighttpd.conf +echo "server.bind = \"localhost\"" | sudo tee -a /etc/lighttpd/lighttpd.conf +echo "server.document-root = \"/www/root/htdocs\"" | sudo tee -a /etc/lighttpd/lighttpd.conf +echo "dir-listing.activate = \"enable\"" | sudo tee -a /etc/lighttpd/conf.d/dirlisting.conf + +sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf + +sudo chmod a+x /usr/local/bin/* + +# Customizations for mirror creation +sudo rm -f /etc/yum.repos.d/* +sudo cp -f ~/tools/centos-mirror-tools/yum.repos.d/* /etc/yum.repos.d/ +sudo cp -f ~/tools/centos-mirror-tools/rpm-gpg-keys/* /etc/pki/rpm-gpg/ + +# Import GPG keys +sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY* + +# Try to continue a yum command even if a StarlingX repo is unavailable. +sudo yum-config-manager --setopt=StarlingX\*.skip_if_unavailable=1 --save diff --git a/scripts/build_inf_centos/stx_build_prepare_centos.sh b/scripts/build_inf_centos/stx_build_prepare_centos.sh deleted file mode 100644 index c4d9ec5..0000000 --- a/scripts/build_inf_centos/stx_build_prepare_centos.sh +++ /dev/null @@ -1,340 +0,0 @@ -#!/bin/sh - -# Licensed 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. -# - -# -# Common env -# -# username to build -export MYUNAME=stxbuilder -export MYUID=1001 -export MY_EMAIL="oran.inf@windriver.com" -export WGET_OPENDEV="wget --no-check-certificate" -export LOCALDISK="/localdisk" -export MIRROR_DIR="/import/mirrors" - -groupadd cgts -echo "mock:x:751:root" >> /etc/group -echo "mockbuild:x:9001:" >> /etc/group - -useradd -r -u $MYUID -g cgts -m $MYUNAME -echo "Li69nux*"|sudo passwd --stdin ${MYUNAME} - -gpasswd -a $MYUNAME mock - -mkdir -p ${LOCALDISK}/loadbuild/mock-cache -mkdir -p ${LOCALDISK}/loadbuild/mock -mkdir -p ${LOCALDISK}/designer -mkdir -p ${MIRROR_DIR}/CentOS - -chmod 775 ${LOCALDISK}/loadbuild/mock -chown root:mock ${LOCALDISK}/loadbuild/mock -chmod 775 ${LOCALDISK}/loadbuild/mock-cache -chown root:mock ${LOCALDISK}/loadbuild/mock-cache - - -# Proxy configuration -export http_proxy="http://147.11.252.42:9090" -export https_proxy="http://147.11.252.42:9090" -export ftp_proxy="http://147.11.252.42:9090" - -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 - - -# CentOS & EPEL URLs that match the base image -# Override these with --build-arg if you have a mirror -CENTOS_7_8_URL=https://vault.centos.org/centos/7.8.2003 -CENTOS_7_9_URL=http://mirror.centos.org/centos-7/7.9.2009 -EPEL_7_8_URL=https://archives.fedoraproject.org/pub/archive/epel/7.2020-04-20 - -# Lock down centos & epel repos -rm -f /etc/yum.repos.d/* -cd /etc/yum.repos.d/ -${WGET_OPENDEV} https://opendev.org/starlingx/tools/raw/branch/master/toCOPY/yum.repos.d/centos-7.9.repo -${WGET_OPENDEV} https://opendev.org/starlingx/tools/raw/branch/master/toCOPY/yum.repos.d/centos.repo -${WGET_OPENDEV} https://opendev.org/starlingx/tools/raw/branch/master/toCOPY/yum.repos.d/epel.repo - -cd /etc/pki/rpm-gpg/ -${WGET_OPENDEV} https://opendev.org/starlingx/tools/raw/branch/master/centos-mirror-tools/rpm-gpg-keys/RPM-GPG-KEY-EPEL-7 - -cd - -rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY* && \ - echo "http_caching=packages" >> /etc/yum.conf && \ - echo "skip_missing_names_on_install=0" >>/etc/yum.conf && \ - # yum variables must be in lower case ; \ - echo "$CENTOS_7_8_URL" >/etc/yum/vars/centos_7_8_url && \ - echo "$EPEL_7_8_URL" >/etc/yum/vars/epel_7_8_url && \ - echo "$CENTOS_7_9_URL" >/etc/yum/vars/centos_7_9_url && \ - # disable fastestmirror plugin because we are not using mirrors ; \ - # FIXME: use a mirrorlist URL for centos/vault/epel archives. I couldn't find one. - sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/fastestmirror.conf && \ - echo "[main]" >> /etc/yum/pluginconf.d/subscription-manager.conf && \ - echo "enabled=0" >> /etc/yum/pluginconf.d/subscription-manager.conf && \ - yum clean all && \ - yum makecache && \ - yum install -y deltarpm - - -# root CA cert expired on October 1st, 2021 -yum update -y --enablerepo=centos-7.9-updates ca-certificates - -# Download required dependencies by mirror/build processes. -yum install -y \ - anaconda \ - anaconda-runtime \ - autoconf-archive \ - autogen \ - automake \ - bc \ - bind \ - bind-utils \ - bison \ - cpanminus \ - createrepo \ - createrepo_c \ - deltarpm \ - docker-client \ - expat-devel \ - flex \ - isomd5sum \ - gcc \ - gettext \ - git \ - libguestfs-tools \ - libtool \ - libxml2 \ - lighttpd \ - lighttpd-fastcgi \ - lighttpd-mod_geoip \ - net-tools \ - mkisofs \ - mongodb \ - mongodb-server \ - pax \ - perl-CPAN \ - python-deltarpm \ - python-pep8 \ - python-pip \ - python-psutil \ - python2-psutil \ - python36-psutil \ - python36-requests \ - python3-devel \ - python-sphinx \ - python-subunit \ - python-virtualenv \ - python-yaml \ - python2-ruamel-yaml \ - postgresql \ - qemu-kvm \ - quilt \ - rpm-build \ - rpm-sign \ - rpm-python \ - squashfs-tools \ - sudo \ - systemd \ - syslinux \ - udisks2 \ - vim-enhanced \ - wget - -# clone the tools repo -cd ~ -git clone https://opendev.org/starlingx/tools.git - -# Finally install a locked down version of mock -yum install -y https://mirrors.xlhy1.com/centos/7/updates/x86_64/Packages/python36-rpm-4.11.3-7.el7.x86_64.rpm -yum install -y \ - http://mirror.starlingx.cengn.ca/mirror/centos/epel/dl.fedoraproject.org/pub/epel/7/x86_64/Packages/m/mock-1.4.16-1.el7.noarch.rpm \ - http://mirror.starlingx.cengn.ca/mirror/centos/epel/dl.fedoraproject.org/pub/epel/7/x86_64/Packages/m/mock-core-configs-31.6-1.el7.noarch.rpm - -# mock custumizations -# forcing chroots since a couple of packages naughtily insist on network access and -# we dont have nspawn and networks happy together. -useradd -s /sbin/nologin -u 9001 -g 9001 mockbuild && \ - rmdir /var/lib/mock && \ - ln -s ${LOCALDISK}/loadbuild/mock /var/lib/mock && \ - rmdir /var/cache/mock && \ - ln -s ${LOCALDISK}/loadbuild/mock-cache /var/cache/mock && \ - echo "config_opts['use_nspawn'] = False" >> /etc/mock/site-defaults.cfg && \ - echo "config_opts['rpmbuild_networking'] = True" >> /etc/mock/site-defaults.cfg && \ - echo >> /etc/mock/site-defaults.cfg - -# cpan modules, installing with cpanminus to avoid stupid questions since cpan is whack -cpanm --notest Fatal && \ - cpanm --notest XML::SAX && \ - cpanm --notest XML::SAX::Expat && \ - cpanm --notest XML::Parser && \ - cpanm --notest XML::Simple - -# Install repo tool -curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/local/bin/repo && \ - chmod a+x /usr/local/bin/repo - -# installing go and setting paths -export GOPATH="/usr/local/go" -export PATH="${GOPATH}/bin:${PATH}" -yum install -y golang && \ - mkdir -p ${GOPATH}/bin && \ - curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh - -# Uprev git, repo -yum install -y dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel asciidoc xmlto docbook2X && \ - cd /tmp && \ - wget https://github.com/git/git/archive/v2.29.2.tar.gz -O git-2.29.2.tar.gz && \ - tar xzvf git-2.29.2.tar.gz && \ - cd git-2.29.2 && \ - make configure && \ - ./configure --prefix=/usr/local && \ - make all doc && \ - make install install-doc && \ - cd /tmp && \ - rm -rf git-2.29.2.tar.gz git-2.29.2 - -# Systemd Enablement -#(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ -# rm -f /lib/systemd/system/multi-user.target.wants/*;\ -# rm -f /etc/systemd/system/*.wants/*;\ -# rm -f /lib/systemd/system/local-fs.target.wants/*; \ -# rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ -# rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ -# rm -f /lib/systemd/system/basic.target.wants/*;\ -# rm -f /lib/systemd/system/anaconda.target.wants/* - -# pip installs -# Install required python modules globally; versions are in the constraints file. -# Be careful not to replace modules provided by RPMs as it may break -# other system packages. Look for warnings similar to "Uninstalling a -# distutils installed project has been deprecated" from pip. -pip install -c ~/tools/toCOPY/builder-constraints.txt \ - testrepository \ - fixtures \ - pbr \ - git-review \ - python-subunit \ - junitxml \ - testtools - -# Create a sane py27 virtualenv -virtualenv /opt/py27 && \ - source /opt/py27/bin/activate && \ - pip install -c ~/tools/toCOPY/builder-opt-py27-constraints.txt \ - tox \ - && \ - for prog in tox ; do \ - ln -s /opt/py27/bin/$prog /usr/bin ; \ - done - -# Inherited tools for mock stuff -# we at least need the mock_cache_unlock tool -# they install into /usr/bin -cp -rf ~/tools/toCOPY/mock_overlay /opt/mock_overlay -cd /opt/mock_overlay && \ - make && \ - make install - -# This image requires a set of scripts and helpers -# for working correctly, in this section they are -# copied inside the image. -cp ~/tools/toCOPY/finishSetup.sh /usr/local/bin -cp ~/tools/toCOPY/populate_downloads.sh /usr/local/bin -cp ~/tools/toCOPY/generate-local-repo.sh /usr/local/bin -cp ~/tools/toCOPY/generate-centos-repo.sh /usr/local/bin -cp ~/tools/toCOPY/lst_utils.sh /usr/local/bin -cp ~/tools/toCOPY/.inputrc /home/$MYUNAME/ -chown $MYUNAME:cgts /home/$MYUNAME/.inputrc - -# Thes are included for backward compatibility, and -# should be removed after a reasonable time. -cp ~/tools/toCOPY/generate-cgcs-tis-repo /usr/local/bin -cp ~/tools/toCOPY/generate-cgcs-centos-repo.sh /usr/local/bin - -# ENV setup -echo "# Load stx-builder configuration" >> /etc/profile.d/stx-builder-conf.sh && \ - echo "if [[ -r \${HOME}/buildrc ]]; then" >> /etc/profile.d/stx-builder-conf.sh && \ - echo " source \${HOME}/buildrc" >> /etc/profile.d/stx-builder-conf.sh && \ - echo " export PROJECT SRC_BUILD_ENVIRONMENT MYPROJECTNAME MYUNAME" >> /etc/profile.d/stx-builder-conf.sh && \ - echo " export MY_BUILD_CFG MY_BUILD_CFG_RT MY_BUILD_CFG_STD MY_BUILD_DIR MY_BUILD_ENVIRONMENT MY_BUILD_ENVIRONMENT_FILE MY_BUILD_ENVIRONMENT_FILE_RT MY_BUILD_ENVIRONMENT_FILE_STD MY_DEBUG_BUILD_CFG_RT MY_DEBUG_BUILD_CFG_STD MY_LOCAL_DISK MY_MOCK_ROOT MY_REPO MY_REPO_ROOT_DIR MY_SRC_RPM_BUILD_DIR MY_RELEASE MY_WORKSPACE LAYER" >> /etc/profile.d/stx-builder-conf.sh && \ - echo "fi" >> /etc/profile.d/stx-builder-conf.sh && \ - echo "export FORMAL_BUILD=0" >> /etc/profile.d/stx-builder-conf.sh && \ - echo "export PATH=\$MY_REPO/build-tools:\$PATH" >> /etc/profile.d/stx-builder-conf.sh - -# centos locales are broken. this needs to be run after the last yum install/update -localedef -i en_US -f UTF-8 en_US.UTF-8 - -# setup -mkdir -p /www/run && \ - mkdir -p /www/logs && \ - mkdir -p /www/home && \ - mkdir -p /www/root/htdocs/localdisk && \ - chown -R $MYUID:cgts /www && \ - ln -s ${LOCALDISK}/loadbuild /www/root/htdocs/localdisk/loadbuild && \ - ln -s ${MIRROR_DIR}/CentOS /www/root/htdocs/CentOS && \ - ln -s ${LOCALDISK}/designer /www/root/htdocs/localdisk/designer - -# lighthttpd setup -# chmod for /var/log/lighttpd fixes a centos issue -# in place sed for server root since it's expanded soon thereafter -# echo "server.bind = \"localhost\"" >> /etc/lighttpd/lighttpd.conf && \ -echo "$MYUNAME ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \ - mkdir -p /var/log/lighttpd && \ - chmod a+rwx /var/log/lighttpd/ && \ - sed -i 's%^var\.log_root.*$%var.log_root = "/www/logs"%g' /etc/lighttpd/lighttpd.conf && \ - sed -i 's%^var\.server_root.*$%var.server_root = "/www/root"%g' /etc/lighttpd/lighttpd.conf && \ - sed -i 's%^var\.home_dir.*$%var.home_dir = "/www/home"%g' /etc/lighttpd/lighttpd.conf && \ - sed -i 's%^var\.state_dir.*$%var.state_dir = "/www/run"%g' /etc/lighttpd/lighttpd.conf && \ - sed -i "s/server.port/#server.port/g" /etc/lighttpd/lighttpd.conf && \ - sed -i "s/server.use-ipv6/#server.use-ipv6/g" /etc/lighttpd/lighttpd.conf && \ - sed -i "s/server.username/#server.username/g" /etc/lighttpd/lighttpd.conf && \ - sed -i "s/server.groupname/#server.groupname/g" /etc/lighttpd/lighttpd.conf && \ - sed -i "s/server.bind/#server.bind/g" /etc/lighttpd/lighttpd.conf && \ - sed -i "s/server.document-root/#server.document-root/g" /etc/lighttpd/lighttpd.conf && \ - sed -i "s/server.dirlisting/#server.dirlisting/g" /etc/lighttpd/lighttpd.conf && \ - echo "server.port = 8088" >> /etc/lighttpd/lighttpd.conf && \ - echo "server.use-ipv6 = \"disable\"" >> /etc/lighttpd/lighttpd.conf && \ - echo "server.username = \"$MYUNAME\"" >> /etc/lighttpd/lighttpd.conf && \ - echo "server.groupname = \"cgts\"" >> /etc/lighttpd/lighttpd.conf && \ - echo "server.bind = \"localhost\"" >> /etc/lighttpd/lighttpd.conf && \ - echo "server.document-root = \"/www/root/htdocs\"" >> /etc/lighttpd/lighttpd.conf && \ - sed -i "s/dir-listing.activate/#dir-listing.activate/g" /etc/lighttpd/conf.d/dirlisting.conf && \ - echo "dir-listing.activate = \"enable\"" >> /etc/lighttpd/conf.d/dirlisting.conf - -#systemctl enable lighttpd -#systemctl start lighttpd -/usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf - - -echo "export PATH=/usr/local/bin:${LOCALDISK}/designer/$MYUNAME/bin:\$PATH" >> /home/$MYUNAME/.bashrc -chmod a+x /usr/local/bin/* - -# Genrate a git configuration file in order to save an extra step -# for end users, this file is required by "repo" tool. -cd /home/$MYUNAME/ -runuser -u $MYUNAME -- git config --global user.email $MY_EMAIL && \ - runuser -u $MYUNAME -- git config --global user.name $MYUNAME && \ - runuser -u $MYUNAME -- git config --global color.ui false - -# Customizations for mirror creation -rm -f /etc/yum.repos.d/* -cp -f ~/tools/centos-mirror-tools/yum.repos.d/* /etc/yum.repos.d/ -cp -f ~/tools/centos-mirror-tools/rpm-gpg-keys/* /etc/pki/rpm-gpg/ - -# Import GPG keys -rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY* - -# Try to continue a yum command even if a StarlingX repo is unavailable. -yum-config-manager --setopt=StarlingX\*.skip_if_unavailable=1 --save -- 2.16.6