cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

La commande occ permet de configurer Nextcloud (depuis le bash donc). Cependant cette commande doit être exécutée dans son environnement.

Pour cela le compte que vous utiliserez doit être sudoer et pouvoir accéder à l’utilisateur www-data. Je ne rentre pas dans les détails de cette partie de la configuration, puis que cela dépend fortement de la distribution Linux utilisée – pour rechercher de la documentation utilisez les mots sudo, sudoer et weel.



Comment avoir une commande occ simple supportant la complétion :

On peut même aller un peu plus loin et masquer complètement le changement d’utilisateur l’aide du script suivant :

#!/bin/bash
#
# occ-completion.sh
#
# based on result of:
#
#   sudo -u www-data php /var/www/nextcloud/occ _completion --generate-hook --shell-type bash
#
# This script should be sourced in ~/.bashrc
#

function _occ_9cbb1906d0cf7a74_complete {

  local CMDLINE_CONTENTS="$COMP_LINE"
  local CMDLINE_CURSOR_INDEX="$COMP_POINT"
  local CMDLINE_WORDBREAKS="$COMP_WORDBREAKS";

  export CMDLINE_CONTENTS CMDLINE_CURSOR_INDEX CMDLINE_WORDBREAKS

  local RESULT STATUS;

  RESULT="$( sudo -E -u www-data php /var/www/nextcloud/occ _completion </dev/null )";
  STATUS=$?;

  local cur mail_check_backup;

  mail_check_backup=$MAILCHECK;
  MAILCHECK=-1;

  _get_comp_words_by_ref -n : cur;

  if [ $STATUS -eq 200 ]; then
    _filedir;
    return 0;

  elif [ $STATUS -ne 0 ]; then
    echo -e "$RESULT";
    return $?;
  fi;

  # shellcheck disable=SC2086 disable=SC2006
  COMPREPLY=(`compgen -W "$RESULT" -- $cur`);

  __ltrim_colon_completions "$cur";

  MAILCHECK=$mail_check_backup;
}

if [ -f '/var/www/nextcloud/occ' ] ; then

  alias occ="sudo -E -u www-data php /var/www/nextcloud/occ"

  if [ "$(type -t _get_comp_words_by_ref)" == "function" ]; then
    echo "* 'occ' registred as an alias of 'occ' with completion enabled."
    complete -F _occ_9cbb1906d0cf7a74_complete "occ"
  else
    >&2 echo "Completion was not registered for occ"
    >&2 echo "The 'bash-completion' package is required but doesn't appear to be installed."
  fi

else

  echo '/var/www/nextcloud/occ not found - not registered' >&2

fi

Si vous sourcez ce script depuis votre bashrc ou depuis un terminal, vous aurez alors accès à la complétion de la commande occ.

source occ-completion.sh

occ # puis appuyez sur la touche <TAB> deux fois de suite.


Comment écrire une fonction bash permettant d’exécuter occ :

Avoir accès directement à occ depuis un script bash est assez simple, il suffit d’utiliser la fonction suivante :

function occ {
  cat <<EOF >&2
  sudo -E -u www-data php /var/www/nextcloud/occ $@
EOF

  sudo -E -u www-data php /var/www/nextcloud/occ "$@"
}


Comment obtenir la liste des identifiants des utilisateurs de votre instance :

Maintenant que nous avons résolu l’accès à la commande occ, il est facile d’automatiser pas mal de choses.

On utilisera la sortie au format JSON de la commande et donc le programme jq sera requis, pour l’installer utilisez :

sudo apt update && sudo apt install -y jq

La liste des id des utilisateurs s’obtient à l’aide :

occ user:list

Mais pour n’avoir que la liste des identificateurs des utilisateurs, vous pouvez utiliser :

occ user:list --output=json | jq -r 'keys[]'

Cela permet d'avoir un résultat utilisable dans un script.



Comment obtenir la liste des mails des utilisateurs de votre instance :

Si vous souhaitez envoyer un mail à tous les utilisateurs, vous aurez besoin de l’adresse qu’ils ont configurée dans leur profile. Cela s’obtient à l’aide de :

while read -r USER ; do
  occ user:setting --output=json "${USER}"  | jq -r .settings.email
done < <( occ user:list --output=json | jq -r 'keys[]' )

Magique ! Une adresse mail par ligne.


Avec un tableau des identificateurs des utilisateurs et la commande occ beaucoup d’options s’offrent à vous. Inspirez-vous de l’exemple ci-dessus.

Il n’y a plus qu’à…



Mais comment configurer quelque chose ?

Dans les nombreuses commandes possibles de occ en particulier à l’aide config:system:set.

Notez que l’aide en ligne contiens des erreurs.

occ config:system:set --help

Voici quelques exemples :

occ config:system:set trusted_proxies 0 –value="192.168.0.254" # Première valeur du tableau: trusted_proxies
occ config:system:set trusted_proxies 1 --value="192.168.0.253" # Seconde valeur du tableau: trusted_proxies

occ config:system:set overwritehost –value="nextcloud.exemple.org"

occ config:system:set overwriteprotocol --value="https"

A priori toutes les valeurs ne peuvent pas être définies à l’aide de cette méthode (point à creuser).

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog