From 63da4cb3d258222ff1b11052951c7e5d7ca8e02c Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Tue, 2 Jul 2019 11:14:07 +0200 Subject: Upgrade to 2019.07 This patch upgrade LAVA to 2019.07 via their official docker images. Along with the change of the baseimage from our lava-xx-base to official 2019.07, some minor changes are needed: - Activate the en_US.UTF-8 locale needed for postgresql - chown to lavaserver all copied device-types - Fix the start scripts for using the official entrypoints --- lava-master-base/99-stretch-backports | 43 ------ lava-master-base/Dockerfile | 62 -------- lava-master-base/scripts/lava-logs | 97 ------------- lava-master-base/scripts/lava-master | 97 ------------- lava-master-base/scripts/lava-server-gunicorn | 99 ------------- lava-master-base/scripts/lava-slave | 98 ------------- lava-master-base/scripts/start.sh | 40 ------ lava-master-base/scripts/stop.sh | 10 -- lava-master/Dockerfile | 18 ++- lava-master/entrypoint.d/01_setup.sh | 200 ++++++++++++++++++++++++++ lava-master/scripts/setup.sh | 199 ------------------------- lava-master/scripts/start.sh | 38 ----- lava-slave-base/99-stretch-backports | 23 --- lava-slave-base/Dockerfile | 50 ------- lava-slave-base/scripts/lava-slave | 98 ------------- lava-slave-base/scripts/start.sh | 46 ------ lava-slave-base/scripts/stop.sh | 3 - lava-slave/Dockerfile | 4 +- lava-slave/scripts/start.sh | 51 +++++++ lavalab-gen.py | 16 ++- 20 files changed, 279 insertions(+), 1013 deletions(-) delete mode 100644 lava-master-base/99-stretch-backports delete mode 100644 lava-master-base/Dockerfile delete mode 100644 lava-master-base/scripts/lava-logs delete mode 100644 lava-master-base/scripts/lava-master delete mode 100644 lava-master-base/scripts/lava-server-gunicorn delete mode 100644 lava-master-base/scripts/lava-slave delete mode 100755 lava-master-base/scripts/start.sh delete mode 100755 lava-master-base/scripts/stop.sh create mode 100755 lava-master/entrypoint.d/01_setup.sh delete mode 100755 lava-master/scripts/setup.sh delete mode 100755 lava-master/scripts/start.sh delete mode 100644 lava-slave-base/99-stretch-backports delete mode 100644 lava-slave-base/Dockerfile delete mode 100644 lava-slave-base/scripts/lava-slave delete mode 100755 lava-slave-base/scripts/start.sh delete mode 100755 lava-slave-base/scripts/stop.sh create mode 100755 lava-slave/scripts/start.sh diff --git a/lava-master-base/99-stretch-backports b/lava-master-base/99-stretch-backports deleted file mode 100644 index 02491b1..0000000 --- a/lava-master-base/99-stretch-backports +++ /dev/null @@ -1,43 +0,0 @@ -Package: python3-requests -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: python3-chardet -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: python3-urllib3 -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava-common -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava-dispatcher -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava-server -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava-dev -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava-server-doc -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lavacli -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: python3-junit.xml -Pin: release n=stretch-backports -Pin-Priority: 500 diff --git a/lava-master-base/Dockerfile b/lava-master-base/Dockerfile deleted file mode 100644 index ee7d47f..0000000 --- a/lava-master-base/Dockerfile +++ /dev/null @@ -1,62 +0,0 @@ -FROM bitnami/minideb:stretch - -RUN echo "deb http://deb.debian.org/debian/ stretch-backports main" >> /etc/apt/sources.list -COPY 99-stretch-backports /etc/apt/preferences.d/ - -RUN apt-get update - -# Install debian packages used by the container -# Configure apache to run the lava server -# Log the hostname used during install for the slave name -RUN echo 'lava-server lava-server/instance-name string lava-docker-instance' | debconf-set-selections \ - && echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections \ - && echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections - -RUN echo "APT::Install-Recommends false;" > /etc/apt/apt.conf.d/01norecommands - -# e2fsprogs is for libguestfs -RUN DEBIAN_FRONTEND=noninteractive apt-get -y install \ - locales \ - postgresql \ - screen \ - sudo \ - wget \ - e2fsprogs \ - letsencrypt \ - apt-transport-https \ - gnupg \ - vim - -RUN wget https://apt.lavasoftware.org/lavasoftware.key.asc \ - && apt-key add lavasoftware.key.asc \ - && echo 'deb https://apt.lavasoftware.org/release stretch-backports main' > /etc/apt/sources.list.d/lava.list \ - && apt-get clean && apt-get update && apt-get -y upgrade - -RUN service postgresql start \ - && DEBIAN_FRONTEND=noninteractive apt-get -y install lava lava-server \ - && sudo -u postgres psql lavaserver -c "DELETE FROM lava_scheduler_app_worker WHERE lava_scheduler_app_worker.hostname = 'example.com';" \ - && service postgresql stop - -RUN a2enmod proxy \ - && a2enmod proxy_http \ - && a2dissite 000-default \ - && a2ensite lava-server - -# Add services helper utilities to start and stop LAVA -COPY scripts/stop.sh . -COPY scripts/start.sh . -COPY scripts/lava-logs /etc/init.d/ -RUN chmod 755 /etc/init.d/lava-logs -COPY scripts/lava-master /etc/init.d/ -RUN chmod 755 /etc/init.d/lava-master -COPY scripts/lava-slave /etc/init.d/ -RUN chmod 755 /etc/init.d/lava-slave -COPY scripts/lava-server-gunicorn /etc/init.d/ -RUN chmod 755 /etc/init.d/lava-server-gunicorn - -RUN dpkg -l | grep lava -RUN dpkg -l | grep lava | sed 's,[[:space:]][[:space:]]*, ,g' | cut -d' ' -f3 | tr '+~' _ - -EXPOSE 80 3079 5555 5556 - -CMD /start.sh && while [ true ];do sleep 365d; done diff --git a/lava-master-base/scripts/lava-logs b/lava-master-base/scripts/lava-logs deleted file mode 100644 index 469679b..0000000 --- a/lava-master-base/scripts/lava-logs +++ /dev/null @@ -1,97 +0,0 @@ -#! /bin/sh -### BEGIN INIT INFO -# Provides: lava-logs -# Required-Start: $time -# Required-Stop: $time -# X-Stop-After: sendsigs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: lava-logs -# Description: lava-logs -### END INIT INFO - -# -# Author: Corentin LABBE -# - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="lava-logs" -NAME=lava-logs -LOGLEVEL=DEBUG - -DAEMON=/usr/bin/lava-server -PIDFILE=/var/run/$NAME.pid -SCRIPTNAME=/etc/init.d/$NAME - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/$NAME ] && . /etc/default/$NAME - -[ -r /etc/lava-server/$NAME ] && . /etc/lava-server/$NAME - -# Define LSB log_* functions. -. /lib/lsb/init-functions - -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # other if daemon could not be started or a failure occured - start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- manage lava-logs --level $LOGLEVEL $SOCKET $MASTER_SOCKET $IPV6 $ENCRYPT $MASTER_CERT $SLAVES_CERTS -} - -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # other if daemon could not be stopped or a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON -} - -case "$1" in - start) - log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0) - log_end_msg 0 ;; - 1) log_progress_msg "already started" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - stop) - log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0) log_end_msg 0 ;; - 1) log_progress_msg "already stopped" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - restart|force-reload) - $0 stop - $0 start - ;; - try-restart) - $0 status >/dev/null 2>&1 && $0 restart - ;; - status) - status_of_proc -p $PIDFILE $DAEMON $RSYSLOGD && exit 0 || exit $? - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|try-restart|status}" >&2 - exit 3 - ;; -esac - -: - diff --git a/lava-master-base/scripts/lava-master b/lava-master-base/scripts/lava-master deleted file mode 100644 index 3bd75aa..0000000 --- a/lava-master-base/scripts/lava-master +++ /dev/null @@ -1,97 +0,0 @@ -#! /bin/sh -### BEGIN INIT INFO -# Provides: lava-master -# Required-Start: $time -# Required-Stop: $time -# X-Stop-After: sendsigs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: lava-master -# Description: lava-master -### END INIT INFO - -# -# Author: Corentin LABBE -# - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="lava-master" -NAME=lava-master -LOGLEVEL=DEBUG - -DAEMON=/usr/bin/lava-server -PIDFILE=/var/run/$NAME.pid -SCRIPTNAME=/etc/init.d/$NAME - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/$NAME ] && . /etc/default/$NAME - -[ -r /etc/lava-server/$NAME ] && . /etc/lava-server/$NAME - -# Define LSB log_* functions. -. /lib/lsb/init-functions - -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # other if daemon could not be started or a failure occured - start-stop-daemon --start --quiet --background --pidfile $PIDFILE --exec $DAEMON -- manage lava-master --level $LOGLEVEL $SOCKET $MASTER_SOCKET $IPV6 $ENCRYPT $MASTER_CERT $SLAVES_CERTS -} - -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # other if daemon could not be stopped or a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON -} - -case "$1" in - start) - log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0) - log_end_msg 0 ;; - 1) log_progress_msg "already started" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - stop) - log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0) log_end_msg 0 ;; - 1) log_progress_msg "already stopped" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - restart|force-reload) - $0 stop - $0 start - ;; - try-restart) - $0 status >/dev/null 2>&1 && $0 restart - ;; - status) - status_of_proc -p $PIDFILE $DAEMON $RSYSLOGD && exit 0 || exit $? - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|try-restart|status}" >&2 - exit 3 - ;; -esac - -: - diff --git a/lava-master-base/scripts/lava-server-gunicorn b/lava-master-base/scripts/lava-server-gunicorn deleted file mode 100644 index e8f1a52..0000000 --- a/lava-master-base/scripts/lava-server-gunicorn +++ /dev/null @@ -1,99 +0,0 @@ -#! /bin/sh -### BEGIN INIT INFO -# Provides: lava-server-gunicorn -# Required-Start: $time -# Required-Stop: $time -# X-Stop-After: sendsigs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: lava-server-gunicorn -# Description: lava-server-gunicorn -### END INIT INFO - -# -# Author: Corentin LABBE -# - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="lava-server-gunicorn" -NAME=lava-server-gunicorn -LOGLEVEL=DEBUG -WORKERS=4 -LOGFILE=/var/log/lava-server/gunicorn.log -RELOAD= -DAEMON=/usr/bin/gunicorn3 -PIDFILE=/var/run/$NAME.pid -SCRIPTNAME=/etc/init.d/$NAME - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/$NAME ] && . /etc/default/$NAME - -[ -r /etc/lava-server/$NAME ] && . /etc/lava-server/$NAME - -# Define LSB log_* functions. -. /lib/lsb/init-functions - -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # other if daemon could not be started or a failure occured - start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- lava_server.wsgi --log-level $LOGLEVEL --log-file $LOGFILE -u lavaserver -g lavaserver --workers $WORKERS $RELOAD -} - -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # other if daemon could not be stopped or a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON -} - -case "$1" in - start) - log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0) - log_end_msg 0 ;; - 1) log_progress_msg "already started" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - stop) - log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0) log_end_msg 0 ;; - 1) log_progress_msg "already stopped" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - restart|force-reload) - $0 stop - $0 start - ;; - try-restart) - $0 status >/dev/null 2>&1 && $0 restart - ;; - status) - status_of_proc -p $PIDFILE $DAEMON $RSYSLOGD && exit 0 || exit $? - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|try-restart|status}" >&2 - exit 3 - ;; -esac - -: - diff --git a/lava-master-base/scripts/lava-slave b/lava-master-base/scripts/lava-slave deleted file mode 100644 index 3ba00f7..0000000 --- a/lava-master-base/scripts/lava-slave +++ /dev/null @@ -1,98 +0,0 @@ -#! /bin/sh -### BEGIN INIT INFO -# Provides: lava-slave -# Required-Start: $time -# Required-Stop: $time -# X-Stop-After: sendsigs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: lava-slave -# Description: lava-slave -### END INIT INFO - -# -# Author: Corentin LABBE -# - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="lava-slave" -NAME=lava-slave - -DAEMON=/usr/bin/lava-slave -PIDFILE=/var/run/$NAME.pid -SCRIPTNAME=/etc/init.d/$NAME -MASTER_URL=tcp://localhost:5556 -LOGGER_URL=tcp://localhost:5555 -LOGLEVEL=DEBUG - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/$NAME ] && . /etc/default/$NAME -[ -r /etc/lava-dispatcher/$NAME ] && . /etc/lava-dispatcher/$NAME - -# Define LSB log_* functions. -. /lib/lsb/init-functions - -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # other if daemon could not be started or a failure occured - start-stop-daemon --start --quiet --background --pidfile $PIDFILE --exec $DAEMON -- --level $LOGLEVEL --master $MASTER_URL --socket-addr $LOGGER_URL $IPV6 $ENCRYPT $MASTER_CERT $SLAVE_CERT $HOSTNAME -} - -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # other if daemon could not be stopped or a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON -} - -case "$1" in - start) - log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0) - log_end_msg 0 ;; - 1) log_progress_msg "already started" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - stop) - log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0) log_end_msg 0 ;; - 1) log_progress_msg "already stopped" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - restart|force-reload) - $0 stop - $0 start - ;; - try-restart) - $0 status >/dev/null 2>&1 && $0 restart - ;; - status) - status_of_proc -p $PIDFILE $DAEMON $RSYSLOGD && exit 0 || exit $? - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|try-restart|status}" >&2 - exit 3 - ;; -esac - -: - diff --git a/lava-master-base/scripts/start.sh b/lava-master-base/scripts/start.sh deleted file mode 100755 index c34fe34..0000000 --- a/lava-master-base/scripts/start.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -postgres-ready () { - echo "Waiting for lavaserver database to be active" - while (( $(ps -ef | grep -v grep | grep postgres | grep lavaserver | wc -l) == 0 )) - do - echo -n "." - sleep 1 - done - echo - echo "[ ok ] LAVA server ready" -} - -start () { - echo "Starting $1" - if (( $(ps -ef | grep -v grep | grep -v add_device | grep -v dispatcher-config | grep "$1" | wc -l) > 0 )) - then - echo "$1 appears to be running" - else - service "$1" start - fi -} - -#remove lava-pid files incase the image is stored without first stopping the services -rm -f /var/run/lava-*.pid 2> /dev/null - -/etc/init.d/postgresql start - -/setup.sh || exit $? - -start apache2 || exit $? -start lava-logs || exit $? -start lava-master || exit $? -start lava-coordinator || exit $? -start lava-slave || exit $? -start lava-server-gunicorn || exit $? -start tftpd-hpa || exit $? - -postgres-ready -service apache2 reload #added after the website not running a few times on boot diff --git a/lava-master-base/scripts/stop.sh b/lava-master-base/scripts/stop.sh deleted file mode 100755 index 35d503f..0000000 --- a/lava-master-base/scripts/stop.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -service lava-master stop -service lava-slave stop -service lava-logs stop -service lava-coordinator stop -service lava-server-gunicorn stop -service apache2 stop -/etc/init.d/postgresql stop -service tftpd-hpa stop diff --git a/lava-master/Dockerfile b/lava-master/Dockerfile index 80da8fb..625ebf1 100644 --- a/lava-master/Dockerfile +++ b/lava-master/Dockerfile @@ -1,4 +1,6 @@ -FROM baylibre/lava-master-base:2019.03_stretch +FROM lavasoftware/lava-server:2019.07 + +RUN apt-get update && apt-get -y install sudo lava-coordinator git COPY backup /root/backup/ @@ -15,8 +17,7 @@ COPY device-types/ /root/device-types/ COPY users/ /root/lava-users/ COPY groups/ /root/lava-groups/ COPY tokens/ /root/lava-callback-tokens/ -COPY scripts/setup.sh / -COPY scripts/start.sh / +COPY entrypoint.d/*sh /root/entrypoint.d/ COPY settings.conf /etc/lava-server/ @@ -33,9 +34,18 @@ COPY zmq_auth/ /etc/lava-dispatcher/certificates.d/ COPY lava_http_fqdn /root/ COPY env/ /etc/lava-server/dispatcher.d/ +RUN chown -R lavaserver:lavaserver /etc/lava-server/dispatcher.d/ COPY apache2/ /etc/apache2/ +# Fixes 'postgresql ERROR: invalid locale name: "en_US.UTF-8"' when restoring a backup +RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen en_US.UTF-8 + +# TODO: send this fix to upstream +RUN sed -i 's,find /root/entrypoint.d/ -type f,find /root/entrypoint.d/ -type f | sort,' /root/entrypoint.sh +# TODO: send this fix to upstream +RUN sed -i 's,pidfile =.*,pidfile = "/run/lava-coordinator/lava-coordinator.pid",' /usr/bin/lava-coordinator + EXPOSE 3079 5555 5556 -CMD /start.sh && while [ true ];do sleep 365d; done +CMD /root/entrypoint.sh && while [ true ];do sleep 365d; done diff --git a/lava-master/entrypoint.d/01_setup.sh b/lava-master/entrypoint.d/01_setup.sh new file mode 100755 index 0000000..be950b7 --- /dev/null +++ b/lava-master/entrypoint.d/01_setup.sh @@ -0,0 +1,200 @@ +#!/bin/bash + +# always reset the lavaserver user, since its password could have been reseted in a "docker build --nocache" +if [ ! -e /root/pg_lava_password ];then + < /dev/urandom tr -dc A-Za-z0-9 | head -c16 > /root/pg_lava_password +fi +sudo -u postgres psql -c "ALTER USER lavaserver WITH PASSWORD '$(cat /root/pg_lava_password)';" || exit $? +sed -i "s,^LAVA_DB_PASSWORD=.*,LAVA_DB_PASSWORD='$(cat /root/pg_lava_password)'," /etc/lava-server/instance.conf || exit $? + +if [ -e /root/backup/db_lavaserver.gz ];then + gunzip /root/backup/db_lavaserver.gz || exit $? +fi + +if [ -e /root/backup/db_lavaserver ];then + echo "Restore database from backup" + sudo -u postgres psql < /root/backup/db_lavaserver || exit $? + lava-server manage migrate || exit $? + echo "Restore jobs output from backup" + rm -r /var/lib/lava-server/default/media/job-output/* + tar xzf /root/backup/joboutput.tar.gz || exit $? +fi + +if [ -e /root/backup/devices.tar.gz ];then + echo "INFO: Restoring devices files" + tar xzf /root/backup/devices.tar.gz + chown -R lavaserver:lavaserver /etc/lava-server/dispatcher-config/devices +fi + +chown -R lavaserver:lavaserver /var/lib/lava-server/default/media/job-output/ + +# default site is set as example.com +if [ -e /root/lava_http_fqdn ];then + sudo -u postgres psql lavaserver -c "UPDATE django_site SET name = '$(cat /root/lava_http_fqdn)'" || exit $? + sudo -u postgres psql lavaserver -c "UPDATE django_site SET domain = '$(cat /root/lava_http_fqdn)'" || exit $? +fi + +if [ -e /root/lava-users ];then + for ut in $(ls /root/lava-users) + do + # User is the filename + USER=$ut + USER_OPTION="" + STAFF=0 + SUPERUSER=0 + TOKEN="" + . /root/lava-users/$ut + if [ -z "$PASSWORD" -o "$PASSWORD" = "$TOKEN" ];then + echo "Generating password..." + #Could be very long, should be avoided + PASSWORD=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) + fi + if [ $STAFF -eq 1 ];then + USER_OPTION="$USER_OPTION --staff" + fi + if [ $SUPERUSER -eq 1 ];then + USER_OPTION="$USER_OPTION --superuser" + fi + lava-server manage users list --all > /tmp/allusers + if [ $? -ne 0 ];then + echo "ERROR: cannot generate user list" + exit 1 + fi + #filter first name/last name (enclose by "()") + sed -i 's,[[:space:]](.*$,,' /tmp/allusers + grep -q "[[:space:]]${USER}$" /tmp/allusers + if [ $? -eq 0 ];then + echo "Skip already existing $USER DEBUG(with $TOKEN / $PASSWORD / $USER_OPTION)" + else + echo "Adding username $USER DEBUG(with $TOKEN / $PASSWORD / $USER_OPTION)" + lava-server manage users add --passwd $PASSWORD $USER_OPTION $USER + if [ $? -ne 0 ];then + echo "ERROR: Adding user $USER" + cat /tmp/allusers + exit 1 + fi + if [ ! -z "$TOKEN" ];then + echo "Adding token to user $USER" + lava-server manage tokens add --user $USER --secret $TOKEN || exit 1 + fi + if [ ! -z "$EMAIL" ];then + echo "Adding email to user $USER" + lava-server manage users update --email $EMAIL $USER || exit 1 + fi + fi + done +fi + +if [ -e /root/lava-groups ];then + echo "======================================================" + echo "Handle groups" + echo "======================================================" + GROUP_CURRENT_LIST=/tmp/group.list + lava-server manage groups list > ${GROUP_CURRENT_LIST}.raw || exit 1 + grep '^\*' ${GROUP_CURRENT_LIST}.raw > ${GROUP_CURRENT_LIST} + for group in $(ls /root/lava-groups/*group) + do + GROUPNAME="" + SUBMIT=0 + OPTION_SUBMIT="" + . $group + grep -q $GROUPNAME $GROUP_CURRENT_LIST + if [ $? -eq 0 ];then + echo "DEBUG: SKIP creation of $GROUPNAME which already exists" + else + if [ $SUBMIT -eq 1 ];then + echo "DEBUG: $GROUPNAME can submit jobs" + OPTION_SUBMIT="--submitting" + fi + echo "DEBUG: Add group $GROUPNAME" + lava-server manage groups add $OPTION_SUBMIT $GROUPNAME || exit 1 + fi + if [ -e ${group}.list ];then + echo "DEBUG: Found ${group}.list" + while read username + do + echo "DEBUG: Add user $username to group $GROUPNAME" + lava-server manage groups update --username $username $GROUPNAME || exit 1 + done < ${group}.list + fi + done +fi + +if [ -e /root/lava-callback-tokens ];then + for ct in $(ls /root/lava-callback-tokens) + do + . /root/lava-callback-tokens/$ct + if [ -z "$USER" ];then + echo "Missing USER" + exit 1 + fi + if [ -z "$TOKEN" ];then + echo "Missing TOKEN for $USER" + exit 1 + fi + if [ -z "$DESCRIPTION" ];then + echo "Missing DESCRIPTION for $USER" + exit 1 + fi + lava-server manage tokens list --user $USER |grep -q $TOKEN + if [ $? -eq 0 ];then + echo "SKIP already present token for $USER" + else + echo "Adding $USER ($DESCRIPTION) DEBUG($TOKEN)" + lava-server manage tokens add --user $USER --secret $TOKEN --description "$DESCRIPTION" || exit 1 + fi + done +fi + +# This directory is used for storing device-types already added +mkdir -p /root/.lavadocker/ +if [ -e /root/device-types ];then + for i in $(ls /root/device-types/*jinja2) + do + if [ -e /etc/lava-server/dispatcher-config/device-types/$(basename $i) ];then + echo "WARNING: overwriting device-type $i" + diff -u "/etc/lava-server/dispatcher-config/device-types/$(basename $i)" $i + fi + cp $i /etc/lava-server/dispatcher-config/device-types/ + chown lavaserver:lavaserver /etc/lava-server/dispatcher-config/device-types/$(basename $i) + devicetype=$(basename $i |sed 's,.jinja2,,') + lava-server manage device-types list | grep -q "[[:space:]]$devicetype[[:space:]]" + if [ $? -eq 0 ];then + echo "Skip already known $devicetype" + else + echo "Adding custom $devicetype" + lava-server manage device-types add $devicetype || exit $? + touch /root/.lavadocker/devicetype-$devicetype + fi + done +fi + +for worker in $(ls /root/devices/) +do + echo "Adding worker $worker" + lava-server manage workers add $worker || exit $? + for device in $(ls /root/devices/$worker/) + do + devicename=$(echo $device | sed 's,.jinja2,,') + devicetype=$(grep -h extends /root/devices/$worker/$device| grep -o '[a-zA-Z0-9_-]*.jinja2' | sed 's,.jinja2,,') + if [ -e /root/.lavadocker/devicetype-$devicetype ];then + echo "Skip devicetype $devicetype" + else + echo "Add devicetype $devicetype" + lava-server manage device-types add $devicetype || exit $? + touch /root/.lavadocker/devicetype-$devicetype + fi + echo "Add device $devicename on $worker" + cp /root/devices/$worker/$device /etc/lava-server/dispatcher-config/devices/ || exit $? + lava-server manage devices add --device-type $devicetype --worker $worker $devicename || exit $? + done +done + +if [ -e /etc/lava-dispatcher/certificates.d/$(hostname).key ];then + echo "INFO: Enabling encryption" + sed -i 's,.*ENCRYPT=.*,ENCRYPT="--encrypt",' /etc/lava-server/lava-master || exit $? + sed -i 's,.*MASTER_CERT=.*,MASTER_CERT="--master-cert /etc/lava-dispatcher/certificates.d/$(hostname).key_secret",' /etc/lava-server/lava-master || exit $? + sed -i 's,.*ENCRYPT=.*,ENCRYPT="--encrypt",' /etc/lava-server/lava-logs || exit $? + sed -i 's,.*MASTER_CERT=.*,MASTER_CERT="--master-cert /etc/lava-dispatcher/certificates.d/$(hostname).key_secret",' /etc/lava-server/lava-logs || exit $? +fi +exit 0 diff --git a/lava-master/scripts/setup.sh b/lava-master/scripts/setup.sh deleted file mode 100755 index 489dd51..0000000 --- a/lava-master/scripts/setup.sh +++ /dev/null @@ -1,199 +0,0 @@ -#!/bin/bash - -# always reset the lavaserver user, since its password could have been reseted in a "docker build --nocache" -if [ ! -e /root/pg_lava_password ];then - < /dev/urandom tr -dc A-Za-z0-9 | head -c16 > /root/pg_lava_password -fi -sudo -u postgres psql -c "ALTER USER lavaserver WITH PASSWORD '$(cat /root/pg_lava_password)';" || exit $? -sed -i "s,^LAVA_DB_PASSWORD=.*,LAVA_DB_PASSWORD='$(cat /root/pg_lava_password)'," /etc/lava-server/instance.conf || exit $? - -if [ -e /root/backup/db_lavaserver.gz ];then - gunzip /root/backup/db_lavaserver.gz || exit $? -fi - -if [ -e /root/backup/db_lavaserver ];then - echo "Restore database from backup" - sudo -u postgres psql < /root/backup/db_lavaserver || exit $? - lava-server manage migrate || exit $? - echo "Restore jobs output from backup" - rm -r /var/lib/lava-server/default/media/job-output/* - tar xzf /root/backup/joboutput.tar.gz || exit $? -fi - -if [ -e /root/backup/devices.tar.gz ];then - echo "INFO: Restoring devices files" - tar xzf /root/backup/devices.tar.gz - chown -R lavaserver:lavaserver /etc/lava-server/dispatcher-config/devices -fi - -chown -R lavaserver:lavaserver /var/lib/lava-server/default/media/job-output/ - -# default site is set as example.com -if [ -e /root/lava_http_fqdn ];then - sudo -u postgres psql lavaserver -c "UPDATE django_site SET name = '$(cat /root/lava_http_fqdn)'" || exit $? - sudo -u postgres psql lavaserver -c "UPDATE django_site SET domain = '$(cat /root/lava_http_fqdn)'" || exit $? -fi - -if [ -e /root/lava-users ];then - for ut in $(ls /root/lava-users) - do - # User is the filename - USER=$ut - USER_OPTION="" - STAFF=0 - SUPERUSER=0 - TOKEN="" - . /root/lava-users/$ut - if [ -z "$PASSWORD" -o "$PASSWORD" = "$TOKEN" ];then - echo "Generating password..." - #Could be very long, should be avoided - PASSWORD=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) - fi - if [ $STAFF -eq 1 ];then - USER_OPTION="$USER_OPTION --staff" - fi - if [ $SUPERUSER -eq 1 ];then - USER_OPTION="$USER_OPTION --superuser" - fi - lava-server manage users list --all > /tmp/allusers - if [ $? -ne 0 ];then - echo "ERROR: cannot generate user list" - exit 1 - fi - #filter first name/last name (enclose by "()") - sed -i 's,[[:space:]](.*$,,' /tmp/allusers - grep -q "[[:space:]]${USER}$" /tmp/allusers - if [ $? -eq 0 ];then - echo "Skip already existing $USER DEBUG(with $TOKEN / $PASSWORD / $USER_OPTION)" - else - echo "Adding username $USER DEBUG(with $TOKEN / $PASSWORD / $USER_OPTION)" - lava-server manage users add --passwd $PASSWORD $USER_OPTION $USER - if [ $? -ne 0 ];then - echo "ERROR: Adding user $USER" - cat /tmp/allusers - exit 1 - fi - if [ ! -z "$TOKEN" ];then - echo "Adding token to user $USER" - lava-server manage tokens add --user $USER --secret $TOKEN || exit 1 - fi - if [ ! -z "$EMAIL" ];then - echo "Adding email to user $USER" - lava-server manage users update --email $EMAIL $USER || exit 1 - fi - fi - done -fi - -if [ -e /root/lava-groups ];then - echo "======================================================" - echo "Handle groups" - echo "======================================================" - GROUP_CURRENT_LIST=/tmp/group.list - lava-server manage groups list > ${GROUP_CURRENT_LIST}.raw || exit 1 - grep '^\*' ${GROUP_CURRENT_LIST}.raw > ${GROUP_CURRENT_LIST} - for group in $(ls /root/lava-groups/*group) - do - GROUPNAME="" - SUBMIT=0 - OPTION_SUBMIT="" - . $group - grep -q $GROUPNAME $GROUP_CURRENT_LIST - if [ $? -eq 0 ];then - echo "DEBUG: SKIP creation of $GROUPNAME which already exists" - else - if [ $SUBMIT -eq 1 ];then - echo "DEBUG: $GROUPNAME can submit jobs" - OPTION_SUBMIT="--submitting" - fi - echo "DEBUG: Add group $GROUPNAME" - lava-server manage groups add $OPTION_SUBMIT $GROUPNAME || exit 1 - fi - if [ -e ${group}.list ];then - echo "DEBUG: Found ${group}.list" - while read username - do - echo "DEBUG: Add user $username to group $GROUPNAME" - lava-server manage groups update --username $username $GROUPNAME || exit 1 - done < ${group}.list - fi - done -fi - -if [ -e /root/lava-callback-tokens ];then - for ct in $(ls /root/lava-callback-tokens) - do - . /root/lava-callback-tokens/$ct - if [ -z "$USER" ];then - echo "Missing USER" - exit 1 - fi - if [ -z "$TOKEN" ];then - echo "Missing TOKEN for $USER" - exit 1 - fi - if [ -z "$DESCRIPTION" ];then - echo "Missing DESCRIPTION for $USER" - exit 1 - fi - lava-server manage tokens list --user $USER |grep -q $TOKEN - if [ $? -eq 0 ];then - echo "SKIP already present token for $USER" - else - echo "Adding $USER ($DESCRIPTION) DEBUG($TOKEN)" - lava-server manage tokens add --user $USER --secret $TOKEN --description "$DESCRIPTION" || exit 1 - fi - done -fi - -# This directory is used for storing device-types already added -mkdir -p /root/.lavadocker/ -if [ -e /root/device-types ];then - for i in $(ls /root/device-types/*jinja2) - do - if [ -e /etc/lava-server/dispatcher-config/device-types/$(basename $i) ];then - echo "WARNING: overwriting device-type $i" - diff -u "/etc/lava-server/dispatcher-config/device-types/$(basename $i)" $i - fi - cp $i /etc/lava-server/dispatcher-config/device-types/ - devicetype=$(basename $i |sed 's,.jinja2,,') - lava-server manage device-types list | grep -q "[[:space:]]$devicetype[[:space:]]" - if [ $? -eq 0 ];then - echo "Skip already known $devicetype" - else - echo "Adding custom $devicetype" - lava-server manage device-types add $devicetype || exit $? - touch /root/.lavadocker/devicetype-$devicetype - fi - done -fi - -for worker in $(ls /root/devices/) -do - echo "Adding worker $worker" - lava-server manage workers add $worker || exit $? - for device in $(ls /root/devices/$worker/) - do - devicename=$(echo $device | sed 's,.jinja2,,') - devicetype=$(grep -h extends /root/devices/$worker/$device| grep -o '[a-zA-Z0-9_-]*.jinja2' | sed 's,.jinja2,,') - if [ -e /root/.lavadocker/devicetype-$devicetype ];then - echo "Skip devicetype $devicetype" - else - echo "Add devicetype $devicetype" - lava-server manage device-types add $devicetype || exit $? - touch /root/.lavadocker/devicetype-$devicetype - fi - echo "Add device $devicename on $worker" - cp /root/devices/$worker/$device /etc/lava-server/dispatcher-config/devices/ || exit $? - lava-server manage devices add --device-type $devicetype --worker $worker $devicename || exit $? - done -done - -if [ -e /etc/lava-dispatcher/certificates.d/$(hostname).key ];then - echo "INFO: Enabling encryption" - sed -i 's,.*ENCRYPT=.*,ENCRYPT="--encrypt",' /etc/lava-server/lava-master || exit $? - sed -i 's,.*MASTER_CERT=.*,MASTER_CERT="--master-cert /etc/lava-dispatcher/certificates.d/$(hostname).key_secret",' /etc/lava-server/lava-master || exit $? - sed -i 's,.*ENCRYPT=.*,ENCRYPT="--encrypt",' /etc/lava-server/lava-logs || exit $? - sed -i 's,.*MASTER_CERT=.*,MASTER_CERT="--master-cert /etc/lava-dispatcher/certificates.d/$(hostname).key_secret",' /etc/lava-server/lava-logs || exit $? -fi -exit 0 diff --git a/lava-master/scripts/start.sh b/lava-master/scripts/start.sh deleted file mode 100755 index ce94c39..0000000 --- a/lava-master/scripts/start.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -postgres-ready () { - echo "Waiting for lavaserver database to be active" - while (( $(ps -ef | grep -v grep | grep postgres | grep lavaserver | wc -l) == 0 )) - do - echo -n "." - sleep 1 - done - echo - echo "[ ok ] LAVA server ready" -} - -start () { - echo "Starting $1" - if (( $(ps -ef | grep -v grep | grep -v add_device | grep -v dispatcher-config | grep "$1" | wc -l) > 0 )) - then - echo "$1 appears to be running" - else - service "$1" start - fi -} - -#remove lava-pid files incase the image is stored without first stopping the services -rm -f /var/run/lava-*.pid 2> /dev/null - -/etc/init.d/postgresql start - -/setup.sh || exit $? - -start apache2 || exit $? -start lava-logs || exit $? -start lava-master || exit $? -start lava-coordinator || exit $? -start lava-server-gunicorn || exit $? - -postgres-ready -service apache2 reload #added after the website not running a few times on boot diff --git a/lava-slave-base/99-stretch-backports b/lava-slave-base/99-stretch-backports deleted file mode 100644 index 652f4a0..0000000 --- a/lava-slave-base/99-stretch-backports +++ /dev/null @@ -1,23 +0,0 @@ -Package: python3-requests -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: python3-chardet -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: python3-urllib3 -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava-common -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lava-dispatcher -Pin: release n=stretch-backports -Pin-Priority: 500 - -Package: lavacli -Pin: release n=stretch-backports -Pin-Priority: 500 diff --git a/lava-slave-base/Dockerfile b/lava-slave-base/Dockerfile deleted file mode 100644 index d7852a7..0000000 --- a/lava-slave-base/Dockerfile +++ /dev/null @@ -1,50 +0,0 @@ -FROM bitnami/minideb:stretch - -RUN echo "APT::Install-Recommends false;" > /etc/apt/apt.conf.d/01norecommands - -RUN apt-get update - -# e2fsprogs is for libguestfs -RUN \ - echo 'lava-server lava-server/instance-name string lava-slave-instance' | debconf-set-selections && \ - echo 'locales locales/locales_to_be_generated multiselect C.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ' | debconf-set-selections && \ - echo 'locales locales/default_environment_locale select en_US.UTF-8' | debconf-set-selections && \ - DEBIAN_FRONTEND=noninteractive apt-get -y install \ - locales \ - vim \ - letsencrypt \ - apt-transport-https \ - sudo \ - python-setproctitle \ - tftpd-hpa \ - u-boot-tools \ - device-tree-compiler \ - qemu-system \ - qemu-system-arm \ - qemu-system-i386 \ - xnbd-server \ - e2fsprogs - -RUN if [ "$(uname -m)" = "x86_64" -o "$(uname -m)" = "x86" ] ;then apt-get -y install qemu-kvm ; fi - -RUN DEBIAN_FRONTEND=noninteractive apt-get -y install wget gnupg -RUN wget https://apt.lavasoftware.org/lavasoftware.key.asc \ - && apt-key add lavasoftware.key.asc \ - && echo 'deb https://apt.lavasoftware.org/release stretch-backports main' > /etc/apt/sources.list.d/lava.list \ - && echo "deb http://deb.debian.org/debian/ stretch-backports main" >> /etc/apt/sources.list \ - && apt-get clean && apt-get update -COPY 99-stretch-backports /etc/apt/preferences.d/ -RUN DEBIAN_FRONTEND=noninteractive apt-get -y install lava-dispatcher - -COPY scripts/lava-slave /etc/init.d/ -RUN chmod 755 /etc/init.d/lava-slave - -# Add services helper utilities to start and stop LAVA -COPY scripts/stop.sh . -COPY scripts/start.sh . - -RUN dpkg -l |grep lava - -EXPOSE 69/udp 80 - -CMD /start.sh diff --git a/lava-slave-base/scripts/lava-slave b/lava-slave-base/scripts/lava-slave deleted file mode 100644 index 3ba00f7..0000000 --- a/lava-slave-base/scripts/lava-slave +++ /dev/null @@ -1,98 +0,0 @@ -#! /bin/sh -### BEGIN INIT INFO -# Provides: lava-slave -# Required-Start: $time -# Required-Stop: $time -# X-Stop-After: sendsigs -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: lava-slave -# Description: lava-slave -### END INIT INFO - -# -# Author: Corentin LABBE -# - -# PATH should only include /usr/* if it runs after the mountnfs.sh script -PATH=/sbin:/usr/sbin:/bin:/usr/bin -DESC="lava-slave" -NAME=lava-slave - -DAEMON=/usr/bin/lava-slave -PIDFILE=/var/run/$NAME.pid -SCRIPTNAME=/etc/init.d/$NAME -MASTER_URL=tcp://localhost:5556 -LOGGER_URL=tcp://localhost:5555 -LOGLEVEL=DEBUG - -# Exit if the package is not installed -[ -x "$DAEMON" ] || exit 0 - -# Read configuration variable file if it is present -[ -r /etc/default/$NAME ] && . /etc/default/$NAME -[ -r /etc/lava-dispatcher/$NAME ] && . /etc/lava-dispatcher/$NAME - -# Define LSB log_* functions. -. /lib/lsb/init-functions - -do_start() -{ - # Return - # 0 if daemon has been started - # 1 if daemon was already running - # other if daemon could not be started or a failure occured - start-stop-daemon --start --quiet --background --pidfile $PIDFILE --exec $DAEMON -- --level $LOGLEVEL --master $MASTER_URL --socket-addr $LOGGER_URL $IPV6 $ENCRYPT $MASTER_CERT $SLAVE_CERT $HOSTNAME -} - -do_stop() -{ - # Return - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # other if daemon could not be stopped or a failure occurred - start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON -} - -case "$1" in - start) - log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0) - log_end_msg 0 ;; - 1) log_progress_msg "already started" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - stop) - log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0) log_end_msg 0 ;; - 1) log_progress_msg "already stopped" - log_end_msg 0 ;; - *) log_end_msg 1 ;; - esac - - ;; - restart|force-reload) - $0 stop - $0 start - ;; - try-restart) - $0 status >/dev/null 2>&1 && $0 restart - ;; - status) - status_of_proc -p $PIDFILE $DAEMON $RSYSLOGD && exit 0 || exit $? - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|try-restart|status}" >&2 - exit 3 - ;; -esac - -: - diff --git a/lava-slave-base/scripts/start.sh b/lava-slave-base/scripts/start.sh deleted file mode 100755 index 21b6903..0000000 --- a/lava-slave-base/scripts/start.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -/setup.sh || exit $? - -# Set LAVA Master IP -if [[ -n "$LAVA_MASTER" ]]; then - sed -i -e "s/{LAVA_MASTER}/$LAVA_MASTER/g" /etc/lava-dispatcher/lava-slave -fi - -service tftpd-hpa start || exit 4 -if [ -s /etc/ser2net.conf ];then - service ser2net start || exit 7 -fi - -touch /var/run/conmux-registry -/usr/sbin/conmux-registry 63000 /var/run/conmux-registry& -sleep 2 -for item in $(ls /etc/conmux/*cf) -do - echo "Add $item" - # On some OS, the rights/user from host are not duplicated on guest - grep -o '/dev/[a-zA-Z0-9_-]*' $item | xargs chown uucp - /usr/sbin/conmux $item & -done - -HAVE_SCREEN=0 -while read screenboard -do - echo "Start screen for $screenboard" - TERM=xterm screen -d -m -S $screenboard /dev/$screenboard 115200 -ixoff -ixon || exit 9 - HAVE_SCREEN=1 -done < /root/lava-screen.conf -if [ $HAVE_SCREEN -eq 1 ];then - sed -i 's,UsePAM.*yes,UsePAM no,' /etc/ssh/sshd_config || exit 10 - service ssh start || exit 11 -fi - - -# start an http file server for boot/transfer_overlay support -(cd /var/lib/lava/dispatcher; python -m SimpleHTTPServer 80) & - -# FIXME lava-slave does not run if old pid is present -rm -f /var/run/lava-slave.pid -service lava-slave start || exit 5 - -sleep 3650d diff --git a/lava-slave-base/scripts/stop.sh b/lava-slave-base/scripts/stop.sh deleted file mode 100755 index 0f18456..0000000 --- a/lava-slave-base/scripts/stop.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -service tftpd-hpa stop -service lava-slave stop diff --git a/lava-slave/Dockerfile b/lava-slave/Dockerfile index 5fdae2f..3877404 100644 --- a/lava-slave/Dockerfile +++ b/lava-slave/Dockerfile @@ -1,4 +1,4 @@ -FROM baylibre/lava-slave-base:2019.03_stretch +FROM lavasoftware/lava-dispatcher:2019.07 RUN apt-get update @@ -74,4 +74,4 @@ COPY zmq_auth/ /etc/lava-dispatcher/certificates.d/ EXPOSE 69/udp 80 -CMD /start.sh +CMD /usr/local/bin/start.sh diff --git a/lava-slave/scripts/start.sh b/lava-slave/scripts/start.sh new file mode 100755 index 0000000..f88b816 --- /dev/null +++ b/lava-slave/scripts/start.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +/setup.sh || exit $? + +# Set LAVA Master IP +if [[ -n "$LAVA_MASTER" ]]; then + sed -i -e "s/{LAVA_MASTER}/$LAVA_MASTER/g" /etc/lava-dispatcher/lava-slave +fi + +echo "LOGFILE=/var/log/lava-dispatcher/lava-slave.log" >> /etc/lava-dispatcher/lava-slave + +service tftpd-hpa start || exit 4 +if [ -s /etc/ser2net.conf ];then + service ser2net start || exit 7 +fi + +touch /var/run/conmux-registry +/usr/sbin/conmux-registry 63000 /var/run/conmux-registry& +sleep 2 +for item in $(ls /etc/conmux/*cf) +do + echo "Add $item" + # On some OS, the rights/user from host are not duplicated on guest + grep -o '/dev/[a-zA-Z0-9_-]*' $item | xargs chown uucp + /usr/sbin/conmux $item & +done + +HAVE_SCREEN=0 +while read screenboard +do + echo "Start screen for $screenboard" + TERM=xterm screen -d -m -S $screenboard /dev/$screenboard 115200 -ixoff -ixon || exit 9 + HAVE_SCREEN=1 +done < /root/lava-screen.conf +if [ $HAVE_SCREEN -eq 1 ];then + sed -i 's,UsePAM.*yes,UsePAM no,' /etc/ssh/sshd_config || exit 10 + service ssh start || exit 11 +fi + + +# start an http file server for boot/transfer_overlay support +(cd /var/lib/lava/dispatcher; python -m SimpleHTTPServer 80) & + +# FIXME lava-slave does not run if old pid is present +rm -f /var/run/lava-slave.pid +#service lava-slave start || exit 5 +#/etc/init.d/lava-slave start + +/root/entrypoint.sh + +sleep 3650d diff --git a/lavalab-gen.py b/lavalab-gen.py index b3f096a..28a3a22 100755 --- a/lavalab-gen.py +++ b/lavalab-gen.py @@ -128,8 +128,6 @@ def main(): dockcomp["services"][name]["volumes"] = [ "/boot:/boot", "/lib/modules:/lib/modules" ] dockcomp["services"][name]["build"] = {} dockcomp["services"][name]["build"]["context"] = name - if "lava-coordinator" in master and master["lava-coordinator"]: - dockcomp["services"][name]["ports"].append('3079:3079') persistent_db = False if "persistent_db" in master: persistent_db = master["persistent_db"] @@ -140,8 +138,6 @@ def main(): dockcomp["volumes"] = {} dockcomp["volumes"][pg_volume_name] = {} dockcomp["volumes"]["lava_job_output"] = {} - with open(dockcomposeymlpath, 'w') as f: - yaml.dump(dockcomp, f) shutil.copytree("lava-master", workerdir) os.mkdir("%s/devices" % workerdir) @@ -151,6 +147,18 @@ def main(): groupdir = "%s/groups" % workerdir os.mkdir(groupdir) worker = master + if "lava-coordinator" in master and master["lava-coordinator"]: + dockcomp["services"][name]["ports"].append('3079:3079') + f_entrypoint = open("%s/entrypoint.d/02_lava-coordinator.sh" % workerdir, 'w') + f_entrypoint.write("#!/bin/sh\n") + f_entrypoint.write("echo 'Start lava-coordinator'\n") + f_entrypoint.write("mkdir /run/lava-coordinator && chown lavaserver /run/lava-coordinator\n") + f_entrypoint.write("start-stop-daemon --start --chuid lavaserver --background --exec /usr/bin/lava-coordinator -- --logfile=/var/log/lava-server/lava-coordinator.log\n") + f_entrypoint.write("exit $?\n") + f_entrypoint.close() + os.chmod("%s/entrypoint.d/02_lava-coordinator.sh" % workerdir, 0o755) + with open(dockcomposeymlpath, 'w') as f: + yaml.dump(dockcomp, f) if "healthcheck_url" in master: f_hc = open("%s/health-checks/healthcheck_url" % workerdir, 'w') f_hc.write(master["healthcheck_url"]) -- cgit 1.2.3-korg From 12aa09489580123698d1f791b01daf8371fa0228 Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Tue, 2 Jul 2019 11:22:51 +0200 Subject: Add support for device-type alias This patch adds support for the device-type aliases. --- README.md | 3 +++ lava-slave/Dockerfile | 1 + lava-slave/aliases/.empty | 0 lava-slave/scripts/setup.sh | 16 ++++++++++++++++ lavalab-gen.py | 6 ++++++ 5 files changed, 26 insertions(+) create mode 100644 lava-slave/aliases/.empty diff --git a/README.md b/README.md index 5b8b361..04e9b73 100644 --- a/README.md +++ b/README.md @@ -299,6 +299,9 @@ boards: tags: (optional) List of tag to set on this device - tag1 - tag2 + aliases: (optional) List of aliases to set on the DEVICE TYPE. + - alias1 + - alias2 user: (optional) Name of user owning the board (LAVA default is admin) user is exclusive with group group: (optional) Name of group owning the board (no LAVA default) group is exclusive with user # One of uart or connection_command must be choosen diff --git a/lava-slave/Dockerfile b/lava-slave/Dockerfile index 3877404..b93e310 100644 --- a/lava-slave/Dockerfile +++ b/lava-slave/Dockerfile @@ -61,6 +61,7 @@ RUN mkdir -p /root/.config COPY devices/ /root/devices/ COPY tags/ /root/tags/ +COPY aliases/ /root/aliases/ COPY deviceinfo/ /root/deviceinfo/ RUN if [ -x /usr/local/bin/extra_actions ] ; then /usr/local/bin/extra_actions ; fi diff --git a/lava-slave/aliases/.empty b/lava-slave/aliases/.empty new file mode 100644 index 0000000..e69de29 diff --git a/lava-slave/scripts/setup.sh b/lava-slave/scripts/setup.sh index 1fb0bb3..4bf2f67 100755 --- a/lava-slave/scripts/setup.sh +++ b/lava-slave/scripts/setup.sh @@ -143,6 +143,22 @@ do done done +for devicetype in $(ls /root/aliases/) +do + lavacli $LAVACLIOPTS device-types aliases list $devicetype > /tmp/device-types-aliases-$devicetype.list + while read alias + do + grep -q " $alias$" /tmp/device-types-aliases-$devicetype.list + if [ $? -eq 0 ];then + echo "DEBUG: $alias for $devicetype already present" + continue + fi + echo "DEBUG: Add alias $alias to $devicetype" + lavacli $LAVACLIOPTS device-types aliases add $devicetype $alias || exit $? + echo " $alias" >> /tmp/device-types-aliases-$devicetype.list + done < /root/aliases/$devicetype +done + if [ -e /etc/lava-dispatcher/certificates.d/$(hostname).key ];then echo "INFO: Enabling encryption" sed -i 's,.*ENCRYPT=.*,ENCRYPT="--encrypt",' /etc/lava-dispatcher/lava-slave diff --git a/lavalab-gen.py b/lavalab-gen.py index 28a3a22..2346689 100755 --- a/lavalab-gen.py +++ b/lavalab-gen.py @@ -626,6 +626,12 @@ def main(): for tag in board["tags"]: ftag.write("%s\n" % tag) ftag.close() + if "aliases" in board: + aliases_dir = "%s/aliases/" % workerdir + falias = open("%s/%s" % (aliases_dir, board["type"]), 'a') + for alias in board["aliases"]: + falias.write("%s\n" % alias) + falias.close() if "user" in board: deviceinfo = open("%s/deviceinfo/%s" % (workerdir, board_name), 'w') deviceinfo.write("DEVICE_USER=%s\n" % board["user"]) -- cgit 1.2.3-korg From 57bfd7462de249be794db3d015e7aa8177891863 Mon Sep 17 00:00:00 2001 From: Corentin LABBE Date: Tue, 3 Sep 2019 14:57:37 +0200 Subject: Use yaml safe_load insteald of load On my gentoo, using yaml.load now give: Traceback (most recent call last): raise RuntimeError("Unsafe load() call disabled by Gentoo. See bug #659348") RuntimeError: Unsafe load() call disabled by Gentoo. See bug #659348 Note that on recent ubuntu, a warning appears also. YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. This is due to a security risk of using yaml.load() Since we didnt rely on any behavour provided by load(), let's convert the call to safe_load(). --- lavalab-gen.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lavalab-gen.py b/lavalab-gen.py index 2346689..c2c5347 100755 --- a/lavalab-gen.py +++ b/lavalab-gen.py @@ -94,7 +94,7 @@ def usage(): def main(): need_zmq_auth_gen = False fp = open(boards_yaml, "r") - workers = yaml.load(fp) + workers = yaml.safe_load(fp) fp.close() os.mkdir("output") @@ -329,7 +329,7 @@ def main(): else: #master exists fp = open(dockcomposeymlpath, "r") - dockcomp = yaml.load(fp) + dockcomp = yaml.safe_load(fp) fp.close() dockcomp["services"][name] = {} dockcomp["services"][name]["hostname"] = name @@ -524,7 +524,7 @@ def main(): workerdir = "output/%s/%s" % (host, worker_name) dockcomposeymlpath = "output/%s/docker-compose.yml" % host fp = open(dockcomposeymlpath, "r") - dockcomp = yaml.load(fp) + dockcomp = yaml.safe_load(fp) fp.close() device_path = "%s/devices/" % workerdir devices_path = "%s/devices/%s" % (workerdir, worker_name) @@ -680,7 +680,7 @@ def main(): print("Add ser2net ports for %s (%s) %s-%s" % (slave_name, host, ser2net_port_start, ser2net_ports[slave_name])) dockcomposeymlpath = "output/%s/docker-compose.yml" % host fp = open(dockcomposeymlpath, "r") - dockcomp = yaml.load(fp) + dockcomp = yaml.safe_load(fp) fp.close() ser2net_port_max = ser2net_ports[slave_name] - 1 dockcomp["services"][slave_name]["ports"].append("%s-%s:%s-%s" % (ser2net_port_start, ser2net_port_max, ser2net_port_start, ser2net_port_max)) -- cgit 1.2.3-korg