Compare commits
No commits in common. "master" and "f26" have entirely different histories.
29 changed files with 5193 additions and 1 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
.idea
|
||||||
|
*.py[oc]
|
||||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
37
Dockerfile
Normal file
37
Dockerfile
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
FROM baseruntime/baseruntime:latest
|
||||||
|
|
||||||
|
ENV POSTFIX_SMTP_PORT=10025 NAME=postfix ARCH=x86_64
|
||||||
|
LABEL MAINTAINER "Petr Hracek" <phracek@redhat.com>
|
||||||
|
LABEL summary="Postfix is a Mail Transport Agent (MTA)." \
|
||||||
|
name="$FGC/$NAME" \
|
||||||
|
version="0" \
|
||||||
|
release="1.$DISTTAG" \
|
||||||
|
architecture="$ARCH" \
|
||||||
|
com.redhat.component="$NAME" \
|
||||||
|
usage="docker run -it -e MYHOSTNAME=localhost -p 25:10025 -v $(pwd)/tmp/postfix:/var/spool/postfix -v $(pwd)/tmp/mail:/var/spool/mail postfix" \
|
||||||
|
help="Runs postfix, which listens on port 25. No dependencies. See Help File belowe for more detailes." \
|
||||||
|
description="Postfix is mail transfer agent that routes and delivers mail." \
|
||||||
|
io.k8s.description="Postfix is mail transfer agent that routes and delivers mail." \
|
||||||
|
io.k8s.diplay-name="Postfix 3.1" \
|
||||||
|
io.openshift.expose-services="10025:postfix" \
|
||||||
|
io.openshift.tags="postfix,mail,mta"
|
||||||
|
|
||||||
|
COPY repos/* /etc/yum.repos.d/
|
||||||
|
RUN microdnf --nodocs --enablerepo fedora install findutils && \
|
||||||
|
microdnf --nodocs --enablerepo postfix install postfix && \
|
||||||
|
microdnf -y clean all
|
||||||
|
|
||||||
|
ADD files /files
|
||||||
|
ADD README.md /
|
||||||
|
|
||||||
|
RUN /files/postfix_config.sh
|
||||||
|
|
||||||
|
EXPOSE 10025
|
||||||
|
|
||||||
|
# Postfix UID based from Fedora
|
||||||
|
# USER 89
|
||||||
|
|
||||||
|
VOLUME ['/var/spool/postfix']
|
||||||
|
VOLUME ['/var/spool/mail']
|
||||||
|
|
||||||
|
CMD ["/files/start.sh"]
|
||||||
17
Makefile
Normal file
17
Makefile
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
.PHONY: build run default
|
||||||
|
|
||||||
|
IMAGE_NAME = postfix
|
||||||
|
MODULEMDURL=file://postfix.yaml
|
||||||
|
|
||||||
|
all: run
|
||||||
|
default: run
|
||||||
|
|
||||||
|
build:
|
||||||
|
docker build --tag=$(IMAGE_NAME) .
|
||||||
|
|
||||||
|
run: build
|
||||||
|
docker run -p 25:10025 -e MYHOSTNAME=localhost $(IMAGE_NAME)
|
||||||
|
|
||||||
|
test: build
|
||||||
|
cd tests; MODULE=docker MODULEMD=$(MODULEMDURL) URL="docker=$(IMAGE_NAME)" make all
|
||||||
|
cd tests; MODULE=rpm MODULEMD=$(MODULEMDURL) URL="docker=$(IMAGE_NAME)" make all
|
||||||
149
README.md
Normal file
149
README.md
Normal file
|
|
@ -0,0 +1,149 @@
|
||||||
|
# postfix
|
||||||
|
|
||||||
|
[**Package DB** (owner)](https://admin.fedoraproject.org/pkgdb/package/modules/postfix/) |
|
||||||
|
[**F26 modulemd** (source)](http://pkgs.fedoraproject.org/cgit/modules/postfix.git/tree/postfix.yaml?h=f26) |
|
||||||
|
[**PDC** (result)](https://pdc.fedoraproject.org/rest_api/v1/unreleasedvariants/?active=True&variant_name=postfix)
|
||||||
|
|
||||||
|
Postfix is a Mail Transport Agent (MTA).
|
||||||
|
|
||||||
|
## Current state
|
||||||
|
|
||||||
|
| State | Description |
|
||||||
|
|-------|-------------|
|
||||||
|
| ✓ YES | **Build passes** in the infra (all build deps are ok) |
|
||||||
|
| ✓ YES | **Installs** on the Base Runtime (all runtime deps are ok) |
|
||||||
|
| ✓ YES | **No bootstrap** - uses only proper modules |
|
||||||
|
| ✓ YES | General **tests are in dist-git** |
|
||||||
|
| ✓ YES | General **tests pass** |
|
||||||
|
| ✗ NO | Meets the **Fedora Module Packaging Guidelines** |
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
See [**README**](https://github.com/container-images/postfix) on github for more details.
|
||||||
|
|
||||||
|
See [**hub.docker**](https://hub.docker.com/r/modularitycontainers/postfix/) for Dockerimage.
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
- Dockerfile.DOVECOT - build container image with dovecot w/o postfix.
|
||||||
|
- Dockerfile.POSTFIX - build container image with postfix w/o dovecot.
|
||||||
|
- Dockerfile.IMAP - build container image with dovecot and postfix installed. Full IMAP server.
|
||||||
|
- Dockerfile.TLS - build container image with postfix TLS enabled w/o dovecot.
|
||||||
|
- imap-template.yml - Template for OpenShift to start IMAP server with two containers (postfix and dovecot)
|
||||||
|
|
||||||
|
|
||||||
|
## How to build the container on 25 port
|
||||||
|
|
||||||
|
```docker build --tag=postfix .```
|
||||||
|
|
||||||
|
|
||||||
|
## How to build the container with TLS enabled
|
||||||
|
|
||||||
|
```docker build -f Docker.TLS --tag=postfix . ```
|
||||||
|
|
||||||
|
## How to build the container with dovecot service
|
||||||
|
|
||||||
|
```docker build -f Docker.IMAP --tag=postfix .```
|
||||||
|
|
||||||
|
## How to use the container over standard 25 port
|
||||||
|
|
||||||
|
Command for running postfix docker container:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -it -e MYHOSTNAME=localhost \
|
||||||
|
-p 25:10025\
|
||||||
|
-v $(pwd)/tmp/postfix:/var/spool/postfix \
|
||||||
|
-v $(pwd)/tmp/mail:/var/spool/mail postfix
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to use the container over standard TLS
|
||||||
|
|
||||||
|
Dockerfile for TLS port is Dockerfile.TLS.
|
||||||
|
|
||||||
|
Command for running postfix docker container:
|
||||||
|
```
|
||||||
|
docker run -it -e DEBUG_MODE=yes -e MYHOSTNAME=localhost \
|
||||||
|
-p 25:10025 \
|
||||||
|
postfix
|
||||||
|
```
|
||||||
|
|
||||||
|
Environment variable DEBUG_MODE is used for debugging proposes
|
||||||
|
from Postfix and dovecot point of views.
|
||||||
|
|
||||||
|
## How to use the container with IMAP with TLS enabled (dovecot and Postfix)
|
||||||
|
|
||||||
|
Dockerfile which uses IMAP is Dockerfile.IMAP.
|
||||||
|
|
||||||
|
Command for running postfix docker container:
|
||||||
|
```
|
||||||
|
docker run -it -e MYHOSTNAME=localhost -e DEBUG_MODE \
|
||||||
|
-p 25:10025 -p 587:10587 -p 143:10143 \
|
||||||
|
postfix
|
||||||
|
```
|
||||||
|
|
||||||
|
Environment variable DEBUG_MODE is used for debugging proposes
|
||||||
|
from Postfix and dovecot point of views.
|
||||||
|
|
||||||
|
Docker container does NOT share user from HOST system. Therefore
|
||||||
|
I prefer to create users in container. This is not yet automated. Will be SOON.
|
||||||
|
|
||||||
|
Steps are:
|
||||||
|
|
||||||
|
```docker exec -n postfix /bin/bash```
|
||||||
|
```/file/create_user.sh <user_name>```
|
||||||
|
|
||||||
|
Now the user can be used for mail clients.
|
||||||
|
|
||||||
|
## How to test the postfix mail server
|
||||||
|
|
||||||
|
Commands for testing Postfix docker container:
|
||||||
|
|
||||||
|
```telnet localhost 25```
|
||||||
|
|
||||||
|
```HELO test.localhost```
|
||||||
|
|
||||||
|
```MAIL FROM:<yourname>@<domain.com>```
|
||||||
|
|
||||||
|
```RCPT TO:<demo@localhost>```
|
||||||
|
|
||||||
|
```DATA``` and type whatever you want
|
||||||
|
```
|
||||||
|
Subject: My testing docker container image
|
||||||
|
|
||||||
|
Hi, Testing message
|
||||||
|
regards
|
||||||
|
Docker
|
||||||
|
.
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to test the postfix mail server with TLS
|
||||||
|
|
||||||
|
Command for testing Postfix docker container with
|
||||||
|
enabled TLS is ```openssl```.
|
||||||
|
|
||||||
|
Telnet has not to be used because of all
|
||||||
|
communication is encrypted from the beginning.
|
||||||
|
|
||||||
|
```
|
||||||
|
openssl s_client -starttls smtp -crlf -connect localhost:25
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to test the postfix with dovecot service
|
||||||
|
|
||||||
|
Command for testing Postfix docker container with
|
||||||
|
dovecot is ```openssl```.
|
||||||
|
|
||||||
|
Telnet has not to be used because of all
|
||||||
|
communication is encrypted from the beginning.
|
||||||
|
|
||||||
|
Testing dovecot service with ```openssl```
|
||||||
|
|
||||||
|
```
|
||||||
|
openssl s_client -starttls imap -connect localhost:143
|
||||||
|
```
|
||||||
|
|
||||||
|
Testing postfix service with ```openssl```
|
||||||
|
|
||||||
|
```
|
||||||
|
openssl s_client -debug -starttls smtp -crlf -connect localhost:25
|
||||||
|
```
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
Obsolete
|
|
||||||
4287
files/ca-bundle.crt
Normal file
4287
files/ca-bundle.crt
Normal file
File diff suppressed because it is too large
Load diff
53
files/common.sh
Normal file
53
files/common.sh
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
SERVICES="/etc/services"
|
||||||
|
MASTER="/etc/postfix/master.cf"
|
||||||
|
|
||||||
|
function modify_master_cf(){
|
||||||
|
echo "Changing postfix $MASTER configuration file."
|
||||||
|
MASTER="/etc/postfix/master.cf"
|
||||||
|
grep 'docker_smtp' "$MASTER"
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
sed -i 's/^smtp\(\s*\)inet\(.*\)/docker_smtp\1inet\tn\ty\tn\t-\t-\tsmtpd -v/g' "$MASTER"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function modify_etc_services() {
|
||||||
|
SERVICES="/etc/services"
|
||||||
|
echo "Changing $SERVICES file."
|
||||||
|
grep -n '$POSTFIX_SMTP_PORT/tcp' "$SERVICES"
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
echo "Add docker_smtp port into $SERVICES."
|
||||||
|
echo "docker_smtp $POSTFIX_SMTP_PORT/tcp mail" >> "$SERVICES"
|
||||||
|
echo "docker_smtp $POSTFIX_SMTP_PORT/udp mail" >> "$SERVICES"
|
||||||
|
else
|
||||||
|
echo "docker_smtp port already exists in $SERVICES file."
|
||||||
|
fi
|
||||||
|
grep -n '$POSTFIX_IMAP_PORT/tcp' "$SERVICES"
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
echo "Add docker_imap port into $SERVICES."
|
||||||
|
echo "docker_imap $POSTFIX_IMAP_PORT/tcp imap2" >> "$SERVICES"
|
||||||
|
echo "docker_imap $POSTFIX_IMAP_PORT/udp imap2" >> "$SERVICES"
|
||||||
|
else
|
||||||
|
echo "docker_imap port already exists in $SERVICES file."
|
||||||
|
fi
|
||||||
|
grep -n '$POSTFIX_SUBM_PORT/tcp' "$SERVICES"
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
echo "Add docker_imap port into $SERVICES."
|
||||||
|
echo "docker_submission $POSTFIX_SUBM_PORT/tcp msa" >> "$SERVICES"
|
||||||
|
echo "docker_submission $POSTFIX_SUBM_PORT/udp msa" >> "$SERVICES"
|
||||||
|
else
|
||||||
|
echo "docker_submission port already exists in $SERVICES file."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
update_dovecot_conf() {
|
||||||
|
option=$1
|
||||||
|
value=$2
|
||||||
|
file_name="/etc/dovecot/dovecot.conf"
|
||||||
|
doveconf -n | grep "^$option"
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
echo "$option = $value" >> $file_name
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
10
files/create_user.sh
Executable file
10
files/create_user.sh
Executable file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
grep $1 /etc/passwd
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
useradd $1 && usermod -a -G mail $1 && passwd $1
|
||||||
|
echo "$1: postmaster" >> /etc/aliases
|
||||||
|
newaliases
|
||||||
|
postmap /etc/aliases
|
||||||
|
postfix reload
|
||||||
|
fi
|
||||||
48
files/dovecot_config.sh
Executable file
48
files/dovecot_config.sh
Executable file
|
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
DOVECOT_CONF="/etc/dovecot/dovecot.conf"
|
||||||
|
VIRTUAL="/var/mail"
|
||||||
|
|
||||||
|
function modify_main_cf() {
|
||||||
|
# Configuration changes needed in main.cf
|
||||||
|
echo "Changing postfix the /etc/postfix/main.cf configuration file."
|
||||||
|
postconf -e inet_interfaces=all
|
||||||
|
postconf -e smtpd_tls_auth_only=yes
|
||||||
|
postconf -e smtpd_tls_CAfile=/etc/postfix/ca-bundle.crt
|
||||||
|
postconf -e smtpd_tls_key_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_cert_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_loglevel=3
|
||||||
|
postconf -e smtpd_tls_received_header=yes
|
||||||
|
postconf -e smtpd_tls_session_cache_timeout=3600s
|
||||||
|
postconf -e smtpd_tls_security_level=may
|
||||||
|
postconf -e smtpd_sasl_type=dovecot
|
||||||
|
postconf -e smtpd_sasl_path=private/auth
|
||||||
|
postconf -e smtpd_sasl_auth_enable=yes
|
||||||
|
postconf -e broken_sasl_auth_clients=yes
|
||||||
|
postconf -e smtpd_sasl_security_options=noanonymous
|
||||||
|
postconf -e myorigin=${MYHOSTNAME}
|
||||||
|
postconf -e mydomain=${MYHOSTNAME}
|
||||||
|
postconf -e myhostname=mail.${MYHOSTNAME}
|
||||||
|
postconf -e mydestination=${MYHOSTNAME}
|
||||||
|
postconf -e debug_peer_level=3
|
||||||
|
postconf -e debug_peer_list=${MYHOSTNAME}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -f "/var/run/nologin" ]]; then
|
||||||
|
rm -f /var/run/nologin
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z ${MYHOSTNAME} ]]; then
|
||||||
|
MYHOSTNAME=localhost
|
||||||
|
fi
|
||||||
|
|
||||||
|
source /files/common.sh
|
||||||
|
|
||||||
|
mkdir -p /var/certs
|
||||||
|
chown root:root /var/certs
|
||||||
|
cp /files/*.{crt,pem} /etc/postfix/
|
||||||
|
|
||||||
|
|
||||||
|
modify_etc_services
|
||||||
|
modify_main_cf
|
||||||
|
modify_master_cf
|
||||||
15
files/dovecot_imap.conf
Normal file
15
files/dovecot_imap.conf
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
service imap-login {
|
||||||
|
process_min_avail = 16
|
||||||
|
|
||||||
|
inet_listener imap {
|
||||||
|
port = 10143
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
service auth {
|
||||||
|
unix_listener /var/spool/postfix/private/auth {
|
||||||
|
group = postfix
|
||||||
|
mode = 0660
|
||||||
|
user=postfix
|
||||||
|
}
|
||||||
|
}
|
||||||
96
files/imap_config.sh
Executable file
96
files/imap_config.sh
Executable file
|
|
@ -0,0 +1,96 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
DOVECOT_CONF="/etc/dovecot/dovecot.conf"
|
||||||
|
VIRTUAL="/var/mail"
|
||||||
|
|
||||||
|
function modify_main_cf() {
|
||||||
|
# Configuration changes needed in main.cf
|
||||||
|
echo "Changing postfix the /etc/postfix/main.cf configuration file."
|
||||||
|
postconf -e inet_interfaces=all
|
||||||
|
postconf -e smtpd_tls_auth_only=yes
|
||||||
|
postconf -e smtpd_tls_CAfile=/etc/postfix/ca-bundle.crt
|
||||||
|
postconf -e smtpd_tls_key_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_cert_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_loglevel=3
|
||||||
|
postconf -e smtpd_tls_received_header=yes
|
||||||
|
postconf -e smtpd_tls_session_cache_timeout=3600s
|
||||||
|
postconf -e smtpd_tls_security_level=may
|
||||||
|
postconf -e smtpd_sasl_type=dovecot
|
||||||
|
postconf -e smtpd_sasl_path=private/auth
|
||||||
|
postconf -e smtpd_sasl_auth_enable=yes
|
||||||
|
postconf -e broken_sasl_auth_clients=yes
|
||||||
|
postconf -e smtpd_sasl_security_options=noanonymous
|
||||||
|
postconf -e myorigin=${MYHOSTNAME}
|
||||||
|
postconf -e mydomain=${MYHOSTNAME}
|
||||||
|
postconf -e myhostname=mail.${MYHOSTNAME}
|
||||||
|
postconf -e mydestination=${MYHOSTNAME}
|
||||||
|
postconf -e debug_peer_level=3
|
||||||
|
postconf -e debug_peer_list=${MYHOSTNAME}
|
||||||
|
}
|
||||||
|
|
||||||
|
function modify_dovecot_conf() {
|
||||||
|
update_dovecot_conf "mail_location" "mbox:~/mail:INBOX=/var/mail/%u"
|
||||||
|
update_dovecot_conf "disable_plaintext_auth" "no"
|
||||||
|
update_dovecot_conf "auth_mechanisms" "plain login"
|
||||||
|
update_dovecot_conf "mail_privileged_group" "mail"
|
||||||
|
update_dovecot_conf "auth_debug" "yes"
|
||||||
|
update_dovecot_conf "auth_verbose" "yes"
|
||||||
|
update_dovecot_conf "mail_debug" "yes"
|
||||||
|
update_dovecot_conf "debug_log_path" "/var/dovecot/dovecot-debug.log"
|
||||||
|
update_dovecot_conf "info_log_path" "/var/dovecot/dovecot-info.log"
|
||||||
|
update_dovecot_conf "log_path" "/var/dovecot/dovecot.log"
|
||||||
|
update_dovecot_conf "protocols" "imap"
|
||||||
|
|
||||||
|
doveconf -n | grep "ssl"
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
echo "ssl = yes" >> /etc/dovecot/conf.d/10-ssl.conf
|
||||||
|
else
|
||||||
|
sed -i 's/^ssl\(\s*\)=\(\s*\).*/ssl\1=\2yes/g' /etc/dovecot/conf.d/10-ssl.conf
|
||||||
|
fi
|
||||||
|
doveconf -n | grep "service imap-login"
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
cat /files/dovecot_imap.conf >> /etc/dovecot/conf.d/10-master.conf
|
||||||
|
fi
|
||||||
|
echo "docker_submission inet n y n - - smtpd -v
|
||||||
|
-o syslog_name=postfix/submission
|
||||||
|
-o smtpd_tls_security_level=encrypt
|
||||||
|
-o smtpd_sasl_auth_enable=yes
|
||||||
|
-o smtpd_tls_wrappermode=no
|
||||||
|
-o smtpd_sasl_type=dovecot
|
||||||
|
-o smtpd_sasl_path=private/auth
|
||||||
|
-o smtpd_sasl_local_domain=localhost" >> /etc/postfix/master.cf
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -f "/var/run/nologin" ]]; then
|
||||||
|
rm -f /var/run/nologin
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOVECOT_PKI="/etc/pki/dovecot"
|
||||||
|
if [[ ! -f "$DOVECOT_PKI/private/dovecot.pem" ]]; then
|
||||||
|
SSLDIR=$DOVECOT_PKI OPENSSLCONFIG="$DOVECOT_PKI/dovecot-openssl.cnf" \
|
||||||
|
/usr/libexec/dovecot/mkcert.sh /dev/null 2>&1
|
||||||
|
fi
|
||||||
|
if [[ ! -f "/var/lib/dovecot/ssl-parametrs.dat" ]]; then
|
||||||
|
/usr/libexec/dovecot/ssl-params >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z ${MYHOSTNAME} ]]; then
|
||||||
|
MYHOSTNAME=localhost
|
||||||
|
fi
|
||||||
|
|
||||||
|
source /files/common.sh
|
||||||
|
|
||||||
|
mkdir -p /var/certs
|
||||||
|
chown root:root /var/certs
|
||||||
|
mkdir -p /var/dovecot
|
||||||
|
chown root:root /var/dovecot
|
||||||
|
cp /files/*.{crt,pem} /etc/postfix/
|
||||||
|
|
||||||
|
|
||||||
|
modify_etc_services
|
||||||
|
modify_main_cf
|
||||||
|
modify_master_cf
|
||||||
|
modify_dovecot_conf
|
||||||
|
|
||||||
|
dovecot -n
|
||||||
27
files/postfix_config.sh
Executable file
27
files/postfix_config.sh
Executable file
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
|
||||||
|
function modify_main_cf() {
|
||||||
|
# Configuration changes needed in main.cf
|
||||||
|
echo "Changing postfix configuration"
|
||||||
|
postconf -e inet_interfaces=all
|
||||||
|
postconf -e myorigin=/etc/mailname
|
||||||
|
postconf -e mynetworks='127.0.0.1/32 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8'
|
||||||
|
postconf -e smtpd_relay_restrictions='permit_mynetworks permit_sasl_authenticated defer_unauth_destination'
|
||||||
|
postconf -e mydomain=${MYHOSTNAME}
|
||||||
|
postconf -e myhostname=mail.${MYHOSTNAME}
|
||||||
|
postconf -e mydestination=${MYHOSTNAME}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -z ${MYHOSTNAME} ]]; then
|
||||||
|
MYHOSTNAME=localhost
|
||||||
|
fi
|
||||||
|
|
||||||
|
source /files/common.sh
|
||||||
|
|
||||||
|
modify_etc_services
|
||||||
|
modify_main_cf
|
||||||
|
modify_master_cf
|
||||||
|
|
||||||
48
files/postfix_config_imap.sh
Executable file
48
files/postfix_config_imap.sh
Executable file
|
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
DOVECOT_CONF="/etc/dovecot/dovecot.conf"
|
||||||
|
VIRTUAL="/var/mail"
|
||||||
|
|
||||||
|
function modify_main_cf() {
|
||||||
|
# Configuration changes needed in main.cf
|
||||||
|
echo "Changing postfix the /etc/postfix/main.cf configuration file."
|
||||||
|
postconf -e inet_interfaces=all
|
||||||
|
postconf -e smtpd_tls_auth_only=yes
|
||||||
|
postconf -e smtpd_tls_CAfile=/etc/postfix/ca-bundle.crt
|
||||||
|
postconf -e smtpd_tls_key_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_cert_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_loglevel=3
|
||||||
|
postconf -e smtpd_tls_received_header=yes
|
||||||
|
postconf -e smtpd_tls_session_cache_timeout=3600s
|
||||||
|
postconf -e smtpd_tls_security_level=may
|
||||||
|
postconf -e smtpd_sasl_type=dovecot
|
||||||
|
postconf -e smtpd_sasl_path=private/auth
|
||||||
|
postconf -e smtpd_sasl_auth_enable=yes
|
||||||
|
postconf -e broken_sasl_auth_clients=yes
|
||||||
|
postconf -e smtpd_sasl_security_options=noanonymous
|
||||||
|
postconf -e myorigin=${MYHOSTNAME}
|
||||||
|
postconf -e mydomain=${MYHOSTNAME}
|
||||||
|
postconf -e myhostname=mail.${MYHOSTNAME}
|
||||||
|
postconf -e mydestination=${MYHOSTNAME}
|
||||||
|
postconf -e debug_peer_level=3
|
||||||
|
postconf -e debug_peer_list=${MYHOSTNAME}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -f "/var/run/nologin" ]]; then
|
||||||
|
rm -f /var/run/nologin
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z ${MYHOSTNAME} ]]; then
|
||||||
|
MYHOSTNAME=localhost
|
||||||
|
fi
|
||||||
|
|
||||||
|
source /files/common.sh
|
||||||
|
|
||||||
|
mkdir -p /var/certs
|
||||||
|
chown root:root /var/certs
|
||||||
|
cp /files/*.{crt,pem} /etc/postfix/
|
||||||
|
|
||||||
|
|
||||||
|
modify_etc_services
|
||||||
|
modify_main_cf
|
||||||
|
modify_master_cf
|
||||||
36
files/postfix_config_tls.sh
Executable file
36
files/postfix_config_tls.sh
Executable file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
function modify_main_cf() {
|
||||||
|
# Configuration changes needed in main.cf
|
||||||
|
echo "Changing postfix the /etc/postfix/main.cf configuration file."
|
||||||
|
postconf -e inet_interfaces=all
|
||||||
|
postconf -e smtpd_use_tls=yes
|
||||||
|
postconf -e smtpd_tls_auth_only=no
|
||||||
|
postconf -e myorigin=/etc/mailname
|
||||||
|
postconf -e mydomain=${MYHOSTNAME}
|
||||||
|
postconf -e myhostname="mail.$MYHOSTNAME"
|
||||||
|
postconf -e mydestination=${MYHOSTNAME}
|
||||||
|
postconf -e smtpd_tls_CAfile=/etc/postfix/cacert.pem
|
||||||
|
postconf -e smtpd_tls_key_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_cert_file=/etc/postfix/test.pem
|
||||||
|
postconf -e smtpd_tls_loglevel=3
|
||||||
|
postconf -e smtpd_tls_received_header=yes
|
||||||
|
postconf -e smtpd_tls_session_cache_timeout=3600s
|
||||||
|
postconf -e smtpd_tls_security_level=may
|
||||||
|
postconf -e tls_random_source=dev:/dev/urandom
|
||||||
|
postconf -e smtpd_relay_restrictions='permit_mynetworks permit_tls_clientcerts reject_unauth_destination'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -z ${MYHOSTNAME} ]]; then
|
||||||
|
MYHOSTNAME=localhost
|
||||||
|
fi
|
||||||
|
|
||||||
|
source /files/common.sh
|
||||||
|
|
||||||
|
mkdir -p /var/certs
|
||||||
|
chown root:root /var/certs
|
||||||
|
|
||||||
|
modify_etc_services
|
||||||
|
modify_main_cf
|
||||||
|
modify_master_cf
|
||||||
22
files/start.sh
Executable file
22
files/start.sh
Executable file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Wait before postfix is really started.
|
||||||
|
postfix start
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
state=$(script -c 'postfix status' | grep postfix/postfix-script)
|
||||||
|
echo $state
|
||||||
|
if [[ "$state" != "${state/is running/}" ]]; then
|
||||||
|
PID=${state//[^0-9]/}
|
||||||
|
if [[ -z $PID ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ ! -d "/proc/$PID" ]]; then
|
||||||
|
echo "Postfix proces $PID does not exist."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Postfix is not running."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
39
files/start_dovecot.sh
Executable file
39
files/start_dovecot.sh
Executable file
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copy all certificates
|
||||||
|
#cp /var/certs/*.{crt,pem} /etc/postfix/
|
||||||
|
# Wait before postfix is really started.
|
||||||
|
|
||||||
|
if [[ ! -z "${DEBUG_MODE}" ]]; then
|
||||||
|
rpm -q syslog-ng
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
dnf -y --setopt=tsflags=nodocs install syslog-ng && \
|
||||||
|
dnf -y clean all
|
||||||
|
syslog-ng
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
postfix start
|
||||||
|
|
||||||
|
dovecot
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
state=$(script -c 'postfix status' | grep postfix/postfix-script)
|
||||||
|
echo $state
|
||||||
|
dovecot_pid=$(cat /var/run/dovecot/master.pid)
|
||||||
|
echo $dovecot_pid
|
||||||
|
if [[ "$state" != "${state/is running/}" ]]; then
|
||||||
|
PID=${state//[^0-9]/}
|
||||||
|
if [[ -z $PID ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ ! -d "/proc/$PID" ]]; then
|
||||||
|
echo "Postfix proces $PID does not exist."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 10
|
||||||
|
else
|
||||||
|
echo "Postfix is not running."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
39
files/start_imap.sh
Executable file
39
files/start_imap.sh
Executable file
|
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copy all certificates
|
||||||
|
#cp /var/certs/*.{crt,pem} /etc/postfix/
|
||||||
|
# Wait before postfix is really started.
|
||||||
|
|
||||||
|
if [[ ! -z "${DEBUG_MODE}" ]]; then
|
||||||
|
rpm -q syslog-ng
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
dnf -y --setopt=tsflags=nodocs install syslog-ng && \
|
||||||
|
dnf -y clean all
|
||||||
|
syslog-ng
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
postfix start
|
||||||
|
|
||||||
|
dovecot
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
state=$(script -c 'postfix status' | grep postfix/postfix-script)
|
||||||
|
echo $state
|
||||||
|
dovecot_pid=$(cat /var/run/dovecot/master.pid)
|
||||||
|
echo $dovecot_pid
|
||||||
|
if [[ "$state" != "${state/is running/}" ]]; then
|
||||||
|
PID=${state//[^0-9]/}
|
||||||
|
if [[ -z $PID ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ ! -d "/proc/$PID" ]]; then
|
||||||
|
echo "Postfix proces $PID does not exist."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 10
|
||||||
|
else
|
||||||
|
echo "Postfix is not running."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
35
files/start_postfix.sh
Executable file
35
files/start_postfix.sh
Executable file
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copy all certificates
|
||||||
|
#cp /var/certs/*.{crt,pem} /etc/postfix/
|
||||||
|
# Wait before postfix is really started.
|
||||||
|
|
||||||
|
if [[ ! -z "${DEBUG_MODE}" ]]; then
|
||||||
|
rpm -q syslog-ng
|
||||||
|
if [[ $? -ne 0 ]]; then
|
||||||
|
dnf -y --setopt=tsflags=nodocs install syslog-ng && \
|
||||||
|
dnf -y clean all
|
||||||
|
syslog-ng
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
postfix start
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
state=$(script -c 'postfix status' | grep postfix/postfix-script)
|
||||||
|
echo $state
|
||||||
|
if [[ "$state" != "${state/is running/}" ]]; then
|
||||||
|
PID=${state//[^0-9]/}
|
||||||
|
if [[ -z $PID ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ ! -d "/proc/$PID" ]]; then
|
||||||
|
echo "Postfix proces $PID does not exist."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 10
|
||||||
|
else
|
||||||
|
echo "Postfix is not running."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
25
files/start_tls.sh
Executable file
25
files/start_tls.sh
Executable file
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copy all certificates
|
||||||
|
#cp /var/certs/*.{crt,pem} /etc/postfix/
|
||||||
|
|
||||||
|
# Wait before postfix is really started.
|
||||||
|
postfix start
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
state=$(script -c 'postfix status' | grep postfix/postfix-script)
|
||||||
|
echo $state
|
||||||
|
if [[ "$state" != "${state/is running/}" ]]; then
|
||||||
|
PID=${state//[^0-9]/}
|
||||||
|
if [[ -z $PID ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [[ ! -d "/proc/$PID" ]]; then
|
||||||
|
echo "Postfix proces $PID does not exist."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Postfix is not running."
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
53
files/test.pem
Normal file
53
files/test.pem
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDAPcnLcD0wzswe
|
||||||
|
S+mf+uBiBM5AcZwbYbBsYTLR6rF9p7dT5fAqcjM6mX29JACK797vOo1SPJG6pP4M
|
||||||
|
wqRXVSwKbwglbGO20q6Nc5sPKQE2PpZz7uxoB2D6UqsFYftGmceeJLGk/r11fL/m
|
||||||
|
G+sMHlwLNCFFDuZnlU23vrUfi8zEsqQJxny0hhQ1qEzDY6vwzaPMnd+ueC/a8zA9
|
||||||
|
TljrHIqfXjfd+94W/MvFNlNsAc00sLWi2izIqM8E5Gv0bP32sZkgVayNLartRdvt
|
||||||
|
1EckqfUjwYL5a7mWgbB15JZTQWC0fesUHs5ayTY0ZuOD1N6lWStD5TtLQKRRzBEd
|
||||||
|
9SV35+ZRAgMBAAECggEAXU8gXXBzIvedN69dDFu3AZyXh8wdG2VFPrXG9wDVecoo
|
||||||
|
P77B3bhkiTLrRxzsboOTT8a5xYrEqTVgYk0ve3xJzh6qc4+yrpCATQQp5SfgALZM
|
||||||
|
TKVRdgTu21G41PoD/vaxX18sIovK5fXRJx2x7sXlo0KAS4a56tkbSe5094ThtS6v
|
||||||
|
nUGFalBXJxojJpk61WESv1yPAKoSVqv+mDNY15It2tznNTs2Q9bJv3FwYtKALA7O
|
||||||
|
okUZKsWtBgWBW/ZbduDbqkWhlU/dYNb3Gq45mauGBWWYsDP3WvxlPYQhuz+ZjuBO
|
||||||
|
E13EezTmx7B0ttZ29gHQs/vfnKk7Bis0xCvhmheegQKBgQD4NFIPuVdfoPL6D8rh
|
||||||
|
ZiRjx6g2D77JVmdg87lS4m2qe4gd12og/VOX5VE3kHH3zLeBrFDIvM/1YK3yhBb9
|
||||||
|
DiOjzk+X3V7+LgsWun70eyE3CKUb9eusDQfkMaQU8d4Ps+8ItWiN60NKHwp1CSBj
|
||||||
|
wVW2Du8xPRJfxjAlPnR+94KQGQKBgQDGR3+0C2Bljl9SiOBK0YO69C1yZwJBzDut
|
||||||
|
AJbVf5bE3Z8SAkzzRPtTVu2f74++wVQCM/WjVciH6R0Yva1sVh1NEHjgJKpjy9Rj
|
||||||
|
CVhpNoWz+XEtVCp57tkAWkJ5oJnC396AWcF4tsh+Wu6oEy9W0RQxBxWGhKMoA0L8
|
||||||
|
YEMJ09du+QKBgQDgXwu/wyBFBk4f157jW16SBK7/EAS8JSuW7TwevSm976YAs/bw
|
||||||
|
k5C5w0dEH4OnKpzI0GjGzkh/3UHh9Z6CbAGz1pEFC80PobfMeBLEF3rTMTFwsUK2
|
||||||
|
aaE0m9tkQ7EmKNZw3O0DPiW6H41odzOcee1tgtqffEHb6mEjie3tyPlyIQKBgBe9
|
||||||
|
od3F6vHd/S3ds7Vhprsw12w2Rz/nm1GYm3bOwxepTY2TdvE91jXhV6xpu7VkYpGs
|
||||||
|
9QFsmQkk8VXwCB7LpNCAY2i7Gye91R1SliJq49Fr0ZBS3o8g+RygsgrsHt0Ffxex
|
||||||
|
J4gzoof2jVLUkTt850UDiyFDKmH1GgUr5Xr8wXPJAoGBAK6GbYcj6RHjkCAk4+V+
|
||||||
|
1gvOG3g8RKNx37YB4YWkp/1wUjT7YPO80TlCWSwgfWFdSTJFijP1VlqVtW2waGTz
|
||||||
|
am5LGQQda1AXufFjYMEBLXj7ng57qdW0lkhY167qNaQHqH17KSl/SzUMI19WHfi1
|
||||||
|
S1WSQqnBP7NbhKWHIJTyxnIT
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
|
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIID7TCCAtWgAwIBAgIJALaixliKLoBxMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD
|
||||||
|
VQQGEwJDWjEXMBUGA1UECAwOQ3plY2ggUmVwdWJsaWMxDTALBgNVBAcMBEJybm8x
|
||||||
|
HDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQxEjAQBgNVBAMMCWxvY2FsaG9z
|
||||||
|
dDEjMCEGCSqGSIb3DQEJARYUcG9zdG1hc3RlckBsb2NhbGhvc3QwHhcNMTYxMjA1
|
||||||
|
MDk1NDU0WhcNMTcxMjA1MDk1NDU0WjCBjDELMAkGA1UEBhMCQ1oxFzAVBgNVBAgM
|
||||||
|
DkN6ZWNoIFJlcHVibGljMQ0wCwYDVQQHDARCcm5vMRwwGgYDVQQKDBNEZWZhdWx0
|
||||||
|
IENvbXBhbnkgTHRkMRIwEAYDVQQDDAlsb2NhbGhvc3QxIzAhBgkqhkiG9w0BCQEW
|
||||||
|
FHBvc3RtYXN0ZXJAbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||||
|
CgKCAQEAwD3Jy3A9MM7MHkvpn/rgYgTOQHGcG2GwbGEy0eqxfae3U+XwKnIzOpl9
|
||||||
|
vSQAiu/e7zqNUjyRuqT+DMKkV1UsCm8IJWxjttKujXObDykBNj6Wc+7saAdg+lKr
|
||||||
|
BWH7RpnHniSxpP69dXy/5hvrDB5cCzQhRQ7mZ5VNt761H4vMxLKkCcZ8tIYUNahM
|
||||||
|
w2Or8M2jzJ3frngv2vMwPU5Y6xyKn1433fveFvzLxTZTbAHNNLC1otosyKjPBORr
|
||||||
|
9Gz99rGZIFWsjS2q7UXb7dRHJKn1I8GC+Wu5loGwdeSWU0FgtH3rFB7OWsk2NGbj
|
||||||
|
g9TepVkrQ+U7S0CkUcwRHfUld+fmUQIDAQABo1AwTjAdBgNVHQ4EFgQUBKQMit9o
|
||||||
|
QtNLpxnnaot2tmF5Mp8wHwYDVR0jBBgwFoAUBKQMit9oQtNLpxnnaot2tmF5Mp8w
|
||||||
|
DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEABiL93djmUOoPOMvyM1Pi
|
||||||
|
2emMmIH2Omk1T4ro4uKQPzHjSFWjdlDtGwqA2YFZ/SQsdCObTC0Z0aDXqEqWFO5w
|
||||||
|
pL2wRWl57i/MHxYOlx6WtvLy1UohHowF29aMLwRHItOSu7Idtul5KWDOJS+lWGd5
|
||||||
|
u7/YoxAsqw3ZfJdT9BT211J0NwQqwsWssnWgptZ5Nb8adPINLZiUU+Avq6OjtZ8O
|
||||||
|
pky0kePX1jdUcIn+A5dmjutJ1QMw5uqQjVi6ESy+fUSmwgVvAfGHJaB2h1JQbJ8Z
|
||||||
|
x/daeksGzxpwqk/Ir1kVaQuMNMH5zToF/RLJZR8uUBFSNm4yP1pHxnaLht3rrthJ
|
||||||
|
pw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
52
postfix.yaml
Normal file
52
postfix.yaml
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
document: modulemd
|
||||||
|
version: 1
|
||||||
|
data:
|
||||||
|
summary: Postfix Mail Transport Agent
|
||||||
|
description: Postfix is a Mail Transport Agent (MTA).
|
||||||
|
license:
|
||||||
|
module: [ MIT ]
|
||||||
|
dependencies:
|
||||||
|
buildrequires:
|
||||||
|
base-runtime: f26
|
||||||
|
# dependency on perl-generators
|
||||||
|
perl: f26
|
||||||
|
# add dependency because of mariadb, postgresql, tinycdb
|
||||||
|
common-build-dependencies: f26
|
||||||
|
#common-build-dependencies-bootstrap: f26
|
||||||
|
shared-userspace: f26
|
||||||
|
postgresql: f26
|
||||||
|
mariadb: f26
|
||||||
|
requires:
|
||||||
|
base-runtime: f26
|
||||||
|
perl: f26
|
||||||
|
postgresql: private-f27-modules
|
||||||
|
mariadb: f26
|
||||||
|
references:
|
||||||
|
community: https://docs.pagure.org/modularity/
|
||||||
|
documentation: https://github.com/modularity-modules/postfix
|
||||||
|
tracker: https://github.com/modularity-modules/postfix
|
||||||
|
profiles:
|
||||||
|
default:
|
||||||
|
rpms:
|
||||||
|
- postfix
|
||||||
|
api:
|
||||||
|
rpms:
|
||||||
|
- postfix
|
||||||
|
- postfix-cdb
|
||||||
|
- postfix-ldap
|
||||||
|
- postfix-mysql
|
||||||
|
- postfix-pcre
|
||||||
|
- postfix-pgsql
|
||||||
|
- postfix-sqlite
|
||||||
|
filter:
|
||||||
|
rpms:
|
||||||
|
- postfix-perl-scripts
|
||||||
|
components:
|
||||||
|
rpms:
|
||||||
|
postfix:
|
||||||
|
rationale: A dependency of tangerine.
|
||||||
|
ref: f26
|
||||||
|
buildorder: 10
|
||||||
|
tinycdb:
|
||||||
|
rationale: A dependency of tangerine.
|
||||||
|
ref: f26
|
||||||
4
repos/fedora.repo
Normal file
4
repos/fedora.repo
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[fedora]
|
||||||
|
name=fedora
|
||||||
|
baseurl=https://mirrors.nic.cz/fedora/linux/development/26/Everything/x86_64/os/
|
||||||
|
enabled=0
|
||||||
4
repos/perl.repo
Normal file
4
repos/perl.repo
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[perl]
|
||||||
|
name=perl
|
||||||
|
baseurl=https://kojipkgs.fedoraproject.org/repos/module-fcd86adc7a9c7e0a/latest/x86_64/
|
||||||
|
enabled=0
|
||||||
4
repos/postfix.repo
Normal file
4
repos/postfix.repo
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[postfix]
|
||||||
|
name=postfix
|
||||||
|
baseurl=https://kojipkgs.stg.fedoraproject.org/compose/branched/jkaluza/latest-Fedora-Modular-26/compose/Server/x86_64/os/
|
||||||
|
enabled=0
|
||||||
0
sources
Normal file
0
sources
Normal file
6
tests/Makefile
Normal file
6
tests/Makefile
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
MODULE_LINT=/usr/share/moduleframework/tools/modulelint.py
|
||||||
|
CMD=python -m avocado run --filter-by-tags=-WIP $(MODULE_LINT) *.py
|
||||||
|
|
||||||
|
#
|
||||||
|
all:
|
||||||
|
$(CMD)
|
||||||
21
tests/config.yaml
Normal file
21
tests/config.yaml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
document: modularity-testing
|
||||||
|
version: 1
|
||||||
|
name: postfix
|
||||||
|
modulemd-url: http://raw.githubusercontent.com/container-images/postfix/master/postfix.yaml
|
||||||
|
service:
|
||||||
|
port: 25
|
||||||
|
packages:
|
||||||
|
rpms:
|
||||||
|
- postfix
|
||||||
|
testdependecies:
|
||||||
|
rpms:
|
||||||
|
- nc
|
||||||
|
module:
|
||||||
|
docker:
|
||||||
|
start: "docker run -e MYHOSTNAME=localhost -p 25:10025"
|
||||||
|
source: https://github.com/container-images/postfix.git
|
||||||
|
container: docker.io/modularitycontainers/postfix
|
||||||
|
rpm:
|
||||||
|
start: systemctl start postfix
|
||||||
|
stop: systemctl stop postfix
|
||||||
|
status: systemctl status postfix
|
||||||
58
tests/sanity1.py
Normal file
58
tests/sanity1.py
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# This Modularity Testing Framework helps you to write tests for modules
|
||||||
|
# Copyright (C) 2017 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# he Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
#
|
||||||
|
# Authors: Jan Scotka <jscotka@redhat.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
import socket
|
||||||
|
from avocado import main
|
||||||
|
from avocado.core import exceptions
|
||||||
|
from moduleframework import module_framework
|
||||||
|
|
||||||
|
|
||||||
|
class SanityCheck1(module_framework.AvocadoTest):
|
||||||
|
"""
|
||||||
|
:avocado: enable
|
||||||
|
"""
|
||||||
|
|
||||||
|
def testConnectToPostfix(self):
|
||||||
|
self.start()
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
s.connect(('localhost', self.getConfig()['service']['port']))
|
||||||
|
s.sendall("HELO test.localhost")
|
||||||
|
s.close()
|
||||||
|
|
||||||
|
def testPostfixExists(self):
|
||||||
|
self.start()
|
||||||
|
self.run("ls -la /usr/sbin/postfix")
|
||||||
|
|
||||||
|
def testPostfixConfiguration(self):
|
||||||
|
self.start()
|
||||||
|
self.run("postconf -n mydomain | grep localhost")
|
||||||
|
self.run("postconf -n myhostname | grep mail.localhost")
|
||||||
|
self.run("postconf -n mydestination | grep localhost")
|
||||||
|
|
||||||
|
def testPostfixSkipped(self):
|
||||||
|
module_framework.skipTestIf("postfix" not in self.getActualProfile())
|
||||||
|
self.start()
|
||||||
|
self.run("postconf -n")
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue