439 lines
11 KiB
Makefile
439 lines
11 KiB
Makefile
# Makefile
|
|
#
|
|
# demo
|
|
#
|
|
|
|
-include *.mk .env .init.env
|
|
|
|
SRV_LIST ?= auth app db mta
|
|
|
|
AD_DOM ?= $(call ad_sub_dot, $(AD_BASE))
|
|
AD_DC ?= $(call ad_cut_dot, 1, 1, $(AD_DOM))
|
|
|
|
SSL_O = $(MAIL_DOMAIN)
|
|
SSL_MAIL = auto
|
|
SSL_PASS = $(AD_USR_PW)
|
|
#SSL_TRST = $(SSL_SMIME)
|
|
|
|
NET_NAME ?= $(COMPOSE_PROJECT_NAME)_backend
|
|
CURL_OPT ?= -s -v
|
|
TSSL_CMD ?= docker run -i --rm --network $(NET_NAME) drwetter/testssl.sh
|
|
CURL_CMD ?= curl
|
|
webb_cmd ?= firefox $(1) &
|
|
APP_NAME = app
|
|
AUT_NAME = auth
|
|
AUW_NAME = auth-web
|
|
DB_NAME = db
|
|
DBW_NAME = db-web
|
|
MTA_NAME = mta
|
|
APP_FQDN ?= $(call dkr_srv_ip,$(APP_NAME))
|
|
AUT_FQDN ?= $(call dkr_srv_ip,$(AUT_NAME))
|
|
AUW_FQDN ?= $(call dkr_cnt_ip,$(AUW_NAME))
|
|
DB_FQDN ?= $(call dkr_srv_ip,$(DB_NAME))
|
|
DBW_FQDN ?= $(call dkr_cnt_ip,$(DBW_NAME))
|
|
MTA_FQDN ?= $(call dkr_srv_ip,$(MTA_NAME))
|
|
|
|
MAIL_FROM ?= test@my-domain.biz
|
|
|
|
variables:
|
|
make -pn | grep -A1 "^# makefile"| grep -v "^#\|^--" | sort | uniq
|
|
|
|
test: all-test_quiet mta-test_smtp
|
|
|
|
init: up auth-init db-init app-restart mta-init app-init
|
|
|
|
ps:
|
|
docker-compose ps
|
|
|
|
up:
|
|
docker-compose up -d
|
|
|
|
down:
|
|
docker-compose down
|
|
|
|
destroy: auth-web-down db-web-down all-destroy_smime
|
|
docker-compose down -v
|
|
|
|
config:
|
|
docker-compose config
|
|
|
|
logs:
|
|
docker-compose logs --tail 10
|
|
|
|
images:
|
|
docker-compose images
|
|
|
|
$(addsuffix -up,$(SRV_LIST)):
|
|
docker-compose up -d $(patsubst %-up,%,$@)
|
|
|
|
$(addsuffix -down,$(SRV_LIST)):
|
|
docker-compose rm -sf $(patsubst %-down,%,$@)
|
|
|
|
$(addsuffix -restart,$(SRV_LIST)):
|
|
docker-compose restart $(patsubst %-restart,%,$@)
|
|
|
|
$(addsuffix -renew,$(SRV_LIST)):
|
|
docker-compose rm -s $(patsubst %-renew,%,$@)
|
|
docker-compose up -d $(patsubst %-renew,%,$@)
|
|
|
|
$(addsuffix -top,$(SRV_LIST)):
|
|
docker-compose top $(patsubst %-top,%,$@)
|
|
|
|
$(addsuffix -logs,$(SRV_LIST)):
|
|
docker-compose logs $(patsubst %-logs,%,$@)
|
|
|
|
$(addsuffix -pull,$(SRV_LIST)):
|
|
docker-compose pull $(patsubst %-pull,%,$@)
|
|
|
|
$(addsuffix -sh,$(SRV_LIST)):
|
|
docker-compose exec $(patsubst %-sh,%,$@) sh -c 'exec $$(getent passwd root | sed "s/.*://g")'
|
|
|
|
$(addsuffix -env,$(SRV_LIST)):
|
|
docker-compose exec $(patsubst %-env,%,$@) env
|
|
|
|
$(addsuffix -sv,$(SRV_LIST)):
|
|
docker-compose exec $(patsubst %-sv,%,$@) sh -c 'sv status $$SVDIR/*'
|
|
|
|
$(addsuffix -diff,$(SRV_LIST)):
|
|
docker container diff $(COMPOSE_PROJECT_NAME)_$(patsubst %-diff,%,$@)_1
|
|
|
|
wait_%:
|
|
sleep $*
|
|
|
|
web: app-web
|
|
|
|
auth-init: wait_3 auth-mod_conf auth-add_schema auth-add_data
|
|
|
|
export define LDIF_MOD_CONF
|
|
dn: olcDatabase={-1}frontend,cn=config
|
|
changetype: modify
|
|
add: olcPasswordHash
|
|
olcPasswordHash: {CRYPT}
|
|
|
|
dn: cn=config
|
|
changetype: modify
|
|
add: olcPasswordCryptSaltFormat
|
|
olcPasswordCryptSaltFormat: $$6$$%.16s
|
|
|
|
dn: olcDatabase={1}mdb,cn=config
|
|
changetype: modify
|
|
add: olcDbIndex
|
|
olcDbIndex: cn,ou,uid,mail eq
|
|
endef
|
|
|
|
export define LDIF_ADD_DATA
|
|
dn: $(AD_BASE)
|
|
objectClass: organization
|
|
objectClass: dcObject
|
|
dc: $(AD_DC)
|
|
o: $(AD_DOM)
|
|
|
|
dn: ou=$(AD_USR_OU),$(AD_BASE)
|
|
ou: $(AD_USR_OU)
|
|
objectClass: organizationalUnit
|
|
|
|
dn: ou=$(AD_GRP_OU),$(AD_BASE)
|
|
ou: $(AD_GRP_OU)
|
|
objectClass: organizationalUnit
|
|
|
|
dn: cn=$(AD_GRP_CN),ou=$(AD_GRP_OU),$(AD_BASE)
|
|
cn: $(AD_GRP_CN)
|
|
objectClass: groupOfNames
|
|
objectClass: kopano-group
|
|
member: uid=$(AD_ADM_CN),ou=$(AD_USR_OU),$(AD_BASE)
|
|
member: uid=$(AD_USR_CN),ou=$(AD_USR_OU),$(AD_BASE)
|
|
mail: $(AD_GRP_CN)@$(MAIL_DOMAIN)
|
|
|
|
dn: uid=$(AD_ADM_CN),ou=$(AD_USR_OU),$(AD_BASE)
|
|
changetype: add
|
|
cn: $(AD_ADM_CN)
|
|
objectClass: inetOrgPerson
|
|
objectClass: kopano-user
|
|
sn: $(AD_ADM_CN)
|
|
uid: $(AD_ADM_CN)
|
|
mail: $(AD_ADM_CN)@$(MAIL_DOMAIN)
|
|
userPassword: $(AD_ADM_PW)
|
|
telephoneNumber: $(AD_ADM_TEL)
|
|
title: $(AD_ADM_TIT)
|
|
kopanoAccount: 1
|
|
kopanoAdmin: 1
|
|
kopanoEnabledFeatures: imap
|
|
kopanoEnabledFeatures: pop3
|
|
|
|
dn: uid=$(AD_USR_CN),ou=$(AD_USR_OU),$(AD_BASE)
|
|
changetype: add
|
|
cn: $(AD_USR_CN)
|
|
objectClass: inetOrgPerson
|
|
objectClass: kopano-user
|
|
sn: $(AD_USR_CN)
|
|
uid: $(AD_USR_CN)
|
|
mail: $(AD_USR_CN)@$(MAIL_DOMAIN)
|
|
userPassword: $(AD_USR_PW)
|
|
telephoneNumber: $(AD_USR_TEL)
|
|
title: $(AD_USR_TIT)
|
|
kopanoAccount: 1
|
|
kopanoAliases: $(AD_USR_AS)@$(MAIL_DOMAIN)
|
|
kopanoEnabledFeatures: imap
|
|
kopanoEnabledFeatures: pop3
|
|
|
|
dn: uid=$(AD_SHR_CN),ou=$(AD_USR_OU),$(AD_BASE)
|
|
cn: $(AD_SHR_CN)
|
|
objectClass: inetOrgPerson
|
|
objectClass: kopano-user
|
|
sn: $(AD_SHR_CN)
|
|
uid: $(AD_SHR_CN)
|
|
mail: $(AD_SHR_CN)@$(MAIL_DOMAIN)
|
|
kopanoAccount: 1
|
|
kopanoSharedStoreOnly: 1
|
|
|
|
dn: uid=$(AD_PUB_CN),ou=$(AD_USR_OU),$(AD_BASE)
|
|
cn: $(AD_PUB_CN)
|
|
objectClass: inetOrgPerson
|
|
objectClass: kopano-user
|
|
sn: $(AD_PUB_CN)
|
|
uid: $(AD_PUB_CN)
|
|
mail: $(AD_PUB_CN)@$(MAIL_DOMAIN)
|
|
kopanoAccount: 1
|
|
kopanoHidden: 1
|
|
kopanoSharedStoreOnly: 1
|
|
kopanoResourceType: publicFolder:Public Stores/public
|
|
endef
|
|
|
|
define smtp_mail
|
|
@printf "From: <$(2)>\nTo: <$(3)>\nDate: $$(date -R)\nSubject: $(4)\
|
|
\n\nGreat news! You can receive email.\n" | tee /dev/tty \
|
|
| $(CURL_CMD) $(1) -T - --mail-from $(2) --mail-rcpt $(3) $(CURL_OPT)
|
|
endef
|
|
|
|
define lmtp_mail
|
|
printf "LHLO mx\nMAIL FROM: <$(2)>\nRCPT TO: <$(3)>\nDATA\
|
|
\nFrom: <$(2)>\nTo: <$(3)>\nDate: $$(date -R)\nSubject: $(4)\
|
|
\n\nGreat news! You can receive email.\n.\nQUIT\n" | tee /dev/tty \
|
|
| $(CURL_CMD) $(1) -T - $(CURL_OPT)
|
|
endef
|
|
|
|
export define MAKE_UTILS_CONTAINER
|
|
CURL_CMD ?= docker run -i --rm --network $(NET_NAME) curlimages/curl
|
|
webb_cmd ?= docker run -d --rm --network $(NET_NAME) \
|
|
-e DISPLAY=$$$$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix \
|
|
-v /etc/localtime:/etc/localtime:ro -v $$$$(pwd)/ssl:/ssl \
|
|
kennethkl/firefox $$(1)
|
|
APP_FQDN ?= $(APP_NAME)
|
|
AUT_FQDN ?= $(AUT_NAME)
|
|
AUW_FQDN ?= $(AUW_NAME)
|
|
DB_FQDN ?= $(DB_NAME)
|
|
DBW_FQDN ?= $(DBW_NAME)
|
|
MTA_FQDN ?= $(MTA_NAME)
|
|
endef
|
|
|
|
utils-container:
|
|
echo "$$MAKE_UTILS_CONTAINER" > utils-container.mk
|
|
|
|
utils-default:
|
|
rm -f utils-container.mk
|
|
|
|
auth-mod_conf:
|
|
echo "$$LDIF_MOD_CONF" | docker-compose exec -T auth ldapmodify -Q
|
|
|
|
auth-add_data:
|
|
echo "$$LDIF_ADD_DATA" | docker-compose exec -T auth ldapadd -Q
|
|
|
|
auth-add_schema:
|
|
docker-compose exec app zcat /usr/share/doc/kopano/kopano.ldif.gz \
|
|
| docker-compose exec -T auth ldapadd -Q
|
|
|
|
auth-show_conf:
|
|
docker-compose exec auth ldapsearch -QLLLb cn=config "(cn=config)"
|
|
docker-compose exec auth ldapsearch -QLLLb cn=config olcDatabase={-1}frontend
|
|
docker-compose exec auth ldapsearch -QLLLb cn=config olcDatabase={1}mdb
|
|
|
|
auth-show_data:
|
|
docker-compose exec auth ldapsearch -QLLL
|
|
|
|
auth-show_cat0:
|
|
docker-compose exec auth slapcat -n0
|
|
|
|
auth-show_cat1:
|
|
docker-compose exec auth slapcat -n1
|
|
|
|
auth-web: auth-web-up
|
|
sleep 2
|
|
$(call webb_cmd,http://$(AUW_FQDN))
|
|
|
|
auth-web-up:
|
|
docker run -d --name $(AUW_NAME) --network $(NET_NAME) \
|
|
-e PHPLDAPADMIN_LDAP_HOSTS=auth -e PHPLDAPADMIN_HTTPS=false \
|
|
osixia/phpldapadmin || true
|
|
|
|
auth-web-down:
|
|
docker rm -f $(AUW_NAME) || true
|
|
|
|
mta-init:
|
|
|
|
mta-bayes:
|
|
docker-compose exec mta sh -c 'rm -f bayesian.database.gz && wget http://artinvoice.hu/spams/bayesian.database.gz && gunzip bayesian.database.gz && sa-learn --restore bayesian.database && chown -R amavis: /var/amavis/.spamassassin && rm -rf bayesian.database'
|
|
|
|
mta-test_smtp:
|
|
$(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_USR_CN)@$(MAIL_DOMAIN),A SMTP test message.)
|
|
|
|
mta-test_regexp:
|
|
$(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_USR_CN)+info@$(MAIL_DOMAIN),A regexp SMTP test message.)
|
|
|
|
mta-test_smtps:
|
|
$(call smtp_mail,smtps://$(MTA_FQDN),$(MAIL_FROM),$(AD_USR_CN)@$(MAIL_DOMAIN),A secure SMTPS test message.) \
|
|
-k -u $(AD_USR_CN):$(AD_USR_PW)
|
|
|
|
mta-test_shared: all-test_quiet
|
|
$(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_SHR_CN)@$(MAIL_DOMAIN),A shared SMTP test message.)
|
|
|
|
mta-test_public: all-test_quiet
|
|
$(call smtp_mail,smtp://$(MTA_FQDN),$(MAIL_FROM),$(AD_PUB_CN)@$(MAIL_DOMAIN),A public SMTP test message.)
|
|
|
|
mta-razor:
|
|
docker-compose exec mta run amavis_register_razor
|
|
|
|
mta-apk_list:
|
|
docker-compose exec mta /bin/sh -c 'for pkg in $$(apk info 2>/dev/null); do printf "%9s %3s %s\n" $$(apk info -s $$pkg 2>/dev/null | sed -n "2{p;q}") $$pkg; done | sort | sort -k 2,2'
|
|
|
|
mta-quarantine_list:
|
|
docker-compose exec mta amavis-ls
|
|
|
|
mta-freshclam_nodns:
|
|
docker-compose exec mta freshclam --no-dns
|
|
|
|
mta-clamdtop:
|
|
docker-compose exec mta clamdtop
|
|
|
|
mta-tools:
|
|
docker-compose exec mta apk --no-cache --update add \
|
|
nano less lsof htop openldap-clients bind-tools iputils strace iproute2
|
|
|
|
mta-htop: mta-tools
|
|
docker-compose exec mta htop
|
|
|
|
mta-encrypt:
|
|
$(eval secret := $(shell whiptail --backtitle "doveadm pw" --title "encrypt password" --inputbox "password" 8 78 secret 3>&1 1>&2 2>&3))
|
|
docker-compose exec mta doveadm pw -p $(secret)
|
|
|
|
mta-show_doveconf:
|
|
docker-compose exec mta doveconf -n
|
|
|
|
mta-show_postconf:
|
|
docker-compose exec mta postconf -n
|
|
|
|
mta-show_mailq:
|
|
docker-compose exec mta mailq
|
|
|
|
mta-flush_mailq:
|
|
docker-compose exec mta postqueue -f
|
|
|
|
mta-test_auth:
|
|
docker-compose exec mta doveadm auth test $(AD_USR_CN) $(AD_USR_PW)
|
|
|
|
mta-test_imaps:
|
|
$(CURL_CMD) imaps://$(MTA_FQDN)//inbox -X "fetch 1 all" \
|
|
--ssl --anyauth -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
|
|
|
|
mta-man:
|
|
docker-compose exec mta apk --no-cache --update add man-db man-pages \
|
|
postfix-doc cyrus-sasl-doc dovecot-doc spamassassin-doc clamav-doc razor-doc
|
|
|
|
db-init:
|
|
|
|
db-test:
|
|
docker-compose exec db mysqlshow -u $(MYSQL_USER) $(MYSQL_DATABASE) -p$(MYSQL_PASSWORD)
|
|
|
|
db-web: db-web-up
|
|
sleep 2
|
|
$(call webb_cmd,http://$(DBW_FQDN))
|
|
|
|
db-web-up:
|
|
docker run -d --name $(DBW_NAME) --network $(NET_NAME) \
|
|
-e PMA_HOST=db phpmyadmin/phpmyadmin || true
|
|
|
|
db-web-down:
|
|
docker rm -f $(DBW_NAME) || true
|
|
|
|
app-init: app-public_store app-create_smime
|
|
|
|
app-tools:
|
|
docker-compose exec app apt-get update
|
|
docker-compose exec app apt-get install --yes \
|
|
less nano ldap-utils htop net-tools lsof iputils-ping dnsutils strace
|
|
|
|
app-htop: app-tools
|
|
docker-compose exec app htop
|
|
|
|
app-test_smtp: mta-test_smtp
|
|
|
|
app-test_lmtp:
|
|
$(call lmtp_mail,telnet://$(APP_FQDN):2003,$(MAIL_FROM),$(AD_USR_CN)@$(MAIL_DOMAIN),A LMTP test message.)
|
|
|
|
app-test_all: all-test_muted $(addprefix app-test_,imap pop3 ical imaps pop3s icals)
|
|
|
|
app-test_imap:
|
|
$(CURL_CMD) imap://$(APP_FQDN) -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
|
|
|
|
app-test_imaps:
|
|
$(CURL_CMD) imaps://$(APP_FQDN) -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
|
|
|
|
app-test_pop3:
|
|
$(CURL_CMD) pop3://$(APP_FQDN) -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
|
|
|
|
app-test_pop3s:
|
|
$(CURL_CMD) pop3s://$(APP_FQDN) -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
|
|
|
|
app-test_ical:
|
|
$(CURL_CMD) http://$(APP_FQDN):8080 -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
|
|
|
|
app-test_icals:
|
|
$(CURL_CMD) https://$(APP_FQDN):8443 -k -u $(AD_USR_CN):$(AD_USR_PW) $(CURL_OPT)
|
|
|
|
app-test_tls:
|
|
$(TSSL_CMD) $(APP_FQDN):993 || true
|
|
|
|
app-web:
|
|
$(call webb_cmd,http://$(APP_FQDN))
|
|
|
|
app-test_oof1:
|
|
docker-compose exec app kopano-oof -u $(AD_USR_CN) -m 1 -t "Dunno when I return"
|
|
|
|
app-test_oof0:
|
|
docker-compose exec app kopano-oof -u $(AD_USR_CN) -m 0
|
|
|
|
app-show_user1:
|
|
docker-compose exec app kopano-admin --details $(AD_USR_CN)
|
|
|
|
app-show_user2: app-tools
|
|
docker-compose exec app ldapsearch -H ldap://auth:389 -xLLL -b $(AD_BASE) '*'
|
|
|
|
app-show_sync:
|
|
docker-compose exec app z-push-top
|
|
|
|
app-create_store:
|
|
docker-compose exec app kopano-admin --create-store $(AD_USR_CN)
|
|
|
|
app-public_store:
|
|
docker-compose exec app kopano-storeadm -P
|
|
|
|
#app-add_user:
|
|
# docker-compose exec app kopano-admin -c $(AD_USR_CN) -p $(AD_USR_PW) \
|
|
# -e $(AD_USR_CN)@$(MAIL_DOMAIN) -f $(AD_USR_CN) -a 1
|
|
|
|
$(addprefix app-parms_,archiver dagent gateway ical ldap search server spamd spooler):
|
|
docker-compose exec app run list_parms $(patsubst app-parms_%,%,$@)
|
|
|
|
app-create_smime: all-create_smime
|
|
docker cp ssl/ca.crt $(call dkr_srv_cnt,app):/usr/local/share/ca-certificates/$(MAIL_DOMAIN)_CA.crt
|
|
docker-compose exec app update-ca-certificates
|
|
|
|
all-test_quiet:
|
|
$(eval CURL_OPT := -s -S )
|
|
|
|
all-test_muted:
|
|
$(eval CURL_OPT := -s -S >/dev/null || true)
|
|
|
|
all-create_smime: ssl/$(AD_USR_CN).p12
|
|
|
|
all-destroy_smime: ssl-destroy
|