Skip to content

tools.func

Michel Roegl-Brunner edited this page May 15, 2025 · 11 revisions

This page describes all helper functions defined in misc/tools.func

The tools.func file is automatically sourced and can be used in all $APP-install.sh files.

fetch_and_deploy_gh_release

Description

fetch_and_deploy_gh_release()

  • Checking the current installed version.
  • Fetching the latest release info from GitHub API with retries.
  • Detecting system architecture to download the appropriate release asset.
  • Falling back to generic or source tarball if no matching asset found.
  • Downloading, extracting, and copying the release files to /opt/<app>.
  • Saving the installed version for future checks.
  • Automatic installation of jq if missing.
  • Handles GitHub API rate limits and errors gracefully.
  • Uses $STD for command prefixing and $APP or $APPLICATION for app naming.

Usage

fetch_and_deploy_gh_release <github_repo>

fetch_and_deploy_gh_release "owner/repository"

install_node_and_modules

This function automates the installation of a specified version of Node.js and a list of global Node modules on a Debian-based system. It ensures the desired Node.js version is installed (replacing any existing version if necessary) and installs or updates specified Node.js global modules.


Description

install_node_and_modules():

  • Checks if Node.js is installed.
  • If Node.js is installed but not the desired version, it replaces it.
  • If Node.js is not installed, it installs the specified version using the NodeSource APT repository.
  • It can also install or update a list of global Node modules.

Usage

install_node_and_modules

to install the latest version of Node.js with no additional Modules. If you want to define a specified Version and install Modules use something like this:

NODE_VERSION=20 NODE_MODULE="yarn@latest,@vue/[email protected]" install_node_and_modules

User-Configurable Variables

Variable Description Default Value
NODE_VERSION Specifies the major version of Node.js to install (e.g., 20, 22). 22
NODE_MODULE Comma-separated list of global npm modules to install or update.
Examples:
yarn@latest
@vue/[email protected]
typescript
(empty)

install_postgresql

Description

install_postgresql():

  • Checks if Postgressql is installed.
  • If Postgressql is installed but not the desired version, it replaces it.
  • If Postgressql is not installed, it installs the specified version.

Usage

install_postgresql

Specifie a Version:

PG_VERSION=15 install_postgresql

User-Configurable Variables

Variable Description Default Value
PG_VERSION Specifies the major version of PostgreSQL to install or upgrade to (e.g., 14, 15, 16). 16

install_mariadb

Description

install_mariadb():

  • Detecting the current version of MariaDB (if installed)
  • Upgrading to the latest version if needed
  • Replacing older versions while preserving data
  • Configuring the appropriate MariaDB APT repository
  • Installing the MariaDB packages

Usage

install_mariadb

You can optionally set the MARIADB_VERSION environment variable before calling the function to specify a particular version to install.

Example:

MARIADB_VERSION="10.11.6" install_mariadb

If no version is specified, the script will automatically fetch and install the latest GA (Generally Available) version of MariaDB.

User-Configurable Variables

Variable Description Default Value
MARIADB_VERSION Specifies the version of MariaDB to install. If set to latest, the script will detect the most recent GA version from the MariaDB mirror site. latest

install_mysql

Description

install_mysql():

  • Detecting if MySQL is already installed
  • Replacing it with the specified version if it differs
  • Removing conflicting packages and cleaning up old sources
  • Setting up the official MySQL APT repository
  • Installing the MySQL server package

Usage

install_mysql

To install a specific version of MySQL, export the MYSQL_VERSION variable before calling the function:

MYSQL_VERSION="5.7" install_mysql

User-Configurable Variables

Variable Description Default Value
MYSQL_VERSION Specifies the version of MySQL to install.. 8.0

install_php

Description

install_php():

  • Detects the current PHP version and upgrades or switches if necessary.
  • Adds the sury.org repository if not already configured.
  • Installs the specified PHP version along with default and user-defined modules.
  • Patches php.ini files with custom configuration values.
  • Optionally enables PHP for Apache or PHP-FPM.

Usage

install_php

You can set any of the environment variables below to customize the behavior:

PHP_VERSION="8.3" PHP_APACHE="YES" PHP_FPM="NO" PHP_MEMORY_LIMIT="1G" install_php
```bash

#### PHP Modules
These modules are installed by default:
```bash
bcmath, cli, curl, gd, intl, mbstring, opcache, readline, xml, zip

You can add custom modules with this command:

PHP_MODULE="mysql,redis" install_php

User-Configurable Variables

Variable Description Default Value
PHP_VERSION PHP version to install (e.g., 8.2, 8.3, 8.4) 8.4
PHP_MODULE Comma-separated list of additional PHP modules (e.g., mysql,redis) (empty)
PHP_APACHE Set to YES to enable PHP module for Apache NO
PHP_FPM Set to YES to install and configure PHP-FPM NO
PHP_MEMORY_LIMIT Sets memory_limit in relevant php.ini files 512M
PHP_UPLOAD_MAX_FILESIZE Sets upload_max_filesize in relevant php.ini files 128M
PHP_POST_MAX_SIZE Sets post_max_size in relevant php.ini files 128M
PHP_MAX_EXECUTION_TIME Sets max_execution_time in relevant php.ini files 300

install_composer

Description

install_composer():

  • Detects existing Composer installation and updates if necessary.
  • Installs the latest version using the official installer.
  • Ensures the Composer binary is executable system-wide.
  • Allows installation as root by setting COMPOSER_ALLOW_SUPERUSER=1.

Usage

Simply call the function:

install_composer

install_go Bash

Description

install_go():

  • Detects system architecture (supports x86_64 and aarch64).
  • Automatically fetches the latest Go version (if GO_VERSION is unset or set to latest).
  • Installs Go system-wide to /usr/local/go, and symlinks the binary to /usr/local/bin/go.
  • Replaces any existing Go installation if the version differs.

Usage

Simply call the function:

install_go

install_java

Description

install_java():

  • Automatically adds the Adoptium APT repository if missing.
  • Detects the currently installed version of the Temurin JDK (if any).
  • Installs the desired JDK version (defaults to 21) or upgrades it if already present.
  • Removes any existing Temurin JDK versions if they differ from the target version.

Usage

install_java

This will install the default version of Temurin JDK. You can set the JAVA_VERSION environment variable before calling the function:

JAVA_VERSION=17 install_java

User-Configurable Variables

Variable Description Default Value
JAVA_VERSION The version of Temurin JDK to install (e.g., 17, 21) 21

Description

install_mongodb():

  • Detects the currently installed version of MongoDB.
  • Removes older versions (packages only; data is preserved).
  • Adds the correct MongoDB APT repository and GPG key.
  • Installs the specified version of MongoDB.
  • Starts and enables the MongoDB service.

Usage

install_mongodb

Installs the default MongoDB version. To install a different version (e.g., 7.0):

MONGO_VERSION=7.0 install_mongodb

User-Configurable Variables

Variable Description Default Value
MONGO_VERSION Target MongoDB major version (e.g., 6.0, 7.0, 8.0) 8.0

setup_uv

Description

setup_uv():

  • Detects system architecture (x86_64 or aarch64).
  • Fetches the latest release version from GitHub.
  • Checks if uv is already installed and at the latest version.
  • Downloads and installs or updates uv from the official GitHub releases.
  • Ensures /usr/local/bin is in the PATH.

Usage

setup_uv

Installs or updates uv to the latest version.


setup_gs

Description

setup_gs():

  • Checks the currently installed Ghostscript version.
  • Fetches the latest Ghostscript release version from GitHub.
  • Compares the installed version with the latest available.
  • Downloads, compiles, and installs Ghostscript from source if an update or installation is needed.
  • Installs required build dependencies automatically.

Usage

setup_gs

Checks and installs/updates Ghostscript.

setup_rbenv_stack

Description

setup_rbenv_stack():

  • Fetches and installs the latest stable rbenv release.
  • Fetches and installs the latest stable ruby-build plugin release.
  • Adds necessary initialization commands to the user's profile (~/.profile) if missing.
  • Installs a specified Ruby version (default 3.4.4) via rbenv.
  • Optionally installs the latest Rails gem (true by default).
  • Cleans up temporary files.

Usage

setup_rbenv_stack

Optionally, you can override defaults by setting environment variables:

RUBY_VERSION=3.3.2 RUBY_INSTALL_RAILS=false setup_rbenv_stack

User-Configurable Variables

Variable Description Default Value
RUBY_VERSION Ruby version to install 3.4.4
RUBY_INSTALL_RAILS Whether to install Rails gem (true/false) true

download_with_progress

Description

donwload_with_progress():

  • Installs pv if not already present.
  • Attempts to retrieve the file size (Content-Length) from the HTTP headers.
  • If Content-Length is available, it uses pv to show a progress bar during the download.
  • If Content-Length is unavailable, it falls back to a basic download with curl’s built-in progress.
  • Handles any existing spinner process cleanup.
  • Provides error messages on failure.

Usage

download_with_progress <url> <output_path>
download_with_progress "https://example.com/file.zip" "/tmp/file.zip"

###Paramters

Parameter Description
url URL of the file to download
output Local file path to save the download