#!/usr/bin/env bash # This script was generated by bashly 0.8.9 (https://bashly.dannyb.co) # Modifying it manually is not recommended # :wrapper.bash3_bouncer if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then printf "bash version 4 or higher is required\n" >&2 exit 1 fi # :command.master_script # :command.root_command root_command() { # src/root_command.sh # Settings source_url=${args[source]} publisher=${args[publisher]} # Flags no_call=${args[--no-call]} dry_run=${args[--dry-run]} REQS="wget apt-transport-https" function do_call() { if [[ $dry_run ]]; then echo -e "### DRY RUN: \n$1" else $1 fi } function get_distribution { if [ -f /etc/os-release ]; then . /etc/os-release OS=$NAME VER=$VERSION_ID elif type lsb_release >/dev/null 2>&1; then OS=$(lsb_release -si) VER=$(lsb_release -sr) elif [ -f /etc/lsb-release ]; then . /etc/lsb-release OS=$DISTRIB_ID VER=$DISTRIB_RELEASE elif [ -f /etc/debian_version ]; then OS=Debian VER=$(cat /etc/debian_version) elif [ -f /etc/SuSe-release ]; then OS=SEL elif [ -f /etc/redhat-release ]; then OS=RedHat else OS=$(uname -s) VER=$(uname -r) fi } echo "### Installer for InvenTree - source: $publisher/$source_url" # Check if os and version is supported get_distribution echo "### Detected distribution: $OS $VER" NOT_SUPPORTED=false case "$OS" in Ubuntu) if [[ $VER != "20.04" ]]; then NOT_SUPPORTED=true fi ;; Debian | Raspbian) if [[ $VER != "11" ]]; then NOT_SUPPORTED=true fi ;; *) echo "### Distribution not supported" NOT_SUPPORTED=true ;; esac if [[ $NOT_SUPPORTED ]]; then echo "This OS is currently not supported" echo "please install manually using https://inventree.readthedocs.io/en/stable/start/install/" echo "or check https://github.com/inventree/InvenTree/issues/3836 for packaging for your OS." echo "If you think this is a bug please file an issue at" echo "https://github.com/inventree/InvenTree/issues/new?template=install.yaml" exit 1 fi echo "### Installing required packages for download" for pkg in $REQS; do if dpkg-query -W -f'${Status}' "$pkg" 2>/dev/null | grep -q "ok installed"; then true else do_call "sudo apt-get -yqq install $pkg" fi done echo "### Adding key and package source" # Add key do_call "wget -qO- https://dl.packager.io/srv/$publisher/InvenTree/key | sudo apt-key add -" # Add packagelist do_call "sudo wget -O /etc/apt/sources.list.d/inventree.list https://dl.packager.io/srv/$publisher/InvenTree/$source_url/installer/${lsb_dist}/${dist_version}.repo" echo "### Updateing package lists" do_call "sudo apt-get update" # Set up environment for install echo "### Setting installer args" if [[ $no_call ]]; then do_call "export NO_CALL=true" fi echo "### Installing InvenTree" do_call "sudo apt-get install inventree -y" echo "### Install done!" } # :command.version_command version_command() { echo "$version" } # :command.usage install_usage() { if [[ -n $long_usage ]]; then printf "install - Interactive installer for InvenTree\n" echo else printf "install - Interactive installer for InvenTree\n" echo fi printf "Usage:\n" printf " install [SOURCE] [PUBLISHER] [OPTIONS]\n" printf " install --help | -h\n" printf " install --version | -v\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "Options:\n" # :command.usage_fixed_flags echo " --help, -h" printf " Show this help\n" echo echo " --version, -v" printf " Show version number\n" echo # :command.usage_flags # :flag.usage echo " --no-call, -n" printf " Do not call outside APIs (only functionally needed)\n" echo # :flag.usage echo " --dry-run, -d" printf " Dry run (do not install anything)\n" echo # :command.usage_args printf "Arguments:\n" # :argument.usage echo " SOURCE" printf " Package source that should be used\n" printf " Allowed: stable, master, main\n" printf " Default: stable\n" echo # :argument.usage echo " PUBLISHER" printf " Publisher that should be used\n" printf " Default: inventree\n" echo # :command.usage_examples printf "Examples:\n" printf " install\n" printf " install master --no-call\n" printf " install master matmair --dry-run\n" echo fi } # :command.normalize_input normalize_input() { local arg flags while [[ $# -gt 0 ]]; do arg="$1" if [[ $arg =~ ^(--[a-zA-Z0-9_\-]+)=(.+)$ ]]; then input+=("${BASH_REMATCH[1]}") input+=("${BASH_REMATCH[2]}") elif [[ $arg =~ ^(-[a-zA-Z0-9])=(.+)$ ]]; then input+=("${BASH_REMATCH[1]}") input+=("${BASH_REMATCH[2]}") elif [[ $arg =~ ^-([a-zA-Z0-9][a-zA-Z0-9]+)$ ]]; then flags="${BASH_REMATCH[1]}" for (( i=0 ; i < ${#flags} ; i++ )); do input+=("-${flags:i:1}") done else input+=("$arg") fi shift done } # :command.inspect_args inspect_args() { readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort) if (( ${#args[@]} )); then echo args: for k in "${sorted_keys[@]}"; do echo "- \${args[$k]} = ${args[$k]}"; done else echo args: none fi if (( ${#other_args[@]} )); then echo echo other_args: echo "- \${other_args[*]} = ${other_args[*]}" for i in "${!other_args[@]}"; do echo "- \${other_args[$i]} = ${other_args[$i]}" done fi } # :command.command_functions # :command.parse_requirements parse_requirements() { # :command.fixed_flags_filter case "${1:-}" in --version | -v ) version_command exit ;; --help | -h ) long_usage=yes install_usage exit ;; esac # :command.command_filter action="root" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in # :flag.case --no-call | -n ) # :flag.case_no_arg args[--no-call]=1 shift ;; # :flag.case --dry-run | -d ) # :flag.case_no_arg args[--dry-run]=1 shift ;; -?* ) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; * ) # :command.parse_requirements_case # :command.parse_requirements_case_simple if [[ -z ${args[source]+x} ]]; then args[source]=$1 shift elif [[ -z ${args[publisher]+x} ]]; then args[publisher]=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.default_assignments [[ -n ${args[source]:-} ]] || args[source]="stable" [[ -n ${args[publisher]:-} ]] || args[publisher]="inventree" # :command.whitelist_filter if [[ ! ${args[source]} =~ ^(stable|master|main)$ ]]; then printf "%s\n" "source must be one of: stable, master, main" >&2 exit 1 fi } # :command.initialize initialize() { version="2.0" long_usage='' set -e # src/initialize.sh } # :command.run run() { declare -A args=() declare -a other_args=() declare -a input=() normalize_input "$@" parse_requirements "${input[@]}" if [[ $action == "root" ]]; then root_command fi } initialize run "$@"