Add unified dockerfile
The objective of this commit is to unify the customization of the follow docker images in one file. - Dockerfile.centos73 - Dockerfile.centos73.TC-builder - centos-mirror-tools/Dockerfile This is order to create a generic StarlingX docker image, this image should be able to handle all building process. Furthermore this unification will reduce the instructions of the installation guide for our end users. Story: 2003712 Task: 226370 Change-Id: Id9b405743763be2e0d7aa37c8070c6788bc099c3 Signed-off-by: Mario Alfredo Carrillo Arevalo <mario.alfredo.c.arevalo@intel.com>
This commit is contained in:
parent
8ff2f0e8ba
commit
4b4fc873b5
231
Dockerfile
Normal file
231
Dockerfile
Normal file
@ -0,0 +1,231 @@
|
||||
# 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.
|
||||
|
||||
FROM centos:7.4.1708
|
||||
|
||||
# Proxy configuration
|
||||
#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"
|
||||
|
||||
|
||||
# username you will docker exec into the container as.
|
||||
# It should NOT be your host username so you can easily tell
|
||||
# if you are in our out of the container.
|
||||
ARG MYUNAME=builder
|
||||
ARG MYUID=1000
|
||||
|
||||
ENV container=docker
|
||||
|
||||
# Download required dependencies by mirror/build processes.
|
||||
# Notice there are 3 invocations to yum package manage.
|
||||
# 1) Enable EPEL repository.
|
||||
# 2) Download required packages.
|
||||
# 3) Clean yum cache.
|
||||
RUN groupadd -g 751 cgts && \
|
||||
echo "mock:x:751:root" >> /etc/group && \
|
||||
echo "mockbuild:x:9001:" >> /etc/group && \
|
||||
yum install -y epel-release && \
|
||||
yum install -y anaconda \
|
||||
anaconda-help \
|
||||
anaconda-runtime \
|
||||
bc \
|
||||
bind \
|
||||
bind-utils \
|
||||
cpanminus \
|
||||
createrepo \
|
||||
deltarpm \
|
||||
expat-devel \
|
||||
gcc \
|
||||
gettext \
|
||||
git \
|
||||
libxml2 \
|
||||
libxml2-devel \
|
||||
libxslt-devel \
|
||||
libffi-devel \
|
||||
lighttpd \
|
||||
lighttpd-fastcgi \
|
||||
lighttpd-mod_geoip \
|
||||
libvirt-devel \
|
||||
net-tools \
|
||||
mkisofs \
|
||||
mock \
|
||||
mongodb \
|
||||
mongodb-server \
|
||||
mariadb-devel \
|
||||
openldap-devel \
|
||||
openssl-devel \
|
||||
pax \
|
||||
perl-CPAN \
|
||||
python-deltarpm \
|
||||
python-devel \
|
||||
python-pep8 \
|
||||
python-pip \
|
||||
python-psutil \
|
||||
python-subunit \
|
||||
python-pip \
|
||||
python-testrepository \
|
||||
python-tox \
|
||||
postgresql \
|
||||
postgresql-devel \
|
||||
qemu-kvm \
|
||||
quilt \
|
||||
rpm-build \
|
||||
rpm-sign \
|
||||
rpm-python \
|
||||
sqlite-devel \
|
||||
squashfs-tools \
|
||||
sudo \
|
||||
systemd \
|
||||
syslinux \
|
||||
udisks2 \
|
||||
vim-enhanced \
|
||||
wget \
|
||||
yumdownloader
|
||||
|
||||
# This image requires a set of scripts and helpers
|
||||
# for working correctly, in this section they are
|
||||
# copied inside the image.
|
||||
COPY toCOPY/finishSetup.sh /usr/local/bin
|
||||
COPY toCOPY/populate_downloads.sh /usr/local/bin
|
||||
COPY toCOPY/generate-cgcs-tis-repo /usr/local/bin
|
||||
COPY toCOPY/generate-cgcs-centos-repo.sh /usr/local/bin
|
||||
COPY toCOPY/.inputrc /home/$MYUNAME/
|
||||
|
||||
# cpan modules, installing with cpanminus to avoid stupid questions since cpan is whack
|
||||
RUN cpanm --notest Fatal && \
|
||||
cpanm --notest XML::SAX && \
|
||||
cpanm --notest XML::SAX::Expat && \
|
||||
cpanm --notest XML::Parser && \
|
||||
cpanm --notest XML::Simple
|
||||
|
||||
# pip installs
|
||||
RUN pip install python-subunit junitxml --upgrade && \
|
||||
pip install tox --upgrade
|
||||
|
||||
# Install repo tool
|
||||
RUN curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/local/bin/repo && \
|
||||
chmod a+x /usr/local/bin/repo
|
||||
|
||||
# mock time
|
||||
# forcing chroots since a couple of packages naughtily insist on network access and
|
||||
# we dont have nspawn and networks happy together.
|
||||
RUN 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
|
||||
|
||||
# Inherited tools for mock stuff
|
||||
# we at least need the mock_cache_unlock tool
|
||||
# they install into /usr/bin
|
||||
COPY toCOPY/cgcs_overlay /opt/cgcs_overlay
|
||||
RUN cd /opt/cgcs_overlay && \
|
||||
make && \
|
||||
make install
|
||||
|
||||
# ENV setup
|
||||
RUN echo "# Load stx-builder configuration" >> /etc/profile.d/TC.sh && \
|
||||
echo "if [[ -r \${HOME}/buildrc ]]; then" >> /etc/profile.d/TC.sh && \
|
||||
echo " source \${HOME}/buildrc" >> /etc/profile.d/TC.sh && \
|
||||
echo " export PROJECT SRC_BUILD_ENVIRONMENT MYPROJECTNAME MYUNAME" >> /etc/profile.d/TC.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_TC_RELEASE MY_WORKSPACE" >> /etc/profile.d/TC.sh && \
|
||||
echo "fi" >> /etc/profile.d/TC.sh && \
|
||||
echo "export FORMAL_BUILD=0" >> /etc/profile.d/TC.sh && \
|
||||
echo "export PATH=\$MY_REPO/build-tools:\$PATH" >> /etc/profile.d/TC.sh
|
||||
|
||||
# centos locales are broken. this needs to be run after the last yum install/update
|
||||
RUN localedef -i en_US -f UTF-8 en_US.UTF-8
|
||||
|
||||
# setup
|
||||
RUN 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 /import/mirrors/CentOS /www/root/htdocs/CentOS && \
|
||||
ln -s /import/mirrors/fedora /www/root/htdocs/fedora && \
|
||||
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 && \
|
||||
RUN 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
|
||||
|
||||
# Systemd Enablement
|
||||
RUN (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/*
|
||||
|
||||
# Without this, init won't start the enabled services and exec'ing and starting
|
||||
# them reports "Failed to get D-Bus connection: Operation not permitted".
|
||||
VOLUME /run /tmp
|
||||
|
||||
RUN useradd -r -u $MYUID -g cgts -m $MYUNAME && \
|
||||
ln -s /home/$MYUNAME/.ssh /mySSH && \
|
||||
rsync -av /etc/skel/ /home/$MYUNAME/
|
||||
|
||||
# now that we are doing systemd, make the startup script be in bashrc
|
||||
# also we need to SHADOW the udev centric mkefiboot script with a sudo centric one
|
||||
RUN echo "bash -C /usr/local/bin/finishSetup.sh" >> /home/$MYUNAME/.bashrc && \
|
||||
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.
|
||||
RUN chown $MYUNAME /home/$MYUNAME && \
|
||||
runuser -u $MYUNAME -- git config --global user.email $MYUNAME@starlingx.com && \
|
||||
runuser -u $MYUNAME -- git config --global user.name $MYUNAME && \
|
||||
runuser -u $MYUNAME -- git config --global color.ui false
|
||||
|
||||
# Customizations for mirror creation
|
||||
RUN rm /etc/yum.repos.d/CentOS-Sources.repo
|
||||
RUN rm /etc/yum.repos.d/epel.repo
|
||||
COPY centos-mirror-tools/yum.repos.d/* /etc/yum.repos.d/
|
||||
COPY centos-mirror-tools/rpm-gpg-keys/* /etc/pki/rpm-gpg/
|
||||
|
||||
# Import GPG keys
|
||||
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
|
||||
|
||||
# Don't know if it's possible to run services without starting this
|
||||
CMD /usr/sbin/init
|
Loading…
Reference in New Issue
Block a user