Contact Form 7 – Scripts, styles and reCaptcha only on certain pages

Many people are using the WordPress Plugin „Contact Form 7“ for displaying and managing their contact forms. The plugin is definitely a musthave if you have no idea, how to integrate a contact form into your WordPress blog. As a contact form is one of the many used ways to flood your inbox with spam mails, the plugin also integrates the Google reCaptcha Service to prevent you from being bombed by spam mails. The plugin author changed the integration to version 3 some time ago which lead to the problem, that the little reCaptcha overlay is displayed on every page of your blog. Some people will find that okay but in my opinion, this should be fixed. After I did some research in the plugin’s forum on wordpress.org I found some working solutions, but there was always something missing. Either the CSS styles were loaded on every page or you had to define the ids of the pages, on which the assets of the plugin had to be loaded.

„Contact Form 7 – Scripts, styles and reCaptcha only on certain pages“ weiterlesen

Composer Update Error – Symfony 3.4 LTS

Heute stieß ich bei einem Symfony 3.4 Projekt auf ein Update Problem mit dem Composer. Die Fehlermeldung war wie folgt:

[ErrorException]
Declaration of Symfony\Flex\ParallelDownloader::getRemoteContents($originUrl, $fileUrl, $context) should be compatible with Composer\Util\RemoteFilesystem::getRemoteContents($originUrl, $fileUrl, $context, ?array &$responseHeaders = NULL)

Nach einer kurzen Recherche zu dem Thema bin ich auf den Issue #406 im Flex Projekt von Symfony gestoßen. Hier geht es genau um die Problematik. Die Lösung ist relativ einfach. Bevor „composer update“ wieder funktioniert, muss zunächst das Symfony Flex Paket aktualisiert werden – und zwar ohne weitere Plugins oder das Ausführen von weiteren Befehlen.

composer update symfony/flex --no-plugins --no-scripts

Anschließend konnte ich wieder wie gewohnt Composer verwenden.

AWS EC2 Hostname nach Neustart behalten

Wenn man zum Beispiel auf einer Ubuntu EC2 Instanz den Hostname geändert hat, kann es sehr wahrscheinlich sein, dass nach einem Neustart der Instanz wieder der ursprüngliche Hostname verwendet wird. Um dieses Verhalten zu unterbinden, gibt es eine einfach Lösung.

/etc/cloud/cloud.cfg.d/

In diesem Verzeichnis muss eine neue Datei mit dem Namen „99_hostname.cfg“ erstellt werden. Der Inhalt ist relativ simpel. Es reicht lediglich eine Zeile aus um der Instanz mitzuteilen, dass die vorhandene (eigene) Konfiguration des Hostname beibehalten werden soll:

preserve_hostname: true

AWS hostalive mit Icinga ohne Ping, aber mit check_tcp

Um einen Host bei Amazon Web Services per Icinga zu überwachen, kann man leider nicht auf den normalen „hostalive“ von Icinga zurückgreifen. Dieser „pingt“ den Server regelmäßig an und meldet sich entsprechend, wenn der Server nicht erwartungsgemäß antwortet.

Auf Amazon EC2 oder auch Lightsail Servern werden Ping-Anfragen erstmal grundsätzlich aus Sicherheitsgründen geblockt. Auf EC2 Servern lassen sich die sogenannten ECHO-Requests (ICMP Requests) zum Glück freischalten –  auf den Lightsail Servern geht das leider nicht.

Um dennoch die Erreichbarkeit überprüfen zu können, kann man bei Icinga anstatt der standardmäßig eingestellten „hostalive“ Abfrage auch einen eigenen Check verwenden, der z.B. die Erreichbarkeit des Hosts per TCP/IP auf einem bestimmten Port (z.B. 80 – WWW) testet.

„AWS hostalive mit Icinga ohne Ping, aber mit check_tcp“ weiterlesen

Icinga Ping-Check deaktivieren

Um den Ping-Test in einem Icinga Host zu deaktivieren, muss eine kleine Anpassung in der „services.conf“ vorgenommen werden, die wiederum dazu führt, dass man in einem Host den Ping-Check deaktivieren kann.

services.conf anpassen

apply Service "ping4" {
    import "generic-service"

    check_command = "ping4"

    ignore where host.vars.ping == "no"
    assign where host.address
}

apply Service "ping6" {
    import "generic-service"

    check_command = "ping6"

    ignore where host.vars.ping == "no"
    assign where host.address6
}

Wichtig ist hier die jeweils die Zeile:

ignore where host.vars.ping == "no"

Damit erreicht man, dass in einem Host, das die Variable vars.ping = „no“ definiert, kein Ping-Check durchgeführt wird.

UTF-8 in Windows Shell

Um unter Windows z.B. Umlaute richtig in der Eingabeaufforderung darstellen zu lassen, muss manchmal zunächst die passende Codepage aktiviert werden, um den vollen UTF-8 Zeichensatz darstellen zu können.

Dazu öffnet man eine neue Eingabeaufforderung oder PowerShell und gibt folgenden Befehl ein:

chcp 65001

Die Eingabe sollte mit „Aktive Codepage: 65001“ bestätigt werden.

Webserver kann nicht auf Port 80 starten

Falls es beim Start eines Docker Containers unter Windows zu folgendem Fehler kommt

docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint […]: Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error Permission denied.

könnte ein Windows-Dienst der still und heimlich im Hintergrund auf Port 80 läuft die Ursache dafür sein.

Mit dem PowerShell Befehl

Get-NetTCPConnection -LocalPort 80 | Format-List

findet man dann relativ wenig hilfreiche Informationen – außer, dass wie in meinem Fall ein Prozess mit der ID 4 den Port verwendet.

Get-Process -Id 4

Liefert als „ProcessName“ lediglich „System“.

Wenn man anschließend den PowerShell Befehl

net stop http

verwendet, listet Windows die Dienste auf, die aktuell an den Port 80 angebunden sind und im nächsten Schritt beendet werden. Bei mir waren das u.a. die Druckerwarteschlange, Windows Media Player-Netzwerkfreigabedienst, WWW-Publishingdienst, SSDP-Suche und einige weitere mehr. Die Abfrage, ob diese Dienste jetzt beendet werden sollen habe ich mit „J“ bestätigt und schon funktionierte anschließend auch der Start eines nginx auf dem lokalen Port 80.

docker run -d -p 80:80 nginx

Hyper-V unter Windows 10 aktivieren und deaktivieren

Windows 10 (und 8) Pro und Enterprise bringen das Hyper Virtualization Feature (kurz: Hyper-V) mit, was von Docker zwingend benötigt wird, um unter Windows lauffähig zu sein.

Hyper-V kann auf verschiedene Arten ein- und ausgeschaltet werden. Am einfachsten geht es per Shell-Befehl. Dafür wird eine Shell mit Administratorberechtigung benötigt.

Hyper-V aktivieren:

bcdedit /set hypervisorlaunchtype auto

– oder –

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

Hyper-V deaktivieren:

bcdedit /set hypervisorlaunchtype off

– oder –

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V /All

Anschließend sollte der PC neugestartet werden.

Eine Anmerkung zur Verwendung von Docker und VMware auf einem System. Leider ist VMware im Moment nicht mit Hyper-V kompatibel. Das führt dazu, dass man immer nur eine der beiden Virtualisierungslösungen nutzen kann, da Docker auf Hyper-V angewiesen ist.

Zsh (z shell) Numpad aktivieren (Oh My Zsh)

Im Ausgangszustand der Z Shell sind die Tasten auf dem Numpad nicht aktiviert.

Wenn man die folgenden Einträge die Datei ~/.zshrc aufnimmt und sich einmal neu in die Shell einloggt, funktionieren die Tasten wie gewohnt.

# Numpad
# 0 , Enter
bindkey -s "^[Op" "0"
bindkey -s "^[On" ","
bindkey -s "^[OM" "^M"
# 1 2 3
bindkey -s "^[Oq" "1"
bindkey -s "^[Or" "2"
bindkey -s "^[Os" "3"
# 4 5 6
bindkey -s "^[Ot" "4"
bindkey -s "^[Ou" "5"
bindkey -s "^[Ov" "6"
# 7 8 9
bindkey -s "^[Ow" "7"
bindkey -s "^[Ox" "8"
bindkey -s "^[Oy" "9"
# + -  * /
bindkey -s "^[Ol" "+"
bindkey -s "^[OS" "-"
bindkey -s "^[OR" "*"
bindkey -s "^[OQ" "/"

# Home / End
bindkey "\033[1~" beginning-of-line
bindkey "\033[4~" end-of-line

Das hier gezeigte Beispiel funktioniert bei mir ohne Probleme mit einem deutschen Tastaturlayout. Sollte die Tasten nicht funktionieren, können die richtigen Bezeichner einfach herausgefunden werden, indem man auf der Shell „STRG+V“ drückt und anschließend die entsprechende Taste.