Files
MaxScale/maxscale-system-test/ENV_SETUP.md
Markus Mäkelä d7d4ec29bb Add tests from develop
Added tests from develop. The test results need to be modified for 2.0.
2017-05-26 15:40:40 +03:00

9.3 KiB

Build and test environment setup

Full build and test environment setup

# install ruby
sudo apt-get install ruby

# install all needed libraries
sudo apt-get install libxslt-dev libxml2-dev libvirt-dev zlib1g-dev

# install vagrant
# it is also possible to install Vagrant from distribution repository, but in case of problems please use 1.7.2
wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.2_x86_64.deb
sudo dpkg -i vagrant_1.7.2_x86_64.deb

# install Vagrant plugins
vagrant plugin install vagrant-aws vagrant-libvirt vagrant-mutate

# get MDBCI, build scripts, descriptions of MDBCI boxes and keys from GitHub
git clone https://github.com/OSLL/mdbci.git
git clone git@github.com:mariadb-corporation/mdbci-repository-config.git
git clone git@github.com:mariadb-corporation/build-scripts-vagrant.git
git clone git@github.com:mariadb-corporation/mdbci-boxes

# Copy scripts and boxes to proper places
mv build-scripts-vagrant build-scripts
scp -r mdbci-boxes/* mdbci/

# set proper access rights for ssh keys (for ppc64 machines)
chmod 400 mdbci/KEYS/*

# install all the stuff for test package build
sudo apt-get install cmake gcc g++ libssl-dev
sudo apt-get install mariadb-client shellcheck

# install MariaDB development library
sudo apt-get install libmariadbclient-dev
# Ubuntu repos can contain the sa,e package with different name 'libmariadb-client-lgpl-dev'
# but it can not be used to build maxscale-system-test; please use mariadb.org repositories
# https://downloads.mariadb.org/mariadb/repositories/
# Do not forget to remove all other MariaDB and MySQL packages!

# install qemu (more info https://en.wikibooks.org/wiki/QEMU/Installing_QEMU)
sudo apt-get install qemu qemu-kvm libvirt-bin

# install virt-manager (if you prefer UI)
sudo apt-get install virt-manager

# install docker (if needed) - see https://docs.docker.com/engine/installation/

# if cmake from distribution repository is too old it is recommended to build it from latest sources
wget https://cmake.org/files/v3.4/cmake-3.4.1.tar.gz # replace 3.4.1 to latest version
tar xzvf cmake-3.4.1.tar.gz
cd cmake-3.4.1
./bootstrap
make
sudo make install
cd

# sysbench 0.5 should be in sysbench_deb7 directory; it can be built from source:
git clone https://github.com/akopytov/sysbench.git
cd sysbench
./autogen.sh
./configure
make
cd ..
mv sysbench sysbench_deb7

# for OVH servers it is needed to move 'docker' and 'libvirt' working directories to /home
# (replace 'vagrant' to your home directory name)
cd /var/lib/
sudo mv docker /home/vagrant/
sudo ln -s /home/vagrant/docker docker
cd libvirt
sudo mv images /home/vagrant/
sudo ln -s /home/vagrant/images images
cd

# (HACK) in case of problem with building sysbench:
scp -r vagrant@maxscale-jenkins.mariadb.com:/home/vagrant/sysbench_deb7  .

# (HACK) in case of problem with 'dummy' box (problem is caused by MDBCI bug):
scp -r vagrant@maxscale-jenkins.mariadb.com:/home/vagrant/.vagrant.d/boxes/dummy .vagrant.d/boxes/

# MariaDBManager-GPG* files are needed for Maxscale builds in the home directory

# put AWS keys to aws-config.yml (see https://github.com/OSLL/mdbci/blob/master/aws-config.yml.template)

# add curent user to the group 'libvirtd'
sudo usermod -a -G user_name libvirtd

# start libvirt default pool
virsh pool-start default

Setup VMs manually

Empty virtual machine

Following template can be used to create empty VM (for qemu machines):

{
  "cookbook_path" : "../recipes/cookbooks/",
  "build" :
  {
        "hostname" : "default",
        "box" : "###box###",
        "product" : {
                "name" : "packages"
        }
  }
}

for AWS machines:

{
  "cookbook_path" : "../recipes/cookbooks/",
  "aws_config" : "../aws-config.yml",
  "build" :
  {
        "hostname" : "build",
        "box" : "###box###"
  }
}

Following boxes are availabe:

  • qemu: debian_7.5_libvirt, ubuntu_trusty_libvirt, centos_7.0_libvirt, centos_6.5_libvirt
  • AWS: rhel5, rhel6, rhel7, sles11, sles12, fedora20, fedora21, fediora22, ubuntu_wily, ubuntu_vivid, centos7, deb_jessie

Maxscale and backend machines creation

  • Generation of Maxscale repository description It is necessary to generate descriptions of MariaDB and Maxscale repositories before bringin up Maxscale machine with Vagrant
export ci_url="http://my_repository_site.com/repostory/"
~/mdbci-repository-config/generate_all.sh $repo_dir
~/mdbci-repository-config/maxscale-ci.sh $target $repo_dir

where

$repo_dir - directory where repository descriptions will be created
$target - directory with MaxScale packages in the repositoy

example:

export ci_url="http://max-tst-01.mariadb.com/ci-repository/"
~/mdbci-repository-config/generate_all.sh repo.d
~/mdbci-repository-config/maxscale-ci.sh develop repo.d

More information can be found in the MDBCI documentation and in the mdbci-repository-config documentaion

  • Preparing configuration description Virtual machines should be described in JSON format. Example template can be found in the build-scripts package.

MariaDB machine description example:

"node0" :
  {
        "hostname" : "node0",
        "box" : "centos_7.0_libvirt",
        "product" : {
                "name": "mariadb",
                "version": "10.0",
                "cnf_template" : "server1.cnf",
                "cnf_template_path": "~/build-scripts/test-setup-scripts/cnf"
        }

  }

"cnf_template" defines .cnf file which will be places into MariaDB machine. build-scripts package contains examples of .cnf files.

MariaDB Galera machine description example:

"galera0" :
  {
        "hostname" : "galera0",
        "box" : "centos_7.0_libvirt",
        "product" : {
                "name": "galera",
                "version": "10.0",
                "cnf_template" : "galera_server1.cnf",
                "cnf_template_path": "~/build-scripts/test-setup-scripts/cnf"
        }
  }

For Galera machines MDBCI automatically puts following information into .cnf file:

field description
###NODE-ADDRESS### IP address of the node (for AWS - private IP)
###NODE-NAME### Replaces by node name ("node0" in this example)
###GALERA-LIB-PATH### Path to the Galera library file (.so file)

Example of Maxscale machine description:

"maxscale" :
  {
        "hostname" : "maxscale",
        "box" : "centos_7.0_libvirt",
        "product" : {
                "name": "maxscale"
        }

  }

Generation configuration and bringing machines up

After creation machines description JSON two steps are needed.

  1. Generate configuration
./mdbci --override --template $template_name.json --repo-dir $repo_dir generate $name

where

variable description
$template_name name of machines descripiton JSON file
$repo_dir directory with repositories description generated by mdbci-repository-config (repo.d)
$name name of test configuration; will be used as directory name for Vagrant files
  1. Bringing machines up
./mdbci up $name

Configuring DB users

Automatic DB users is not implemented yet, so it have to be done manually. See setup_repl.sh and setup_galera.sh for details.

Any test from 'maxscale-system-test' checks Master/Slave and Galera configurations and restores them if they are broken, but it works only if DB users are created.

TODO: add it into 'maxscale-system-test'

Access VMs

MDBCI provides a number of commands to get information about running vrtial machines. See MDBCI documentation for details.

set_env_vagrant.sh script defines environmental variables needed by 'maxscale-system-test'. The same variables can be used to access VMs manually.

Script have to be executed fro 'mbdci' directory. Do not forget '.':

cd ~/mdbci/
. ../build-scripts/test/set_env_vagrant.sh $name

After it virual machines can be accessed via ssh, for example:

ssh -i $maxscale_sshkey $maxscale_access_user@$maxscale_IP

Another way is to use 'vagrant ssh':

cd ~/mdbci/$name/
vagrant ssh <node_name>

MDBCI can give IP address, path to ssh key:

./mdbci show network <configuration_name>/<node_name> --silent
./mdbci show keyfile <configuration_name>/<node_name> --silent
./mdbci ssh --command 'whoami' <configuration_name>/<node_name> --silent

Node name for build machine is 'build'

Nodes names for typical test setup are node0, ..., node3, galera0, ..., galera3, maxscale

Example:

./mdbci show network centos6_vm01/build --silent
./mdbci show keyfile centos6_vm01/build --silent
./mdbci ssh --command 'whoami' centos6_vm01/build --silent

Destroying configuration

cd ~/mdbci/$name
vagrant destroy -f