Postfix, Dovecot und virtuelle Domains (ohne SQL-Datenbank)

Meinen E-Mail-Server habe ich teilweise nach der ISP-Mail-Anleitung eingerichtet. Da mir aber die dort vorgeschlagene Einrichtung mittel mysql-Datenbank zu aufwendig erschien, habe ich es etwas abgewandelt.

Zu einer bestehenden Domain sollte eine weitere hinzukommen, die jedoch E-Mails nur weiterleitet (es soll aber auch möglich sein, E-Mails mit dieser Domain zu verschicken). Dazu wird in die Datei /etc/postfix/main.cf
folgendes eingefügt:

virtual_alias_domains = anderedomain.de
virtual_alias_maps = hash:/etc/postfix/virtual

Letztere Datei (/etc/postfix/virtual) hat dabei folgenden Inhalt, womit eine Weiterleitung auf  beispiel@example.org eingerichtet wird.

info@anderedomain.de     beispiel@example.org

Soweit so gut. Mails an info@anderedomain.de werden nun weitergeleitet an beispiel@example.org.

Nun soll es auch möglich sein, E-Mails unter dem Namen info@anderedomain.de zu verschicken. Da die Authentifizierung bei Postfix über SASL von Dovecot eingerichtet ist, und kein Linux-Systemnutzer für die E-Mail-Adresse eingerichtet werden soll, eine Datei mit einem ähnlichen Schema wie /etc/passwd angelegt.

/var/vmail/conf/benutzerdb:

info@anderedomain.de:{plain}passWORT

Für einen ersten Test sollte das ausreichen. Sicherer ist natürlich, nur den MD5-Hash des Passwortes zu speichern. Dieser lässt sich hier berechnen. Für obiges Passwort würde entsprechend die Datei dann so aussehen:
info@anderedomain.de:{MD5}30b9de8ee60962fec6006a1ac474b733

Die Passwortdatei muss nun noch Dovecot bekannt gemacht werden. In der Datei /etc/dovecot/dovecot.conf wird dazu folgendes eingetragen:

passdb passwd-file {
args = /var/vmail/conf/benutzerdb
}

Dadurch kann sich ein E-Mail-Client gegenüber dem Server authentifizieren, ohne dass ein Linux-Benutzer angelegt werden musste.

Berkeley-Datenbank anschauen

Kürzlich wollte ich die Datenbankdatei von postgrey anschauen, um zu sehen, wer mir da schon alles ne E-Mail geschrieben hat. Die relevanten Daten stehen in der Datei /var/lib/postgrey/postgrey.db. Es handelt sich hierbei um eine Berkeley-Datenbank.

Um die Datei zu betrachten muss man in Debian zunächst das Paket db4.6-util installieren (mittels aptitude install db4.6-util).

Anschließend kann man sich den Inhalt der Datenbank menschenlesbar anzeigen lassen:
db4.6_dump -p /var/lib/postgrey/postgrey.db

Veröffentlicht am
Kategorisiert in Linux

SSL-Zertifikat mit Wildcard und ohne

Für meinen Webserver wollte ich ein SSL-Zertifikat haben, bei dem sämtliche Subdomains enthalten sind (wie z.B. http://notizen.stephangsell.de), aber auch die Hauptdomain selber (http://stephangsell.de, ohne www).
Damit das beides funktioniert, muss das Feld subjAltName im Zertifikat gesetzt sein.
Den nötigen Tipp hab ich hier gefunden.

Zunächst sollte ein Private Key erzeugt werden, aus welchem später das Zertifikat erstellt werden kann:
openssl genrsa -out ~/stephangsell.de.key 2048

Um für CACert.de eine Certificate-Signing-Request (CSR) zu erstellen, muss man zunächst eine Konfigurationsdatei für OpenSSL erstellen:

[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ v3_req ]
subjectAltName = $ENV::SUBJALTNAME
[ req_distinguished_name ]
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64

Wir erstellen die Datei und speichern sie z.B. unter ~/myopenssl.cnf ab.

Der anschließend notwendige Aufruf von openssl lautet
SUBJALTNAME='DNS:*.stephangsell.de,DNS:*.example.net' openssl req \
-config ~/myopenssl.cnf \
-subj '/CN=stephangsell.de/emailAddress=admin@example.com' \
-new -extensions v3_req -key ~/stephangsell.de.key

Als Ausgabe erhält man das CSR, welches nun in das entsprechende Feld, z.B. bei CACert, kopiert wird. Daraus wird schließlich das unterzeichnete Zertifikat berechnet.


[Update]
Alternativ zu der hier beschriebenen Vorgehensweise lässt sich auch der CSRGenerator vom CACert-Wiki verwenden:
http://wiki.cacert.org/wiki/CSRGenerator

EXIF-Manipulationen mit jhead

Das Kommandozeilenprogramm jhead (aus dem Paket media-gfx/jhead) ist ein mächtiges Werkzeug um Fotos umzubenennen und das Datei- oder EXIF-Datum zu ändern.

Hat man beispielsweise vergessen, die Zeit der Digitalkamera auf Sommerzeit umzustellen, ändert folgender Befehl das EXIF-Datum sämtlicher Fotos um 1 Stunde nach vorne:
jhead -ta+1:00:00 *.jpg
Der Befehl
jhead -ft *.jpg
ändert schließlich auch das Dateidatum auf die Zeit aus dem EXIF-Kopf.
Mittels
jhead -nf%Y%m%d_%H%M%S *.jpg
kann man den Dateinamen von jhead umbenennen lassen in das Format Jahr-Monat-Tag_Stunde-Minute-Sekunde.

Besitzt die Kamera einen Beschleunigungssensor, um die Drehrichtung der Aufnahmen zu erkennen (Hoch- oder Querkant), so kann man die Fotos mit
jhead -autorot *.jpg
automatisch rotieren lassen. Dies ist praktisch für Programme, die den EXIF-Header bei der Anzeige nicht automatisch betrachten.

Alles zusammen geht natürlich auch gleichzeitig:

jhead -autorot -nf%Y%m%d_%H%M%S -ft *.jpg

oder, wenn die Dateien, wie im Fall der Panasonic-Kamera eine großgeschriebene Dateienung aufweisen:

jhead -autorot -nf%Y%m%d_%H%M%S -ft *.JPG

Vorteilhaft an letztem Befehl ist, dass automatisch in .jpg (also kleingeschrieben) umbenannt wird.

Bilder verkleinern geht mit

mogrify -quality 80 -resize 1920x1080 *.jpg

Die Seitenverhältnisse bleiben dabei intakt. Aber Achtung: die Dateien werden überschrieben, daher sollte man nur mit Kopien der Originaldateien arbeiten.

Möchte man sämtliche .jpg Dateien in allen Unterverzeichnissen verkleinern, eignet sich folgender Befehl:

find . -iname "*.jpg" -exec mogrify -quality 80 -resize 1920x1080 {} \;

—–
EDIT:

Die Kamera speichert die Fotos als *.JPG ab, folgender Befehl ändert die Dateierweiterung auf .jpg:
mmv '*.JPG' '#1.jpg'

Rekursiv lassen sich sämtliche {jpg,JPG}-Dateien mit folgendem Befehl automatisch drehen:
find . -iname "*.jpg" -exec jhead -autorot {} \;

Veröffentlicht am
Kategorisiert in Gentoo, Linux Verschlagwortet mit ,

Amarok stürzt ab wegen falscher Xine-Version

Da ich das Berkano-Overlay nutze, ist bei mir momentan das Paket media-libs/xine-lib in der Version 1.2.9999_p247 installiert. Das verträgt sich leider nicht mit phonon (media-sound/phonon). D.h. bei der Installation von phonon wird trotz xine-USE-Flag das xine-Backend nicht installiert. Das ist die Fehlermeldung beim emergen von phonon:

— The following OPTIONAL packages could NOT be located on your system.
— Consider installing them to enable more features from this software.
+ Xine: xine-lib v1.1.90 was found on your system. This version contains major changes compared to 1.1.x and has not been tested properly for use with this backend. Consider downgrading to version 1.1.9.
+ Xine: libxine is needed to compile phonon xine backend

Leider bricht der Kompiliervorgang hier nicht ab. Es wird einfach ohne das Xine-Backend weiter gemacht. Leider braucht aber u.a. Amarok genau dieses.

Meine (zugegebenermaßen unbefriedigende) Lösung ist das Maskieren der neuen Xine-lib-Versionen in /etc/portage/package.mask/monolithic

=media-libs/xine-lib-1.2.9999_p235
=media-libs/xine-lib-1.2.9999_p240
=media-libs/xine-lib-1.2.9999_p247

Danach sollte ein emerge xine-lib erfolgen, um wieder die alte Version zu installieren. Anschließend kann man wieder phonon installieren mit emerge phonon

Jetzt sollte auch Amarok wieder laufen.

Miktex und Texlive unter Linux

Ebuild für MiKTeX Tools:

dev-tex/miktex-tools/miktex-tools-2.8_beta2.ebuild

EAPI=1

inherit cmake-utils

DESCRIPTION=“Miktex Tools for Unix“

MY_P=“miktex-2.8-beta-2″
S=“${WORKDIR}/${MY_P}“

HOMEPAGE=“http://miktex.org/unx/“
SRC_URI=“http://ctan.osmirror.nl/systems/win32/miktex/source/${MY_P}.tar.bz2″

LICENSE=“GPL-2″
SLOT=“0″

KEYWORDS=“~x86 ~amd64″
IUSE=““

COMMON_DEPEND=“x11-libs/qt:4″

RDEPEND=“${COMMON_DEPEND}“

DEPEND=“${COMMON_DEPEND}“

src_unpack() {
unpack ${A}
cd „${S}“
epatch „${FILESDIR}/qvariant.patch“
}

Es ist noch ein Patch notwendig. Erstellt habe ich ihn mittels:

diff -u Programs/MiKTeX/PackageManager/Qt/PackageTableModel.cpp.bak Programs/MiKTeX/PackageManager/Qt/PackageTableModel.cpp > qvariant.patch

dev-tex/miktex-tools/files/qvariant.patch (Funktioniert so nicht, es müssen die Leerzeichen an den Zeilenanfängen durch Tabs ersetzt werden)

— Programs/MiKTeX/PackageManager/Qt/PackageTableModel.cpp.bak 2008-09-09 15:40:42.000000000 +0200
+++ Programs/MiKTeX/PackageManager/Qt/PackageTableModel.cpp 2009-03-23 14:02:02.000000000 +0100
@@ -97,7 +97,7 @@
true)
.c_str());
case 2:
– return (packageInfo.GetSize());
+ return (uint)(packageInfo.GetSize());
case 3:
return (QDateTime::fromTime_t(packageInfo.timePackaged).date());
case 4:

miktex-tools kann nun installiert werden (vorher sollte noch mpm (alte Version) deinstalliert werden):

emerge –unmerge dev-tex/mpm

MAKEOPTS=“-j1″ emerge miktex-tools

Das -j1 ist wichtig, da paralleles Make hier nicht funktioniert.
Anschließend speichert mpm die Latex-Pakete als normaler Benutzer in dem Verzeichnis ~/miktex-texmf ab.
Damit TeXLive sie auch findet, kann man einfach

rm ~/texmf
ln -s ~/miktex-texmf ~/texmf

ausführen. Pakete, die vom Miktex Packet Manager (z.B. mittels mpm_qt) installiert werden, werden nun (nach evtl erst nach texhash) auch von TexLive gefunden.

Pfade anzeigen lassen:
kpsewhich -expand-path „\$TEXMFHOME“
kpsewhich -show-path=tex

Konfigurationsdatei für texlive:
/etc/texmf/web2c/texmf.cnf

Virtualbox ab 2.1.0 mit Netzwerkkarte im Hostinterface-Modus

Um unter Gentoo als VirtualBox Host-System die Netzwerkkarte im Host-Modus zu betreiben, muss man einfach nur das Modul vboxnetflt laden mittels

modprobe vboxnetflt

Damit dies automatisch bei jedem Neustart passiert, ist Folgendes in die Datei /etc/conf.d/modules einzufügen:

modules_2_6=“${modules_2_6} vboxnetflt“ module_vboxnetflt_args_2_6=““

Anschließend ändert man die Virtuelle Maschine in Virtualbox so ab, dass sie die Netzwerkkarte des Host-PCs nutzt:

WLAN und WPA mit WPA_supplicant

Mein neuer WLAN-USB-Stick, ein Digitus DN-7003GT erzeugt mit lsusb folgende Ausgabe:

Bus 002 Device 003: ID 0bda:8189 Realtek Semiconductor Corp

Seit Kernel 2.6.27 funktioniert dieser Adapter tadellos mit dem Kernel-Modul RTL8187.

Das Programm iwconfig aus dem Paket net-wireless/wireless-tools listet den Stick unter dem Namen wlan0 auf.

Damit dieser sich auch mit einem WPA-Verschlüsselten Netzwerk verbinden kann sind folgende Schritte nötig:

Zunächst einmal muss das Paket net-wireless/wpa_supplicant installiert werden.

Anschließend wird die Datei /etc/conf.d/net.wlan0 mit folgendem Inhalt erstellt:

# wlan0 abschalten, wenn eine Netzwerkkabelverbindung gefunden wurde
# von http://www.gentoo-wiki.info/Wireless/Configuration#WPA
preup() {
if [[ ${IFACE} == „wlan0“ ]]; then
if ifplugstatus | grep -q ‚eth0: link beat detected‘; then
ewarn „Wired connection on eth0 detected, aborting configuration on ${IFACE}“
return 1
fi
fi
return 0
}

modules=( „wpa_supplicant“ )
wpa_supplicant_wlan0=“-D wext -c /etc/wpa_supplicant/wpa_supplicant.conf“


Zunächst Außerdem wird mit dem Befehl

ln -s /etc/init.d/net.lo /etc/init.d/net.wlan0

ein Init-Skript erzeugt.

Die Konfigurationsdatei für wpa_supplicant liegt unter /etc/wpa_supplicant/wpa_supplicant.conf

Sie erhält folgenden Inhalt:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=users
update_config=1

network={
ssid=“WPA-AP“
psk=“DAS_WPA_PASSWORT“
priority=5
}

network={
ssid=“WEP-AP“
key_mgmt=NONE
wep_key0=11111111111111111111111111
wep_tx_keyidx=0
priority=5
# auth_alg=SHARED
}

Nun sollte sich der WLAN-Stick mittels

/etc/init.d/net.wlan0 start

mit dem konfigurierten Netzwerk verbinden können.

Netzwerk: WLAN nur aktivieren, wenn kein Netzwerkkabel eingesteckt ist

Um seine WLAN-Karte (oder WLAN-USB-Stick) nur zu aktivieren, wenn gerade kein Netzwerkkabel eingesteckt ist, kann man folgende Schritte ausführen.

(Annahme: die WLAN-Karte firmiert unter dem Namen wlan0)

Inhalt der Datei /etc/conf.d/net.eth0

# wlan0 einschalten, wenn das Netzwerkkabel nicht eingesteckt wurde
preup() {
if ethtool „${IFACE}“ | grep -q ‚Link detected: no‘; then
ewarn „No link on ${IFACE}, aborting configuration“
/etc/init.d/net.wlan0 start
fi
return 0
}

#config_eth0=( „dhcp“ )
config_eth0=( „192.168.0.10/24“ )
routes_eth0=(
„default via 192.168.0.1“ # IPv4 default route
)

Für den Inhalt der Datei /etc/conf.d/net.wlan0 siehe vorherigen Post.

Danach sollte man das Paket sys-apps/ifplugd installieren. Es ermöglicht es festzustellen, ob an der Netzwerkkarte ein Kabel angeschlossen ist und reagiert automatisch auf Veränderungen des Zustands.

Anschließend sollte man die Datei /etc/ifplugd/ifplugd.action dahingehend abändern, dass beim Entfernen des Netzwerkkabels automatisch das wlan0-Interface gestartet wird und entsprechend beim Einstecken des Netzwerkkabels wieder gestoppt wird.

Ausschnitt aus der Datei /etc/ifplugd/ifplugd.action (siehe dazu auch das gentoo-wiki.info)

case „$2“ in
up)
if [ „${INITNG}“ = „yes“ ]
then
ARGS=“-u net/$1″
else
ARGS=“–quiet start“
#wenn ein Netzwerkkabel eingesteckt wurde, soll wlan0 gestoppt werden
/etc/init.d/net.wlan0 –quiet stop
fi
;;
down)
if [ „${INITNG}“ = „yes“ ]
then
ARGS=“-d net/$1″
else
ARGS=“–quiet stop“
#wenn das Netzwerkkabel gezogen wurde, soll wlan0 gestartet werden
/etc/init.d/net.wlan0 –quiet start
fi
;;
*)
echo „$0: wrong arguments“ >&2
echo „Call with “ >&2
exit 1
;;
esac

Um zu verhindern, dass wlan0 automatisch beim Hochfahren gestartet wird, kann man in der Datei /etc/rc.conf die Zeile

rc_plug_services=“!net.wlan0″

einfügen.

System Stresstest

Um seinen Rechner mal testweise unter Volllast laufen zu lassen, bietet sich stress an (im Paket app-benchmarks/stress).

Beispielsweise sorgt der folgende Befehl dafür, dass die CPU mit 8 Threads und der Arbeitsspeicher und die Festplatte für 5 Minuten voll ausgelastet werden:

stress –cpu 8 –io 4 –vm 2 -hdd 1 –timeout 300s

Damit lässt sich prüfen, ob die Kühlung im Rechner ausreichend ist.

Veröffentlicht am
Kategorisiert in Gentoo, Linux