Quick Menu

App helpers (v2)

Doc auto-generated by this script on 13/11/2024 (YunoHost version 12.0.7)

Sources

This is coupled to the 'sources' resource in the manifest.toml

SOURCES

ynh_setup_source

Download, check integrity, uncompress and patch the source from app.src

Usage: ynh_setup_source --dest_dir=dest_dir [--source_id=source_id] [--keep="file1 file2"] [--full_replace]

Arguments:

  • -d, --dest_dir=: Directory where to setup sources
  • -s, --source_id=: Name of the source, defaults to main (when the sources resource exists in manifest.toml) or (legacy) app otherwise
  • -k, --keep=: Space-separated list of files/folders that will be backup/restored in $dest_dir, such as a config file you don't want to overwrite. For example 'conf.json secrets.json logs' (no trailing / for folders)
  • -r, --full_replace=: Remove previous sources before installing new sources (can be 1 or 0, default to 0)

Details:

New 'sources' resources

(See also the resources documentation which may be more complete?)

This helper will read infos from the 'sources' resources in the manifest.toml of the app and expect a structure like:

[resources.sources]
    [resources.sources.main]
    url = "https://some.address.to/download/the/app/archive"
    sha256 = "0123456789abcdef"    # The sha256 sum of the asset obtained from the URL
Optional flags
format    = "tar.gz"/xz/bz2    # automatically guessed from the extension of the URL, but can be set explicitly. Will use `tar` to extract
            "zip"              # automatically guessed from the extension of the URL, but can be set explicitly. Will use `unzip` to extract
            "docker"           # useful to extract files from an already-built docker image (instead of rebuilding them locally). Will use `docker-image-extract` to extract
            "whatever"         # an arbitrary value, not really meaningful except to imply that the file won't be extracted

in_subdir = true    # default, there's an intermediate subdir in the archive before accessing the actual files
            false   # sources are directly in the archive root
            n       # (special cases) an integer representing a number of subdirs levels to get rid of

extract   = true    # default if file is indeed an archive such as .zip, .tar.gz, .tar.bz2, ...
          = false   # default if file 'format' is not set and the file is not to be extracted because it is not an archive but a script or binary or whatever asset.
                    #    in which case the file will only be `mv`ed to the location possibly renamed using the `rename` value

rename    = "whatever_your_want"   # to be used for convenience when `extract` is false and the default name of the file is not practical
platform  = "linux/amd64"          # (defaults to "linux/$YNH_ARCH") to be used in conjonction with `format = "docker"` to specify which architecture to extract for

You may also define assets url and checksum per-architectures such as:

[resources.sources]
    [resources.sources.main]
    amd64.url = "https://some.address.to/download/the/app/archive/when/amd64"
    amd64.sha256 = "0123456789abcdef"
    armhf.url = "https://some.address.to/download/the/app/archive/when/armhf"
    armhf.sha256 = "fedcba9876543210"

In which case ynh_setup_source --dest_dir="$install_dir" will automatically pick the appropriate source depending on the arch

The helper will:

  • Download the specific URL if there is no local archive
  • Check the integrity with the specific sha256 sum
  • Uncompress the archive to $dest_dir.
    • If in_subdir is true, the first level directory of the archive will be removed.
    • If in_subdir is a numeric value, the N first level directories will be removed.
  • Patches named sources/patches/${src_id}-*.patch will be applied to $dest_dir
  • Extra files in sources/extra_files/$src_id will be copied to dest_dir

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!


App Technologies

These allow to install specific version of the technology required to run some apps

NODEJS

ynh_use_nodejs

Load the version of node for an app, and set variables.

Usage: ynh_use_nodejs

Details:
ynh_use_nodejs has to be used in any app scripts before using node for the first time. This helper will provide alias and variables to use in your scripts.

To use npm or node, use the alias ynh_npm and ynh_node.

Those alias will use the correct version installed for the app. For example: use ynh_npm install instead of npm install

With sudo or ynh_exec_as, use instead the fallback variables $ynh_npm and $ynh_node And propagate $PATH to sudo with $ynh_node_load_PATH Exemple: ynh_exec_as $app $ynh_node_load_PATH $ynh_npm install

$PATH contains the path of the requested version of node. However, $PATH is duplicated into $node_PATH to outlast any manipulation of $PATH You can use the variable $ynh_node_load_PATH to quickly load your node version in $PATH for an usage into a separate script. Exemple: $ynh_node_load_PATH $final_path/script_that_use_npm.sh`

Finally, to start a nodejs service with the correct version, 2 solutions Either the app is dependent of node or npm, but does not called it directly. In such situation, you need to load PATH :

Environment="__NODE_ENV_PATH__"
ExecStart=__FINALPATH__/my_app

You will replace NODE_ENV_PATH with $ynh_node_load_PATH.

Or node start the app directly, then you don't need to load the PATH variable

ExecStart=__YNH_NODE__ my_app run

You will replace __YNH_NODE__ with $ynh_node

2 other variables are also available

  • $nodejs_path: The absolute path to node binaries for the chosen version.
  • $nodejs_version: Just the version number of node for this app. Stored as 'nodejs_version' in settings.yml.

Requires YunoHost version 2.7.12 or higher.

Dude, show me the code!

ynh_install_nodejs

Install a specific version of nodejs

Usage: ynh_install_nodejs --nodejs_version=nodejs_version

Arguments:

  • -n, --nodejs_version=: Version of node to install. When possible, your should prefer to use major version number (e.g. 8 instead of 8.10.0).

Details:
ynh_install_nodejs will install the version of node provided as argument by using n.

n (Node version management) uses the PATH variable to store the path of the version of node it is going to use. That's how it changes the version

Refer to ynh_use_nodejs for more information about available commands and variables

Requires YunoHost version 2.7.12 or higher.

Dude, show me the code!

ynh_remove_nodejs

Remove the version of node used by the app.

Usage: ynh_remove_nodejs

Details:
This helper will check if another app uses the same version of node.

  • If not, this version of node will be removed.
  • If no other app uses node, n will be also removed.

Requires YunoHost version 2.7.12 or higher.

Dude, show me the code!


RUBY

ynh_use_ruby

Load the version of Ruby for an app, and set variables.

Usage: ynh_use_ruby

Details:
ynh_use_ruby has to be used in any app scripts before using Ruby for the first time. This helper will provide alias and variables to use in your scripts.

To use gem or Ruby, use the alias ynh_gem and ynh_ruby Those alias will use the correct version installed for the app For example: use ynh_gem install instead of gem install

With sudo or ynh_exec_as, use instead the fallback variables $ynh_gem and $ynh_ruby And propagate $PATH to sudo with $ynh_ruby_load_path Exemple: ynh_exec_as $app $ynh_ruby_load_path $ynh_gem install

$PATH contains the path of the requested version of Ruby. However, $PATH is duplicated into $ruby_path to outlast any manipulation of $PATH You can use the variable $ynh_ruby_load_path to quickly load your Ruby version in $PATH for an usage into a separate script. Exemple: $ynh_ruby_load_path $final_path/script_that_use_gem.sh`

Finally, to start a Ruby service with the correct version, 2 solutions Either the app is dependent of Ruby or gem, but does not called it directly. In such situation, you need to load PATH Environment="__YNH_RUBY_LOAD_PATH__" ExecStart=__FINALPATH__/my_app You will replace __YNH_RUBY_LOAD_PATH__ with $ynh_ruby_load_path

Or Ruby start the app directly, then you don't need to load the PATH variable ExecStart=__YNH_RUBY__ my_app run You will replace __YNH_RUBY__ with $ynh_ruby

one other variable is also available

  • $ruby_path: The absolute path to Ruby binaries for the chosen version.

Requires YunoHost version 3.2.2 or higher.

Dude, show me the code!

ynh_install_ruby

Install a specific version of Ruby

Usage: ynh_install_ruby --ruby_version=ruby_version

Arguments:

  • -v, --ruby_version=: Version of ruby to install.

Details:
ynh_install_ruby will install the version of Ruby provided as argument by using rbenv.

This helper creates a /etc/profile.d/rbenv.sh that configures PATH environment for rbenv for every LOGIN user, hence your user must have a defined shell (as opposed to /usr/sbin/nologin)

Don't forget to execute ruby-dependent command in a login environment (e.g. sudo --login option) When not possible (e.g. in systemd service definition), please use direct path to rbenv shims (e.g. $RBENV_ROOT/shims/bundle)

Requires YunoHost version 3.2.2 or higher.

Dude, show me the code!

ynh_remove_ruby

Remove the version of Ruby used by the app.

Usage: ynh_remove_ruby

Details:
This helper will also cleanup Ruby versions

Dude, show me the code!

ynh_cleanup_ruby

Remove no more needed versions of Ruby used by the app.

Usage: ynh_cleanup_ruby

Details:
This helper will check what Ruby version are no more required, and uninstall them If no app uses Ruby, rbenv will be also removed.

Dude, show me the code!


GO

ynh_use_go

Load the version of Go for an app, and set variables.

Usage: ynh_use_go

Details:
ynh_use_go has to be used in any app scripts before using Go for the first time. This helper will provide alias and variables to use in your scripts.

To use gem or Go, use the alias ynh_gem and ynh_go Those alias will use the correct version installed for the app For example: use ynh_gem install instead of gem install

With sudo or ynh_exec_as, use instead the fallback variables $ynh_gem and $ynh_go And propagate $PATH to sudo with $ynh_go_load_path Exemple: ynh_exec_as $app $ynh_go_load_path $ynh_gem install

$PATH contains the path of the requested version of Go. However, $PATH is duplicated into $go_path to outlast any manipulation of $PATH You can use the variable $ynh_go_load_path to quickly load your Go version in $PATH for an usage into a separate script. Exemple: $ynh_go_load_path $install_dir/script_that_use_gem.sh

Finally, to start a Go service with the correct version, 2 solutions Either the app is dependent of Go or gem, but does not called it directly. In such situation, you need to load PATH Environment="__YNH_GO_LOAD_PATH__" ExecStart=__INSTALL_DIR__/my_app You will replace __YNH_GO_LOAD_PATH__ with $ynh_go_load_path

Or Go start the app directly, then you don't need to load the PATH variable ExecStart=__YNH_GO__ my_app run You will replace __YNH_GO__ with $ynh_go

one other variable is also available

  • $go_path: The absolute path to Go binaries for the chosen version.

Requires YunoHost version 3.2.2 or higher.

Dude, show me the code!

ynh_install_go

Install a specific version of Go

Usage: ynh_install_go --go_version=go_version

Arguments:

  • -v, --go_version=: Version of go to install.

Details:
ynh_install_go will install the version of Go provided as argument by using goenv.

This helper creates a /etc/profile.d/goenv.sh that configures PATH environment for goenv for every LOGIN user, hence your user must have a defined shell (as opposed to /usr/sbin/nologin)

Don't forget to execute go-dependent command in a login environment (e.g. sudo --login option) When not possible (e.g. in systemd service definition), please use direct path to goenv shims (e.g. $goenv_ROOT/shims/bundle)

Requires YunoHost version 3.2.2 or higher.

Dude, show me the code!

ynh_remove_go

Remove the version of Go used by the app.

Usage: ynh_remove_go

Details:
This helper will also cleanup Go versions

Dude, show me the code!

ynh_cleanup_go

Remove no more needed versions of Go used by the app.

Usage: ynh_cleanup_go

Details:
This helper will check what Go version are no more required, and uninstall them If no app uses Go, goenv will be also removed.

Dude, show me the code!


COMPOSER

ynh_composer_exec

Execute a command with Composer

Usage: ynh_composer_exec [--phpversion=phpversion] [--workdir=$install_dir] --commands="commands"

Arguments:

  • -v, --phpversion: PHP version to use with composer
  • -w, --workdir: The directory from where the command will be executed. Default $install_dir or $final_path
  • -c, --commands: Commands to execute.

Details:
Requires YunoHost version 4.2 or higher.

Dude, show me the code!

ynh_install_composer

Install and initialize Composer in the given directory

Usage: ynh_install_composer [--phpversion=phpversion] [--workdir=$install_dir] [--install_args="--optimize-autoloader"] [--composerversion=composerversion]

Arguments:

  • -v, --phpversion: PHP version to use with composer
  • -w, --workdir: The directory from where the command will be executed. Default $install_dir.
  • -a, --install_args: Additional arguments provided to the composer install. Argument --no-dev already include
  • -c, --composerversion: Composer version to install

Details:
Requires YunoHost version 4.2 or higher.

Dude, show me the code!


Databases

This is coupled to the 'database' resource in the manifest.toml - at least for mysql/postgresql. Mongodb/redis may have better integration in the future.

MYSQL

ynh_mysql_connect_as

Open a connection as a user

Usage: ynh_mysql_connect_as --user=user --password=password [--database=database]

Arguments:

  • -u, --user=: the user name to connect as
  • -p, --password=: the user password
  • -d, --database=: the database to connect to

Examples:

  • ynh_mysql_connect_as --user="user" --password="pass" <<< "UPDATE ...;"

  • ynh_mysql_connect_as --user="user" --password="pass" < /path/to/file.sql

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_mysql_execute_as_root

Execute a command as root user

Usage: ynh_mysql_execute_as_root --sql=sql [--database=database]

Arguments:

  • -s, --sql=: the SQL command to execute
  • -d, --database=: the database to connect to

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_mysql_execute_file_as_root

Execute a command from a file as root user

Usage: ynh_mysql_execute_file_as_root --file=file [--database=database]

Arguments:

  • -f, --file=: the file containing SQL commands
  • -d, --database=: the database to connect to

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_mysql_dump_db

Dump a database

Usage: ynh_mysql_dump_db --database=database

Arguments:

  • -d, --database=: the database name to dump

Returns: The mysqldump output

Example: ynh_mysql_dump_db --database=roundcube > ./dump.sql

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!


POSTGRESQL

ynh_psql_connect_as

Open a connection as a user

Usage: ynh_psql_connect_as --user=user --password=password [--database=database]

Arguments:

  • -u, --user=: the user name to connect as
  • -p, --password=: the user password
  • -d, --database=: the database to connect to

Examples:

  • ynh_psql_connect_as 'user' 'pass' <<< "UPDATE ...;"

  • ynh_psql_connect_as 'user' 'pass' < /path/to/file.sql

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_psql_execute_as_root

Execute a command as root user

Usage: ynh_psql_execute_as_root --sql=sql [--database=database]

Arguments:

  • -s, --sql=: the SQL command to execute
  • -d, --database=: the database to connect to

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_psql_execute_file_as_root

Execute a command from a file as root user

Usage: ynh_psql_execute_file_as_root --file=file [--database=database]

Arguments:

  • -f, --file=: the file containing SQL commands
  • -d, --database=: the database to connect to

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_psql_dump_db

Dump a database

Usage: ynh_psql_dump_db --database=database

Arguments:

  • -d, --database=: the database name to dump

Returns: the psqldump output

Example: ynh_psql_dump_db 'roundcube' > ./dump.sql

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_psql_database_exists

Check if a psql database exists

Usage: ynh_psql_database_exists --database=database | exit: Return 1 if the database doesn't exist, 0 otherwise

Arguments:

  • -d, --database=: the database for which to check existence

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!


MONGODB

ynh_mongo_exec

Execute a mongo command

Usage: ynh_mongo_exec [--user=user] [--password=password] [--authenticationdatabase=authenticationdatabase] [--database=database] [--host=host] [--port=port] --command="command" [--eval]

Arguments:

  • -u, --user=: The user name to connect as
  • -p, --password=: The user password
  • -d, --authenticationdatabase=: The authenticationdatabase to connect to
  • -d, --database=: The database to connect to
  • -h, --host=: The host to connect to
  • -P, --port=: The port to connect to
  • -c, --command=: The command to evaluate
  • -e, --eval: Evaluate instead of execute the command.

Example: ynh_mongo_exec --command='db.getMongo().getDBNames().indexOf("wekan")' example: ynh_mongo_exec --command="db.getMongo().getDBNames().indexOf(\"wekan\")"

Details:

Dude, show me the code!

ynh_mongo_dump_db

Dump a database

Usage: ynh_mongo_dump_db --database=database

Arguments:

  • -d, --database=: The database name to dump

Returns: the mongodump output

Example: ynh_mongo_dump_db --database=wekan > ./dump.bson

Details:

Dude, show me the code!

ynh_mongo_database_exists

Check if a mongo database exists

Usage: ynh_mongo_database_exists --database=database | exit: Return 1 if the database doesn't exist, 0 otherwise

Arguments:

  • -d, --database=: The database for which to check existence

Details:

Dude, show me the code!

ynh_mongo_restore_db

Restore a database

Usage: ynh_mongo_restore_db --database=database

Arguments:

  • -d, --database=: The database name to restore

Example: ynh_mongo_restore_db --database=wekan < ./dump.bson

Details:

Dude, show me the code!

ynh_mongo_setup_db

Create a database, an user and its password. Then store the password in the app's config

Usage: ynh_mongo_setup_db --db_user=user --db_name=name [--db_pwd=pwd]

Arguments:

  • -u, --db_user=: Owner of the database
  • -n, --db_name=: Name of the database
  • -p, --db_pwd=: Password of the database. If not provided, a password will be generated

Details:
After executing this helper, the password of the created database will be available in $db_pwd It will also be stored as "mongopwd" into the app settings.

Dude, show me the code!

ynh_mongo_remove_db

Remove a database if it exists, and the associated user

Usage: ynh_mongo_remove_db --db_user=user --db_name=name

Arguments:

  • -u, --db_user=: Owner of the database
  • -n, --db_name=: Name of the database

Details:

Dude, show me the code!

ynh_install_mongo

Install MongoDB and integrate MongoDB service in YunoHost

Usage: ynh_install_mongo [--mongo_version=mongo_version]

Arguments:

  • -m, --mongo_version=: Version of MongoDB to install

Details:

Dude, show me the code!

ynh_remove_mongo

Remove MongoDB Only remove the MongoDB service integration in YunoHost for now if MongoDB package as been removed

Usage: ynh_remove_mongo

Details:

Dude, show me the code!


REDIS

ynh_redis_get_free_db

get the first available redis database

Usage: ynh_redis_get_free_db

Returns: the database number to use Dude, show me the code!

ynh_redis_remove_db

Create a master password and set up global settings Please always call this script in install and restore scripts

Usage: ynh_redis_remove_db database

Arguments:


Configurations / Templating

TEMPLATING

ynh_add_config

Create a dedicated config file from a template

Usage: ynh_add_config --template="template" --destination="destination"

Arguments:

  • -t, --template=: Template config file to use
  • -d, --destination=: Destination of the config file
  • -j, --jinja: Use jinja template instead of the simple __MY_VAR__ templating format

Examples:

  • ynh_add_config --template=".env" --destination="$install_dir/.env" # (use the template file "conf/.env" from the app's package)

  • ynh_add_config --jinja --template="config.j2" --destination="$install_dir/config" # (use the template file "conf/config.j2" from the app's package)

Details:
The template can be by default the name of a file in the conf directory of a YunoHost Package, a relative path or an absolute path.

The helper will use the template template to generate a config file destination by replacing the following keywords with global variables that should be defined before calling this helper :

  __PATH__                by $path_url
  __NAME__                by $app
  __NAMETOCHANGE__        by $app
  __USER__                by $app
  __FINALPATH__           by $final_path
  __PHPVERSION__          by $YNH_PHP_VERSION (packaging v1 only, packaging v2 uses phpversion setting implicitly set by apt resource)
  __YNH_NODE_LOAD_PATH__  by $ynh_node_load_PATH

And any dynamic variables that should be defined before calling this helper like:

  __DOMAIN__   by $domain
  __APP__      by $app
  __VAR_1__    by $var_1
  __VAR_2__    by $var_2
When --jinja is enabled

This option is meant for advanced use-cases where the "simple" templating mode ain't enough because you need conditional blocks or loops.

For a full documentation of jinja's syntax you can refer to: https://jinja.palletsprojects.com/en/3.1.x/templates/

Note that in YunoHost context, all variables are from shell variables and therefore are strings

Keeping track of manual changes by the admin

The helper will verify the checksum and backup the destination file if it's different before applying the new template.

And it will calculate and store the destination file checksum into the app settings when configuration is done.

Requires YunoHost version 4.1.0 or higher.

Dude, show me the code!

ynh_read_var_in_file

Get a value from heterogeneous file (yaml, json, php, python...)

Usage: ynh_read_var_in_file --file=PATH --key=KEY

Arguments:

  • -f, --file=: the path to the file
  • -k, --key=: the key to get
  • -a, --after=: the line just before the key (in case of multiple lines with the name of the key in the file)

Details:
This helpers match several var affectation use case in several languages We don't use jq or equivalent to keep comments and blank space in files This helpers work line by line, it is not able to work correctly if you have several identical keys in your files

Example of line this helpers can managed correctly .yml title: YunoHost documentation email: 'yunohost@yunohost.org' .json "theme": "colib'ris", "port": 8102 "some_boolean": false, "user": null .ini some_boolean = On action = "Clear" port = 20 .php $user= user => 20 .py USER = 8102 user = 'https://donate.local' CUSTOM['user'] = 'YunoHost'

Requires YunoHost version 4.3 or higher.

Dude, show me the code!

ynh_write_var_in_file

Set a value into heterogeneous file (yaml, json, php, python...)

Usage: ynh_write_var_in_file --file=PATH --key=KEY --value=VALUE

Arguments:

  • -f, --file=: the path to the file
  • -k, --key=: the key to set
  • -v, --value=: the value to set
  • -a, --after=: the line just before the key (in case of multiple lines with the name of the key in the file)

Details:
Requires YunoHost version 4.3 or higher.

Dude, show me the code!


NGINX

ynh_add_nginx_config

Create a dedicated nginx config

Usage: ynh_add_nginx_config

Details:
This will use a template in ../conf/nginx.conf See the documentation of ynh_add_config for a description of the template format and how placeholders are replaced with actual variables.

Additionally, ynh_add_nginx_config will replace:

  • #sub_path_only by empty string if path_url is not '/'
  • #root_path_only by empty string if path_url is '/'

This allows to enable/disable specific behaviors dependenging on the install location

Requires YunoHost version 4.1.0 or higher.

Dude, show me the code!

ynh_remove_nginx_config

Remove the dedicated nginx config

Usage: ynh_remove_nginx_config

Details:
Requires YunoHost version 2.7.2 or higher.

Dude, show me the code!

ynh_change_url_nginx_config

Regen the nginx config in a change url context

Usage: ynh_change_url_nginx_config

Details:
Requires YunoHost version 11.1.9 or higher.

Dude, show me the code!


PHP

ynh_add_fpm_config

Create a dedicated PHP-FPM config

Usage: ynh_add_fpm_config

Details:
Case 1 (recommended) : your provided a snippet conf/extra_php-fpm.conf

The actual PHP configuration will be automatically generated, and your extra_php-fpm.conf will be appended (typically contains PHP upload limits)

The resulting configuration will be deployed to the appropriate place, /etc/php/$phpversion/fpm/pool.d/$app.conf

Performance-related options in the PHP conf, such as : pm.max_children, pm.start_servers, pm.min_spare_servers pm.max_spare_servers are computed from two parameters called "usage" and "footprint" which can be set to low/medium/high. (cf details below)

If you wish to tweak those, please initialize the settings fpm_usage and fpm_footprint prior to calling this helper. Otherwise, "low" will be used as a default for both values.

Otherwise, if you want the user to have control over these, we encourage to create a config panel (which should ultimately be standardized by the core ...)

Case 2 (deprecate) : you provided an entire conf/php-fpm.conf

The configuration will be hydrated, replacing FOOBAR placeholders with $foobar values, etc.

The resulting configuration will be deployed to the appropriate place, /etc/php/$phpversion/fpm/pool.d/$app.conf


fpm_footprint: Memory footprint of the service (low/medium/high). low - Less than 20 MB of RAM by pool. medium - Between 20 MB and 40 MB of RAM by pool. high - More than 40 MB of RAM by pool. N - Or you can specify a quantitative footprint as MB by pool (use watch -n0.5 ps -o user,cmd,%cpu,rss -u APP)

fpm_usage: Expected usage of the service (low/medium/high). low - Personal usage, behind the SSO. medium - Low usage, few people or/and publicly accessible. high - High usage, frequently visited website.

The footprint of the service will be used to defined the maximum footprint we can allow, which is half the maximum RAM. So it will be used to defined 'pm.max_children' A lower value for the footprint will allow more children for 'pm.max_children'. And so for 'pm.start_servers', 'pm.min_spare_servers' and 'pm.max_spare_servers' which are defined from the value of 'pm.max_children' NOTE: 'pm.max_children' can't exceed 4 times the number of processor's cores.

The usage value will defined the way php will handle the children for the pool. A value set as 'low' will set the process manager to 'ondemand'. Children will start only if the service is used, otherwise no child will stay alive. This config gives the lower footprint when the service is idle. But will use more proc since it has to start a child as soon it's used. Set as 'medium', the process manager will be at dynamic. If the service is idle, a number of children equal to pm.min_spare_servers will stay alive. So the service can be quick to answer to any request. The number of children can grow if needed. The footprint can stay low if the service is idle, but not null. The impact on the proc is a little bit less than 'ondemand' as there's always a few children already available. Set as 'high', the process manager will be set at 'static'. There will be always as many children as 'pm.max_children', the footprint is important (but will be set as maximum a quarter of the maximum RAM) but the impact on the proc is lower. The service will be quick to answer as there's always many children ready to answer.

Requires YunoHost version 4.1.0 or higher.

Dude, show me the code!

ynh_remove_fpm_config

Remove the dedicated PHP-FPM config

Usage: ynh_remove_fpm_config

Details:
Requires YunoHost version 2.7.2 or higher.

Dude, show me the code!


SYSTEMD

ynh_add_systemd_config

Create a dedicated systemd config

Usage: ynh_add_systemd_config [--service=service] [--template=template]

Arguments:

  • -s, --service=: Service name (optionnal, $app by default)
  • -t, --template=: Name of template file (optionnal, this is 'systemd' by default, meaning ../conf/systemd.service will be used as template)

Details:
This will use the template ../conf/<templatename>.service.

See the documentation of ynh_add_config for a description of the template format and how placeholders are replaced with actual variables.

Requires YunoHost version 4.1.0 or higher.

Dude, show me the code!

ynh_remove_systemd_config

Remove the dedicated systemd config

Usage: ynh_remove_systemd_config [--service=service]

Arguments:

  • -s, --service=: Service name (optionnal, $app by default)

Details:
Requires YunoHost version 2.7.2 or higher.

Dude, show me the code!

ynh_systemd_action

Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started

Usage: ynh_systemd_action [--service_name=service_name] [--action=action] [ [--line_match="line to match"] [--log_path=log_path] [--timeout=300] [--length=20] ]

Arguments:

  • -n, --service_name=: Name of the service to start. Default : $app
  • -a, --action=: Action to perform with systemctl. Default: start
  • -l, --line_match=: Line to match - The line to find in the log to attest the service have finished to boot. If not defined it don't wait until the service is completely started.
  • -p, --log_path=: Log file - Path to the log file. Default : /var/log/$app/$app.log
  • -t, --timeout=: Timeout - The maximum time to wait before ending the watching. Default : 300 seconds.
  • -e, --length=: Length of the error log displayed for debugging : Default : 20

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!


FAIL2BAN

ynh_add_fail2ban_config

Create a dedicated fail2ban config (jail and filter conf files)

Usage: 1: ynh_add_fail2ban_config --logpath=log_file --failregex=filter [--max_retry=max_retry] [--ports=ports] 2: ynh_add_fail2ban_config --use_template

Arguments:

  • -l, --logpath=: Log file to be checked by fail2ban
  • -r, --failregex=: Failregex to be looked for by fail2ban
  • -m, --max_retry=: Maximum number of retries allowed before banning IP address - default: 3
  • -p, --ports=: Ports blocked for a banned IP address - default: http,https
  • -t, --use_template: Use this helper in template mode

Details:
This will use a template in ../conf/f2b_jail.conf and ../conf/f2b_filter.conf See the documentation of ynh_add_config for a description of the template format and how placeholders are replaced with actual variables.

Generally your template will look like that by example (for synapse):

f2b_jail.conf:
    [__APP__]
    enabled = true
    port = http,https
    filter = __APP__
    logpath = /var/log/__APP__/logfile.log
    maxretry = 3
f2b_filter.conf:
    [INCLUDES]
    before = common.conf
    [Definition]

# Part of regex definition (just used to make more easy to make the global regex)
    __synapse_start_line = .? \- synapse\..+ \-

# Regex definition.
   failregex = ^%(__synapse_start_line)s INFO \- POST\-(\d+)\- <HOST> \- \d+ \- Received request\: POST /_matrix/client/r0/login\??<SKIPLINES>%(__synapse_start_line)s INFO \- POST\-\1\- Got login request with identifier: \{u'type': u'm.id.user', u'user'\: u'(.+?)'\}, medium\: None, address: None, user\: u'\5'<SKIPLINES>%(__synapse_start_line)s WARNING \- \- (Attempted to login as @\5\:.+ but they do not exist|Failed password login for user @\5\:.+)$

ignoreregex =
Note about the "failregex" option:

regex to match the password failure messages in the logfile. The host must be matched by a group named "host". The tag "<HOST>" can be used for standard IP/hostname matching and is only an alias for (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)

You can find some more explainations about how to make a regex here : https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Filters

To validate your regex you can test with this command:

fail2ban-regex /var/log/YOUR_LOG_FILE_PATH /etc/fail2ban/filter.d/YOUR_APP.conf

Requires YunoHost version 4.1.0 or higher.

Dude, show me the code!

ynh_remove_fail2ban_config

Remove the dedicated fail2ban config (jail and filter conf files)

Usage: ynh_remove_fail2ban_config

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!


LOGROTATE

ynh_use_logrotate

Use logrotate to manage the logfile

Usage: ynh_use_logrotate [--logfile=/log/file] [--specific_user=user/group]

Arguments:

  • -l, --logfile=: absolute path of logfile
  • -u, --specific_user=: run logrotate as the specified user and group. If not specified logrotate is runned as root.

Details:
If no --logfile is provided, /var/log/$app will be used as default. logfile can point to a directory or a file.

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_remove_logrotate

Remove the app's logrotate config.

Usage: ynh_remove_logrotate

Details:
Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!


Misc Tools

UTILS

ynh_local_curl

Curl abstraction to help with POST requests to local pages (such as installation forms)

Usage: ynh_local_curl "page_uri" "key1=value1" "key2=value2" ...

Arguments:

  • page_uri: Path (relative to $path_url) of the page where POST data will be sent
  • key1=value1: (Optionnal) POST key and corresponding value
  • key2=value2: (Optionnal) Another POST key and corresponding value
  • ...: (Optionnal) More POST keys and values

Example: ynh_local_curl "/install.php?installButton" "foo=$var1" "bar=$var2"

Details:
For multiple calls, cookies are persisted between each call for the same app

$domain and $path_url should be defined externally (and correspond to the domain.tld and the /path (of the app?))

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_secure_remove

Remove a file or a directory securely

Usage: ynh_secure_remove --file=path_to_remove

Arguments:

  • -f, --file=: File or directory to remove

Details:
Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_read_manifest

Read the value of a key in a ynh manifest file

Usage: ynh_read_manifest --manifest="manifest.json" --manifest_key="key"

Arguments:

  • -m, --manifest=: Path of the manifest to read
  • -k, --manifest_key=: Name of the key to find

Returns: the value associate to that key

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_app_upstream_version

Read the upstream version from the manifest or `$YNH_APP_MANIFEST_VERSION`

Usage: ynh_app_upstream_version [--manifest="manifest.json"]

Arguments:

  • -m, --manifest=: Path of the manifest to read

Returns: the version number of the upstream app

Details:
If the manifest is not specified, the envvar $YNH_APP_MANIFEST_VERSION will be used.

The version number in the manifest is defined by <upstreamversion>~ynh<packageversion>.

For example, if the manifest contains 4.3-2~ynh3 the function will return 4.3-2

Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_check_app_version_changed

Checks the app version to upgrade with the existing app version and returns:

Usage: ynh_check_app_version_changed

Returns: UPGRADE_APP if the upstream version changed, UPGRADE_PACKAGE otherwise.

Details:
This helper should be used to avoid an upgrade of an app, or the upstream part of it, when it's not needed

Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_compare_current_package_version

Compare the current package version against another version given as an argument.

Usage: ynh_compare_current_package_version --comparison (lt|le|eq|ne|ge|gt) --version <X~ynhY>

Arguments:

  • --comparison: Comparison type. Could be : lt (lower than), le (lower or equal), eq (equal), ne (not equal), ge (greater or equal), gt (greater than)
  • --version: The version to compare. Need to be a version in the yunohost package version type (like 2.3.1~ynh4)

Returns: 0 if the evaluation is true, 1 if false.

Example: ynh_compare_current_package_version --comparison lt --version 2.3.2~ynh1

Details:
This helper is usually used when we need to do some actions only for some old package versions.

Generally you might probably use it as follow in the upgrade script :

if ynh_compare_current_package_version --comparison lt --version 2.3.2~ynh1
then
    # Do something that is needed for the package version older than 2.3.2~ynh1
fi

Requires YunoHost version 3.8.0 or higher.

Dude, show me the code!

ynh_user_exists

Check if a YunoHost user exists

Usage: ynh_user_exists --username=username

Arguments:

  • -u, --username=: the username to check

Returns: 0 if the user exists, 1 otherwise.

Example: ynh_user_exists 'toto' || echo "User does not exist"

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_user_get_info

Retrieve a YunoHost user information

Usage: ynh_user_get_info --username=username --key=key

Arguments:

  • -u, --username=: the username to retrieve info from
  • -k, --key=: the key to retrieve

Returns: the value associate to that key

Example: mail=$(ynh_user_get_info --username="toto" --key=mail)

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_user_list

Get the list of YunoHost users

Usage: ynh_user_list

Returns: one username per line as strings

Example: for u in $(ynh_user_list); do ... ; done

Details:
Requires YunoHost version 2.4.0 or higher.

Dude, show me the code!


SETTING

ynh_app_setting_get

Get an application setting

Usage: ynh_app_setting_get --app=app --key=key

Arguments:

  • -a, --app=: the application id
  • -k, --key=: the setting to get

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_app_setting_set

Set an application setting

Usage: ynh_app_setting_set --app=app --key=key --value=value

Arguments:

  • -a, --app=: the application id
  • -k, --key=: the setting name to set
  • -v, --value=: the setting value to set

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_app_setting_set_default

Set an application setting but only if the "$key" variable ain't set yet

Usage: ynh_app_setting_set_default --app=app --key=key --value=value

Arguments:

  • -a, --app=: the application id
  • -k, --key=: the setting name to set
  • -v, --value=: the default setting value to set

Details:
Note that it doesn't just define the setting but ALSO define the $foobar variable

Hence it's meant as a replacement for this legacy overly complex syntax:

if [ -z "${foo:-}" ] then foo="bar" ynh_app_setting_set --key="foo" --value="$foo" fi

Requires YunoHost version 11.1.16 or higher.

Dude, show me the code!

ynh_app_setting_delete

Delete an application setting

Usage: ynh_app_setting_delete --app=app --key=key

Arguments:

  • -a, --app=: the application id
  • -k, --key=: the setting to delete

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!


STRING

ynh_string_random

Generate a random string

Usage: ynh_string_random [--length=string_length]

Arguments:

  • -l, --length=: the string length to generate (default: 24)
  • -f, --filter=: the kind of characters accepted in the output (default: 'A-Za-z0-9')

Returns: the generated string

Example: pwd=$(ynh_string_random --length=8)

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_replace_string

Substitute/replace a string (or expression) by another in a file

Usage: ynh_replace_string --match_string=match_string --replace_string=replace_string --target_file=target_file

Arguments:

  • -m, --match_string=: String to be searched and replaced in the file
  • -r, --replace_string=: String that will replace matches
  • -f, --target_file=: File in which the string will be replaced.

Details:
As this helper is based on sed command, regular expressions and references to sub-expressions can be used (see sed manual page for more information)

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_replace_special_string

Substitute/replace a special string by another in a file

Usage: ynh_replace_special_string --match_string=match_string --replace_string=replace_string --target_file=target_file

Arguments:

  • -m, --match_string=: String to be searched and replaced in the file
  • -r, --replace_string=: String that will replace matches
  • -t, --target_file=: File in which the string will be replaced.

Details:
This helper will use ynh_replace_string, but as you can use special characters, you can't use some regular expressions and sub-expressions.

Requires YunoHost version 2.7.7 or higher.

Dude, show me the code!


BACKUP

ynh_backup

Add a file or a directory to the list of paths to backup

Usage: ynh_backup --src_path=src_path [--dest_path=dest_path] [--is_big] [--not_mandatory]

Arguments:

  • -s, --src_path=: file or directory to bind or symlink or copy. it shouldn't be in the backup dir.
  • -d, --dest_path=: destination file or directory inside the backup dir
  • -b, --is_big: Indicate data are big (mail, video, image ...)
  • -m, --not_mandatory: Indicate that if the file is missing, the backup can ignore it.

Details:
This helper can be used both in a system backup hook, and in an app backup script

ynh_backup writes src_path and the relative dest_path into a CSV file, and it creates the parent destination directory

If dest_path is ended by a slash it complete this path with the basename of src_path.

Example in the context of a wordpress app :

ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
# => This line will be added into CSV file
# "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/etc/nginx/conf.d/$domain.d/$app.conf"

ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/nginx.conf"
# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"

ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf/"
# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"

ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "conf"
# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf"

#Deprecated usages (maintained for retro-compatibility)
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${backup_dir}/conf/nginx.conf"
# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/nginx.conf"

ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "/conf/"
# => "/etc/nginx/conf.d/$domain.d/$app.conf","apps/wordpress/conf/$app.conf"

How to use --is_big:

--is_big is used to specify that this part of the backup can be quite huge. So, you don't want that your package does backup that part during ynh_backup_before_upgrade. In the same way, an user may doesn't want to backup this big part of the app for each of his backup. And so handle that part differently.

As this part of your backup may not be done, your restore script has to handle it. In your restore script, use --not_mandatory with ynh_restore_file As well in your remove script, you should not remove those data ! Or an user may end up with a failed upgrade restoring an app without data anymore !

To have the benefit of --is_big while doing a backup, you can whether set the environement variable BACKUP_CORE_ONLY to 1 (BACKUP_CORE_ONLY=1) before the backup command. It will affect only that backup command. Or set the config do_not_backup_data to 1 into the settings.yml of the app. This will affect all backups for this app until the setting is removed.

Requires YunoHost version 2.4.0 or higher. Requires YunoHost version 3.5.0 or higher for the argument --not_mandatory

Dude, show me the code!

ynh_restore

Restore all files that were previously backuped in a core backup script or app backup script

Usage: ynh_restore

Details:
Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_restore_file

Restore a file or a directory

Usage: ynh_restore_file --origin_path=origin_path [--dest_path=dest_path] [--not_mandatory]

Arguments:

  • -o, --origin_path=: Path where was located the file or the directory before to be backuped or relative path to $YNH_CWD where it is located in the backup archive
  • -d, --dest_path=: Path where restore the file or the dir. If unspecified, the destination will be ORIGIN_PATH or if the ORIGIN_PATH doesn't exist in the archive, the destination will be searched into backup.csv
  • -m, --not_mandatory: Indicate that if the file is missing, the restore process can ignore it.

Examples:

  • ynh_restore_file -o "/etc/nginx/conf.d/$domain.d/$app.conf"

  • You can also use relative paths:

  • ynh_restore_file -o "conf/nginx.conf"

Details:
Use the registered path in backup_list by ynh_backup to restore the file at the right place.

If DEST_PATH already exists and is lighter than 500 Mo, a backup will be made in /var/cache/yunohost/appconfbackup/. Otherwise, the existing file is removed.

if apps/$app/etc/nginx/conf.d/$domain.d/$app.conf exists, restore it into /etc/nginx/conf.d/$domain.d/$app.conf if no, search for a match in the csv (eg: conf/nginx.conf) and restore it into /etc/nginx/conf.d/$domain.d/$app.conf

Requires YunoHost version 2.6.4 or higher. Requires YunoHost version 3.5.0 or higher for the argument --not_mandatory

Dude, show me the code!

ynh_store_file_checksum

Calculate and store a file checksum into the app settings

Usage: ynh_store_file_checksum --file=file

Arguments:

  • -f, --file=: The file on which the checksum will performed, then stored.

Details:
$app should be defined when calling this helper

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_backup_if_checksum_is_different

Verify the checksum and backup the file if it's different

Usage: ynh_backup_if_checksum_is_different --file=file

Arguments:

  • -f, --file=: The file on which the checksum test will be perfomed.

Returns: the name of a backup file, or nothing

Details:
This helper is primarily meant to allow to easily backup personalised/manually modified config files.

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_delete_file_checksum

Delete a file checksum from the app settings

Usage: ynh_delete_file_checksum --file=file

Arguments:

  • -f, --file=: The file for which the checksum will be deleted

Details:
$app should be defined when calling this helper

Requires YunoHost version 3.3.1 or higher.

Dude, show me the code!


LOGGING

ynh_die

Print a message to stderr and exit

Usage: ynh_die --message=MSG [--ret_code=RETCODE]

Arguments:

  • -m, --message=: Message to display
  • -c, --ret_code=: Exit code to exit with

Details:
Requires YunoHost version 2.4.0 or higher.

Dude, show me the code!

ynh_print_info

Display a message in the 'INFO' logging category

Usage: ynh_print_info --message="Some message"

Arguments:

  • -m, --message=: Message to display

Details:
Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_print_warn

Print a warning on stderr

Usage: ynh_print_warn --message="Text to print"

Arguments:

  • -m, --message=: The text to print

Details:
Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_print_err

Print an error on stderr

Usage: ynh_print_err --message="Text to print"

Arguments:

  • -m, --message=: The text to print

Details:
Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_exec_err

Execute a command and print the result as an error

Usage: ynh_exec_err your command and args

Arguments:

  • command: command to execute

Details:
Note that you should NOT quote the command but only prefix it with ynh_exec_err

Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_exec_warn

Execute a command and print the result as a warning

Usage: ynh_exec_warn your command and args

Arguments:

  • command: command to execute

Details:
Note that you should NOT quote the command but only prefix it with ynh_exec_warn

Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_exec_warn_less

Execute a command and force the result to be printed on stdout

Usage: ynh_exec_warn_less your command and args

Arguments:

  • command: command to execute

Details:
Note that you should NOT quote the command but only prefix it with ynh_exec_warn

Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_exec_quiet

Execute a command and redirect stdout in /dev/null

Usage: ynh_exec_quiet your command and args

Arguments:

  • command: command to execute

Details:
Note that you should NOT quote the command but only prefix it with ynh_exec_warn

Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_exec_fully_quiet

Execute a command and redirect stdout and stderr in /dev/null

Usage: ynh_exec_quiet your command and args

Arguments:

  • command: command to execute

Details:
Note that you should NOT quote the command but only prefix it with ynh_exec_quiet

Requires YunoHost version 3.2.0 or higher.

Dude, show me the code!

ynh_exec_and_print_stderr_only_if_error

Execute a command and redirect stderr in /dev/null. Print stderr on error.

Usage: ynh_exec_and_print_stderr_only_if_error your command and args

Arguments:

  • command: command to execute

Details:
Note that you should NOT quote the command but only prefix it with ynh_exec_and_print_stderr_only_if_error

Requires YunoHost version 11.2 or higher.

Dude, show me the code!

ynh_script_progression

Print a progress bar showing the progression of an app script

Usage: ynh_script_progression --message=message [--weight=weight] [--time]

Arguments:

  • -m, --message=: The text to print
  • -w, --weight=: The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script.
  • -t, --time: Print the execution time since the last call to this helper. Especially usefull to define weights. The execution time is given for the duration since the previous call. So the weight should be applied to this previous call.
  • -l, --last: Use for the last call of the helper, to fill the progression bar.

Details:
Requires YunoHost version 3.5.0 or higher.

Dude, show me the code!

ynh_return

Return data to the YunoHost core for later processing (to be used by special hooks like app config panel and core diagnosis)

Usage: ynh_return somedata

Details:
Requires YunoHost version 3.6.0 or higher.

Dude, show me the code!


MULTIMEDIA

ynh_multimedia_build_main_dir

Initialize the multimedia directory system

Usage: ynh_multimedia_build_main_dir

Details:
Requires YunoHost version 4.2 or higher.

Dude, show me the code!

ynh_multimedia_addfolder

Add a directory in yunohost.multimedia

Usage: ynh_multimedia_addfolder --source_dir="source_dir" --dest_dir="dest_dir"

Arguments:

  • -s, --source_dir=: Source directory - The real directory which contains your medias.
  • -d, --dest_dir=: Destination directory - The name and the place of the symbolic link, relative to "/home/yunohost.multimedia"

Details:
This "directory" will be a symbolic link to a existing directory.

Requires YunoHost version 4.2 or higher.

Dude, show me the code!

ynh_multimedia_addaccess

Allow an user to have an write authorisation in multimedia directories

Usage: ynh_multimedia_addaccess user_name

Arguments:

  • -u, --user_name=: The name of the user which gain this access.

Details:
Requires YunoHost version 4.2 or higher.

Dude, show me the code!


Deprecated Or Handled By The Core / App Resources Since V2

PERMISSION

ynh_permission_create

Create a new permission for the app

Usage: ynh_permission_create --permission="permission" [--url="url"] [--additional_urls="second-url" [ "third-url" ]] [--auth_header=true|false] [--allowed=group1 [ group2 ]] [--label="label"] [--show_tile=true|false] [--protected=true|false]

Arguments:

  • -p, --permission=: the name for the permission (by default a permission named "main" already exist)
  • -u, --url=: (optional) URL for which access will be allowed/forbidden. Note that if 'show_tile' is enabled, this URL will be the URL of the tile.
  • -A, --additional_urls=: (optional) List of additional URL for which access will be allowed/forbidden
  • -h, --auth_header=: (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application. Default is true
  • -a, --allowed=: (optional) A list of group/user to allow for the permission
  • -l, --label=: (optional) Define a name for the permission. This label will be shown on the SSO and in the admin. Default is "APP_LABEL (permission name)".
  • -t, --show_tile=: (optional) Define if a tile will be shown in the SSO. If yes the name of the tile will be the 'label' parameter. Defaults to false for the permission different than 'main'.
  • -P, --protected=: (optional) Define if this permission is protected. If it is protected the administrator won't be able to add or remove the visitors group of this permission. Defaults to 'false'.

Details:
Example 1: ynh_permission_create --permission=admin --url=/admin --additional_urls=domain.tld/admin /superadmin --allowed=alice bob \ --label="My app admin" --show_tile=true

This example will create a new permission permission with this following effect:

  • A tile named "My app admin" in the SSO will be available for the users alice and bob. This tile will point to the relative url '/admin'.
  • Only the user alice and bob will have the access to theses following url: /admin, domain.tld/admin, /superadmin

Example 2:

ynh_permission_create --permission=api --url=domain.tld/api --auth_header=false --allowed=visitors \ --label="MyApp API" --protected=true

This example will create a new protected permission. So the admin won't be able to add/remove the visitors group of this permission. In case of an API with need to be always public it avoid that the admin break anything. With this permission all client will be allowed to access to the url 'domain.tld/api'. Note that in this case no tile will be show on the SSO. Note that the auth_header parameter is to 'false'. So no authentication header will be passed to the application. Generally the API is requested by an application and enabling the auth_header has no advantage and could bring some issues in some case. So in this case it's better to disable this option for all API.

If provided, 'url' or 'additional_urls' is assumed to be relative to the app domain/path if they start with '/'. For example: / -> domain.tld/app /admin -> domain.tld/app/admin domain.tld/app/api -> domain.tld/app/api

'url' or 'additional_urls' can be treated as a PCRE (not lua) regex if it starts with "re:". For example: re:/api/[A-Z]$ -> domain.tld/app/api/[A-Z]$ re:domain.tld/app/api/[A-Z]$ -> domain.tld/app/api/[A-Z]$

Note that globally the parameter 'url' and 'additional_urls' are same. The only difference is:

  • 'url' is only one url, 'additional_urls' can be a list of urls. There are no limitation of 'additional_urls'
  • 'url' is used for the url of tile in the SSO (if enabled with the 'show_tile' parameter)

About the authentication header (auth_header parameter). The SSO pass (by default) to the application theses following HTTP header (linked to the authenticated user) to the application:

  • "Auth-User": username
  • "Remote-User": username
  • "Email": user email

Generally this feature is usefull to authenticate automatically the user in the application but in some case the application don't work with theses header and theses header need to be disabled to have the application to work correctly. See https://github.com/YunoHost/issues/issues/1420 for more informations

Requires YunoHost version 3.7.0 or higher.

Dude, show me the code!

ynh_permission_delete

Remove a permission for the app (note that when the app is removed all permission is automatically removed)

Usage: ynh_permission_delete --permission="permission"

Arguments:

  • -p, --permission=: the name for the permission (by default a permission named "main" is removed automatically when the app is removed)

Example: ynh_permission_delete --permission=editors

Details:
Requires YunoHost version 3.7.0 or higher.

Dude, show me the code!

ynh_permission_exists

Check if a permission exists

Usage: ynh_permission_exists --permission=permission | exit: Return 1 if the permission doesn't exist, 0 otherwise

Arguments:

  • -p, --permission=: the permission to check

Details:
Requires YunoHost version 3.7.0 or higher.

Dude, show me the code!

ynh_permission_url

Redefine the url associated to a permission

Usage: ynh_permission_url --permission "permission" [--url="url"] [--add_url="new-url" [ "other-new-url" ]] [--remove_url="old-url" [ "other-old-url" ]] [--auth_header=true|false] [--clear_urls]

Arguments:

  • -p, --permission=: the name for the permission (by default a permission named "main" is removed automatically when the app is removed)
  • -u, --url=: (optional) URL for which access will be allowed/forbidden. Note that if you want to remove url you can pass an empty sting as arguments ("").
  • -a, --add_url=: (optional) List of additional url to add for which access will be allowed/forbidden.
  • -r, --remove_url=: (optional) List of additional url to remove for which access will be allowed/forbidden
  • -h, --auth_header=: (optional) Define for the URL of this permission, if SSOwat pass the authentication header to the application
  • -c, --clear_urls: (optional) Clean all urls (url and additional_urls)

Details:
Requires YunoHost version 3.7.0 or higher.

Dude, show me the code!

ynh_permission_update

Update a permission for the app

Usage: ynh_permission_update --permission "permission" [--add="group" ["group" ...]] [--remove="group" ["group" ...]] [--label="label"] [--show_tile=true|false] [--protected=true|false]

Arguments:

  • -p, --permission=: the name for the permission (by default a permission named "main" already exist)
  • -a, --add=: the list of group or users to enable add to the permission
  • -r, --remove=: the list of group or users to remove from the permission
  • -l, --label=: (optional) Define a name for the permission. This label will be shown on the SSO and in the admin.
  • -t, --show_tile=: (optional) Define if a tile will be shown in the SSO
  • -P, --protected=: (optional) Define if this permission is protected. If it is protected the administrator won't be able to add or remove the visitors group of this permission.

Details:
Requires YunoHost version 3.7.0 or higher.

Dude, show me the code!

ynh_permission_has_user

Check if a permission has an user

Usage: ynh_permission_has_user --permission=permission --user=user | exit: Return 1 if the permission doesn't have that user or doesn't exist, 0 otherwise

Arguments:

  • -p, --permission=: the permission to check
  • -u, --user=: the user seek in the permission

Example: ynh_permission_has_user --permission=main --user=visitors

Details:
Requires YunoHost version 3.7.1 or higher.

Dude, show me the code!

ynh_legacy_permissions_exists

Check if a legacy permissions exist

Usage: ynh_legacy_permissions_exists | exit: Return 1 if the permission doesn't exist, 0 otherwise

Details:
Requires YunoHost version 4.1.2 or higher.

Dude, show me the code!

ynh_legacy_permissions_delete_all

Remove all legacy permissions

Usage: ynh_legacy_permissions_delete_all

Example: if ynh_legacy_permissions_exists then ynh_legacy_permissions_delete_all # You can recreate the required permissions here with ynh_permission_create fi Requires YunoHost version 4.1.2 or higher. Dude, show me the code!


APT

ynh_package_is_installed

Check either a package is installed or not

Usage: ynh_package_is_installed --package=name

Arguments:

  • -p, --package=: the package name to check

Returns: 0 if the package is installed, 1 else.

Example: ynh_package_is_installed --package=yunohost && echo "installed"

Details:
Requires YunoHost version 2.2.4 or higher.

Dude, show me the code!

ynh_install_app_dependencies

Define and install dependencies with a equivs control file

Usage: ynh_install_app_dependencies dep [dep [...]]

Arguments:

  • dep: the package name to install in dependence.
  • "dep1|dep2|…": You can specify alternatives. It will require to install (dep1 or dep2, etc).

Details:
This helper can/should only be called once per app

example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5"

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_remove_app_dependencies

Remove fake package and its dependencies

Usage: ynh_remove_app_dependencies

Details:
Dependencies will removed only if no other package need them.

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_install_extra_app_dependencies

Install packages from an extra repository properly.

Usage: ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name]

Arguments:

  • -r, --repo=: Complete url of the extra repository.
  • -p, --package=: The packages to install from this extra repository
  • -k, --key=: url to get the public key.
  • -n, --name=: Name for the files for this repo, $app as default value.

Details:
Requires YunoHost version 3.8.1 or higher.

Dude, show me the code!


SYSTEMUSER

ynh_system_user_create

Create a system user

Usage: ynh_system_user_create --username=user_name [--home_dir=home_dir] [--use_shell] [--groups="group1 group2"]

Arguments:

  • -u, --username=: Name of the system user that will be create
  • -h, --home_dir=: Path of the home dir for the user. Usually the final path of the app. If this argument is omitted, the user will be created without home
  • -s, --use_shell: Create a user using the default login shell if present. If this argument is omitted, the user will be created with /usr/sbin/nologin shell
  • -g, --groups: Add the user to system groups. Typically meant to add the user to the ssh.app / sftp.app group (e.g. for borgserver, my_webapp)

Details:
Create a nextcloud user with no home directory and /usr/sbin/nologin login shell (hence no login capability) :

ynh_system_user_create --username=nextcloud

Create a discourse user using /var/www/discourse as home directory and the default login shell :

ynh_system_user_create --username=discourse --home_dir=/var/www/discourse --use_shell

Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_system_user_delete

Delete a system user

Usage: ynh_system_user_delete --username=user_name

Arguments:

  • -u, --username=: Name of the system user that will be create

Details:
Requires YunoHost version 2.6.4 or higher.

Dude, show me the code!

ynh_exec_as

Execute a command as another user

Usage: ynh_exec_as $USER COMMAND [ARG ...]

Details:
Requires YunoHost version 4.1.7 or higher.

Dude, show me the code!


Found errors? Think you can improve this documentation? Simply click the Edit link at the top of the page, and then the icon on Github to suggest changes.