yujinrobot / yujin_tools

Tools and utilities for development, typically with ROS build environments.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Rsync installspace overhaul

stonier opened this issue · comments

Installpace Targets

Thinking about moving from a single /opt/yujin/indigo install spaces to multiple, one for each target - e.g. groot, concert, waiterbot, etc.

  • Put into /opt/yujin/<target>/indigo
  • Put core libraries (e.g. ecl) into /opt/yujin/core/indigo
    • These should have deps that are installable on pretty much any pc or intel embedded pc we own
    • Q) split this into base and desktop for non-gui and gui?
    • Advantage - nicely splits things and parrallels ros groupings
    • Disadvantage - not necessary right now and is an extra step.
  • Other more specific targets can of course, rely on our core installspace.

Setting up a workspace root

I just set up a basic workspace on my pc. e.g. for a 'groot' target:

  • /opt/groot/ecl_ws
  • /opt/groot/dslam_ws
    ....

The only magic here is that you set CMAKE_INSTALL_PREFIX in every config.cmake to where you want it to install to.

** Yujin Tools **

Right now it only works on the one installspace, we need to ugprade yujin tools to handle the concept of targets so we can do something like:

# To send an installspace to the server:
> yujin_rsync_installspace gopher --push
# or to pull
> yujin_rsync_installspace gopher
# To see what's available
> yujin_rsync_installspace --list

Maybe we need a github file like the rosinstalls which list all the different installspaces we have.
yujin_rsync_installspace would then do a lookup.

Buildspace Script

Same thing here, this needs an upgrade, but it is how I currently do it for our single target. Note this has two modes. Default is to build. The non-default requires --push and uses
yujin_rsync_installspace to rysnc with our fileserver.

#!/bin/bash

if [ "$1" == "--push" ]; then
  yujin_rsync_installspace --push
  exit 0
fi

if [ $# -gt 0 ]; then
  echo ""
  echo "This builds and installs the groot workspace into /opt/yujin/indigo."
  echo ""
  echo "    Options:"
  echo "        --pre-clean : pre-cleans with yujin_make each source workspace"
  echo "        --push      : do not build, just rsync to the file server"
  echo ""
  echo "    Current workspaces:"
  echo "        ecto"
  echo "        ecl"
  echo "        navi"
  echo "        dslam"
  echo "        gopher"
  echo ""
  exit 0
fi


OPTIONS=
if [ "$1" == "--pre-clean" ]; then
  OPTIONS=--pre-clean
fi

GROOT=/opt/groot
REPOS=(ecto ecl navi dslam gopher)
#rm -rf /opt/yujin/indigo 
for ws in "${REPOS[@]}"; do
  WS_ROOT=${GROOT}/${ws}_ws
  WS_SRC=${WS_ROOT}/src
  cd ${WS_SRC}
  wstool update -j5
  cd ${WS_ROOT}
  yujin_make ${OPTIONS}
  yujin_make --install
done

Jenkins

Be good to get this running on jenkins. However our jenkins is on precise, so we'd need to do it as a ssh job.

This is all working, from jenkins as well. All workspaces contribute directly to /opt/yujin/indigo.

One binary source for yujin I think is the best idea. We don't have the resources to maintain many parallel developments. If there are special cases, there are ways to work around it.