Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 04bc748816 | |||
| a26bb36f17 | |||
| bbbdf38dcc | |||
| 43f1bb0021 | |||
| b371e18ab0 | |||
| fb8091ecce | |||
| 25c6b407a6 |
@@ -0,0 +1,75 @@
|
||||
# Common settings that generally should always be used with your language specific settings
|
||||
|
||||
# Auto detect text files and perform LF normalization
|
||||
# https://www.davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/
|
||||
* text=auto
|
||||
|
||||
#
|
||||
# The above will handle all files NOT found below
|
||||
#
|
||||
|
||||
# Documents
|
||||
*.bibtex text diff=bibtex
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
*.md text
|
||||
*.tex text diff=tex
|
||||
*.adoc text
|
||||
*.textile text
|
||||
*.mustache text
|
||||
*.csv text
|
||||
*.tab text
|
||||
*.tsv text
|
||||
*.txt text
|
||||
*.sql text
|
||||
|
||||
# Graphics
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.ico binary
|
||||
# SVG treated as an asset (binary) by default.
|
||||
*.svg text
|
||||
# If you want to treat it as binary,
|
||||
# use the following line instead.
|
||||
# *.svg binary
|
||||
*.eps binary
|
||||
|
||||
# Scripts
|
||||
*.bash text eol=lf
|
||||
*.sh text eol=lf
|
||||
# These are explicitly windows files and should use crlf
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
|
||||
# Serialisation
|
||||
*.json text
|
||||
*.toml text
|
||||
*.xml text
|
||||
*.yaml text
|
||||
*.yml text
|
||||
|
||||
# Archives
|
||||
*.7z binary
|
||||
*.gz binary
|
||||
*.tar binary
|
||||
*.zip binary
|
||||
|
||||
#
|
||||
# Exclude files from exporting
|
||||
#
|
||||
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
+6
-1
@@ -1,5 +1,10 @@
|
||||
# ignore all vscode config files
|
||||
.vscode/
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
!.vscode/numbered-bookmarks.json
|
||||
|
||||
# ignore all generated logfiles
|
||||
*.log
|
||||
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"bookmarks": []
|
||||
}
|
||||
Regular → Executable
+46
-39
@@ -33,10 +33,15 @@ function scriptHelp {
|
||||
echo -e "\tMailcow to operational status."
|
||||
echo -e "\nThe readme file included in this script's git contains detailed"
|
||||
echo -e "usage information. The following is a brief summary:\n"
|
||||
echo -e "${bold}***This script scans for your mailcow configuration file"
|
||||
echo -e "either with the default name or with your provided filename. If"
|
||||
echo -e "multiple files with this name are on your system, the script"
|
||||
echo -e "WILL get confused and exit with errors***${normal}${default}"
|
||||
echo -e "${bold}***You MUST provide the full path to your mailcow"
|
||||
echo -e "configuration file using the '-m' parameter***${normal}${default}"
|
||||
echo -e "${bold}${note}\nMandatory parameters:${normal}${default}"
|
||||
echo -e "${lit}\n-m, File name of the Mailcow build configuration file${default}"
|
||||
echo -e "FULL PATH to your Mailcow master build configuration file containing"
|
||||
echo -e "all variables and configuration info unique to your Mailcow setup."
|
||||
echo -e "The path specified here is also used for all docker-related"
|
||||
echo -e "operations in this script."
|
||||
echo -e "${info}Default: <none>${default}"
|
||||
echo -e "${bold}${note}\nOptional parameters:${normal}${default}"
|
||||
echo -e "${lit}\n-1, Timeout for containers to STOP before error${default}"
|
||||
echo -e "The number of seconds to wait for a docker container to STOP"
|
||||
@@ -63,20 +68,12 @@ function scriptHelp {
|
||||
echo -e "${lit}\n-d, File name of the docker-compose configuration file${default}"
|
||||
echo -e "Name of the docker-compose configuration file that Mailcow uses"
|
||||
echo -e "to build/start/stop all containers. This will only be searched"
|
||||
echo -e "for in the path found to contain your mailcow configuration file."
|
||||
echo -e "for in the path provided for your mailcow configuration file."
|
||||
echo -e "${info}Default: docker-compose.yml${default}"
|
||||
echo -e "${lit}\n-l, Location to save log file${default}"
|
||||
echo -e "This script writes a detailed log file of all activities. It is"
|
||||
echo -e "structured in an way easy for log parsers (like Logwatch) to read."
|
||||
echo -e "${info}Default: ScriptPath/ScriptName.log${default}"
|
||||
echo -e "${lit}\n-m, File name of the Mailcow build configuration file${default}"
|
||||
echo -e "Name of the Mailcow master build configuration file that has all"
|
||||
echo -e "variables and configuration info unique to your Mailcow setup."
|
||||
echo -e "This script will search for any file matching what you specify"
|
||||
echo -e "so please ensure you don't have multiple files laying around with"
|
||||
echo -e "the same name! The path where this file is found is used for all"
|
||||
echo -e "docker-based operations in this script."
|
||||
echo -e "${info}Default: mailcow.conf${default}"
|
||||
echo -e "${lit}\n-v, Verbose output from borgbackup${default}"
|
||||
echo -e "By default, this script will only log summary data from borg."
|
||||
echo -e "If you need/want more detailed information, the verbose setting"
|
||||
@@ -228,26 +225,25 @@ function cleanup {
|
||||
|
||||
### operate docker containers
|
||||
function operateDocker {
|
||||
# determine action to take
|
||||
if [ "$1" = "stop" ]; then
|
||||
containerName="$(docker ps -a --format '{{ .Names }}' --filter name=${COMPOSE_PROJECT_NAME}_${2}-mailcow_1)"
|
||||
|
||||
# determine action to take
|
||||
if [ "$1" = "stop" ]; then
|
||||
echo -e "${op}[$(stamp)] Stopping ${2}-mailcow container...${normal}" \
|
||||
>> "$logFile"
|
||||
docker-compose stop --timeout ${dockerStopTimeout} ${2}-mailcow \
|
||||
2>> "$logFile"
|
||||
# verify container stopped (should return true)
|
||||
dockerResultState=$(docker inspect -f '{{ .State.Running }}' \
|
||||
${COMPOSE_PROJECT_NAME}_${2}-mailcow_1)
|
||||
dockerResultState="$(docker inspect -f '{{ .State.Running }}' $containerName)"
|
||||
# verify clean stop (exit code 0)
|
||||
dockerResultExit=$(docker inspect -f '{{ .State.ExitCode }}' \
|
||||
${COMPOSE_PROJECT_NAME}_${2}-mailcow_1)
|
||||
elif [ "$1" = "start" ]; then
|
||||
dockerResultExit="$(docker inspect -f '{{ .State.ExitCode }}' $containerName)"
|
||||
elif [ "$1" = "start" ]; then
|
||||
echo -e "${op}[$(stamp)] Starting ${2}-mailcow container...${normal}" \
|
||||
>> "$logFile"
|
||||
docker-compose start ${2}-mailcow 2>> "$logFile"
|
||||
# verify
|
||||
dockerResultState=$(docker inspect -f '{{ .State.Running }}' \
|
||||
${COMPOSE_PROJECT_NAME}_${2}-mailcow_1)
|
||||
fi
|
||||
dockerResultState="$(docker inspect -f '{{ .State.Running }}' $containerName)"
|
||||
fi
|
||||
}
|
||||
|
||||
### End of Functions ###
|
||||
@@ -261,9 +257,6 @@ scriptPath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
scriptName="$( basename ${0} )"
|
||||
logFile="$scriptPath/${scriptName%.*}.log"
|
||||
|
||||
# Set default mailcow configuration filename
|
||||
mailcowConfigFile=mailcow.conf
|
||||
|
||||
# Set default docker-compose filename
|
||||
dockerComposeFile=docker-compose.yml
|
||||
|
||||
@@ -384,8 +377,8 @@ while getopts ':l:v5:w:b:m:d:1:2:' PARAMS; do
|
||||
borgDetails="${OPTARG%/}"
|
||||
;;
|
||||
m)
|
||||
# name of mailcow configuration file
|
||||
mailcowConfigFile="${OPTARG}"
|
||||
# full path to mailcow.conf configuration file
|
||||
mailcowConfigFilePath="${OPTARG%/}"
|
||||
;;
|
||||
d)
|
||||
# name of docker-compose configuration file
|
||||
@@ -415,20 +408,33 @@ if [ $(id -u) -ne 0 ]; then
|
||||
exit 3
|
||||
fi
|
||||
|
||||
## Find mailcow configuration file so additional variables can be read
|
||||
mailcowConfigFilePath=$( find / -mount -name "$mailcowConfigFile" -print )
|
||||
## verify mailcow.conf location provided
|
||||
if [ -z "$mailcowConfigFilePath" ]; then
|
||||
echo -e "\n${err}Could not locate the specified mailcow configuration" \
|
||||
"file: ${lit}${mailcowConfigFile}${normal}"
|
||||
echo -e "\n${err}You MUST provide the full path to your mailcow.conf" \
|
||||
"configuration file. Exiting.${normal}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## Find docker-compose file using mailcow configuration file path as a reference
|
||||
mailcowPath="${mailcowConfigFilePath%/$mailcowConfigFile*}"
|
||||
dockerComposeFilePath="$mailcowPath/$dockerComposeFile"
|
||||
checkExist ff "$dockerComposeFilePath"
|
||||
checkResult="$?"
|
||||
if [ "$checkResult" = 1 ]; then
|
||||
## verify mailcow.conf and extract path
|
||||
if checkExist ff "$mailcowConfigFilePath"; then
|
||||
# extract directory name
|
||||
case $mailcowConfigFilePath in
|
||||
*/*)
|
||||
mailcowPath=${mailcowConfigFilePath%/*}
|
||||
;;
|
||||
*)
|
||||
mailcowPath="."
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo -e "\n${err}Could not locate the specified mailcow configuration" \
|
||||
"file: ${lit}${mailcowConfigFilePath}${normal}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# verify docker-compose.yml exists at location of mailcow.conf (standard setup)
|
||||
dockerComposeFilePath="${mailcowPath}/${dockerComposeFile}"
|
||||
if ! checkExist ff "$dockerComposeFilePath"; then
|
||||
echo -e "\n${err}Could not locate docker-compose configuration file:" \
|
||||
"${lit}${dockerComposeFilePath}${normal}"
|
||||
exit 1
|
||||
@@ -453,8 +459,9 @@ echo -e "${info}[$(stamp)] -- [INFO] using ${lit}${mailcowConfigFilePath}" \
|
||||
echo -e "${info}[$(stamp)] -- [INFO] using ${lit}${dockerComposeFilePath}" \
|
||||
>> "$logFile"
|
||||
|
||||
|
||||
### Import additional variables from mailcow configuration file
|
||||
source "${mailcowConfigFilePath}"
|
||||
source "$mailcowConfigFilePath"
|
||||
|
||||
### Export PATH so this script can access all docker and docker-compose commands
|
||||
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
|
||||
Reference in New Issue
Block a user