Schlagwort-Archive: Uberspace

maildrop-Fallstricke und was man dagegen tun kann

Wenn maildrop-Filter mit der Zeit wachsen und komplexer werden steigt das Risiko, dass sich irgendwo ein Fehler einschleicht. Da die Debugging und Fehlererkennungsmechanismen von maildrop eher rudimentär ausfallen – besonders bei verteilten Filtern in mehreren Dateien – kann ein solcher Fehler schnell zum Verlust von E-Mails führen.

Probleme mit den Dateirechten

maildrop ist sehr empfindlich was die Dateirechte der Hauptfilterdatei (~/.mailfilter) angeht. Sind diese nicht auf 0600 gesetzt, verweigert maildrop jeglichen Dienst. Da ich meine Filter über git versioniere und git Dateirechte schlicht aus der umask generiert (Ausnahme ist das +x-Flag) kam es hier gelegentlich zu Problemen.

Die Lösung ist so einfach wie wirkungsvoll. Über die .qmail-Datei rufe ich ein Wrapper-Script maildrop-wrapper.sh auf, welches die Übergabe an maildrop versucht. Sollte ein Fehler auftreten, wird versucht die Rechte zu korrigieren und anschließend ein weiterer Versuch gestartet.

#!/bin/bash
#
# maildrop-wrapper.sh 

maildrop ~/.mailfilter

if [ $? -ne 0 ]; then
    # Try to correct file permissions and retry
    chmod 0600 ~/.mailfilter
    maildrop ~/.mailfilter
fi

Der Vollständigkeit halber hier auch die entsprechende .qmail-Datei:

# .qmail
# Deliver email via maildrop-wrapper.sh
|~/bin/maildrop-wrapper.sh

Fehler im Filter

Um bei Fehlern im Filtercode dennoch zumindest eine Zustellung zu ermöglichen, habe ich eine grundlegende Filterkonfiguration in die ~/.mailfilter gepackt. Daher sollte es an dieser eigentlich keine Änderungen geben, die Fehler verursachen können.

# mailfilter
# Maildrop filter
#
# This file is just for data integrity, it includes the
# actual mailfilter in file "main"
# If any exception occurs while executing main, this file
# makes sure that the affected mail is not dropped

# DO NOT ADD ANY ADDIDTIONAL CODE OUTSIDE THE EXCEPTION SCOPE
# Catch exceptions in actual filter
exception {

	# Include the actual filter
	CONFIG_DIR="$HOME/etc/maildrop"
	include "$CONFIG_DIR/main"

	# If anything worked until now, exiting with success
	# is quite fine
	EXITCODE=0
	exit
}
# DO NOT ADD ANY ADDIDTIONAL CODE OUTSIDE THE EXCEPTION SCOPE

# If anything goes wrong, deliver mail to Maildir
to "$HOME/Maildir"

Der simple aber wirkungsvolle Gedanke dahinter – packe alles was irgendwie kritisch werden könnte in einen exception-Block, der alle möglichen Fehler auffängt. Wird die E-Mail innerhalb dieses Blocks zugestellt, passiert nichts mehr. Kann jedoch nicht zugestellt werden, wird die E-Mail in (fast) jedem Fall ins Standard-Maildir ~/Maildir zugestellt.

Mein persönliches Uberspace-Init Script

Ich habe mir ein kleines Script gebastelt, mit dem ich neuen Uberspaces mit wenigen Befehlen einge Voreinstellungen verpassen kann.

Die Funktion in Kürze:

  • Einen Symlink für das Übergeordnete Verzeichnis der Pseudo-DOCUMENT_ROOTs. Zwar nicht unbedingt notwendig aber cd www ist schneller getippt wie cd /var/www/virtual/$USER
  • Vorbereitung für die Daemontools: uberspace-setup-svscan
  • Ein bin– und ein git-Verzeichnis – benötige ich öfters.
  • E-Mail Weiterleitung zu einer auszuwählenden E-Mail-Adresse, oder ins Maildir.
  • Außerdem hole ich mir noch angepasste bash Konfigurationsdateien, die ich bei github abgelegt habe.

Mit dem Parameter bash-config-update wird nur der letzte Punkt ausgeführt. Mit dem Parameter cleanup werden Sicherungskopien der bash Konfiguration von bash-config-update nach /dev/null befördert.

#!/bin/bash
#
# uberspace-init.sh
#
# Init-Script to init new Uberspaces and to Update bash-config
#
#
# Copyright 2014-2015 GOLDERWEB – Jonathan Golder <jonathan@golderweb.de>
# 
# 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 the Free Software Foundation; either version 3
# 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, see <http://www.gnu.org/licenses/>
#

# Make sure we are in $HOME
cd $HOME;

# Download my personal default bash configuration files from github
bash-config-update() {
	
	# Download modified bash-config from github
	( test -f .bash_profile && mv .bash_profile .bash_profile.save || test -d . ) && wget -q https://gist.githubusercontent.com/golderweb/d910ae1edbe853377da5/raw/.bash_profile 
	( test -f .bashrc && mv .bashrc .bashrc.save || test -d . ) && wget -q https://gist.githubusercontent.com/golderweb/e912ccfafda58470e51a/raw/.bashrc
	( test -f  .bash_functions && mv .bash_functions .bash_functions.save || test -d . ) && wget -q https://gist.github.com/golderweb/3dbb4f897339cf5c74e7/raw/.bash_functions
	( test -f .bash_aliases && mv .bash_aliases .bash_aliases.save || test -d . ) && wget -q https://gist.github.com/golderweb/79a4a2cc2cb126d30d4a/raw/.bash_aliases
	
	echo "Test if everything works right, then run \"uberspace-init cleanup\""
}
case "$1" in

	init|"")
		# Set up some predefinitions on new uberspace
		
		# Create Symlink for www
		test -e ~/www || ln -s /var/www/virtual/$USER www

		# Prepare ubespace for using daemontools
		test -d ~/service || uberspace-setup-svscan
	
		# Create several dirs
		test -d ~/bin || mkdir bin
		test -d ~/git || mkdir git
	
		# Enable E-Mail redirection
		read -p "Enter E-Mail-Adress for redirection, leave empty for use Maildir of this uberspace:" mail
	
		if [ -n "$mail" ]; then
			echo -e "#Redirect incomming E-Mails on ${USER} to ${mail}\n$mail" > .qmail || echo "ERROR: .qmail-file couldn't be wrote! E-Mails will be delivered to Maildir"
		else
			echo "No E-Mail-adress was provided, E-Mails will be delivered to Maildir"
		fi
		
		#Get bash-config files from github
		bash-config-update
		;;
		
	bash-config-update)

		#Get bash-config files from github
		bash-config-update
		;;
		
	cleanup)
		
		#Remove backup files 
		rm .bash_profile.save .bashrc.save .bash_functions.save .bash_aliases.save
		;;
	
	*) echo "Invalid parameter"
		;;
		
esac

Wenn dir das Uberspace-Init Script gefällt darfst du es gerne unter den Bedingungen der GNU GPLv3 weiterverwenden. Du findest es unter https://gist.github.com/golderweb/4feb43ed41b49bd7bc27. Einfach den Quelltext kopieren, mit git clonen oder einen Github-Fork erstellen.

Warum ich ein Ubernaut wurde

Dieses Blog wird bei Uberspace.de gehostet. Auf die Ubernauten stieß ich zufällig in diesem Blog-Beitrag von Dominik Schilling auf wpGrafie.de.
Mal kurz weiter gesurft und den wohl flexibelsten Sharedhosting-Provider Deutschlands gefunden. PHP, MySQL, Mail, IMAP, 10 GB Plattenplatz, 100 GB Traffic und ein vollwertiger SSH-Zugang, um nur einige der sehr vielen Feautures zu nennen. 10mal besser als irgendwelche fummeligen Weboberflächen, die überall anders aussehen oder als Dateien schubsen per FTP.
Das alles hat natürlich seinen Preis, doch auch den bestimmst Du selbst. Die einzige Vorgabe ist ein Mindestpreis von gerade mal einem Euro. Doch spätestens wenn Du einmal mit dem Support zu tun hattest willst du ganz von alleine mehr bezahlen. Die Jungs sind alle Admins und Meister ihres Fachs – es ist keine Seltenheit zu jeder Tages und Nachtzeit innerhalb von Minuten eine Antwort zu bekommen.
Wenn Du also zumindest grundlegende Kenntnisse vom Umgang mit einer Konsole hast und keine Angst vor langen, aber sehr informativen Texten im Wiki, dann kannst du unter https://uberspace.de gleich loslegen.

Kleiner Hinweis am Rande, für diesen Artikel bekomme ich von den Ubernauten rein gar nichts. Ich schreibe das aus Überzeugung, das Uberspace ein guter Provider ist und ich möchte das noch mehr Leute den Service kennen lernen dürfen. Die Ubernauten selbst schreiben dazu auf ihrer Website:

Wer sich entscheidet, selbst Ubernaut zu werden, will das oft nicht für sich behalten. Und wir fühlen uns geehrt: Wir haben nämlich kein Referrer-Programm zum Mitverdienen und bezahlen auch niemanden dafür, besonders wohlwollend über uns zu schreiben. Wer uns empfiehlt, tut das aus Überzeugung und steht dafür mit seinem Namen – darauf sind wir dann doch mal ein wenig stolz, denn echtes Lob muss man sich eben verdienen. Bleibt die Frage: Wann stellst du uns selbst auf die Probe?
Eure Meinung – Uberspace.de