* set dependency versions: PPA, git repository & commit * separate download and build+install steps * don't reinstall package if it's already installed refs #4630 Change-Id: I966fac5e1633cbabf78ce20cd151a35618efc345
187 lines
5.7 KiB
Bash
Executable File
187 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# -*- Mode:bash; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
|
|
#
|
|
# Copyright (C) 2015-2021, The University of Memphis,
|
|
# Arizona Board of Regents,
|
|
# Regents of the University of California.
|
|
#
|
|
# This file is part of Mini-NDN.
|
|
# See AUTHORS.md for a complete list of Mini-NDN authors and contributors.
|
|
#
|
|
# Mini-NDN is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Mini-NDN is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Mini-NDN, e.g., in COPYING.md file.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
set -eo pipefail
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
|
|
# These commands are generally installed on most systems. If not, user must install manually.
|
|
# 'sudo' is not directly used by this script, but Mininet install.sh uses it, so we check that also.
|
|
NEEDED_BINARIES=(
|
|
awk
|
|
git
|
|
sudo
|
|
)
|
|
MISSING_BINARIES=()
|
|
|
|
SUDO=
|
|
if [[ $(id -u) -eq 0 ]]; then
|
|
if [[ -n $SUDO_USER ]] && [[ -z $SKIPSUDOCHECK ]]; then
|
|
cat <<EOT
|
|
Do not run this script through sudo
|
|
Instead, run this script as a regular user; the script will call sudo when needed
|
|
To bypass this check, set the environment variable SKIPSUDOCHECK=1
|
|
EOT
|
|
exit 1
|
|
fi
|
|
else
|
|
SUDO=sudo
|
|
fi
|
|
|
|
for B in "${NEEDED_BINARIES[@]}"; do
|
|
if ! command -v "$B" >/dev/null; then
|
|
MISSING_BINARIES+=("$B")
|
|
fi
|
|
done
|
|
if [[ ${#MISSING_BINARIES[@]} -gt 0 ]] ; then
|
|
echo "Missing commands (${MISSING_BINARIES[*]}) to start this script. To install, run:"
|
|
echo " $SUDO apt install --no-install-recommends ca-certificates curl git mawk sudo"
|
|
echo " $SUDO yum install ca-certificates curl git mawk sudo"
|
|
exit 1
|
|
fi
|
|
|
|
CODEROOT="$(pwd)/dl"
|
|
NJOBS=$(nproc)
|
|
MEM_JOBS=$(awk '$1=="MemAvailable:" { print int($2/(1536*1024)); exit }' /proc/meminfo)
|
|
if [[ $MEM_JOBS -lt 1 ]]; then
|
|
NJOBS=1
|
|
echo 'Insufficient available RAM, build may fail'
|
|
elif [[ $MEM_JOBS -lt $NJOBS ]]; then
|
|
NJOBS=$MEM_JOBS
|
|
fi
|
|
PREFER_FROM=ppa
|
|
PPA_PKGS=()
|
|
|
|
ARGS=$(getopt -o 'hy' -l 'help,dir:,jobs:,no-wifi,ppa,source,cxx:,dummy-keychain,nfd:,psync:,nlsr:,tools:,traffic:,infoedit:,mininet:,mnwifi:,dl-only,ignore-existing' -- "$@")
|
|
eval set -- "$ARGS"
|
|
while true; do
|
|
case $1 in
|
|
-h|--help) HELP=1; shift;;
|
|
-y) CONFIRM=1; shift;;
|
|
--dir) CODEROOT=$2; shift 2;;
|
|
--jobs) NJOBS=$((0+$2)); shift 2;;
|
|
--no-wifi) NO_WIFI=1; shift;;
|
|
--ppa) PREFER_FROM=ppa; shift;;
|
|
--source) PREFER_FROM=source; shift;;
|
|
--cxx) CXX_VERSION=$2; NO_PPA=1; shift 2;;
|
|
--dummy-keychain) CXX_DUMMY_KEYCHAIN=1; NO_PPA=1; shift;;
|
|
--nfd) NFD_VERSION=$2; NO_PPA=1; shift 2;;
|
|
--psync) PSYNC_VERSION=$2; NO_PPA=1; shift 2;;
|
|
--nlsr) NLSR_VERSION=$2; NO_PPA=1; shift 2;;
|
|
--tools) TOOLS_VERSION=$2; NO_PPA=1; shift 2;;
|
|
--traffic) TRAFFIC_VERSION=$2; NO_PPA=1; shift 2;;
|
|
--infoedit) INFOEDIT_VERSION=$2; shift 2;;
|
|
--mininet) MININET_VERSION=$2; shift 2;;
|
|
--mnwifi) MNWIFI_VERSION=$2; shift 2;;
|
|
--dl-only) DL_ONLY=1; shift;;
|
|
--ignore-existing) IGNORE_EXISTING=1; shift;;
|
|
--) shift; break;;
|
|
*) exit 1;;
|
|
esac
|
|
done
|
|
|
|
if [[ $NJOBS -le 0 ]]; then
|
|
cat <<EOT
|
|
--jobs must be a positive integer.
|
|
Run ./install.sh -h to see help message.
|
|
EOT
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $HELP -eq 1 ]]; then
|
|
cat <<EOT
|
|
./install.sh [OPTION]...
|
|
|
|
General options:
|
|
-h Display help and exit.
|
|
-y Skip confirmation.
|
|
--dir=${CODEROOT}
|
|
Set where to download and compile the code.
|
|
--jobs=${NJOBS}
|
|
Set number of parallel jobs.
|
|
--no-wifi
|
|
Do not install Mininet-WiFi.
|
|
|
|
Install preference options:
|
|
--ppa
|
|
Install available packages from named-data PPA.
|
|
This is the default on Ubuntu, unless a source code version option is used.
|
|
--source
|
|
Install all packages from source code.
|
|
|
|
Source code version options:
|
|
--cxx=[VERSION]
|
|
Set ndn-cxx version.
|
|
--dummy-keychain
|
|
Patch ndn-cxx to use dummy KeyChain.
|
|
This disables signing and verifications, which allows experiments to run faster.
|
|
Use this option only if your scenario does not require signature verification.
|
|
--nfd=[VERSION]
|
|
Set NFD version.
|
|
--psync=[VERSION]
|
|
Set PSync version.
|
|
--nlsr=[VERSION]
|
|
Set NLSR version.
|
|
--tools=[VERSION]
|
|
Set NDN Essential Tools version.
|
|
--traffic=[VERSION]
|
|
Set NDN Traffic Generator version.
|
|
--infoedit=[VERSION]
|
|
Set infoedit version.
|
|
--mininet=[VERSION]
|
|
Set Mininet version.
|
|
--mnwifi=[VERSION]
|
|
Set Mininet-WiFi version.
|
|
Acceptable version syntaxes:
|
|
* git commit/tag/branch, example: --nfd=NFD-0.7.1
|
|
* git repository (e.g. fork) and commit/tag/branch, example:
|
|
--nfd=https://github.com/named-data/NFD.git@NFD-0.7.1
|
|
* change,patchset on named-data Gerrit, example: --nfd=6236,8
|
|
|
|
Misc options:
|
|
--dl-only
|
|
Download the source code only.
|
|
You may modify the code in ${CODEROOT} and then rerun this script to install them.
|
|
--ignore-existing
|
|
Ignore already installed binaries and libraries, and attempt to reinstall.
|
|
This is useful if you have modified source code checkout and want to install again.
|
|
EOT
|
|
exit 0
|
|
fi
|
|
|
|
trap 'set +e; trap - ERR; echo "Error!"; exit 1;' ERR
|
|
|
|
PKGDEPDIR="$(pwd)/util/pkgdep"
|
|
if [[ -e /etc/os-release ]]; then
|
|
source /etc/os-release
|
|
fi
|
|
for id in ${ID,,} ${ID_LIKE,,}; do
|
|
if [[ -e $PKGDEPDIR/$id.sh ]]; then
|
|
source "$PKGDEPDIR/$id.sh"
|
|
source "$PKGDEPDIR/common.sh"
|
|
exit 0
|
|
fi
|
|
done
|
|
echo "Unsupported platform ${ID}, aborting"
|
|
exit 1
|