14 Commits

Author SHA1 Message Date
dd3c1184d6 fix(ci): build armv7 and aarch64 images
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-25 21:32:31 +01:00
c0a6f5c8f5 fix: add renovate config
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-22 00:02:23 +01:00
b5692c03d9 fix: database port
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-21 23:32:09 +01:00
fe8bf5d73c fix(Makefile): use official container image name 2022-01-21 23:31:15 +01:00
feee56b98c fix(Dockerfile): upgrade packages 2022-01-21 23:30:45 +01:00
d6536071ef fix: log to stdout 2022-01-21 23:30:28 +01:00
66a537767f fix(ci): dependencies and conditions
All checks were successful
continuous-integration/drone/push Build is passing
2021-10-12 21:59:55 +02:00
0de75ab85d doc(README): image name
All checks were successful
continuous-integration/drone/push Build is passing
2021-09-26 21:00:12 +02:00
4b81be1cb6 doc(README): badges
All checks were successful
continuous-integration/drone/push Build is passing
2021-09-26 20:59:10 +02:00
3e22105622 doc(README): headline
All checks were successful
continuous-integration/drone/push Build is passing
2021-09-26 20:49:02 +02:00
f2e7f6e99c fix: change name of the git repository
All checks were successful
continuous-integration/drone/push Build is passing
2021-09-26 17:29:14 +02:00
514f2d1b5e fix(README): require database scheme of postfixadmin
All checks were successful
continuous-integration/drone/push Build is passing
2021-09-12 19:59:12 +02:00
389bfb967c fix(README): describe environment variables
All checks were successful
continuous-integration/drone/push Build is passing
2021-09-12 19:54:20 +02:00
8d48d4d458 fix: support database port
All checks were successful
continuous-integration/drone/push Build is passing
2021-09-11 13:43:29 +02:00
8 changed files with 428 additions and 59 deletions

View File

@ -5,13 +5,12 @@ name: linter
platform:
os: linux
arch: amd64
steps:
- name: markdown lint
commands:
- markdownlint *.md
image: docker.io/volkerraschek/markdownlint:0.28.1
image: docker.io/volkerraschek/markdownlint:0.29.0
resources:
limits:
cpu: 50
@ -41,6 +40,190 @@ trigger:
event:
exclude:
- tag
---
kind: pipeline
type: docker
name: dry-run-amd64
platform:
os: linux
arch: amd64
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: false
dry_run: true
tags: latest-amd64
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
volumes:
- name: docker_socket
path: /var/run/docker.sock
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
depends_on:
- linter
trigger:
branch:
exclude:
- master
event:
- pull_request
- push
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
type: docker
name: dry-run-arm-v7
platform:
os: linux
arch: arm
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: false
dry_run: true
tags: latest-arm-v7
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
volumes:
- name: docker_socket
path: /var/run/docker.sock
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
depends_on:
- linter
trigger:
branch:
exclude:
- master
event:
- pull_request
- push
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
type: docker
name: dry-run-arm64-v8
platform:
os: linux
arch: arm64
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: false
dry_run: true
tags: latest-arm64-v8
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
volumes:
- name: docker_socket
path: /var/run/docker.sock
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
depends_on:
- linter
trigger:
branch:
exclude:
- master
event:
- pull_request
- push
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
type: docker
@ -57,7 +240,7 @@ steps:
dockerfile: Dockerfile
auto_tag: false
tags: latest-amd64
repo: volkerraschek/fetchmail
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
@ -66,9 +249,6 @@ steps:
volumes:
- name: docker_socket
path: /var/run/docker.sock
when:
branch:
- master
- name: notify
image: drillster/drone-email
@ -91,15 +271,22 @@ volumes:
host:
path: /var/run/docker.sock
depends_on:
- linter
trigger:
branch:
- master
event:
exclude:
- tag
- cron
- push
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
type: docker
name: latest-armv7
name: latest-arm-v7
platform:
os: linux
@ -111,16 +298,13 @@ steps:
settings:
dockerfile: Dockerfile
auto_tag: false
tags: latest-armv7
repo: volkerraschek/fetchmail
tags: latest-arm-v7
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
when:
branch:
- master
- name: notify
image: drillster/drone-email
@ -146,10 +330,76 @@ volumes:
host:
path: /var/run/docker.sock
depends_on:
- linter
trigger:
branch:
- master
event:
exclude:
- tag
- cron
- push
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
type: docker
name: latest-arm64-v8
platform:
os: linux
arch: arm64
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: false
tags: latest-arm64-v8
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
volumes:
- name: docker_socket
path: /var/run/docker.sock
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
depends_on:
- linter
trigger:
branch:
- master
event:
- cron
- push
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
@ -190,12 +440,17 @@ steps:
depends_on:
- latest-amd64
- latest-armv7
- latest-arm-v7
- latest-arm64-v8
trigger:
branch:
- master
event:
exclude:
- tag
- cron
- push
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
@ -213,7 +468,7 @@ steps:
dockerfile: Dockerfile
auto_tag: true
auto_tag_suffix: amd64
repo: volkerraschek/fetchmail
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
@ -248,12 +503,12 @@ trigger:
event:
- tag
repo:
- volker.raschek/fetchmail-docker
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
type: docker
name: tagged-armv7
name: tagged-arm-v7
platform:
os: linux
@ -265,8 +520,8 @@ steps:
settings:
dockerfile: Dockerfile
auto_tag: true
auto_tag_suffix: armv7
repo: volkerraschek/fetchmail
auto_tag_suffix: arm-v7
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
@ -301,7 +556,60 @@ trigger:
event:
- tag
repo:
- volker.raschek/fetchmail-docker
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
type: docker
name: tagged-arm64-v8
platform:
os: linux
arch: arm64
steps:
- name: build
image: plugins/docker
settings:
dockerfile: Dockerfile
auto_tag: true
auto_tag_suffix: arm64-v8
repo: volkerraschek/postfixadmin-fetchmail
username:
from_secret: container_image_registry_user
password:
from_secret: container_image_registry_password
no_cache: true
volumes:
- name: docker_socket
path: /var/run/docker.sock
- name: notify
image: drillster/drone-email
environment:
PLUGIN_HOST:
from_secret: smtp_host
PLUGIN_USERNAME:
from_secret: smtp_username
PLUGIN_PASSWORD:
from_secret: smtp_password
PLUGIN_FROM:
from_secret: smtp_mail_address
when:
status:
- changed
- failure
volumes:
- name: docker_socket
host:
path: /var/run/docker.sock
trigger:
event:
- tag
repo:
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
@ -342,13 +650,14 @@ steps:
depends_on:
- tagged-amd64
- tagged-armv7
- tagged-arm-v7
- tagged-arm64-v8
trigger:
event:
- tag
repo:
- volker.raschek/fetchmail-docker
- volker.raschek/postfixadmin-fetchmail-docker
---
kind: pipeline
@ -368,7 +677,7 @@ steps:
memory: 25M
settings:
branch: master
remote: ssh://git@github.com/volker-raschek/fetchmail-docker.git
remote: ssh://git@github.com/volker-raschek/postfixadmin-fetchmail-docker.git
force: true
ssh_key:
from_secret: ssh_key
@ -393,8 +702,14 @@ steps:
- changed
- failure
depends_on:
- latest-manifest
trigger:
branch:
- master
event:
- cron
- push
repo:
- volker.raschek/fetchmail-docker
- volker.raschek/postfixadmin-fetchmail-docker

View File

@ -1,6 +1,7 @@
FROM docker.io/library/alpine:3.11.2
RUN echo "http://dl-3.alpinelinux.org/alpine/edge/testing/" >> /etc/apk/repositories
RUN apk upgrade
RUN apk add --update perl perl-lockfile-simple perl-dbi perl-dbd-pg perl-dbd-mysql fetchmail
RUN mkdir --parents /run/fetchmail

View File

@ -9,7 +9,7 @@ FETCHMAIL_IMAGE_REGISTRY_NAME:=docker.io
FETCHMAIL_IMAGE_REGISTRY_USER:=volkerraschek
FETCHMAIL_IMAGE_NAMESPACE?=${FETCHMAIL_IMAGE_REGISTRY_USER}
FETCHMAIL_IMAGE_NAME:=fetchmail
FETCHMAIL_IMAGE_NAME:=postfixadmin-fetchmail
FETCHMAIL_IMAGE_VERSION?=latest
FETCHMAIL_IMAGE_FULLY_QUALIFIED=${FETCHMAIL_IMAGE_REGISTRY_NAME}/${FETCHMAIL_IMAGE_NAMESPACE}/${FETCHMAIL_IMAGE_NAME}:${FETCHMAIL_IMAGE_VERSION}
FETCHMAIL_IMAGE_UNQUALIFIED=${FETCHMAIL_IMAGE_NAMESPACE}/${FETCHMAIL_IMAGE_NAME}:${FETCHMAIL_IMAGE_VERSION}

View File

@ -1,15 +1,17 @@
# fetchmail-docker
# PostfixAdmin's fetchmail
[![Build Status](https://drone.cryptic.systems/api/badges/volker.raschek/fetchmail-docker/status.svg)](https://drone.cryptic.systems/volker.raschek/fetchmail-docker)
[![Docker Pulls](https://img.shields.io/docker/pulls/volkerraschek/fetchmail)](https://hub.docker.com/r/volkerraschek/fetchmail)
[![Build Status](https://drone.cryptic.systems/api/badges/volker.raschek/postfixadmin-fetchmail-docker/status.svg)](https://drone.cryptic.systems/volker.raschek/postfixadmin-fetchmail-docker)
[![Docker Pulls](https://img.shields.io/docker/pulls/volkerraschek/postfixadmin-fetchmail)](https://hub.docker.com/r/volkerraschek/postfixadmin-fetchmail)
This project contains all sources to build the container image
`docker.io/volkerraschek/fetchmail`. The primary goal of the image is to fetch
mails from external servers and forward them to on local running mail server.
`docker.io/volkerraschek/postfixadmin-fetchmail`. The primary goal of the image
is to fetch mails from external servers and forward them to on local running
mail server.
The configuration file will be automatically generated based on information from
a database. As table the fetchmail table from the schema of
[postfixadmin](https://github.com/postfixadmin/postfixadmin) is expected.
a supported database backend of
[postfixadmin](https://github.com/postfixadmin/postfixadmin). The information
are stored in the table `fetchmail` of the database scheme of PostfixAdmin.
## Usage
@ -25,6 +27,7 @@ $ docker run \
--rm \
--env DATABASE_TYPE: Pg \
--env DATABASE_HOST: postgres \
--env DATABASE_PORT: 5432 \
--env DATABASE_NAME: postgres \
--env DATABASE_USER: fetchmail \
--env DATABASE_PASSWORD: MySecretPassword \
@ -39,6 +42,7 @@ $ docker run \
--rm \
--env DATABASE_TYPE: my \
--env DATABASE_HOST: root \
--env DATABASE_PORT: 3306 \
--env DATABASE_NAME: mysql \
--env DATABASE_USER: fetchmail \
--env DATABASE_PASSWORD: MySecretPassword \
@ -62,18 +66,47 @@ services:
environment:
- DATABASE_TYPE=${DATABASE_TYPE}
- DATABASE_HOST=${DATABASE_HOST}
- DATABASE_HOST=${DATABASE_PORT}
- DATABASE_NAME=${DATABASE_NAME}
- DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
network_mode: host
```
## Build container image manually
## Environment variables
To build the images manually check out the repository on
[github](https://github.com/volker-raschek/fetchmail-docker) with git and use
the make command to build the container image.
### DATABASE_TYPE
```bash
make container-image/build
```
Currently will be only postgres, mysql and mariadb supported. About the
environment variable `DATABASE_TYPE` can the backend type defined. The value is
required.
| database type | value |
| ------------- | ----- |
| mysql/mariadb | `my` |
| postgres | `Pg` |
### DATABASE_USER
The environment variable `DATABASE_USER` is undefined and required. The value
contains the database user which one fetchmail use to login.
### DATABASE_PASSWORD
The environment variable `DATABASE_PASSWORD` is undefined and required. The value
contains the password of the database user which one fetchmail use to login.
### DATABASE_HOST
The environment variable `DATABASE_HOST` is undefined and required. The value
contains the DNS name or IP address of the host, where the database is hosted.
### DATABASE_PORT
The environment variable `DATABASE_PORT` is undefined and required. The value
contains the port of the host, where the database is listen on.
### DATABASE_NAME
The environment variable `DATABASE_NAME` is undefined and required. The value
contains the name of the database against which should be logged in.

View File

@ -1,12 +1,13 @@
version: "3"
services:
fetchmail:
container_name: fetchmail
image: volkerraschek/fetchmail-docker:latest
postfixadmin-fetchmail:
container_name: postfixadmin-fetchmail
image: docker.io/volkerraschek/postfixadmin-fetchmail:latest
environment:
- DATABASE_TYPE=${DATABASE_TYPE}
- DATABASE_HOST=${DATABASE_HOST}
- DATABASE_NAME=${DATABASE_NAME}
- DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_HOST=${DATABASE_HOST}
- DATABASE_PORT=${DATABASE_PORT}
- DATABASE_NAME=${DATABASE_NAME}
network_mode: host

View File

@ -15,10 +15,11 @@ use LockFile::Simple qw(lock trylock unlock);
# database backend - uncomment one of these
our $db_type=$ENV{'DATABASE_TYPE'};
our $db_host=$ENV{'DATABASE_HOST'};
our $db_name=$ENV{'DATABASE_NAME'};
our $db_username=$ENV{'DATABASE_USER'};
our $db_password=$ENV{'DATABASE_PASSWORD'};
our $db_host=$ENV{'DATABASE_HOST'};
our $db_port=$ENV{'DATABASE_PORT'};
our $db_name=$ENV{'DATABASE_NAME'};
# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf
# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example:
@ -34,7 +35,7 @@ openlog("fetchmail-all", "pid", "mail");
sub log_and_die {
my($message) = @_;
syslog("err", $message);
printf "err: %s\n", $message;
die $message;
}
@ -60,7 +61,7 @@ if (-e $configfile) {
}
if($db_type eq "Pg" || $db_type eq "mysql") {
$dsn = "DBI:$db_type:database=$db_name;host=$db_host";
$dsn = "DBI:$db_type:database=$db_name;host=$db_host;port=$db_port";
} else {
log_and_die "unsupported db_type $db_type";
}
@ -89,7 +90,7 @@ my (%config);
map{
my ($id,$mailbox,$src_server,$src_auth,$src_user,$src_password,$src_folder,$fetchall,$keep,$protocol,$mda,$extra_options,$usessl,$sslcertck,$sslcertpath,$sslfingerprint)=@$_;
syslog("info","fetch ${src_user}@${src_server} for ${mailbox}");
printf "info: fetch %s@%s for %s\n", ${src_user}, ${src_server}, ${mailbox};
$cmd="user '${src_user}' there with password '".decode_base64($src_password)."'";
$cmd.=" folder '${src_folder}'" if ($src_folder);
@ -111,7 +112,8 @@ set postmaster "postmaster"
set nobouncemail
set no spambounce
set properties ""
set syslog
set no syslog
set logfile /dev/stdout
poll ${src_server} with proto ${protocol}
$cmd
@ -128,6 +130,9 @@ TXT
$sql="UPDATE fetchmail SET returned_text=".$dbh->quote($ret).", date=now() WHERE id=".$id;
$dbh->do($sql);
printf "info: fetched mails of %s@%s for %s\n", ${src_user}, ${src_server}, ${mailbox};
}@{$dbh->selectall_arrayref($sql)};
$lockmgr->unlock($lock_file);

View File

@ -1,4 +1,4 @@
image: volkerraschek/fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
image: volkerraschek/postfixadmin-fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
{{#if build.tags}}
tags:
{{#each build.tags}}
@ -8,13 +8,19 @@ tags:
{{/if}}
manifests:
-
image: volkerraschek/fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-amd64
image: volkerraschek/postfixadmin-fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-amd64
platform:
architecture: amd64
os: linux
-
image: volkerraschek/fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-armv7
image: volkerraschek/postfixadmin-fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-arm-v7
platform:
architecture: arm
os: linux
variant: v7
-
image: volkerraschek/postfixadmin-fetchmail:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-arm64-v8
platform:
architecture: arm64
os: linux
variant: v8

8
renovate.json Normal file
View File

@ -0,0 +1,8 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"automerge": true,
"automergeStrategy": "merge-commit",
"automergeType": "pr",
"rebaseLabel": "renovate/rebase",
"rebaseWhen": "behind-base-branch"
}