docker-mailserver/target/bin/setup
Georg Lauterbach c7e4981945
Move setup process via script into container (#2174)
Decoupling setup process from `setup.sh` script by introducing a setup script _inside_ the container that coordinates the setup process.

**This is not a breaking change**. This way, we do not have to keep track of versions of `setup.sh`.

This change brings the additional benefit for Kubernetes users to be able to make use of `setup` now, without the need for `setup.sh`.

---

* move setup process into container; setup.sh versioning not needed anymore

* add tilde functionality to docs

Co-authored-by: Brennan Kinney <5098581+polarathene@users.noreply.github.com>
Co-authored-by: Casper <casperklein@users.noreply.github.com>
2021-09-12 11:29:02 +12:00

172 lines
6 KiB
Bash

#! /bin/bash
SCRIPT='setup'
set -euE -o pipefail
function _usage
{
local WHITE="\e[37m"
local RED="\e[31m"
local PURPLE="\e[35m"
local YELLOW="\e[93m"
local ORANGE="\e[38;5;214m"
local CYAN="\e[96m"
local BLUE="\e[34m"
local LBLUE="\e[94m"
local RESET="\e[0m"
# shellcheck disable=SC2059
printf "${PURPLE}SETUP${RED}(${YELLOW}1${RED})
${ORANGE}NAME${RESET}
${SCRIPT:-${0}} - docker-mailserver administration & configuration script
${ORANGE}SYNOPSIS${RESET}
./${SCRIPT:-${0}} [ OPTIONS${RED}...${RESET} ] COMMAND [ help ${RED}|${RESET} ARGUMENTS${RED}...${RESET} ]
COMMAND ${RED}:=${RESET} { email ${RED}|${RESET} alias ${RED}|${RESET} quota ${RED}|${RESET} config ${RED}|${RESET} relay ${RED}|${RESET} debug } SUBCOMMAND
${ORANGE}DESCRIPTION${RESET}
This is the main administration script that you use for all interactions with your
mail server. Setup, configuration and much more is done with this script.
Please note that this script executes most of its commands inside the running 'mailserver'
container itself. If it cannot find a running container, it will attempt to run one using
any available tags which include label=org.opencontainers.image.title=\"docker-mailserver\"
and then run the necessary commands. If the tag for the container is not found, this script
will pull the ${WHITE}:latest${RESET} tag of ${WHITE}docker.io/mailserver/docker-mailserver${RESET}.This tag refers to the
latest release, see the tagging convention in the README under
${BLUE}https://github.com/docker-mailserver/docker-mailserver/blob/master/README.md${RESET}
You will be able to see detailed information about the script you're invoking and their
arguments by appending ${WHITE}help${RESET} after your command. Currently, this does not work with all scripts.
${RED}[${ORANGE}SUB${RED}]${ORANGE}COMMANDS${RESET}
${LBLUE}COMMAND${RESET} email ${RED}:=${RESET}
${0} email ${CYAN}add${RESET} <EMAIL ADDRESS> [<PASSWORD>]
${0} email ${CYAN}update${RESET} <EMAIL ADDRESS> [<PASSWORD>]
${0} email ${CYAN}del${RESET} [ OPTIONS${RED}...${RESET} ] <EMAIL ADDRESS> [ <EMAIL ADDRESS>${RED}...${RESET} ]
${0} email ${CYAN}restrict${RESET} <add${RED}|${RESET}del${RED}|${RESET}list> <send${RED}|${RESET}receive> [<EMAIL ADDRESS>]
${0} email ${CYAN}list${RESET}
${LBLUE}COMMAND${RESET} alias ${RED}:=${RESET}
${0} alias ${CYAN}add${RESET} <EMAIL ADDRESS> <RECIPIENT>
${0} alias ${CYAN}del${RESET} <EMAIL ADDRESS> <RECIPIENT>
${0} alias ${CYAN}list${RESET}
${LBLUE}COMMAND${RESET} quota ${RED}:=${RESET}
${0} quota ${CYAN}set${RESET} <EMAIL ADDRESS> [<QUOTA>]
${0} quota ${CYAN}del${RESET} <EMAIL ADDRESS>
${LBLUE}COMMAND${RESET} config ${RED}:=${RESET}
${0} config ${CYAN}dkim${RESET} [ ARGUMENTS${RED}...${RESET} ]
${LBLUE}COMMAND${RESET} relay ${RED}:=${RESET}
${0} relay ${CYAN}add-domain${RESET} <DOMAIN> <HOST> [<PORT>]
${0} relay ${CYAN}add-auth${RESET} <DOMAIN> <USERNAME> [<PASSWORD>]
${0} relay ${CYAN}exclude-domain${RESET} <DOMAIN>
${LBLUE}COMMAND${RESET} debug ${RED}:=${RESET}
${0} debug ${CYAN}fetchmail${RESET}
${0} debug ${CYAN}fail2ban${RESET} [unban <IP>]
${0} debug ${CYAN}show-mail-logs${RESET}
${0} debug ${CYAN}inspect${RESET}
${0} debug ${CYAN}login${RESET} <COMMANDS>
${ORANGE}EXAMPLES${RESET}
${WHITE}./setup.sh email add test@domain.tld${RESET}
Add the email account ${WHITE}test@domain.tld${RESET}. You will be prompted
to input a password afterwards since no password was supplied.
${WHITE}./setup.sh config dkim keysize 2048 domain 'whoami.com,whoareyou.org'${RESET}
Creates keys of length 2048 but in an LDAP setup where domains are not known to
Postfix by default, so you need to provide them yourself in a comma-separated list.
${WHITE}./setup.sh config dkim help${RESET}
This will provide you with a detailed explanation on how to use the ${WHITE}
config dkim${RESET} command, showing what arguments can be passed and what they do.
"
}
function _invalid_command
{
echo "The command '${*}' is invalid.
Use \`./setup.sh help\` to get an overview of all commands." >&2
exit 2
}
function _main
{
case ${1:-} in
email )
case ${2:-} in
add ) shift 2 ; addmailuser "${@}" ;;
update ) shift 2 ; updatemailuser "${@}" ;;
del ) shift 2 ; delmailuser "${@}" ;;
restrict ) shift 2 ; restrict-access "${@}" ;;
list ) listmailuser ;;
* ) _invalid_command "${1}" "${2}" ;;
esac
;;
alias )
case ${2:-} in
add ) shift 2 ; addalias "${1}" "${2}" ;;
del ) shift 2 ; delalias "${1}" "${2}" ;;
list ) shift 2 ; listalias ;;
* ) _invalid_command "${1}" "${2}" ;;
esac
;;
quota )
case ${2:-} in
set ) shift 2 ; setquota "${@}" ;;
del ) shift 2 ; delquota "${@}" ;;
* ) _invalid_command "${1}" "${2}" ;;
esac
;;
config )
case ${2:-} in
dkim ) shift 2 ; open-dkim "${@}" ;;
* ) _invalid_command "${1}" "${2}" ;;
esac
;;
relay )
case ${2:-} in
add-domain ) shift 2 ; addrelayhost "${@}" ;;
add-auth ) shift 2 ; addsaslpassword "${@}" ;;
exclude-domain ) shift 2 ; excluderelaydomain "${@}" ;;
* ) _invalid_command "${1}" "${2}" ;;
esac
;;
debug )
case ${2:-} in
fetchmail ) debug-fetchmail ;;
fail2ban ) shift 2 ; fail2ban "${@}" ;;
show-mail-logs ) cat /var/log/mail/mail.log ;;
login )
shift 2
if [[ -z ${1:-} ]]
then
/bin/bash
else
/bin/bash -c "${@}"
fi
;;
* ) _invalid_command "${1}" "${2}" ;;
esac
;;
help ) _usage ;;
* ) _invalid_command "${*}" ;;
esac
}
_main "${@}"