summaryrefslogtreecommitdiffstats
path: root/lava-master
diff options
context:
space:
mode:
Diffstat (limited to 'lava-master')
-rw-r--r--lava-master/Dockerfile77
-rw-r--r--lava-master/configs/tftpd-hpa6
-rw-r--r--lava-master/device-types/.empty0
-rwxr-xr-xlava-master/scripts/setup.sh74
-rwxr-xr-xlava-master/scripts/start.sh37
-rwxr-xr-xlava-master/scripts/stop.sh10
6 files changed, 204 insertions, 0 deletions
diff --git a/lava-master/Dockerfile b/lava-master/Dockerfile
new file mode 100644
index 0000000..4fd4148
--- /dev/null
+++ b/lava-master/Dockerfile
@@ -0,0 +1,77 @@
+FROM bitnami/minideb:stretch
+
+RUN apt-get update
+
+# Add services helper utilities to start and stop LAVA
+COPY scripts/stop.sh .
+COPY scripts/start.sh .
+
+# 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 DEBIAN_FRONTEND=noninteractive apt-get -y install \
+ locales \
+ postgresql \
+ screen \
+ sudo \
+ wget \
+ gnupg \
+ vim
+
+RUN wget http://images.validation.linaro.org/production-repo/production-repo.key.asc \
+ && apt-key add production-repo.key.asc \
+ && echo 'deb http://images.validation.linaro.org/production-repo/ stretch-backports main' > /etc/apt/sources.list.d/lava.list \
+ && apt-get clean && apt-get update
+
+RUN service postgresql start \
+ && DEBIAN_FRONTEND=noninteractive apt-get -y install \
+ lava \
+ qemu-system \
+ qemu-system-arm \
+ qemu-system-i386 \
+ qemu-kvm \
+ ser2net \
+ u-boot-tools \
+ python-setproctitle \
+ && a2enmod proxy \
+ && a2enmod proxy_http \
+ && a2dissite 000-default \
+ && a2ensite lava-server \
+ && /stop.sh
+
+# Create a admin user (Insecure note, this creates a default user, username: admin/admin)
+RUN /start.sh \
+ && lava-server manage users add --passwd admin --staff --superuser --email admin@example.com admin \
+ && /stop.sh
+
+# Install latest
+RUN /start.sh \
+ && git clone https://github.com/kernelci/lava-dispatcher.git -b master /root/lava-dispatcher \
+ && cd /root/lava-dispatcher \
+ && git checkout release \
+ && git clone -b master https://github.com/kernelci/lava-server.git /root/lava-server \
+ && cd /root/lava-server \
+ && git checkout release \
+ && git config --global user.name "Docker Build" \
+ && git config --global user.email "info@kernelci.org" \
+ && echo "cd \${DIR} && dpkg -i *.deb" >> /root/lava-server/share/debian-dev-build.sh \
+ && cd /root/lava-dispatcher && /root/lava-server/share/debian-dev-build.sh -p lava-dispatcher \
+ && cd /root/lava-server && /root/lava-server/share/debian-dev-build.sh -p lava-server \
+ && /stop.sh
+
+COPY configs/tftpd-hpa /etc/default/tftpd-hpa
+
+COPY devices/ /root/devices/
+COPY device-types/ /root/device-types/
+COPY users/ /root/lava-users/
+COPY tokens/ /root/lava-callback-tokens/
+COPY scripts/setup.sh /
+RUN /start.sh && /setup.sh && /stop.sh
+
+EXPOSE 69/udp 80 3079 5555 5556
+
+CMD /start.sh && bash
diff --git a/lava-master/configs/tftpd-hpa b/lava-master/configs/tftpd-hpa
new file mode 100644
index 0000000..bb6f079
--- /dev/null
+++ b/lava-master/configs/tftpd-hpa
@@ -0,0 +1,6 @@
+# /etc/default/tftpd-hpa
+
+TFTP_USERNAME="tftp"
+TFTP_DIRECTORY="/var/lib/lava/dispatcher/tmp/"
+TFTP_ADDRESS="0.0.0.0:69"
+TFTP_OPTIONS="--secure"
diff --git a/lava-master/device-types/.empty b/lava-master/device-types/.empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lava-master/device-types/.empty
diff --git a/lava-master/scripts/setup.sh b/lava-master/scripts/setup.sh
new file mode 100755
index 0000000..011a9c7
--- /dev/null
+++ b/lava-master/scripts/setup.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+if [ -e /root/lava-users ];then
+ for ut in $(ls /root/lava-users)
+ do
+ # User is the filename
+ USER=$ut
+ . /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
+ echo "Adding username $USER DEBUG(with $TOKEN / $PASSWORD)"
+ lava-server manage users add --passwd $PASSWORD $USER || exit 1
+ if [ ! -z "$TOKEN" ];then
+ lava-server manage tokens add --user $USER --secret $TOKEN || exit 1
+ 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
+ echo "Adding $USER ($DESCRIPTION) DEBUG($TOKEN)"
+ lava-server manage tokens add --user $USER --secret $TOKEN --description $DESCRIPTION || exit 1
+ 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/*yaml)
+ do
+ cp /root/device-types/$i /etc/lava-server/dispatcher-config/device-types/
+ devicetype=$(basename $i)
+ lava-server manage device-types add $devicetype || exit 1
+ touch /root/.lavadocker/devicetype-$devicetype
+ 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
diff --git a/lava-master/scripts/start.sh b/lava-master/scripts/start.sh
new file mode 100755
index 0000000..f4cc4eb
--- /dev/null
+++ b/lava-master/scripts/start.sh
@@ -0,0 +1,37 @@
+#!/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
+
+start postgresql
+start apache2
+start lava-server
+start lava-master
+start lava-coordinator
+start lava-slave
+start lava-server-gunicorn
+start tftpd-hpa
+
+postgres-ready
+service apache2 reload #added after the website not running a few times on boot
diff --git a/lava-master/scripts/stop.sh b/lava-master/scripts/stop.sh
new file mode 100755
index 0000000..ccf30fb
--- /dev/null
+++ b/lava-master/scripts/stop.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+service lava-master stop
+service lava-slave stop
+service lava-server stop
+service lava-coordinator stop
+service lava-server-gunicorn stop
+service apache2 stop
+service postgresql stop
+service tftpd-hpa stop