Kategorie: Linux

MailHog – Einrichten eines lokalen Mailservers

Bei manchen Projekten ist es unvermeidbar einen lokalen Mailserver einzurichten, um gewissen Funktionalitäten zu prüfen bzw. zu entwickeln. Oftmals ist es jedoch gerade für Anfänger eine Herausforderung solch alltäglich gebräuchliche Tools zu verwenden bzw. einzurichten. Aus diesem Grund widmet  sich dieser Artikel dem Installieren eines lokalen Mailservers (MailHog) auf einem Linux Server, sowie dessen Konfiguration in einer TYPO3 7.6 Instanz.

Zu Beginn ist das richtige MailHog Packet (v0.2.1 hier) von https://github.com/mailhog/MailHog/ releases zu downloaden. Ein guter Workaround hierfür ist:

1) Link der richtigen Version kopieren
2) In der Command Line via wget im Root Verzeichnis der lokalen Instanz herunterladen

Kleines Shell Script zum Auffinden von Bildern mit gewisser Größe

Voraussetzungen:

  • Bash
  • find, awk
  • identify von ImageMagick oder GraphicsMagick
#!/bin/bash

MIN_WIDTH=240
MIN_HEIGHT=200

# internal field separator, https://bash.cyberciti.biz/guide/$IFS
# changed to make file names with spaces work
OIFS="$IFS"
IFS=$'\n'
# find all files with type image
for image in `find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) print $1}'`; do
# get image dimensions (width/height), ignore errors
       width_and_height=`identify -format '%w %h' "$image" 2>/dev/null`
       if test -n "$width_and_height"; then
               width=`echo "$width_and_height" | awk '{print $1}'`
               height=`echo "$width_and_height" | awk '{print $2}'`

               if [ "$width" -lt $MIN_WIDTH ] || [ "$height" -lt $MIN_HEIGHT ]; then
                       echo "wrong dimensions: $image $width x $height"
               fi
       else
               echo "unable to get image dimensions for $image"
       fi
done
IFS="$OIFS"

[rpm] nginx-rpm mit pagespeed bauen

sudo -s
yum install rpm-build
cd
wget http://nginx.org/packages/centos/6/SRPMS/nginx-1.6.1-1.el6.ngx.src.rpm
rpm -i nginx-1.6.1-1.el6.ngx.src.rpm
NPS_VERSION=1.8.31.4
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
unzip release-${NPS_VERSION}-beta.zip
cd ngx_pagespeed-release-${NPS_VERSION}-beta/
wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz
cd rpmbuild/SPECS/
vim nginx.spec

–add-module=/root/ngx_pagespeed-release-1.8.31.4-beta in den beide configure-blöcken hinzufügen.

rpmbuild -ba nginx.spec

fertiges rpm landet in /root/rpmbuild/RPMS/x86_64/

hilfreiche Quellen f. obigen Workflow:
https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source und
http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment

[bash] VCS Info im Shell-Prompt

folgender Code in der .bashrc zeigt den VCS-Status (git oder svn) des aktuellen Verzeichnisses an.
Getestet unter Windows8/cygwin, sollte aber auf jeder Plattform funktionieren (wenn eine bash verwendet wird).
export LC_MESSAGES=C ist nötig wenn svn oder git lokalisierte Meldungen ausgeben (ein ewiges Ärgernis).


export LC_MESSAGES=C
GREEN="\[\033[0;32m\]"
LIGHT_GREEN="\[\033[1;32m\]"
GRAY="\[\033[1;30m\]"
LIGHT_BLUE="\[\033[1;34m\]"
LIGHT_GRAY="\[\033[0;37m\]"
COLOR_OFF="\[\e[0m\]"
function prompt_func() {
branch_pattern="\* ([^$IFS]*)"
PS1="$LIGHT_GRAY\u$COLOR_OFF $LIGHT_GREEN\w$COLOR_OFF"
if [[ -d "./.git" && "$(git branch --no-color 2> /dev/null)" =~ $branch_pattern ]]; then
branch="${BASH_REMATCH[1]}"
PS1+=":$LIGHT_BLUE$branch$COLOR_OFF"
elif [[ -d "./.svn" ]]; then
path_pattern="URL: ([^$IFS]*).*Repository Root: ([^$IFS]*).*Revision: ([0-9]*)"
if [[ "$(svn info 2> /dev/null)" =~ ${path_pattern} ]]; then
branch=${BASH_REMATCH[1]##`expr ${BASH_REMATCH[2]}`}
revision="${BASH_REMATCH[3]}"
PS1+=":$LIGHT_BLUE$branch$GRAY@$revision$COLOR_OFF"
fi
fi
PS1+=" "
}
PROMPT_COMMAND=prompt_func

[vagrant] centos 7 box

Da ich im Netz keine gefunden habe.
Hier gibts jetzt eine.

[rpm] Liste installierter Packete OHNE Versionsnummer

rpm -qa zum erzeugen einer Liste der installierten Packete eines RPM-basierten Linux-Systemes ist gut und schön um die Liste zwischen Maschinen mit der selben Distributions-Version zu übertragen (centos 6.5 -> centos 6.5).

Das funktioniert aber im allgemeinen nicht wenn es unterschiedliche Versionen sind (z.B. centos 6.5 -> centos 7).

Hier hilft das -f Flag des rpm-Kommandos weiter. Damit lässt sich die Ausgabe anpassen und beispielsweise nur der Packetname ausgeben.

rpm -qa --qf "%{NAME}\n" > rpm.lst

Die so erzeugte Liste lässt sich dann z.B. wie folgt am Zielsystem einspielen um einen mehr oder weniger brauchbaren Softwarestand zu kriegen (da nicht immer alle Packete auch am neuen System verfügbar sind ist manchmal/immer Nacharbeit nötig)

mit vagrant & virtualbox schnell zu einer debian-vm mit allen(?) für typo3 nötigen komponenten


mkdir mein-typo3-server
cd mein-typo3-server
git clone https://github.com/thegass/vagrant-box-typo3-ready.git .
vagrant up

Dabei wird eine mit allen(?) nötigen Komponenten ausgestattete Box heruntergeladen und mit folgenden features konfiguriert und gestartet.
Gast Port 80 gemappt auf Host Port 8080
Host-Verzeichnis htdocs gemountet auf /var/www im Gast.
Mysql-Root Passwort: vagrant

Alles was dann noch fehlt ist die eigentliche Typo3-Installation in htdocs.

Über sendmail ausgehende E-Mails an lokale Adresse umleiten

Manchmal (auf Entwicklungsumgebungen wohl immer)  ist es ganz praktisch, wenn keine E-Mails unabsichtlich ins Internet entschwinden. Vor allem, wenn man mit den Daten echter Kunden „jongliert“.
Damit man nicht immer daran denken muss, kann man sendmail so konfigurieren, dass eine lokale E-Mail Adresse als Smarthost verwendet wird und somit alle E-Mails in der lokalen Mailbox landen.

Und das geht so (gegebenenfalls muss sudo zum Einsatz kommen):

  1. # vim /etc/mail/sendmail.mc
  2. define(`SMART_HOST',`local:wklinger') am Anfang der Datei einfügen
  3. Konfiguration erzeugen: # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
  4. sendmail neu starten: # /etc/init.d/sendmail restart

iTerm2 und tmux

Als vermeintlich bessere Alternative (dazu habe ich noch keine eigene Meinung) zu screen bietet sich tmux als Terminal Multiplexer an. Nachdem tmux seit dem letzten Beta Release von iTerm2 stark in darin integriert ist, werde ich mir das einmal näher ansehen.

Links:

Postfix: alle mails kriegen

Manchmal machts (vorallem auf Entwicklungsservern) Sinn alle ausgehenden Mails unabhängig von der Empfängeradresse an einen Empfänger zuzustellen.

Postfix macht einem sowas recht einfach.

Nehmen wir an wir wollen alles an catchall@mydomain.invalid zustellen.

Als erstes tragen folgendes in die /etc/postfix/main.cf ein


always_bcc=catchall@mydomain.invalid
transport_maps = hash:/etc/postfix/transport

Damit werden schon mal alle Mails als bcc an catchall@mydomain.invalid gesendet.

Als 2. Schritt konfigurieren wir die Transport-Table (/etc/postfix/transport) so daß nur an diese Adresse zugestellt wird.


catchall@mydomain.invalid :
* discard:silently

Die erste Zeile bewirkt daß Mails an catchall@mydomain.invalid „normal“ zugestellt werden.
Die 2 Zeile verwirft Mails an alle anderen Empfänger.

Anfrage