mirror of
https://github.com/tuxbox-neutrino/docker-buildenv.git
synced 2025-08-26 13:12:42 +02:00
Initial commit
This commit is contained in:
255
Dockerfile
Normal file
255
Dockerfile
Normal file
@@ -0,0 +1,255 @@
|
||||
## Use the official Debian 11 image as a base
|
||||
# FROM debian:bullseye-slim
|
||||
FROM dbt1/git-tools
|
||||
|
||||
### Install the required tools and packages
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
bash \
|
||||
bzip2 \
|
||||
binutils \
|
||||
build-essential \
|
||||
chrpath \
|
||||
clisp \
|
||||
coreutils \
|
||||
cpio \
|
||||
cppcheck \
|
||||
curl \
|
||||
debianutils \
|
||||
default-jre \
|
||||
diffstat \
|
||||
diffutils \
|
||||
doxygen \
|
||||
file \
|
||||
gcc \
|
||||
gcc-multilib \
|
||||
git-core \
|
||||
gnupg \
|
||||
gawk \
|
||||
iputils-ping \
|
||||
libc-bin \
|
||||
libc6 \
|
||||
libcapstone4 \
|
||||
libegl1-mesa \
|
||||
libsdl1.2debian \
|
||||
libsdl2-dev \
|
||||
libxml2-utils \
|
||||
lighttpd \
|
||||
linux-libc-dev \
|
||||
locales-all \
|
||||
locales \
|
||||
make \
|
||||
nano \
|
||||
net-tools \
|
||||
ninja-build \
|
||||
openssh-server \
|
||||
passwd \
|
||||
procps \
|
||||
pylint3 \
|
||||
python \
|
||||
python3 \
|
||||
python3-git \
|
||||
python3-jinja2 \
|
||||
python3-pexpect \
|
||||
rsync \
|
||||
runit \
|
||||
sed \
|
||||
socat \
|
||||
subversion \
|
||||
sudo \
|
||||
texinfo \
|
||||
tree \
|
||||
unzip \
|
||||
util-linux \
|
||||
wget
|
||||
|
||||
### Args
|
||||
ARG BUILDENV_GIT_URL=${BUILDENV_GIT_URL}
|
||||
ARG BUILDENV_VERSION=${BUILDENV_VERSION}
|
||||
ARG BUILDENV_PREFIX=${BUILDENV_PREFIX}
|
||||
ARG TB_BUILD_TIME=${TB_BUILD_TIME}
|
||||
ARG DISPLAY=${DISPLAY}
|
||||
ARG ENABLE_UI_TOOLS=false
|
||||
ARG GIT_EMAIL=${GIT_EMAIL}
|
||||
ARG GIT_USER=${GIT_USER}
|
||||
ARG USER_GROUP_ID=${USER_GROUP_ID}
|
||||
ARG HISTFILE=${HISTFILE}
|
||||
ARG HOST_PREFIX=${HOST_PREFIX}
|
||||
ARG LOCALE_LANG=${LOCALE_LANG}
|
||||
ARG LOCAL_HOSTNAME=${LOCAL_HOSTNAME}
|
||||
ARG NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES}
|
||||
ARG PATH=${PATH}
|
||||
ARG QT_QUICK_BACKEND=${QT_QUICK_BACKEND}
|
||||
ARG QT_XCB_GL_INTEGRATION=${QT_XCB_GL_INTEGRATION}
|
||||
ARG START_PATH=${START_PATH}
|
||||
ARG TERM=${TERM}
|
||||
ARG TZ=${TZ}
|
||||
ARG USER=${USER}
|
||||
ARG USER_DIR=${USER_DIR}
|
||||
ARG USER_GROUP=${USER_GROUP}
|
||||
ARG USER_ID=${USER_ID}
|
||||
ARG USER_PASSWORD=${USER_PASSWORD}
|
||||
ARG USER_VOLUME_WORKDIR=${USER_DIR}/${HOST_PREFIX}
|
||||
ARG TB_VERSION=${TB_VERSION}
|
||||
ARG XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
|
||||
ARG XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}
|
||||
|
||||
## Set the desired Locale
|
||||
RUN locale-gen ${LOCALE_LANG} && \
|
||||
dpkg-reconfigure --frontend=noninteractive locales && \
|
||||
update-locale LANG=${LOCALE_LANG}
|
||||
|
||||
### Some labels
|
||||
LABEL maintainer="Thilo Graf <dbt@novatux.de>" \
|
||||
maintainer.org="tuxbox-neutrino" \
|
||||
maintainer.org.uri="https://tuxbox-neutrino.org" \
|
||||
com.tuxbox-neutrino.project.repo.type="git" \
|
||||
com.tuxbox-neutrino.project.repo.uri="https://github.com/dbt1/docker-tuxbox-build" \
|
||||
com.tuxbox-neutrino.project.repo.issues="https://github.com/dbt1/docker-tuxbox-build/issues" \
|
||||
com.tuxbox-neutrino.app.docker-tuxbox-build.version="${TB_VERSION}" \
|
||||
# Open container labels
|
||||
org.opencontainers.image.created="${TB_BUILD_TIME}" \
|
||||
org.opencontainers.image.description="Debian based" \
|
||||
org.opencontainers.image.vendor="tuxbox-neutrino" \
|
||||
org.opencontainers.image.source="https://github.com/dbt1/docker-tuxbox-build" \
|
||||
# Artifact hub annotations
|
||||
io.artifacthub.package.readme-url="https://github.com/dbt1/docker-tuxbox-build/blob/master/README.md" \
|
||||
io.artifacthub.package.logo-url="https://avatars.githubusercontent.com/u/22789022?s=200&v=4"
|
||||
|
||||
### ui package experimental atm
|
||||
RUN if [ "$ENABLE_UI_TOOLS" = "true" ]; then \
|
||||
apt-get update && apt-get install -y --no-install-recommends \
|
||||
breeze-icon-theme \
|
||||
meld \
|
||||
dbus \
|
||||
kdevelop; \
|
||||
fi
|
||||
## avoid dbus warn messages
|
||||
ENV NO_AT_BRIDGE=1
|
||||
## Create some basic directories and permissions for X-Server
|
||||
RUN mkdir -p $XDG_RUNTIME_DIR && chown -R root:root $XDG_RUNTIME_DIR && chmod 0700 $XDG_RUNTIME_DIR
|
||||
|
||||
### Terminal
|
||||
## Copy welcome message
|
||||
ENV BANNER_FILE=/etc/welcome.txt
|
||||
COPY terminal-splash.txt /etc/terminal-splash.txt
|
||||
RUN cat /etc/terminal-splash.txt > ${BANNER_FILE} && \
|
||||
echo "--------------------------------------------------------------" >> ${BANNER_FILE} && \
|
||||
echo "Tuxbox-Builder Version: ${TB_VERSION}" >> ${BANNER_FILE} && \
|
||||
echo "--------------------------------------------------------------" >> ${BANNER_FILE}
|
||||
|
||||
### ssh stuff
|
||||
RUN mkdir /var/run/sshd && \
|
||||
ssh-keygen -A && \
|
||||
mkdir -p /etc/service/sshd && \
|
||||
echo '#!/bin/sh' > /etc/service/sshd/run && \
|
||||
echo 'exec /usr/sbin/sshd -D' >> /etc/service/sshd/run && \
|
||||
chmod 755 /etc/service/sshd/run
|
||||
|
||||
### Set timzone
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
## Add the user with default password
|
||||
RUN groupadd -g "${USER_GROUP_ID}" "${USER_GROUP}" && \
|
||||
useradd -m -u "${USER_ID}" -g "${USER_GROUP_ID}" -s /bin/bash "${USER}" && \
|
||||
echo "${USER}:${USER_PASSWORD}" | chpasswd
|
||||
|
||||
## Lighttpd setup and create the runit service for lighttpd
|
||||
ENV LIGHTTPD_RUN="/etc/service/lighttpd/run"
|
||||
ENV LIGHTTPD_CONFIG_PATH="/config/lighttpd"
|
||||
ENV LIGHTTPD_STD_CONFIG_FILE="${LIGHTTPD_CONFIG_PATH}/lighttpd.conf"
|
||||
ENV LIGHTTPD_CONF_INC="${LIGHTTPD_CONFIG_PATH}/lighttpd.conf.inc"
|
||||
RUN mkdir -p /etc/service/lighttpd && \
|
||||
echo '#!/bin/sh' > ${LIGHTTPD_RUN} && \
|
||||
echo "if [ ! -d ${LIGHTTPD_CONFIG_PATH} ]; then" >> ${LIGHTTPD_RUN} && \
|
||||
echo " mkdir -p ${LIGHTTPD_CONFIG_PATH}" >> ${LIGHTTPD_RUN} && \
|
||||
echo "fi" >> ${LIGHTTPD_RUN} && \
|
||||
echo "" >> ${LIGHTTPD_RUN} && \
|
||||
echo "if [ ! -f ${LIGHTTPD_STD_CONFIG_FILE} ]; then" >> ${LIGHTTPD_RUN} && \
|
||||
echo " cp /etc/lighttpd/lighttpd.conf ${LIGHTTPD_STD_CONFIG_FILE}" >> ${LIGHTTPD_RUN} && \
|
||||
echo " echo 'dir-listing.activate = \"enable\"' >> ${LIGHTTPD_STD_CONFIG_FILE}" >> ${LIGHTTPD_RUN} && \
|
||||
echo " sed -i 's|/var/www/html|${USER_VOLUME_WORKDIR}/${BUILDENV_PREFIX}/dist|' ${LIGHTTPD_STD_CONFIG_FILE}" >> ${LIGHTTPD_RUN} && \
|
||||
echo "fi" >> ${LIGHTTPD_RUN} && \
|
||||
echo "" >> ${LIGHTTPD_RUN} && \
|
||||
echo "exec lighttpd -D -f ${LIGHTTPD_STD_CONFIG_FILE}" >> ${LIGHTTPD_RUN} && \
|
||||
chmod 755 ${LIGHTTPD_RUN}
|
||||
|
||||
### generate content of start script ###
|
||||
ENV CONTAINER_INIT_SCRIPT="/usr/local/bin/init.sh"
|
||||
RUN echo "#!/bin/bash" > ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo 'Initialize tuxbox-builder container...'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "chown -R ${USER}:${USER_GROUP} ${USER_DIR} ${USER_VOLUME_DATADIR}" >> ${CONTAINER_INIT_SCRIPT}
|
||||
|
||||
## prepare git config
|
||||
#COPY .gitconfig ${USER_DIR}/.gitconfig
|
||||
RUN mkdir -p ${XDG_CONFIG_HOME}/git && \
|
||||
echo "echo -e '[user]\\n\\temail = ${GIT_EMAIL}\\n\\tname = ${GIT_USER}' > ${XDG_CONFIG_HOME}/git/config" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "chown -R ${USER}:${USER_GROUP} ${XDG_CONFIG_HOME}/git" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo " >> ${CONTAINER_INIT_SCRIPT}
|
||||
|
||||
## Prepare buildenv script
|
||||
RUN echo "if [ ! -d ${START_PATH}/.git ]; then" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo " echo Cloning buildenv Repository from ${BUILDENV_GIT_URL}" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo " git clone ${BUILDENV_GIT_URL} /tmp/${BUILDENV_PREFIX}" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo " rsync -a /tmp/${BUILDENV_PREFIX} ${USER_VOLUME_WORKDIR}/" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo " rm -rf ${USER_DIR}/${BUILDENV_PREFIX}/tmp" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "else" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo " echo 'Repository [${START_PATH}] already exists. Not touched!'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "fi" >> ${CONTAINER_INIT_SCRIPT}
|
||||
|
||||
## prepare profile
|
||||
COPY .bashrc ${USER_DIR}/.bashrc
|
||||
RUN echo "sed -i 's|@START_PATH@|'"${START_PATH}"'|' ${USER_DIR}/.bashrc" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "sed -i 's|@VERSION@|'"${TB_VERSION}"'|' ${USER_DIR}/.bashrc" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "sed -i 's|@HISTFILE@|'"${HISTFILE}"'|' ${USER_DIR}/.bashrc" >> ${CONTAINER_INIT_SCRIPT}
|
||||
|
||||
## prepare ssh config
|
||||
RUN echo "mkdir -p ${USER_DIR}/.ssh" >> ${CONTAINER_INIT_SCRIPT}
|
||||
|
||||
## show env info
|
||||
RUN echo "echo " >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo Environment:" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo BUILDENV_VERSION='${BUILDENV_VERSION}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo HOST_PREFIX='${HOST_PREFIX}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo BUILDENV_PREFIX='${BUILDENV_PREFIX}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo BUILDENV_GIT_URL='${BUILDENV_GIT_URL}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo TZ='${TZ}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo USER='${USER}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo USER_GROUP='${USER_GROUP}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo USER_ID='${USER_ID}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo USER_GROUP_ID='${USER_GROUP_ID}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo USER_DIR='${HOME}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo USER_PASSWORD=******" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo HISTFILE='${HISTFILE}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo GIT_USER='${GIT_USER}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo GIT_EMAIL='${GIT_EMAIL}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo PATH='${PATH}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo LOCALE_LANG='${LOCALE_LANG}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo START_PATH='${START_PATH}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo TB_VERSION='${TB_VERSION}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo TB_BUILD_TIME='${TB_BUILD_TIME}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo DISPLAY='${DISPLAY}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo ENABLE_UI_TOOLS='${ENABLE_UI_TOOLS} NOTE: Experimental only!'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo LOCAL_HOSTNAME='${LOCAL_HOSTNAME}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo HOSTNAME='$HOSTNAME'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo XDG_RUNTIME_DIR='${XDG_RUNTIME_DIR}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo XDG_CONFIG_HOME='${XDG_CONFIG_HOME}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo QT_QUICK_BACKEND='${QT_QUICK_BACKEND}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo QT_XCB_GL_INTEGRATION='${QT_XCB_GL_INTEGRATION}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo NVIDIA_VISIBLE_DEVICES='${NVIDIA_VISIBLE_DEVICES}'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "echo " >> ${CONTAINER_INIT_SCRIPT}
|
||||
|
||||
## start services
|
||||
RUN echo "echo 'Ready...'" >> ${CONTAINER_INIT_SCRIPT} && \
|
||||
echo "exec runsvdir -P /etc/service" >> ${CONTAINER_INIT_SCRIPT}
|
||||
### END generate content of start script ###
|
||||
|
||||
# clean up
|
||||
RUN apt-get autoremove -y && apt-get autoclean && apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
## make start script executable
|
||||
RUN chmod 755 "${CONTAINER_INIT_SCRIPT}"
|
||||
|
||||
# Start container with init script
|
||||
ENTRYPOINT ["bash", "-c", "${CONTAINER_INIT_SCRIPT}"]
|
||||
CMD ["D"]
|
Reference in New Issue
Block a user