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.

Redis Installation auf Ubuntu 12.04

Zunächst das apt-repository von „chris lea“ zum Server hinzufügen:

sudo add-apt-repository ppa:chris-lea/redis-server

Anschließend die Paketlisten aktualiseren und den Redis Server per apt-get-Befehl installieren:

sudo apt-get update && sudo apt-get install redis-server

Die Konfigurationsdatei befindet sich im Verzeichnis /etc/redis/redis.conf