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).
ᦿ