diff --git a/misc/build.func b/misc/build.func index 2adff7a..2053de3 100644 --- a/misc/build.func +++ b/misc/build.func @@ -1615,5 +1615,5 @@ trap 'post_update_to_api "failed" "$BASH_COMMAND"' ERR trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/helpers.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/helper.func) diff --git a/misc/helper.func b/misc/helper.func new file mode 100644 index 0000000..e66ae92 --- /dev/null +++ b/misc/helper.func @@ -0,0 +1,179 @@ +install_node_and_modules() { + local NODE_VERSION="${NODE_VERSION:-22}" + local NODE_MODULE="${NODE_MODULE:-}" + local CURRENT_NODE_VERSION="" + local NEED_NODE_INSTALL=false + + if command -v node >/dev/null; then + CURRENT_NODE_VERSION="$(node -v | grep -oP '^v\K[0-9]+')" + if [[ "$CURRENT_NODE_VERSION" != "$NODE_VERSION" ]]; then + msg_info "Node.js Version $CURRENT_NODE_VERSION found, replacing with $NODE_VERSION" + NEED_NODE_INSTALL=true + fi + else + msg_info "Node.js not found, installing version $NODE_VERSION" + NEED_NODE_INSTALL=true + fi + + if [[ "$NEED_NODE_INSTALL" == true ]]; then + $STD apt-get purge -y nodejs + rm -f /etc/apt/sources.list.d/nodesource.list + rm -f /etc/apt/keyrings/nodesource.gpg + + mkdir -p /etc/apt/keyrings + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | \ + gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_VERSION}.x nodistro main" \ + > /etc/apt/sources.list.d/nodesource.list + + $STD apt-get update + $STD apt-get install -y nodejs + msg_ok "Installed Node.js ${NODE_VERSION}" + fi + + if [[ -n "$NODE_MODULE" ]]; then + IFS=',' read -ra MODULES <<< "$NODE_MODULE" + for mod in "${MODULES[@]}"; do + local MODULE_NAME MODULE_REQ_VERSION MODULE_INSTALLED_VERSION + if [[ "$mod" == *"@"* ]]; then + MODULE_NAME="${mod%@*}" + MODULE_REQ_VERSION="${mod#*@}" + else + MODULE_NAME="$mod" + MODULE_REQ_VERSION="latest" + fi + + if npm list -g --depth=0 "$MODULE_NAME" >/dev/null 2>&1; then + MODULE_INSTALLED_VERSION="$(npm list -g --depth=0 "$MODULE_NAME" | grep "$MODULE_NAME@" | awk -F@ '{print $2}' | tr -d '[:space:]')" + if [[ "$MODULE_REQ_VERSION" != "latest" && "$MODULE_REQ_VERSION" != "$MODULE_INSTALLED_VERSION" ]]; then + msg_info "Updating $MODULE_NAME from v$MODULE_INSTALLED_VERSION to v$MODULE_REQ_VERSION" + $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" + elif [[ "$MODULE_REQ_VERSION" == "latest" ]]; then + msg_info "Updating $MODULE_NAME to latest version" + $STD npm install -g "${MODULE_NAME}@latest" + else + msg_ok "$MODULE_NAME@$MODULE_INSTALLED_VERSION already installed" + fi + else + msg_info "Installing $MODULE_NAME@$MODULE_REQ_VERSION" + $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" + fi + done + msg_ok "Node Modules processed" + fi +} + +function install_postgresql() { + local PG_VERSION="${PG_VERSION:-15}" + local CURRENT_PG_VERSION="" + local DISTRO + local NEED_PG_INSTALL=false + DISTRO="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" + + if command -v psql >/dev/null; then + CURRENT_PG_VERSION="$(psql -V | grep -oP '\s\K[0-9]+(?=\.)')" + if [[ "$CURRENT_PG_VERSION" != "$PG_VERSION" ]]; then + msg_info "PostgreSQL Version $CURRENT_PG_VERSION found, replacing with $PG_VERSION" + NEED_PG_INSTALL=true + fi + else + msg_info "PostgreSQL not found, installing version $PG_VERSION" + NEED_PG_INSTALL=true + fi + + if [[ "$NEED_PG_INSTALL" == true ]]; then + msg_info "Stopping PostgreSQL if running" + systemctl stop postgresql >/dev/null 2>&1 || true + + msg_info "Removing conflicting PostgreSQL packages" + $STD apt-get purge -y "postgresql*" + rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg + + msg_info "Setting up PostgreSQL Repository" + curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ + gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg + + echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \ + > /etc/apt/sources.list.d/pgdg.list + + $STD apt-get update + $STD apt-get install -y "postgresql-${PG_VERSION}" + + msg_ok "Installed PostgreSQL ${PG_VERSION}" + fi +} + +function install_mariadb() { + local MARIADB_VERSION="${MARIADB_VERSION:-10.11}" + local CURRENT_VERSION="" + local NEED_INSTALL=false + + if command -v mariadb >/dev/null; then + CURRENT_VERSION="$(mariadb --version | grep -oP 'Ver\s+\K[0-9]+\.[0-9]+')" + if [[ "$CURRENT_VERSION" != "$MARIADB_VERSION" ]]; then + msg_info "MariaDB $CURRENT_VERSION found, replacing with $MARIADB_VERSION" + NEED_INSTALL=true + else + msg_ok "MariaDB $MARIADB_VERSION already installed" + fi + else + msg_info "MariaDB not found, installing version $MARIADB_VERSION" + NEED_INSTALL=true + fi + + if [[ "$NEED_INSTALL" == true ]]; then + msg_info "Removing conflicting MariaDB packages" + $STD systemctl stop mariadb >/dev/null 2>&1 || true + $STD apt-get purge -y 'mariadb*' + rm -f /etc/apt/sources.list.d/mariadb.list /etc/apt/trusted.gpg.d/mariadb.gpg + + msg_info "Setting up MariaDB Repository" + curl -fsSL "https://mariadb.org/mariadb_release_signing_key.asc" | gpg --dearmor -o /etc/apt/trusted.gpg.d/mariadb.gpg + DISTRO_CODENAME="$(awk -F= '/VERSION_CODENAME/ { print $2 }' /etc/os-release)" + echo "deb [signed-by=/etc/apt/trusted.gpg.d/mariadb.gpg] http://mirror.mariadb.org/repo/${MARIADB_VERSION}/debian ${DISTRO_CODENAME} main" \ + > /etc/apt/sources.list.d/mariadb.list + + $STD apt-get update + $STD apt-get install -y mariadb-server mariadb-client + + msg_ok "Installed MariaDB $MARIADB_VERSION" + fi +} + +function install_mysql() { + local MYSQL_VERSION="${MYSQL_VERSION:-8.0}" + local CURRENT_VERSION="" + local NEED_INSTALL=false + + if command -v mysql >/dev/null; then + CURRENT_VERSION="$(mysql --version | grep -oP 'Distrib\s+\K[0-9]+\.[0-9]+')" + if [[ "$CURRENT_VERSION" != "$MYSQL_VERSION" ]]; then + msg_info "MySQL $CURRENT_VERSION found, replacing with $MYSQL_VERSION" + NEED_INSTALL=true + else + msg_ok "MySQL $MYSQL_VERSION already installed" + fi + else + msg_info "MySQL not found, installing version $MYSQL_VERSION" + NEED_INSTALL=true + fi + + if [[ "$NEED_INSTALL" == true ]]; then + msg_info "Removing conflicting MySQL packages" + $STD systemctl stop mysql >/dev/null 2>&1 || true + $STD apt-get purge -y 'mysql*' + rm -f /etc/apt/sources.list.d/mysql.list /etc/apt/trusted.gpg.d/mysql.gpg + + msg_info "Setting up MySQL APT Repository" + DISTRO_CODENAME="$(awk -F= '/VERSION_CODENAME/ { print $2 }' /etc/os-release)" + curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | gpg --dearmor -o /etc/apt/trusted.gpg.d/mysql.gpg + echo "deb [signed-by=/etc/apt/trusted.gpg.d/mysql.gpg] https://repo.mysql.com/apt/debian/ ${DISTRO_CODENAME} mysql-${MYSQL_VERSION}" \ + > /etc/apt/sources.list.d/mysql.list + + $STD apt-get update + $STD apt-get install -y mysql-server + + msg_ok "Installed MySQL $MYSQL_VERSION" + fi +} diff --git a/misc/helpers.func b/misc/helpers.func index f11874a..fc7b437 100644 --- a/misc/helpers.func +++ b/misc/helpers.func @@ -153,183 +153,3 @@ exit-script() { echo -e "\n${CROSS}${RD}User exited script${CL}\n" exit } - -install_node_and_modules() { - local NODE_VERSION="${NODE_VERSION:-22}" - local NODE_MODULE="${NODE_MODULE:-}" - local CURRENT_NODE_VERSION="" - local NEED_NODE_INSTALL=false - - if command -v node >/dev/null; then - CURRENT_NODE_VERSION="$(node -v | grep -oP '^v\K[0-9]+')" - if [[ "$CURRENT_NODE_VERSION" != "$NODE_VERSION" ]]; then - msg_info "Node.js Version $CURRENT_NODE_VERSION found, replacing with $NODE_VERSION" - NEED_NODE_INSTALL=true - fi - else - msg_info "Node.js not found, installing version $NODE_VERSION" - NEED_NODE_INSTALL=true - fi - - if [[ "$NEED_NODE_INSTALL" == true ]]; then - $STD apt-get purge -y nodejs - rm -f /etc/apt/sources.list.d/nodesource.list - rm -f /etc/apt/keyrings/nodesource.gpg - - mkdir -p /etc/apt/keyrings - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | \ - gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg - - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_VERSION}.x nodistro main" \ - > /etc/apt/sources.list.d/nodesource.list - - $STD apt-get update - $STD apt-get install -y nodejs - msg_ok "Installed Node.js ${NODE_VERSION}" - fi - - if [[ -n "$NODE_MODULE" ]]; then - IFS=',' read -ra MODULES <<< "$NODE_MODULE" - for mod in "${MODULES[@]}"; do - local MODULE_NAME MODULE_REQ_VERSION MODULE_INSTALLED_VERSION - if [[ "$mod" == *"@"* ]]; then - MODULE_NAME="${mod%@*}" - MODULE_REQ_VERSION="${mod#*@}" - else - MODULE_NAME="$mod" - MODULE_REQ_VERSION="latest" - fi - - if npm list -g --depth=0 "$MODULE_NAME" >/dev/null 2>&1; then - MODULE_INSTALLED_VERSION="$(npm list -g --depth=0 "$MODULE_NAME" | grep "$MODULE_NAME@" | awk -F@ '{print $2}' | tr -d '[:space:]')" - if [[ "$MODULE_REQ_VERSION" != "latest" && "$MODULE_REQ_VERSION" != "$MODULE_INSTALLED_VERSION" ]]; then - msg_info "Updating $MODULE_NAME from v$MODULE_INSTALLED_VERSION to v$MODULE_REQ_VERSION" - $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" - elif [[ "$MODULE_REQ_VERSION" == "latest" ]]; then - msg_info "Updating $MODULE_NAME to latest version" - $STD npm install -g "${MODULE_NAME}@latest" - else - msg_ok "$MODULE_NAME@$MODULE_INSTALLED_VERSION already installed" - fi - else - msg_info "Installing $MODULE_NAME@$MODULE_REQ_VERSION" - $STD npm install -g "${MODULE_NAME}@${MODULE_REQ_VERSION}" - fi - done - msg_ok "Node Modules processed" - fi -} - -function install_postgresql() { - local PG_VERSION="${PG_VERSION:-15}" - local CURRENT_PG_VERSION="" - local DISTRO - local NEED_PG_INSTALL=false - DISTRO="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)" - - if command -v psql >/dev/null; then - CURRENT_PG_VERSION="$(psql -V | grep -oP '\s\K[0-9]+(?=\.)')" - if [[ "$CURRENT_PG_VERSION" != "$PG_VERSION" ]]; then - msg_info "PostgreSQL Version $CURRENT_PG_VERSION found, replacing with $PG_VERSION" - NEED_PG_INSTALL=true - fi - else - msg_info "PostgreSQL not found, installing version $PG_VERSION" - NEED_PG_INSTALL=true - fi - - if [[ "$NEED_PG_INSTALL" == true ]]; then - msg_info "Stopping PostgreSQL if running" - systemctl stop postgresql >/dev/null 2>&1 || true - - msg_info "Removing conflicting PostgreSQL packages" - $STD apt-get purge -y "postgresql*" - rm -f /etc/apt/sources.list.d/pgdg.list /etc/apt/trusted.gpg.d/postgresql.gpg - - msg_info "Setting up PostgreSQL Repository" - curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ - gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg - - echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \ - > /etc/apt/sources.list.d/pgdg.list - - $STD apt-get update - $STD apt-get install -y "postgresql-${PG_VERSION}" - - msg_ok "Installed PostgreSQL ${PG_VERSION}" - fi -} - -function install_mariadb() { - local MARIADB_VERSION="${MARIADB_VERSION:-10.11}" - local CURRENT_VERSION="" - local NEED_INSTALL=false - - if command -v mariadb >/dev/null; then - CURRENT_VERSION="$(mariadb --version | grep -oP 'Ver\s+\K[0-9]+\.[0-9]+')" - if [[ "$CURRENT_VERSION" != "$MARIADB_VERSION" ]]; then - msg_info "MariaDB $CURRENT_VERSION found, replacing with $MARIADB_VERSION" - NEED_INSTALL=true - else - msg_ok "MariaDB $MARIADB_VERSION already installed" - fi - else - msg_info "MariaDB not found, installing version $MARIADB_VERSION" - NEED_INSTALL=true - fi - - if [[ "$NEED_INSTALL" == true ]]; then - msg_info "Removing conflicting MariaDB packages" - $STD systemctl stop mariadb >/dev/null 2>&1 || true - $STD apt-get purge -y 'mariadb*' - rm -f /etc/apt/sources.list.d/mariadb.list /etc/apt/trusted.gpg.d/mariadb.gpg - - msg_info "Setting up MariaDB Repository" - curl -fsSL "https://mariadb.org/mariadb_release_signing_key.asc" | gpg --dearmor -o /etc/apt/trusted.gpg.d/mariadb.gpg - DISTRO_CODENAME="$(awk -F= '/VERSION_CODENAME/ { print $2 }' /etc/os-release)" - echo "deb [signed-by=/etc/apt/trusted.gpg.d/mariadb.gpg] http://mirror.mariadb.org/repo/${MARIADB_VERSION}/debian ${DISTRO_CODENAME} main" \ - > /etc/apt/sources.list.d/mariadb.list - - $STD apt-get update - $STD apt-get install -y mariadb-server mariadb-client - - msg_ok "Installed MariaDB $MARIADB_VERSION" - fi -} - -function install_mysql() { - local MYSQL_VERSION="${MYSQL_VERSION:-8.0}" - local CURRENT_VERSION="" - local NEED_INSTALL=false - - if command -v mysql >/dev/null; then - CURRENT_VERSION="$(mysql --version | grep -oP 'Distrib\s+\K[0-9]+\.[0-9]+')" - if [[ "$CURRENT_VERSION" != "$MYSQL_VERSION" ]]; then - msg_info "MySQL $CURRENT_VERSION found, replacing with $MYSQL_VERSION" - NEED_INSTALL=true - else - msg_ok "MySQL $MYSQL_VERSION already installed" - fi - else - msg_info "MySQL not found, installing version $MYSQL_VERSION" - NEED_INSTALL=true - fi - - if [[ "$NEED_INSTALL" == true ]]; then - msg_info "Removing conflicting MySQL packages" - $STD systemctl stop mysql >/dev/null 2>&1 || true - $STD apt-get purge -y 'mysql*' - rm -f /etc/apt/sources.list.d/mysql.list /etc/apt/trusted.gpg.d/mysql.gpg - - msg_info "Setting up MySQL APT Repository" - DISTRO_CODENAME="$(awk -F= '/VERSION_CODENAME/ { print $2 }' /etc/os-release)" - curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | gpg --dearmor -o /etc/apt/trusted.gpg.d/mysql.gpg - echo "deb [signed-by=/etc/apt/trusted.gpg.d/mysql.gpg] https://repo.mysql.com/apt/debian/ ${DISTRO_CODENAME} mysql-${MYSQL_VERSION}" \ - > /etc/apt/sources.list.d/mysql.list - - $STD apt-get update - $STD apt-get install -y mysql-server - - msg_ok "Installed MySQL $MYSQL_VERSION" - fi -}