Hacking prerequisites » History » Version 41
Tom Clegg, 03/27/2018 07:28 PM
| 1 | 1 | Tom Clegg | {{>toc}} |
|---|---|---|---|
| 2 | |||
| 3 | h1. Hacking prerequisites |
||
| 4 | |||
| 5 | The Arvados test suite can run in a Docker container, a VM, or your workstation -- provided a few prerequisites are satisfied. |
||
| 6 | |||
| 7 | h2. Host options |
||
| 8 | |||
| 9 | h3. Starting on your workstation |
||
| 10 | |||
| 11 | 31 | Ward Vandewege | If your workstation is a debian jessie system -- and you don't mind installing a bunch of packages on your workstation, some of them without apt -- the easiest way to get running is to run tests on bare metal. Skip to "Dependencies". |
| 12 | 1 | Tom Clegg | |
| 13 | Other linux distributions should work too with some modifications, but it's probably easier to use a VM. |
||
| 14 | |||
| 15 | h3. Starting on a VM |
||
| 16 | |||
| 17 | Another option is to create a virtual machine using something like Xen or VirtualBox, and run debian jessie on it. The instructions below assume you have just a few basic requirements: |
||
| 18 | * SSH server |
||
| 19 | * sudo (@apt-get install sudo@) |
||
| 20 | * A user account with sudo privileges |
||
| 21 | |||
| 22 | h3. Starting in a docker container |
||
| 23 | |||
| 24 | This can get you started quickly, but (unlike the above options) you'll need to remember to use something like @docker commit@ to save your state before shutting down your container. |
||
| 25 | |||
| 26 | See http://docker.io for more about installing docker. On debian it looks something like this. |
||
| 27 | |||
| 28 | <pre> |
||
| 29 | echo 'deb http://http.debian.net/debian jessie-backports main' | sudo tee -a /etc/apt/sources.list.d/jessie-backports.list |
||
| 30 | sudo apt-get install docker.io |
||
| 31 | sudo adduser $USER docker |
||
| 32 | # {log out & log back in} |
||
| 33 | groups |
||
| 34 | # {should include "docker"} |
||
| 35 | </pre> |
||
| 36 | |||
| 37 | Start up a new container with jessie, make a new user and log in as that user: |
||
| 38 | |||
| 39 | <pre> |
||
| 40 | 12 | Joshua Randall | docker run -it --privileged debian:jessie bash |
| 41 | 1 | Tom Clegg | apt-get update |
| 42 | 34 | Tom Clegg | apt-get -y install sudo |
| 43 | 1 | Tom Clegg | adduser me |
| 44 | 33 | Tom Clegg | adduser me sudo |
| 45 | 1 | Tom Clegg | sudo -u me -i |
| 46 | </pre> |
||
| 47 | 12 | Joshua Randall | |
| 48 | 15 | Tom Clegg | The "--privileged" is required in order for /dev/fuse to be accessible (without it, no tests that require FUSE will work). |
| 49 | 1 | Tom Clegg | |
| 50 | h2. Install dev environment |
||
| 51 | |||
| 52 | 3 | Tom Clegg | <pre> |
| 53 | 37 | Tom Clegg | # only on debian 9 (stretch), to permit ruby 2.3 compilation (see https://github.com/rbenv/ruby-build/wiki#openssl-usrincludeopensslasn1_mach102-error-error-this-file-is-obsolete-please-update-your-software): |
| 54 | 36 | Tom Clegg | sudo apt-get install --no-install-recommends libssl1.0-dev |
| 55 | |||
| 56 | 19 | Tom Clegg | sudo apt-get install --no-install-recommends \ |
| 57 | 38 | Tom Clegg | bison build-essential cadaver fuse gettext git gitolite3 graphviz \ |
| 58 | 22 | Tom Clegg | iceweasel libattr1-dev libfuse-dev libcrypt-ssleay-perl libjson-perl \ |
| 59 | libcrypt-ssleay-perl libcurl3 libcurl3-gnutls libcurl4-openssl-dev \ |
||
| 60 | libjson-perl libpcre3-dev libpq-dev libpython2.7-dev libreadline-dev \ |
||
| 61 | libssl-dev libxslt1.1 libwww-perl linkchecker lsof nginx perl-modules \ |
||
| 62 | 10 | Joshua Randall | postgresql python python-epydoc pkg-config sudo virtualenv \ |
| 63 | 2 | Tom Clegg | wget xvfb zlib1g-dev |
| 64 | |||
| 65 | 32 | Tom Clegg | # ruby 2.3 |
| 66 | 1 | Tom Clegg | ( |
| 67 | set -e |
||
| 68 | mkdir -p ~/src |
||
| 69 | cd ~/src |
||
| 70 | 41 | Tom Clegg | wget http://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.6.tar.gz |
| 71 | tar xzf ruby-2.3.6.tar.gz |
||
| 72 | cd ruby-2.3.6 |
||
| 73 | 1 | Tom Clegg | ./configure --disable-install-doc |
| 74 | make |
||
| 75 | sudo make install |
||
| 76 | sudo gem install bundler |
||
| 77 | ) |
||
| 78 | |||
| 79 | 39 | Tom Clegg | # go >= 1.9 |
| 80 | sudo apt-get install golang-1.9 || \ |
||
| 81 | 1 | Tom Clegg | ( |
| 82 | set -e |
||
| 83 | 40 | Tom Clegg | wget https://storage.googleapis.com/golang/go1.9.4.linux-amd64.tar.gz |
| 84 | sudo tar -C /usr/local -xzf go1.9.4.linux-amd64.tar.gz |
||
| 85 | 1 | Tom Clegg | cd /usr/local/bin |
| 86 | sudo ln -s ../go/bin/* . |
||
| 87 | ) |
||
| 88 | |||
| 89 | # phantomjs 1.9.8 |
||
| 90 | ( |
||
| 91 | set -e |
||
| 92 | PJS=phantomjs-1.9.8-linux-x86_64 |
||
| 93 | wget -P /tmp https://bitbucket.org/ariya/phantomjs/downloads/$PJS.tar.bz2 |
||
| 94 | sudo tar -C /usr/local -xjf /tmp/$PJS.tar.bz2 |
||
| 95 | sudo ln -s ../$PJS/bin/phantomjs /usr/local/bin/ |
||
| 96 | ) |
||
| 97 | </pre> |
||
| 98 | |||
| 99 | 20 | Tom Clegg | Note: For ubuntu, virtualenv is python-virtualenv |
| 100 | 18 | Bryan Cosca | |
| 101 | 1 | Tom Clegg | h2. Get the arvados source tree and test scripts |
| 102 | |||
| 103 | <pre> |
||
| 104 | cd |
||
| 105 | git clone https://github.com/curoverse/arvados.git |
||
| 106 | </pre> |
||
| 107 | |||
| 108 | ...or, if you're a committer with your public key on our git server: |
||
| 109 | |||
| 110 | <pre> |
||
| 111 | cd |
||
| 112 | git clone git@git.curoverse.com:arvados.git |
||
| 113 | </pre> |
||
| 114 | |||
| 115 | 5 | Tom Clegg | h2. Start Postgres |
| 116 | |||
| 117 | _If you're running in a docker container_ you'll need to start Postgres manually: |
||
| 118 | |||
| 119 | <pre> |
||
| 120 | sudo /etc/init.d/postgresql start |
||
| 121 | </pre> |
||
| 122 | |||
| 123 | 1 | Tom Clegg | (If you're on a regular workstation/server/VM, startup scripts have already taken care of that for you.) |
| 124 | 9 | Joshua Randall | |
| 125 | 11 | Joshua Randall | h2. Start X11 |
| 126 | |||
| 127 | In order for the apps/workbench tests to function, firefox needs to have an X11 server (or it will fail to start). If you are on a workstation with a "real" X server, that should work. If not, Xvfb is an X server that renders to a virtual framebuffer so that selenium/firefox tests can run in headless mode. Also make sure that the DISPLAY environment variable is set accordingly. |
||
| 128 | |||
| 129 | <pre> |
||
| 130 | 29 | Tom Morris | Xvfb :0.0 & |
| 131 | 11 | Joshua Randall | export DISPLAY=":0.0" |
| 132 | </pre> |
||
| 133 | |||
| 134 | 9 | Joshua Randall | h2. Setup groups |
| 135 | |||
| 136 | 17 | Tom Clegg | Make sure the fuse and docker groups exist (create them if necessary) and that the user who will run the tests is a member of them. |
| 137 | 13 | Joshua Randall | |
| 138 | 1 | Tom Clegg | h2. Create a Postgres user |
| 139 | |||
| 140 | 5 | Tom Clegg | Create an "arvados" user with "create database" privileges. The test suite will create and drop the arvados_test database as needed. |
| 141 | 1 | Tom Clegg | |
| 142 | <pre> |
||
| 143 | newpw=`tr -cd a-zA-Z </dev/urandom |head -c32` |
||
| 144 | sudo -u postgres psql -c "create user arvados with createdb encrypted password '$newpw'" |
||
| 145 | 16 | Tom Clegg | cp -i ~/arvados/services/api/config/database.yml{.example,} |
| 146 | 1 | Tom Clegg | newpw="$newpw" perl -pi~ -e 's/xxxxxxxx/$ENV{newpw}/' ~/arvados/services/api/config/database.yml |
| 147 | </pre> |
||
| 148 | |||
| 149 | h2. Run tests |
||
| 150 | |||
| 151 | <pre> |
||
| 152 | 24 | Ward Vandewege | time ~/arvados/build/run-tests.sh WORKSPACE=~/arvados |
| 153 | 1 | Tom Clegg | </pre> |
| 154 | |||
| 155 | 14 | Tom Clegg | During development, you'll probably want something more like this. It reuses the given temp directory, which avoids a lot of repetitive downloading of dependencies, and allows you to save time with @--skip-install@ or @--only-install sdk/ruby@ and so on. |
| 156 | 1 | Tom Clegg | |
| 157 | <pre> |
||
| 158 | 23 | Tom Clegg | mkdir -p ~/.cache/arvados-build |
| 159 | 24 | Ward Vandewege | time ~/arvados/build/run-tests.sh WORKSPACE=~/arvados --temp ~/.cache/arvados-build |
| 160 | 1 | Tom Clegg | </pre> |