Commits (5)
# adapted from https://github.com/jafreck/docker-ubuntu-slurm/blob/master/Dockerfile # adapted from https://github.com/jafreck/docker-ubuntu-slurm/blob/master/Dockerfile
FROM ubuntu:20.04 FROM ubuntu:20.04
LABEL org.opencontainers.image.source="https://earth.bsc.es/gitlab/mgimenez/ces_slurm_simulator_tools" \ LABEL org.opencontainers.image.source="https://earth.bsc.es/gitlab/mgimenez/docker-ubuntu-ces-slurm-sim" \
org.opencontainers.image.title="ces_slurm_simulator_tools" \ org.opencontainers.image.title="ces_slurm_simulator_tools" \
org.opencontainers.image.description="Slurm Simulator All-in-one Docker container on Ubuntu 20.04" \ org.opencontainers.image.description="Slurm Simulator All-in-one Docker container on Ubuntu 20.04" \
org.opencontainers.image.vendor="Computational Earth Sciences Group, Earth Sciences Department, BSC-CNS" \ org.opencontainers.image.vendor="Computational Earth Sciences Group, Earth Sciences Department, BSC-CNS" \
org.opencontainers.image.authors="Manuel G. Marciani (manuel.gimenez@bsc.es)" \ org.opencontainers.image.authors="Manuel G. Marciani (manuel.gimenez@bsc.es)" \
# org.label-schema.docker.cmd="docker run -it -h slurmsim mgimenez/ces_slurm_simulator_tools:latest" \ org.label-schema.docker.cmd="docker run -it -h localhost mgimenez/docker-ubuntu-ces-slurm-sim:latest"
ENV PATH "/root/.pyenv/shims:/root/.pyenv/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin" ENV PATH="/usr/bin:/sbin:/bin:/usr/local/bin"
# install simulator, slurm, slurmdbd, slurmd, slurmctl dependencies # manuel: To avoid user promp while buuilding the image
ARG DEBIAN_FRONTEND=noninteractive
# manuel: install simulator, slurm, slurmdbd, slurmd, slurmctl dependencies
# manuel: install pandas, a dependency of the python script
RUN apt-get update \ RUN apt-get update \
&& apt-get --no-install-recommends -y install make \ && apt-get --no-install-recommends -y install make \
automake \
autoconf \ autoconf \
gcc \
g++ \
libcurl4 \
debianutils \
libglib2.0-dev \ libglib2.0-dev \
libgtk2.0-dev \ libgtk2.0-dev \
vim \ vim \
...@@ -21,6 +30,25 @@ RUN apt-get update \ ...@@ -21,6 +30,25 @@ RUN apt-get update \
mariadb-client \ mariadb-client \
libmariadbd-dev \ libmariadbd-dev \
libpam0g-dev \ libpam0g-dev \
git \
wget \
bzip2 \
libtool \
libncurses-dev \
libgdm1 \
libffi7 \
zlib1g-dev \
zlib1g \
pip \
locales \
supervisor \
&& pip install pandas
# manuel: configure git to ignore certificates (SUUUPER SHADY)
# install the simulator tools
RUN git config --global http.sslverify false \
&& mkdir -p /home/slurm/ \
&& cd /home/slurm/ \
&& git clone https://earth.bsc.es/gitlab/mgimenez/ces_slurm_simulator_tools && git clone https://earth.bsc.es/gitlab/mgimenez/ces_slurm_simulator_tools
# Set Vim and Git defaults # Set Vim and Git defaults
...@@ -32,59 +60,64 @@ RUN set -ex \ ...@@ -32,59 +60,64 @@ RUN set -ex \
&& echo "set expandtab" >> "$HOME/.vimrc" \ && echo "set expandtab" >> "$HOME/.vimrc" \
&& echo "set autoindent" >> "$HOME/.vimrc" \ && echo "set autoindent" >> "$HOME/.vimrc" \
&& echo "set fileformat=unix" >> "$HOME/.vimrc" \ && echo "set fileformat=unix" >> "$HOME/.vimrc" \
&& echo "set encoding=utf-8" >> "$HOME/.vimrc" \ && echo "set encoding=utf-8" >> "$HOME/.vimrc"
# Set the locale. Taken from http://jaredmarkell.com/docker-and-locales/
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# Add Tini. # Add Tini. (manuel: a lightweight init, systemd, etc)
ENV TINI_VERSION v0.18.0 ENV TINI_VERSION v0.18.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini RUN chmod +x /tini
# Install OpenSSL1.1.1 # manuel: configure slurm user that will be in charge of the simulation
# See PEP 644: https://www.python.org/dev/peps/pep-0644/
ARG OPENSSL_VERSION="1.1.1l"
RUN set -ex \
&& wget --quiet https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
&& tar xzf openssl-${OPENSSL_VERSION}.tar.gz \
&& pushd openssl-${OPENSSL_VERSION} \
&& ./config --prefix=/opt/openssl --openssldir=/etc/ssl \
&& make \
&& make test \
&& make install \
&& echo "/opt/openssl/lib" >> /etc/ld.so.conf.d/openssl.conf \
&& ldconfig \
&& popd \
&& rm -rf openssl-${OPENSSL_VERSION}.tar.gz
# configure slurm user that will be in charge of the
RUN set -x \ RUN set -x \
&& ./install_slurm_sim.sh
&& groupadd -r slurm \ && groupadd -r slurm \
&& useradd -r -g slurm slurm && useradd -r -g slurm slurm
# VOLUME ["/var/lib/mysql", "/var/lib/slurmd", "/var/spool/slurmd", "/var/log/slurm"] # manuel: install the simulator
RUN set -x \
&& cd /home/slurm/ces_slurm_simulator_tools \
&& ./install_slurm_sim.sh
# configure python dependencies. # manuel: compile the algorithm that translates SWF to binary datac
# This python part was taken from https://github.com/giovtorres/docker-centos7-slurm/blob/main/Dockerfile RUN set -x \
ARG PYTHON_VERSIONS="3.8.10" && cd /home/slurm/ces_slurm_simulator_tools/ces_slurm_simulator/contribs/simulator \
ARG CONFIGURE_OPTS="--with-openssl=/opt/openssl" && gcc -c swf2trace.c \
RUN set -ex \ && gcc -o swf2trace swf2trace.o -lm
&& curl https://pyenv.run | bash \
&& echo "eval \"\$(pyenv init --path)\"" >> "${HOME}/.bashrc" \ # manuel: configure folders for the mariadb, slurmdbd, slurmctld, and slurmd
&& echo "eval \"\$(pyenv init -)\"" >> "${HOME}/.bashrc" \ RUN mkdir -p /etc/sysconfig/slurm \
&& source "${HOME}/.bashrc" \ /var/spool/slurmd \
&& pyenv update \ /var/spool/slurmctld \
&& for python_version in ${PYTHON_VERSIONS}; \ /var/log/slurm \
do \ /var/run/slurmd \
pyenv install $python_version; \ /var/run/slurm \
pyenv global $python_version; \ /var/run/supervisor \
pip install Cython pytest; \ && chown -R slurm:slurm /var/spool/slurmd \
done /var/spool/slurmctld \
/var/log/slurm \
/var/run/slurmd \
/var/run/slurm
# RUN export USERNAME=root
# manuel: file that controls launching deamons
COPY files/supervisord.conf /etc/
# manuel: create workload trace folder
RUN mkdir -p /home/slurm/ces_slurm_simulator_tools/workloads
# Mark externally mounted volumes # Mark externally mounted volumes
VOLUME ["/var/lib/mysql", "/var/lib/slurmd", "/var/spool/slurm", "/var/log/slurm"] VOLUME ["/var/lib/mysql", "/var/lib/slurmd", "/var/spool/slurm", "/var/log/slurm"]
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
# configures the database # initializes the database and starts the deamon
ENTRYPOINT ["/tini", "--", "/usr/local/bin/docker-entrypoint.sh"] ENTRYPOINT ["/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
CMD ["/bin/bash"] CMD ["/bin/bash"]
#!/bin/bash #!/bin/bash
set -e function error_with_msg {
if [[ "$count" -eq 0 ]]
if [ ! -f "/var/lib/mysql/ibdata1" ]; then then
echo "- Initializing database" echo
/usr/bin/mysql_install_db &> /dev/null echo >&2 "$1"
echo "- Database initialized" exit 1
echo "- Updating MySQL directory permissions" fi
chown -R mysql:mysql /var/lib/mysql }
chown -R mysql:mysql /var/run/mariadb
fi function check_running_status {
for count in {10..0}; do
STATUS=$(/usr/bin/supervisorctl status $1 | awk '{print $2}')
echo "- $1 is in the $STATUS state."
if [[ "$STATUS" = "RUNNING" ]]
then
break
else
sleep 1
fi
done
}
function check_port_status {
for count in {10..0}; do
echo 2>/dev/null >/dev/tcp/localhost/$1
if [[ "$?" -eq 0 ]]
then
echo "- Port $1 is listening"
break
else
echo "- Port $1 is not listening"
sleep 1
fi
done
}
function start_service {
echo "- Starting $1"
/usr/bin/supervisorctl start $1
check_running_status $1
}
if [ ! -d "/var/lib/mysql/slurm_acct_db" ]; then if [ ! -d "/var/lib/mysql/slurm_acct_db" ]; then
/usr/bin/mysqld_safe --datadir='/var/lib/mysql' & /usr/bin/mysqld_safe --datadir='/var/lib/mysql' &
...@@ -49,6 +80,17 @@ if [ ! -d "/var/lib/mysql/slurm_acct_db" ]; then ...@@ -49,6 +80,17 @@ if [ ! -d "/var/lib/mysql/slurm_acct_db" ]; then
fi fi
fi fi
echo "- Starting supervisord process manager"
/usr/bin/supervisord --configuration /etc/supervisord.conf
for service in mysqld
do
start_service $service
done
chown slurm:slurm /var/spool/slurmd /var/run/slurmd /var/lib/slurmd /var/log/slurm chown slurm:slurm /var/spool/slurmd /var/run/slurmd /var/lib/slurmd /var/log/slurm
export USERNAME=root
exec "$@" exec "$@"
[unix_http_server]
file=/var/run/supervisor/supervisor.sock
[supervisord]
logfile=/var/log/supervisor/supervisord.log
logfile_maxbytes=5MB
logfile_backups=10
loglevel=info
pidfile=/var/run/supervisord.pid
nodaemon=false
user=root
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[program:mysqld]
command=/usr/bin/pidproxy /var/run/mariadb/mariadb.pid /usr/bin/mysqld_safe
stdout_logfile=/var/log/supervisor/mysqld.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=5
stderr_logfile=/var/log/supervisor/mysqld.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=5
exitcodes=0,1,2
autostart=false
autorestart=false
priority=2