Building OVIS Public

This website contains archival information. For updates, see https://github.com/ovis-hpc/ovis-wiki/wiki

Status

  • OVIS version 3.0 supports multiple concurrent shepherds for the distributed database and mysql inserts on the part of the sheep (on-component data collectors). It has the qt/vtk based interface only.
  • We have a number of installs that use a single shepherd configuration. There are some features in the master git branch that are currently supported for single shepherd operation only (e.g., outlier analysis).
  • The data collection version which uses LDMS rather than the sheep is being used on some collaborative installs. This eliminates the on-node mysql inserts.

Please contact ovis-help for more information.

Directory Structure

A specific directory structure is not mandated, however we have used the following in many deployments: OVIS source is in

~ovis/Source/ovis 

and the binaries are in

~ovis/Build/ovis

and make install has been done to install to

/usr/local/ovis

with links from /usr/local/bin to the binaries there for shepherd, baron, and ovis-db and with

/etc/ld.so.conf.d/ovis.conf 

created with contents /usr/local/ovis/lib and /usr/local/ovis/lib64. (Recall to run /sbin/ldconfig -v after, and restart mysqld)

Dependencies

  • Avahi (or Bonjour) – avahi is only necessary for running OVIS with multiple databases. Avahi headers are necessary for building OVIS, even if intending a single database, but the avahi service does not need to be running for single shepherd operation. version around 0.6.27
  • qt – 4.7.4
  • qjson – 0.7.1 at least
  • boost – version 1.44 at least
  • MySQL – can use either PostgreSQL or MySQL
  • PostgreSQL – can use either PostgreSQL or MySQL
  • libevent – only if using LDMS. version 2.x
  • readline
  • CMake (if building)- version 2.8 at least

On systems such as FC16 all these dependencies can be resolved via yum (on others they may not be, or the version may not be correct). Assuming you are building everything, this would be:

      yum install \
        cmake readline-devel libevent-devel \
        postgresql postgresql-devel postgresql-libs postgresql-server \
        mysql-devel mysql-utilities mysql mysql-libs mysql-server \
        avahi avahi-glib-devel avahi-gobject avahi-libs avahi-glib avahi-devel \
        avahi-ui-devel avahi-qt4-devel avahi-qt4 \
        qt qt-webkit-devel qt-webkit qt-devel qt-x11 qt-mysql qjson qjson-devel \
        boost boost-devel
      # Required only to build baler:
      yum install perl-Algorithm-Diff

Note that for some of the installation steps you may want to do (e.g., changing the rpath for programs) you may also want:

      yum install chrpath 

Otherwise you can install the packages from source and set the appropriate paths in the CMAKE Flags of OVIS.

CMAKE

OVIS uses CMAKE to build. Flags of interest include:

  • CMAKE_INSTALL_DIR – where you want to install ovis
  • any dependencypaths suchas : BOOST_INCLUDE_DIR, BOOST_LIBRARY_DIRS, QJSON_LIBRARY, QJSON_INCLUDE_DIR, any of the AVAHI flags etc
  • QT_QMAKE_EXECUTABLE
  • OVIS_USE_MYSQL or OVIS_USE_POSTGRESQL – at least one or the other must be on
  • OVIS_USE_AVAHI or OVIS_USE_BONJOUR – at least one or the other must be on
  • If you are using static libraries for your dependendencies: CMAKE_CXX_FLAGS and CMAKE_C_FLAGS -fPIC
  • OVIS_BUILD_BARON – set to yes for the install where you will run the baron (desired resolution and speed for the 3D interface requires NVIDIA card)
  • OVIS_BUILD_SHEPHERD – set to yes for the install where you will run shepherd (shepherd must be co-located with the database)

In addition:

  • BUILD_KOMONDOR = no
  • USE_SYSTEM_LIBEXEC =yes
  • anything to do with ldms currently no/off

Database

particular to FC16, from which you can extrapolate to your system:

  • Start database daemons
      # MySQL
      systemctl enable mysqld.service
      systemctl start mysqld.service
      # Be sure to change Foob to something you will remember:
      mysql -u root -e "UPDATE mysql.user SET Password=PASSWORD('Foob') WHERE User='root';FLUSH PRIVILEGES;"
      # If the above doesn't work, try adding "-p".
      # Drop the anonymous accounts (also verify afterward)
      mysql -u root -p -e "DROP USER (single quote here)(single quote here)@'localhost'"
      mysql -u root -p -e "DROP USER (single quote here)(single quote here)@'host_name_here'"
      #mysql -u root -p -e "CREATE DATABASE OVIS_Cluster; GRANT ALL ON OVIS_Cluster.* TO 'ovis'@'localhost';FLUSH PRIVILEGES;"
      #mysql -u root -p -e "CREATE DATABASE balerDemo;" 
      #mysql -u root -p -e "GRANT ALL ON balerDemo.* TO 'baler'@'localhost' IDENTIFIED BY 'Foob'; FLUSH PRIVILEGES;"
      mysql -u root -p -e "GRANT ALL ON *.* TO 'ovis'@'localhost';FLUSH PRIVILEGES;"
      # PostgreSQL
      postgresql-setup initdb
      systemctl enable postgresql.service
      systemctl start postgresql.service
      su - postgres
      createuser -s -R -l ovis
      createdb -O ovis ovis
      exit
      systemctl stop postgresql.service
      su - postgres
      echo "# local access to ovis for all" > hba.tmp
      echo "local   all             ovis                                    trust" >> hba.tmp
      mv /var/lib/pgsql/data/pg_hba.conf hba2.tmp
      cat hba.tmp hba2.tmp > /var/lib/pgsql/data/pg_hba.conf
      rm -f hba.tmp hba2.tmp
      # Turn off annoying informational messages that clutter real warning/error messages
      mv /var/lib/pgsql/data/postgresql.conf conf.tmp
      sed -e 's/max_connections = 100/max_connections = 500/g' \
        -e 's/^#client_min_messages = notice.*/client_min_messages = warning/g' \
        conf.tmp > /var/lib/pgsql/data/postgresql.conf
      exit
      # Turn up shared memory to 128 MiB (from 32 MiB) to allow more connections:
      sysctl -w kernel.shmmax=134217728
      # ... and make the change survive reboots:
      echo " " >> /etc/sysctl.conf
      echo "# For OVIS's use of PostgreSQL, increase shared memory size" >> /etc/sysctl.conf
      echo "kernel.shmmax = 134217728" >> /etc/sysctl.conf
      # Restart postgres
      systemctl start postgresql.service
  • Install database triggers and create a database
      # PostgreSQL
      mkdir /usr/local/ovis
      chown ovis /usr/local/ovis
      su - ovis
      cd Build/ovis
      make install
      cd bin
      tar cf - libvtksys* libvtkCommon* libvtkFiltering* libovTriggerPSQL.so | (cd /usr/local/ovis/lib64; tar xf - )
      cd /usr/local/ovis/lib64
      chrpath -r /usr/local/ovis/lib64: libvtkCommon* libvtkFiltering* libvtkInfovis* libovTriggerPSQL.so
      exit
      cd /usr/local/ovis/lib64
      for f in libovTriggerPSQL.so libvtksys.so.5.11.0 libvtkCommon.so.5.11.0 libvtkFiltering.so.5.11.0 libvtkInfovis.so.5.11.0; do
        semanage fcontext -a -t postgresql_exec_t /usr/local/ovis/lib64/$f
        restorecon -v /usr/local/ovis/lib64/$f
      done
      semanage fcontext -a -t lib_t '/usr/local/ovis/lib64'
      restorecon -v '/usr/local/ovis/lib64'
      su - ovis
      cd ~/Build/ovis
      ./bin/ovis-db -t 16383 -x data/test.ovdb
      exit
      # MySQL
      cd ~ovis/Build/ovis/bin
      tar cf - libovTriggerMySQL.so | (cd /usr/lib64/mysql/plugin; tar xf - )
      tar cf - libvtksys* libvtkCommon* libvtkFiltering* libvtkInfovis* libovTriggerMySQL.so | (cd /usr/lib64/mysql; tar xf - )
      restorecon -v /usr/lib64/mysql/libvtk*
      restorecon -v /usr/lib64/mysql/plugin/libovTriggerMySQL.so
      cd /usr/lib64/mysql
      chrpath -r /usr/lib64/mysql: libvtkCommon* libvtkFiltering* libvtkInfovis* plugin/libovTriggerMySQL.so
      su - ovis
      cd ~/Build/ovis
      ./bin/ovis-db -t 16383 -x data/test.ovdb -u mysql://ovis@localhost/OVIS_Cluster
      exit
  • Set any additional paths you need for OVIS libraries to be found.
      echo "/usr/local/lib64" > /etc/ld.so.conf.d/ovis.conf 
      echo "/usr/local/lib" >> /etc/ld.so.conf.d/ovis.conf
      ldconfig