mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
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
306 lines
9.4 KiB
Bash
Executable File
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
|