Skip to content
Snippets Groups Projects
rebuild_system_from_scratch.sh 3.75 KiB
Newer Older
#! /usr/bin/env bash -e

HOME_DIR=${LOFAR20_DIR:-${PWD}}
if [ ! -d ${HOME_DIR}/bootstrap ]; then
    # HOME_DIR/bootstrap needs to exist for this script to work.
    echo -e "$(basename ${0}):\n\nERROR\n\tCannot run this script because the \"bootstrap\" cannot be found!\n\n"
    exit 1
fi

# Save for the moment when tango will be cloned.
OLD_HOME_DIR=${HOME_DIR}.old

trap ' exit ${?} ' ABRT EXIT HUP INT TERM QUIT ERR
    (cd ${HOME_DIR}/docker-compose && make pull)
}

function build_lofar_images()
{
    (cd ${HOME_DIR}/docker-compose && make build)
function move_tango_dir_out_of_the_way()
}

function remove_images()
{
    ${HOME_DIR}/bootstrap/sbin/delete_all_docker_images.sh YES_DELETE_ALL
    git clone https://git.astron.nl/lofar2.0/tango.git ${HOME_DIR}
    # Now remove the old tango dir.
    rm -rf ${OLD_HOME_DIR}
    # This can return a non-0 return code if the system
    # has already been shut down.
    # Therefore disable Bash's exit on error flag
    set +e
    (cd ${HOME_DIR}/docker-compose && make clean)
    # And enable it again.
    set -e
function start_minimal_tango()
    # There is an issue with the dsconfig container that it every
    # other time just exits without telling why.
    # Therefore start dsconfig, then wait for 10s to allow it
    # to die and just start it again.
    # Don't they say that the second time is always a charm?
    make start dsconfig
    echo -e "\tWaiting for dsconfig to settle down..."
    sleep 10
    echo -e "\tDone.\n\tStarting dsconfig again."
}

function configure_tango_db()
{
    # This somehow returns with a non-0 return code, make Bash happy.
    ${HOME_DIR}/sbin/update_ConfigDb.sh ${HOME_DIR}/CDB/LOFAR_ConfigDb.json || true
}

function configure_elk()
{
    (cd ${HOME_DIR}/docker-compose && make start elk-configure-host)
}

function start_support_images()
{
    (cd ${HOME_DIR}/docker-compose && make start elk
    make start jupyter)
}

function start_lofar_images()
{
    make start device-pcc

# Clean out the Docker volumes.
echo "-> Stopping Docker images and cleaning cleaning up their volumes..."
echo -e "\tDone.\n"
# Move the tango repo dir out of the way.
echo "-> Moving the tango directory ${HOME_DIR} out of the way..."
move_tango_dir_out_of_the_way
echo -e "\tDone.\n"
# Now pull the repo.
echo "-> Cloning tango's master branch to ${HOME_DIR}..."
echo -e "\tDone.\n"

# Now clean out the docker images.
echo "-> Deleting all Docker images from this host..."
remove_images
echo -e "\tDone.\n"

# Pull SKA's Docker images.
echo "-> Installing latest SKA Docker images on this host..."
echo -e "\tDone.\n"

# Build all of the LOFAR Docker images.
echo "-> Building LOFAR2.0 Docker images..."
build_lofar_images
echo -e "\tDone.\n"

# Now start the basic Tango system, including dsconfig.
echo "-> Staring up a minimal Tango session..."
start_minimal_tango
echo -e "\tDone.\n"

# Load LOFAR's TangoDB.
echo "-> Configuring the Tango DB for LOFAR2.0..."
configure_tango_db
echo -e "\tDone.\n"

# Now configure the ELK container.
echo "-> Configuring the ELK container for this host..."
echo -e "\tDone.\n"

# Here I start ELK & Jupyter.
echo "-> Start LOFAR2.0 support containers (ELK, Jupyter, etc.)..."
start_support_images
echo -e "\tDone.\n"

# And finally start all the LOFAR images.
echo "-> Start LOFAR2.0 containers..."
start_lofar_images
echo -e "\tDone.\n"
# Now the system should be ready to use.
# For instance the cold start script could now be executed.
echo -e "-> LOFAR2.0 system rebuild was successful.\n\n"