Files
allwpilib/simulation/frcsim-installer.sh
Peter_Mitrano 70bc630f1f Fixing the frcsim installer script
URL for simulation zip changed as of gerrit 1264
script argument name changed from INSTALLER to INSTALL
fixed jar and logo paths for sim_ds

to use the script, it's now simply:
./frcsim-installer.sh INSTALL

You can optionally supply a promotion status from which to install, such as
./frcsim-installer.sh INSTALL beta
./frcsim-installer.sh INSTALL development

Also added some information to the README

Also allow any type of file install-resources since it may contain
libraries and jars

Change-Id: Ie876a05c88d3d48b8592f1800959988ae66edd04
2016-01-03 02:05:22 -05:00

306 lines
9.4 KiB
Bash
Executable File

#!/bin/bash
function check-environment {
# Ensure root access
if [ "$(id -u)" != "0" ]; then
echo "*** This script must be run as root!" 1>&2
echo "*** Make sure that you followed the instructions properly." 1>&2
install-fail
fi
# Make sure that we're on Ubuntu.
if [ "$(lsb_release -is)" != "Ubuntu" ]; then
if [ "$(lsb_release -is)" = "" ]; then
echo "*** Distributions other than Ubuntu (such as yours, probably) are not supported." 1>&2
else
echo "*** Distributions other than Ubuntu (such as $(lsb_release -is)) are not supported." 1>&2
fi
echo "*** This means that the install will likely fail." 1>&2
echo "*** Continue anyway? (y/n)" 1>&2
read CONT
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
install-fail
fi
fi
# Make sure that we have /etc/apt/sources.list.d available.
if [ ! -e /etc/apt/sources.list.d ]; then
echo "*** Cannot find /etc/apt/sources.list.d - is apt installed?"
install-fail
fi
# Make sure that apt-key is installed.
if ! which apt-key >/dev/null; then
echo "*** You don't appear to have apt-key installed." 1>&2
echo "*** Please install apt and run the script again." 1>&2
install-fail
fi
# Make sure that apt-get is installed.
if ! which apt-get >/dev/null; then
echo "*** You don't appear to have apt-get installed." 1>&2
echo "*** Please install apt and run the script again." 1>&2
install-fail
fi
# Make sure that we have internet access.
if ! ping 8.8.8.8 -c 1 >/dev/null; then
echo "*** You don't appear to be able to access the internet! (Can't ping 8.8.8.8)" 1>&2
install-fail
fi
# Make sure that wget is installed.
if ! which wget >/dev/null; then
echo "*** You don't appear to have wget installed." 1>&2
echo "*** Install? (y/n)" 1>&2
read CONT
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
install-fail
fi
apt-get install wget -y
fi
# Make sure that python is installed
if ! which python >/dev/null; then
echo "*** You don't appear to have python installed." 1>&2
echo "*** Install? (y/n)" 1>&2
read CONT
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
install-fail
fi
apt-get install python -y
fi
# Make sure that unzip is installed
if ! which unzip >/dev/null; then
echo "*** You don't appear to have unzip installed." 1>&2
echo "*** Install? (y/n)" 1>&2
read CONT
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
install-fail
fi
apt-get install unzip -y
fi
# Make sure that app-apt-repository is installed
if ! which add-apt-repository >/dev/null; then
echo "*** You don't appear to have all apt commands installed." 1>&2
echo "*** Install? (y/n)" 1>&2
read CONT
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
install-fail
fi
apt-get install software-properties-common -y
fi
}
function remove-frcsim {
echo "*** Remove Gazebo package entry too? (y/n)" 1>&2
read CONT
if [ "$CONT" == "y" -o "$CONT" == "Y" ]; then
rm -f /etc/apt/sources.list.d/gazebo-latest.list
fi
apt-get remove --auto-remove libgazebo6-dev gazebo6 g++-4.9 openjdk-8-jdk
rm -rf /opt/eclipse
rm -f /usr/share/applications/frcsim.desktop /usr/share/applications/eclipse.desktop /usr/share/applications/sim_ds.desktop
rm -f /usr/bin/frcism /usr/bin/sim_ds /usr/bin/eclipse
rm -rf ~/wpilib/simulation
add-apt-repository --remove ppa:openjdk-r/ppa -y
add-apt-repository --remove ppa:ubuntu-toolchain-r/test -y
}
function install-eclipse-plugins {
#valid URLs can have promotion status of any of the following
# - development (used for most recent merge into wpilib)
# - beta
# - release
# - stable
#this file is published to maven repo by simulation/build.gradle
if ! (wget -O /tmp/simulation.zip http://first.wpi.edu/FRC/roborio/maven/$PROMOTION_STATUS/edu/wpi/first/wpilib/simulation/simulation/1.0.0/simulation-1.0.0.zip)
then
echo "***could not download wpilib simulation plugins, wrong URL probably***"
echo "promotion status = $PROMOTION_STATUS"
echo "url = http://first.wpi.edu/FRC/roborio/maven/$PROMOTION_STATUS/edu/wpi/first/wpilib/simulation/simulation/1.0.0/simulation-1.0.0.zip"
install-fail
fi
mkdir -p ~/wpilib/simulation
unzip /tmp/simulation.zip -d ~/wpilib/simulation
ln -fs ~/wpilib/simulation/frcsim /usr/bin/frcsim
ln -fs ~/wpilib/simulation/sim_ds /usr/bin/sim_ds
}
function install-eclipse {
if ! (wget -O /tmp/eclipse.tar.gz http://eclipse.mirror.rafal.ca/technology/epp/downloads/release/mars/1/eclipse-cpp-mars-1-linux-gtk-x86_64.tar.gz)
then
echo "***could not download eclipse, wrong URL probably***"
install-fail
fi
tar -xf /tmp/eclipse.tar.gz -C /opt
ln -fs /opt/eclipse/eclipse /usr/bin/eclipse
}
function install-desktops {
# desktop files allow ubuntu (unity) users to "search" for their programs in the sidebar
mv ~/wpilib/simulation/eclipse.desktop /usr/share/applications/eclipse.desktop
mv ~/wpilib/simulation/frcsim.desktop /usr/share/applications/frcsim.desktop
mv ~/wpilib/simulation/sim_ds.desktop /usr/share/applications/sim_ds.desktop
mkdir -p /usr/share/icons/sim_ds
mv ~/wpilib/simulation/sim_ds_logo.png /usr/share/icons/sim_ds/sim_ds_logo.png
}
function install-gz_msgs {
# gz_msgs is built on the end-user system
# that way the versions of protobuf will match whatever the default for that platform is
cd ~/wpilib/simulation/gz_msgs
mkdir build
cd build
cmake ..
make
make install
chmod u+x ~/wpilib/simulation/lib/libgz_msgs.so
}
function install-toolchain {
# older version of ubuntu like 14.04 don't have the versions of g++ and java we need
# we can add some very reliable PPAs to get them however
if [[ "`lsb_release -rs`" == "14.04" ]]
then
echo "*** You're using `lsb_release -r`, you will need additional repositories***"
echo "*** Install? (y/n)" 1>&2
read CONT
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
install-fail
fi
add-apt-repository ppa:openjdk-r/ppa -y
add-apt-repository ppa:ubuntu-toolchain-r/test -y
fi
if [[ "`lsb_release -rs`" == "15.04" ]]
then
echo "*** You're using `lsb_release -r`, you will need additional repositories***"
echo "*** Install? (y/n)" 1>&2
read CONT
if [ "$CONT" != "y" -a "$CONT" != "Y" ]; then
install-fail
fi
add-apt-repository ppa:openjdk-r/ppa -y
fi
# Update and install dependencies
if ! apt-get update
then
echo "*** Could not resynchronize package index files." 1>&2
echo "*** Are you running another update or install?" 1>&2
install-fail
fi
apt-get install cmake libprotoc-dev libprotobuf-dev protobuf-compiler g++-4.9 openjdk-8-jdk -y
ln -fs /usr/bin/g++-4.9 /usr/bin/g++
}
function install-models {
# this zip file is made by hand. A better option to add models is to use the gazebo repository
if ! (wget -O /tmp/models.zip https://usfirst.collab.net/sf/frs/do/downloadFile/projects.wpilib/frs.simulation.frcsim_gazebo_models/frs1160?)
then
echo "*** failed to download models. Check your internet connection! ***"
install-fail
fi
unzip /tmp/models.zip -d /tmp
mv /tmp/frcsim-gazebo-models/models ~/wpilib/simulation/models
mv /tmp/frcsim-gazebo-models/worlds ~/wpilib/simulation/worlds
}
function install-frcsim {
check-environment
# Add Gazebo Repository and Key
if ! echo "deb http://packages.osrfoundation.org/gazebo/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-latest.list
then
echo "*** Cannot add Gazebo repository!" 1>&2
install-fail
fi
if ! (wget http://packages.osrfoundation.org/gazebo.key -O - | apt-key add -)
then
echo "*** Cannot add Gazebo repository key!" 1>&2
if ! ping packages.osrfoundation.org -c 1 >/dev/null; then
echo "*** The package host for Gazebo appears to be down. Try again later." 1>&2
fi
install-fail
fi
install-toolchain
if ! apt-get install -y libgazebo6-dev gazebo6
then
echo "*** Could not install frcsim packages. See above output for details." 1>&2
echo "*** Are you running another update or install?" 1>&2
install-fail
fi
install-eclipse-plugins
install-gz_msgs
install-eclipse
install-desktops
install-models
change-ownership
# Done
echo "Installation Finished!!"
}
function install-fail {
echo "***INSTALLATION UNSUCCESSFUL***"
echo "***Check the output about for anything that looks like errors***"
echo "Please comment on the following to tutorial if you're unable to resolve your problem:"
echo "https://wpilib.screenstepslive.com/s/4485/m/23353/l/478421-installing-frcsim-with-a-script-ubuntu"
exit 1
}
function change-ownership {
chown -R $NON_SUDO_USER:$NON_SUDO_USER ~/wpilib
}
if [ "$1" == "INSTALL-ROOT" ]
then
if [ -z "$2" ]
then
echo "*** Could not set user ~/wpilib ownership to empty user***"
install-fail
else
NON_SUDO_USER="$2"
fi
if [ -z "$3" ]
then
PROMOTION_STATUS="release"
else
PROMOTION_STATUS="$3"
fi
install-frcsim
elif [ "$1" == "INSTALL" ]
then
NON_SUDO_USER="$USER"
PROMOTION_STATUS="$2"
SUDO_ASKPASS=/usr/bin/ssh-askpass sudo bash -c "$0 INSTALL-ROOT $NON_SUDO_USER $PROMOTION_STATUS"
elif [ "$1" == "REMOVE-ROOT" ]
then
remove-frcsim
elif [ "$1" == "REMOVE" ]
then
NON_SUDO_USER="$USER"
SUDO_ASKPASS=/usr/bin/ssh-askpass sudo bash -c "$0 REMOVE-ROOT $NON_SUDO_USER $PROMOTION_STATUS"
else
echo "***This script requires an argument!***"
echo "***Run ./frcsim_installer.sh INSTALL to install***"
echo "***The other option is REMOVE"
fi