Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Add "Capturing local board configuration for semi-automated setup" section

...

  1. Optional: Setup access for local IP/host

    If you are running lava on a machine with a fixed IP (eg: a dedicated computer on your local network) you will want to modify the  overlays/lava-server/etc/lava-server/settings.conf file to allow access.  You'll want to modify the ALLOWED_HOSTS line to add the ip or hostname of the machine.  In the example below, the ip 192.168.1.14 was added, you'll want to keep 127.0.0.1 and localhost .

    Code Block
    languageyml
    linenumberstrue
    {
        "HTTPS_XML_RPC": false,
        "MOUNT_POINT": "/",
        "STATIC_URL": "/static/",
        "ALLOWED_HOSTS": ["192.168.1.14", "127.0.0.1", "localhost"],
        "CSRF_COOKIE_SECURE": false,
        "SESSION_COOKIE_SECURE": false,
        "EVENT_NOTIFICATION": true,
        "EVENT_TOPIC": "lava-server",
        "INTERNAL_EVENT_SOCKET": "tcp://lava-publisher:5557"
    }


  2. Optional: Add the proxy settings in lite-lava-dispatcher and ser2net images

    It might be required to define proxy setting in lite-lava-dispatcher/Dockerfile and ser2net/Dockerfile

    Code Block
    languagebash
    ENV http_proxy=http://<user>:<pwd>@<proxy>:<port>
    ENV https_proxy=http://<user>:<pwd>@<proxy>:<port>


  3. Optional: Configure DNS in /etc/docker/daemon.json

    Do this only if you are sure you need this. Otherwise, hardcoding a particular (local) DNS server may lead to issues when using another network connection, etc.

    Get host DNS:

    Code Block
    languagebash
    nmcli dev show | grep 'IP4.DNS'

    Set reported value in /etc/docker/daemon.json:

    Code Block
    languageyml
    {                                                                          
        "dns": ["w.x.y.z"]                                                                           
    }

    Restart docker:

    Code Block
    languageyml
    sudo service docker restart


  4. Run commands to build docker images and startup lava

    Code Block
    languagebash
    docker-compose build
    make

    You'll see output of docker fetching and building the images, and then all LAVA containers starting up, followed by a fair amount of logging from LAVA itself as it starts up.  This may take a few minutes to complete.

    Here are some examples of the output one can expect during this phase:

    • Docker Compose/Build Phase

      Code Block
      languagebash
      galak@ubuntu:~/lite-lava-docker-compose$ make
      docker-compose up
      Creating volume "lava-server-pgdata" with default driver
      Creating volume "lava-server-devices" with default driver
      Creating volume "lava-server-health-checks" with default driver
      Creating volume "lava-server-joboutput" with default driver
      Pulling db (postgres:11.2-alpine)...
      11.2-alpine: Pulling from library/postgres
      bdf0201b3a05: Pull complete
      365f27dc05d7: Pull complete
      bf541d40dfbc: Pull complete
      823ce70c3252: Extracting [========>                                          ]  4.194MB/25.04MB
      a92a31ecd32a: Download complete
      83cc8c6d8282: Download complete
      7995b9edc9bf: Download complete
      7616119153d9: Download complete
      b3f69561e369: Download complete


    • Lava containers being created

      Code Block
      languagebash
      Creating lava-server-db  ... done
      Creating lava-dispatcher ... done
      Creating lava-ser2net    ... done
      Creating lava-publisher  ... done
      Creating lava-master     ... done
      Creating lava-logs       ... done
      Creating lava-server     ... done
      Creating apache2         ... 


    • Lava starting up

      Code Block
      languagebash
      lava-master        |   Applying lava_results_app.0012_namedtestattribute_metadata... OK
      lava-server        | .
      lava-master        |   Applying lava_results_app.0013_buglinks... OK
      lava-master        |   Applying lava_results_app.0014_xaxis_maxlength_increase... OK
      lava-master        |   Applying dashboard_app.0002_auto_20140917_1935... OK
      lava-logs          | .
      lava-master        |   Applying dashboard_app.0003_auto_20140926_1208... OK
      lava-master        |   Applying dashboard_app.0004_imagereportchart_is_delta... OK
      lava-dispatcher    | 2019-05-09 19:01:08,522   DEBUG [BTSP] Checking master [lava-master:5556] to create socket for lava-dispatcher
      lava-dispatcher    | 2019-05-09 19:01:08,524   DEBUG [BTSP] socket IPv4 address: 172.18.0.6
      lava-dispatcher    | 2019-05-09 19:01:08,525    INFO [BTSP] Greeting master => 'HELLO_RETRY' (using the same version?)
      lava-master        |   Applying dashboard_app.0005_imagereportchart_chart_height... OK
      lava-master        |   Applying dashboard_app.0006_auto_20141028_1146... OK
      lava-master        |   Applying dashboard_app.0007_imagereportchart_chart_visibility... OK
      lava-server        | .
      lava-master        |   Applying dashboard_app.0008_imagechartfilter_is_all_tests_included... OK


    • Lava idle

      Code Block
      languagebash
      lava-dispatcher    | 2019-05-09 19:03:21,510   DEBUG PING => master (last message 20s ago)
      lava-master        | 2019-05-09 19:03:21,513   DEBUG lava-dispatcher => PING(20)
      lava-dispatcher    | 2019-05-09 19:03:21,519   DEBUG master => PONG(20)
      lava-master        | 2019-05-09 19:03:36,201    INFO scheduling health checks:
      lava-master        | 2019-05-09 19:03:36,205    INFO scheduling jobs:
      lava-master        | 2019-05-09 19:03:38,651   DEBUG lava-logs => PING(20)
      lava-logs          | 2019-05-09 19:03:38,648   DEBUG PING => master
      lava-logs          | 2019-05-09 19:03:38,657   DEBUG master => PONG(20)
      lava-master        | 2019-05-09 19:03:41,549   DEBUG lava-dispatcher => PING(20)
      lava-dispatcher    | 2019-05-09 19:03:41,546   DEBUG PING => master (last message 20s ago)
      lava-dispatcher    | 2019-05-09 19:03:41,555   DEBUG master => PONG(20)
      lava-master        | 2019-05-09 19:03:56,221    INFO scheduling health checks:
      lava-master        | 2019-05-09 19:03:56,225    INFO scheduling jobs:
      lava-logs          | 2019-05-09 19:03:58,681   DEBUG PING => master
      lava-master        | 2019-05-09 19:03:58,684   DEBUG lava-logs => PING(20)
      lava-logs          | 2019-05-09 19:03:58,690   DEBUG master => PONG(20)
      lava-master        | 2019-05-09 19:04:01,579   DEBUG lava-dispatcher => PING(20)
      lava-dispatcher    | 2019-05-09 19:04:01,577   DEBUG PING => master (last message 20s ago)
      lava-dispatcher    | 2019-05-09 19:04:01,584   DEBUG master => PONG(20)


  5. Verify lava is running

    You can verify that lava has completed startup by trying to connect to the LAVA webserver in a web browser by going to localhost.

    Here's what the startup webpage should look like in your web browser:

...

You then need to bind your  host certificates to container by adding following line in lite-lava-docker-compose/docker-compose.yaml:

Code Block
languageyml
  lava-master:
    container_name: lava-master
    image: ${DC_SERVER_IMAGE}
    volumes:
    ...
    - /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro

Then, run the following command in the container and go back to job start step.

Code Block
update-ca-certificates

...

  1. Make sure that Docker is installed and works.
  2. git clone https://github.com/Linaro/lite-lava-docker-compose
  3. cd lite-lava-docker-compose
  4. make (wait until the bring is finished)
  5. (in another terminal window): make lava-setup, follow the instructions. As you don't have configuration files for boards, there will be "soft" errors related to that, ignore them.  
  6. make testjob

Capturing local board configuration for semi-automated setup

Oftentimes, the set of local development boards is static enough, and re-running "make board-configs" steps each time, as described in the section on semi-automated setup, is not needed. Instead, you can generate board configs once, and capture them in your repository, and keep them handy around for future (re)setups. This section describes suggestions and best practices for maintaining such a local setup on top of generic LITE setup

  1. Start with forking https://github.com/Linaro/lite-lava-docker-compose repository on github.
  2. Suppose, this will give you https://github.com/pfalcon/lite-lava-docker-compose (instead of "pfalcon", you will have your own username).
  3. Clone that repository locally with write access (e.g., use ssh access method).
  4. Make sure you are on the "lite" branch: git checkout lite.
  5. Create a branch for your personal setup (replace "pfalcon" with your own username): git checkout -b pfalcon.
  6. Run "make board-configs" step as described above.
  7. Commit any generated configs to you local personal branch.
  8. Afterwards, use your personal branch to run "make all", "make lava-setup", etc.
  9. To pick up any upstream changes, you would need to regularly rebase your personal branch on top of the "lite" branch, which gets regular updates:
    • git remote add upstream https://github.com/Linaro/lite-lava-docker-compose (needs be run just once on first update)
    • git checkout lite
    • git pull --rebase upstream lite
    • git checkout pfalcon
    • git rebase lite
    • git push --force
    • (Warning: alway rebase on the "lite" branch, not "master". If you rebase on "master" by mistake, you'll likely get conflicts. Run "git rebase --abort" and retry.)

Development Setup

NOTE: This section is RFC and WIP.

...