scripts/setup
#!/usr/bin/env bash
#
# Prints a log message.
#
function log()
{
if [[ -t 1 ]]; then
echo -e "\x1b[1m\x1b[32m>>>\x1b[0m \x1b[1m$1\x1b[0m"
else
echo ">>> $1"
fi
}
#
# Prints a warn message.
#
function warn()
{
if [[ -t 1 ]]; then
echo -e "\x1b[1m\x1b[33m***\x1b[0m \x1b[1m$1\x1b[0m" >&2
else
echo "*** $1" >&2
fi
}
#
# Prints an error message.
#
function error()
{
if [[ -t 1 ]]; then
echo -e "\x1b[1m\x1b[31m!!!\x1b[0m \x1b[1m$1\x1b[0m" >&2
else
echo "!!! $1" >&2
fi
}
#
# Prints an error message and exists with -1.
#
function fail()
{
error "$@"
exit -1
}
#
# Sets os_platform and os_arch.
#
function detect_os()
{
os_platform="$(uname -s)"
os_arch="$(uname -m)"
}
#
# Auto-detect the package manager.
#
function detect_package_manager()
{
case "$os_platform" in
Linux)
if [[ -f /etc/redhat-release ]]; then
if command -v dnf >/dev/null; then
package_manager="dnf"
elif command -v yum >/dev/null; then
package_manager="yum"
fi
elif [[ -f /etc/debian_version ]]; then
if command -v apt-get >/dev/null; then
package_manager="apt"
fi
elif [[ -f /etc/SuSE-release ]]; then
if command -v zypper >/dev/null; then
package_manager="zypper"
fi
elif [[ -f /etc/arch-release ]]; then
if command -v pacman >/dev/null; then
package_manager="pacman"
fi
elif [[ -f /etc/os-release ]]; then
if command -v pacman >/dev/null; then
package_manager="pacman"
elif command -v zypper >/dev/null; then
package_manager="zypper"
fi
elif [[ "$HOME" == *"com.termux"* ]]; then
package_manager="termux"
fi
;;
Darwin)
if command -v brew >/dev/null; then
package_manager="brew"
elif command -v port >/dev/null; then
package_manager="port"
fi
;;
*BSD)
if command -v pkg >/dev/null; then
package_manager="pkg"
fi
;;
esac
}
#
# Detects the system.
#
function detect_system()
{
detect_os
detect_package_manager
}
#
# Installs a list of package names using the detected package manager.
#
function install_packages()
{
case "$package_manager" in
apt) $sudo apt-get install -y "$@" || return $? ;;
dnf|yum)$sudo $package_manager install -y "$@" || return $? ;;
port) $sudo port install "$@" || return $? ;;
pkg) $sudo pkg install -y "$@" || return $? ;;
brew)
local brew_owner="$(/usr/bin/stat -f %Su "$(command -v brew)")"
sudo -u "$brew_owner" brew install "$@" ||
sudo -u "$brew_owner" brew upgrade "$@" || return $?
;;
pacman)
local missing_pkgs=($(pacman -T "$@"))
if (( ${#missing_pkgs[@]} > 0 )); then
$sudo pacman -Sy --noconfirm "${missing_pkgs[@]}" || return $?
fi
;;
zypper) $sudo zypper -n in -l $* || return $? ;;
termux) pkg install -y "$@" || return $? ;;
"") warn "Could not determine Package Manager. Proceeding anyway." ;;
esac
}
if ! command -v masscan >/dev/null; then
detect_system
log "Installing masscan ..."
install_packages masscan || warn "Could not install masscan. Proceeding anyways ..."
fi
# default to installing gems into vendor/bundle
if [[ ! -f .bundle/config ]]; then
bundle config set --local path vendor/bundle >/dev/null || \
fail "Failed to run 'bundle config'"
fi
log "Installing gems ..."
bundle install || fail "Failed to run 'bundle install'!"
log "Setting up the project ..."
bundle exec rake setup || "Failed to run 'rake setup'!"