diff --git a/.pkgr.yml b/.pkgr.yml index 90bbf77bf6..09a5d0fc2b 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -2,10 +2,8 @@ name: inventree description: Open Source Inventory Management System homepage: https://inventree.org notifications: true -buildpack: https://github.com/mjmair/heroku-buildpack-python#v216-mjmair +buildpack: https://github.com/matmair/null-buildpack#master env: - - STACK=heroku-20 - - DISABLE_COLLECTSTATIC=1 - INVENTREE_DB_ENGINE=sqlite3 - INVENTREE_DB_NAME=database.sqlite3 - INVENTREE_PLUGINS_ENABLED @@ -38,4 +36,7 @@ dependencies: - "libffi7 | libffi8" targets: ubuntu-20.04: true + ubuntu-22.04: true + ubuntu-24.04: true debian-11: true + debian-12: true diff --git a/.python-version b/.python-version deleted file mode 100644 index 2009c7dfad..0000000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.9.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3216bd21f7..4b728f91bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Adds UI elements to "check" and "uncheck" sales order shipments in [#10654](https://github.com/inventree/InvenTree/pull/10654) - Allow assigning project codes to order line items in [#10657](https://github.com/inventree/InvenTree/pull/10657) - Added support for webauthn login for the frontend in [#9729](https://github.com/inventree/InvenTree/pull/9729) +- Added support for Debian 12, Ubuntu 22.04 and Ubuntu 24.04 in the installer and package in [#10705](https://github.com/inventree/InvenTree/pull/10705) ### Changed diff --git a/contrib/install.sh b/contrib/install.sh index fc6b005960..7a0269d689 100755 --- a/contrib/install.sh +++ b/contrib/install.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -# This script was generated by bashly 1.1.1 (https://bashly.dannyb.co) +# This script was generated by bashly 1.3.3 (https://bashly.dev) # Modifying it manually is not recommended -if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then - printf "bash version 4 or higher is required\n" >&2 +if ((BASH_VERSINFO[0] < 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] < 2))); then + printf "bash version 4.2 or higher is required\n" >&2 exit 1 fi @@ -56,17 +56,16 @@ root_command() { get_distribution echo "### Detected distribution: $OS $VER" SUPPORTED=true # is this OS supported? - NEEDS_LIBSSL1_1=false # does this OS need libssl1.1? DIST_OS=${OS,,} DIST_VER=$VER case "$OS" in Ubuntu) + if [[ $VER == "24.04" ]]; then + SUPPORTED=true if [[ $VER == "22.04" ]]; then SUPPORTED=true - NEEDS_LIBSSL1_1=true - DIST_VER="20.04" elif [[ $VER == "20.04" ]]; then SUPPORTED=true else @@ -75,7 +74,6 @@ root_command() { ;; "Debian GNU/Linux" | "debian gnu/linux" | Raspbian) if [[ $VER == "12" ]]; then - DIST_VER="11" SUPPORTED=true elif [[ $VER == "11" ]]; then SUPPORTED=true @@ -111,15 +109,6 @@ root_command() { fi done - if [[ $NEEDS_LIBSSL1_1 == "true" ]]; then - echo "### Installing libssl1.1" - - echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list - do_call "sudo apt-get update" - do_call "sudo apt-get install libssl1.1" - sudo rm /etc/apt/sources.list.d/focal-security.list - fi - echo "### Getting and adding key" curl -fsSL https://dl.packager.io/srv/$publisher/InvenTree/key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/pkgr-inventree.gpg > /dev/null echo "### Adding package source" @@ -146,15 +135,7 @@ version_command() { } install.sh_usage() { - if [[ -n $long_usage ]]; then - printf "install.sh - Interactive installer for InvenTree\n" - echo - - else - printf "install.sh - Interactive installer for InvenTree\n" - echo - - fi + printf "install.sh - Interactive installer for InvenTree\n\n" printf "%s\n" "Usage:" printf " install.sh [SOURCE] [PUBLISHER] [OPTIONS]\n" @@ -162,7 +143,7 @@ install.sh_usage() { printf " install.sh --version | -v\n" echo - if [[ -n $long_usage ]]; then + if [[ -n "$long_usage" ]]; then printf "%s\n" "Options:" printf " %s\n" "--no-call, -n" @@ -184,13 +165,13 @@ install.sh_usage() { printf " %s\n" "SOURCE" printf " Package source that should be used\n" - printf " Allowed: stable, master, main\n" - printf " Default: stable\n" + printf " %s\n" "Allowed: stable, master, main" + printf " %s\n" "Default: stable" echo printf " %s\n" "PUBLISHER" printf " Publisher that should be used\n" - printf " Default: inventree\n" + printf " %s\n" "Default: inventree" echo printf "%s\n" "Examples:" @@ -203,11 +184,14 @@ install.sh_usage() { } normalize_input() { - local arg flags + local arg passthru flags + passthru=false while [[ $# -gt 0 ]]; do arg="$1" - if [[ $arg =~ ^(--[a-zA-Z0-9_\-]+)=(.+)$ ]]; then + if [[ $passthru == true ]]; then + input+=("$arg") + elif [[ $arg =~ ^(--[a-zA-Z0-9_\-]+)=(.+)$ ]]; then input+=("${BASH_REMATCH[1]}") input+=("${BASH_REMATCH[2]}") elif [[ $arg =~ ^(-[a-zA-Z0-9])=(.+)$ ]]; then @@ -218,6 +202,9 @@ normalize_input() { for ((i = 0; i < ${#flags}; i++)); do input+=("-${flags:i:1}") done + elif [[ "$arg" == "--" ]]; then + passthru=true + input+=("$arg") else input+=("$arg") fi @@ -226,37 +213,11 @@ normalize_input() { done } -inspect_args() { - if ((${#args[@]})); then - readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort) - 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 - - if ((${#deps[@]})); then - readarray -t sorted_keys < <(printf '%s\n' "${!deps[@]}" | sort) - echo - echo deps: - for k in "${sorted_keys[@]}"; do echo "- \${deps[$k]} = ${deps[$k]}"; done - fi - -} - parse_requirements() { while [[ $# -gt 0 ]]; do - case "${1:-}" in + key="$1" + case "$key" in --version | -v) version_command exit @@ -301,11 +262,10 @@ parse_requirements() { *) if [[ -z ${args['source']+x} ]]; then - args['source']=$1 shift - elif [[ -z ${args['publisher']+x} ]]; then + elif [[ -z ${args['publisher']+x} ]]; then args['publisher']=$1 shift else @@ -321,7 +281,7 @@ parse_requirements() { [[ -n ${args['source']:-} ]] || args['source']="stable" [[ -n ${args['publisher']:-} ]] || args['publisher']="inventree" - if [[ -n ${args['source']} ]] && [[ ! ${args['source']} =~ ^(stable|master|main)$ ]]; then + if [[ -n ${args['source']:-} ]] && [[ ! ${args['source']:-} =~ ^(stable|master|main)$ ]]; then printf "%s\n" "source must be one of: stable, master, main" >&2 exit 1 fi @@ -329,18 +289,19 @@ parse_requirements() { } initialize() { - version="2.0" - long_usage='' + declare -g version="2.0" set -e - } run() { - declare -A args=() - declare -A deps=() - declare -a other_args=() - declare -a input=() + + declare -g long_usage='' + declare -g -A args=() + declare -g -A deps=() + declare -g -a env_var_names=() + declare -g -a input=() + normalize_input "$@" parse_requirements "${input[@]}" @@ -349,5 +310,6 @@ run() { esac } +command_line_args=("$@") initialize -run "$@" +run "${command_line_args[@]}" diff --git a/contrib/installer/src/root_command.sh b/contrib/installer/src/root_command.sh index 4e7bffcdc4..f7821a761b 100644 --- a/contrib/installer/src/root_command.sh +++ b/contrib/installer/src/root_command.sh @@ -46,17 +46,16 @@ echo "### Installer for InvenTree - source: $publisher/$source_url" get_distribution echo "### Detected distribution: $OS $VER" SUPPORTED=true # is this OS supported? -NEEDS_LIBSSL1_1=false # does this OS need libssl1.1? DIST_OS=${OS,,} DIST_VER=$VER case "$OS" in Ubuntu) + if [[ $VER == "24.04" ]]; then + SUPPORTED=true if [[ $VER == "22.04" ]]; then SUPPORTED=true - NEEDS_LIBSSL1_1=true - DIST_VER="20.04" elif [[ $VER == "20.04" ]]; then SUPPORTED=true else @@ -100,15 +99,6 @@ for pkg in $REQS; do fi done -if [[ $NEEDS_LIBSSL1_1 == "true" ]]; then - echo "### Installing libssl1.1" - - echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list - do_call "sudo apt-get update" - do_call "sudo apt-get install libssl1.1" - sudo rm /etc/apt/sources.list.d/focal-security.list -fi - echo "### Getting and adding key" curl -fsSL https://dl.packager.io/srv/$publisher/InvenTree/key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/pkgr-inventree.gpg > /dev/null echo "### Adding package source" diff --git a/contrib/packager.io/functions.sh b/contrib/packager.io/functions.sh index 78a02bbe4d..21b82d0c89 100755 --- a/contrib/packager.io/functions.sh +++ b/contrib/packager.io/functions.sh @@ -202,7 +202,7 @@ function detect_envs() { export INVENTREE_DB_HOST=${INVENTREE_DB_HOST:-samplehost} export INVENTREE_DB_PORT=${INVENTREE_DB_PORT:-123456} - export INVENTREE_SITE_URL=${INVENTREE_SITE_URL} + export INVENTREE_SITE_URL=${INVENTREE_SITE_URL:-http://${INVENTREE_IP}} export SETUP_CONF_LOADED=true fi @@ -327,7 +327,7 @@ function update_or_install() { # Run update as app user echo "# POI12| Updating InvenTree" - sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && pip install wheel" + sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && pip install wheel python-dotenv" sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && set -e && invoke update | sed -e 's/^/# POI12| u | /;'" # Make sure permissions are correct again @@ -407,13 +407,13 @@ function final_message() { echo -e "${SETUP_NGINX_FILE}" echo -e "Try opening InvenTree with any of \n${INVENTREE_SITE_URL} , http://localhost/ or http://${INVENTREE_IP}/ \n" # Print admin user data only if set - if ["${INVENTREE_ADMIN_USER}" ]; then + if [ -n "${INVENTREE_ADMIN_USER}" ]; then echo -e "Admin user data:" echo -e " Email: ${INVENTREE_ADMIN_EMAIL}" echo -e " Username: ${INVENTREE_ADMIN_USER}" echo -e " Password: ${INVENTREE_ADMIN_PASSWORD}" else - echo -e "No admin set during this operation - depending on the deployment method a admin user might have been created with an initial password saved in `${SETUP_ADMIN_PASSWORD_FILE}`" + echo -e "No admin set during this operation - depending on the deployment method a admin user might have been created with an initial password saved in `$SETUP_ADMIN_PASSWORD_FILE`" fi echo -e "####################################################################################" } diff --git a/contrib/packager.io/postinstall.sh b/contrib/packager.io/postinstall.sh index 3d96188392..d4ff499a62 100755 --- a/contrib/packager.io/postinstall.sh +++ b/contrib/packager.io/postinstall.sh @@ -33,10 +33,10 @@ export SETUP_ADMIN_NOCREATION=${SETUP_ADMIN_NOCREATION:-false} # SETUP_PYTHON can be set to use a different python version # get base info +detect_ip detect_envs detect_docker detect_initcmd -detect_ip detect_python # Check if we are updating and need to alert diff --git a/docs/docs/start/installer.md b/docs/docs/start/installer.md index b8f5116c5b..562b2bd936 100644 --- a/docs/docs/start/installer.md +++ b/docs/docs/start/installer.md @@ -5,7 +5,7 @@ title: InvenTree Installer ## Installer The InvenTree installer automates the installation procedure for a production InvenTree server. -Supported OSs are Debian 11 and Ubuntu 20.04 LTS. +Supported OSs are Debian 10, 11, 12 and Ubuntu 20.04 LTS, 22.04 LTS, 24.04 LTS. ### Quick Script diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 3e374ea6fa..0000000000 --- a/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Dummy requirements file to trigger the package pipeline -# The backend requirements file is located in src/backend/requirements.txt -# diff --git a/runtime.txt b/runtime.txt deleted file mode 100644 index 119ff10234..0000000000 --- a/runtime.txt +++ /dev/null @@ -1 +0,0 @@ -python-3.10.7 diff --git a/tasks.py b/tasks.py index c99f0107c1..8f7430b52a 100644 --- a/tasks.py +++ b/tasks.py @@ -1728,7 +1728,7 @@ def frontend_download( # if clean, delete static/web directory if clean: shutil.rmtree(dest_path, ignore_errors=True) - dest_path.mkdir() + dest_path.mkdir(parents=True, exist_ok=True) info(f'Cleaned directory: {dest_path}') # unzip build to static folder @@ -1792,6 +1792,7 @@ def frontend_download( # if zip file is specified, try to extract it directly if file: handle_extract(file) + static(c, frontend=False, skip_plugins=True) return # check arguments