Deaktivieren von xdebug beim Ausführen von Composer


98

Beim Ausführen composer diagnosewird folgende Fehlermeldung angezeigt:

Die xdebug-Erweiterung ist geladen, dies kann Composer etwas verlangsamen. Es wird empfohlen, es bei Verwendung von Composer zu deaktivieren.

Wie kann ich xdebug nur deaktivieren, wenn ich Composer ausführe?

Antworten:


81

Update : Das Problem wurde in Composer 1.3 behoben . Aktualisieren Sie den Composer durch Ausführen auf die neueste Version composer self-update, anstatt die folgende Problemumgehung zu versuchen.


Hier ist meine Änderung des Codes von @ ezzatron. Ich habe das Skript aktualisiert, um INI-Dateien aus der phpinfo-Ausgabe zu erkennen.

#!/bin/sh

php_no_xdebug () {
    temporaryPath="$(mktemp -t php.XXXX).ini"

    # Using awk to ensure that files ending without newlines do not lead to configuration error
    php -i | grep "\.ini" | grep -o -e '\(/[a-z0-9._-]\+\)\+\.ini' | grep -v xdebug | xargs awk 'FNR==1{print ""}1' | grep -v xdebug > "$temporaryPath"

    php -n -c "$temporaryPath" "$@"
    rm -f "$temporaryPath"
}

php_no_xdebug /usr/local/bin/composer.phar $@
# On MacOS with composer installed using brew, comment previous line
# Install jq by executing `brew install jq` and uncomment following line.
# php_no_xdebug /usr/local/Cellar/composer/`brew info --json=v1 composer | jq -r '.[0].installed[0].version'`/libexec/composer.phar $@

3
Dies ist meiner Meinung nach die mit Abstand eleganteste Lösung für das Problem, IMHO. Danke Joyce!
Thomas Hansen

2
Beste. Skript. Ever
Maciej Paprocki

1
Ich musste den Shebang bin/basheher anpassen als /bin/sh, da letzterer das functionSchlüsselwort (Ubuntu 14.04 LTS) nicht mochte .
Ashnazg

Ich habe den Code aktualisiert und das Funktionsschlüsselwort entfernt, um die Kompatibilität zu verbessern.
Joyce Babu

1
Sie können bestätigen, dass Sie die neueste Version ausführen, indem Siecomposer self-update
Joyce Babu

77

Dieser Befehl deaktiviert das PHP5 Xdebug-Modul für CLI (und damit Composer):

sudo php5dismod -s cli xdebug

Es entfernt den xdebug.ini- Symlink von/etc/php5/cli/conf.d/

Dies wurde auf http://blog.lorenzbausch.de/2015/02/10/php-disable-xdebug-for-cli/ vorgeschlagen.

Beachten Sie, dass Sie Ubuntu 16.04 wahrscheinlich folgendermaßen ausführen müssen:

sudo phpdismod -s cli xdebug

4
Ich habe die beiden Aliase hinzugefügt alias xdebug-on='sudo php5enmod -s cli xdebug'und alias xdebug-off='sudo php5dismod -s cli xdebug', so ist es jetzt einfach xdebug-on, xdebug-offxdebug zu aktivieren und zu deaktivieren .
Daniel Mecke

Nicht tragbar. Wahrscheinlich nur für Linux.
Diti

Funktioniert hervorragend auf der Laravel Homestead Box (Ubuntu / Debian). Eine längere Beschreibung der Funktionsweise: laracasts.com/discuss/channels/forge/disable-xdebug
Justin

2
danke dafür :) aber ich habe ubuntu 16.04 und wenn jemand dies benutzen muss, starte einfach sudo phpdismod -s cli xdebug
Angel M.

Wie wäre es mit PHP7 in Ubuntu? Muss ich nur den Symlink entfernen? /etc/php/7.0/cli/conf.d
Gastonnina

40

Ich glaube nicht, dass es eine Option gibt, PHP so zu konfigurieren, dass es je nach Zielskript unterschiedliche Konfigurationen laden kann. Zumindest nicht ohne Duplizieren von INI-Dateien ...

Sie können diese Optionen jedoch hinzufügen, wenn Sie Composer mit PHP ausführen:

php -n -d extension=needed_ext.so composer.phar

-nwird PHP anweisen, jede php.ini zu ignorieren. Dadurch wird verhindert, dass xdebug für genau diesen Befehl geladen wird.

-dMit options können Sie jede gewünschte Option hinzufügen (aktivieren Sie beispielsweise required_ext.so). Sie können mehrere -dOptionen verwenden. Dies ist natürlich optional, Sie benötigen es möglicherweise nicht.

Dann können Sie einen Alias ​​erstellen, um ihn wieder zuckerhaltig zu machen.

Eine typische Lösung (weil der Komponist json braucht):

php -n -d extension=json.so composer.phar

greg0ire> meine lösung, basierend darauf:

#!/bin/bash
options=$(ls -1 /usr/lib64/php/modules| \

    grep --invert-match xdebug| \

    # remove problematic extensions
    egrep --invert-match 'mysql|wddx|pgsql'| \

    sed --expression 's/\(.*\)/ --define extension=\1/'| \

    # join everything together back in one big line
    tr --delete '\n'
)

# build the final command line
php --no-php-ini $options ~/bin/composer $*

alias composer=/path/to/bash/script.sh

Es sieht hässlich aus (ich habe versucht und es mit xargs nicht geschafft), funktioniert aber ... Ich musste einige Erweiterungen deaktivieren, sonst erhalte ich die folgenden Warnungen:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so: undefined symbol: mysqlnd_connect in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - /usr/lib64/php/modules/pdo_mysql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_pgsql.so' - /usr/lib64/php/modules/pdo_pgsql.so: undefined symbol: pdo_parse_params in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/wddx.so' - /usr/lib64/php/modules/wddx.so: undefined symbol: php_XML_SetUserData in Unknown on line 0

Ich habe es -ngestern versucht und hatte ein Problem, weil mir die pharErweiterung fehlte . Ich werde versuchen, immer mehr Erweiterungen hinzuzufügen, bis es funktioniert. Ich denke, das ist eine gute Lösung. Gemäß dem Alias ​​habe ich bereits einige zsh-Aliase, die ich nicht pflege. Vielleicht werde ich versuchen, die Binärdatei durch ein Bash-Skript zu ersetzen oder zu sehen, ob ich die Aliase konfigurieren kann.
Greg0ire

Das Problem bei diesem Whitelist-Ansatz besteht jedoch darin, dass die Whitelist möglicherweise wächst, je nachdem, was die composer.jsonBenutzer in ihrer Whitelist benötigen , z. B. "ext-ldap": "*", oder einfach abhängig davon, was erforderlich ist, damit die Aufgaben nach der Installation ordnungsgemäß ausgeführt werden … Wenn es nur eine Möglichkeit gäbe, eine Erweiterung auf die schwarze Liste zu setzen…
greg0ire

1
Ich werde versuchen, etwas mit der Ausgabe vonphp -m
greg0ire

Es kommt mir in den Sinn, aber ich gehe davon aus, dass Sie xdebug in einer Entwicklungsumgebung verwenden. Ist der Komponist so langsam, dass er diese Optimierung benötigt?
Gui-Don

Oh nein, ich habe das gerade aus der Ausgabe von gesehen diagnose, und da ich Entwicklungs-Docker-Container für mein Team
baue

14

Durch das Erstellen eines Alias ​​unterdrücken Sie diese composer xdebugFehlermeldung.

Fügen Sie diese Zeile einfach zu Ihrem ~/.bash_aliasesSystem hinzu und sie sollte einwandfrei funktionieren.

alias composer="php -n /usr/local/bin/composer"

Laden Sie die Shell neu, um den neuen Alias composerverfügbar zu machen .

source ~/.bash_profile

VERWENDUNG:

$ composer --version

HINWEIS:
Sie müssen nicht unbedingt einen anderen Parameter verwenden.
Abhängig von Ihrem System haben Sie möglicherweise eine .bashrcanstelle von .bash_profile.

AKTUALISIEREN:

Wie @AlexanderKachkaev in den Kommentaren erwähnt, ist es nichts wert, das memory_limit wie folgt hinzuzufügen, um Abstürze in einigen Situationen zu vermeiden:

alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"

3
Dies wird nicht sehr gut funktionieren, sobald eine der Erweiterungen in Skripten nach der Installation oder nach der Aktualisierung benötigt wird. Dies könnte jedoch eine gute Lösung für einfache Projekte sein.
Greg0ire

1
Die -nOption deaktiviert die PharErweiterung, so dass sie möglicherweise nicht voncomposer.phar
brzuchal

1
Das hat bei mir funktioniert. Außerdem habe ich das Speicherlimit deaktiviert, um Abstürze zu vermeiden:alias composer="php -d memory_limit=-1 -n /usr/local/bin/composer"
Alexander Kachkaev

Diese Lösung ist für meine Situation ziemlich einfach und praktikabel. Der Vorschlag zur Speicherbegrenzung von @AlexanderKachkaev ist ein Muss. Seien Sie gut, um die Antwort zu bearbeiten.
Henry

12

Ich habe eine Antwort gefunden, die für OSX ziemlich gut funktioniert und wahrscheinlich für jede PHP-Version angepasst werden kann, die ihre Erweiterungen mithilfe einzelner INI-Dateien im "zusätzlichen Verzeichnis" lädt:

#!/bin/sh

function php-no-xdebug {
    local temporaryPath="$(mktemp -t php-no-debug)"

    find /opt/local/etc/$1/php.ini /opt/local/var/db/$1/*.ini ! -name xdebug.ini | xargs cat > "$temporaryPath"
    php -n -c "$temporaryPath" "${@:2}"
    rm -f "$temporaryPath"
}

alias composer="php-no-xdebug php56 ~/bin/composer"

Toll! Ich habe darauf basierend ein Allzweck-Skript für Ubuntu 14.04-15.10 erstellt. Gist.github.com/perk11/816c4e64023ea26976cf
Konstantin Pereiaslov

Fantastisch, funktioniert gut unter Mac OS, auf Brew installiert PHP 7.1. TY!
Antonio Carlos Ribeiro

7

Normalerweise erstelle ich ein Shell-Skript pro Projekt, da jedes Projekt eine andere PHP-Version hat. Es befindet sich in einem /bin/Verzeichnis neben composer.pharund composer.jsonund ich führe es wie ./bin/composerin meinem Projektverzeichnis aus.

Es sieht so aus (für php56)

#!/bin/sh
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

COMPOSER_DISABLE_XDEBUG_WARN=1 /opt/local/bin/php56 \
    -d xdebug.remote_enable=0 -d xdebug.profiler_enable=0 \
    -d xdebug.default_enable=0 $DIR/../composer.phar "$@"

Die -dOptionen deaktivieren xdebug effektiv. Der COMPOSER_DISABLE_XDEBUG_WARN=1Teil deaktiviert die Probleme mit dem Warnkomponisten.

Das Deaktivieren der xdebug-Erweiterung wird bevorzugt (siehe Composer-Fehlerbehebung ), aber ich persönlich mag das einfachere Skript.

Einige Timings auf meinem Computer: 2 Mit xdebug ausführen und ini-fähig: 1m33

Mit xdebug ausführen, aber ini-deaktiviert: 0m19

Laufen Sie ohne xdebug: 0m10


Ich denke, da Sie XDebug deaktivieren, brauchen Sie Folgendes nicht COMPOSER_DISABLE_XDEBUG_WARN=1: Wenn Sie eine Warnung erhalten, bedeutet dies nur, dass Ihr Skript nicht funktioniert. Das Definieren xdebug.remote_autostartscheint nutzlos, wenn das Remote-Debugging deaktiviert ist.
Greg0ire

Du hast recht xdebug.remote_autostart. Informationen zur Wirksamkeit von Skripten: Composer prüft, ob die xdebug-Erweiterung geladen ist, und nicht, ob tatsächlich etwas unternommen wird. Sehen Sie sich den Code hier an . Die INI-Optionen funktionieren gut in "normalen" PHP-Skripten, aber noch einmal: Ich habe keine Leistungstests durchgeführt ...
Joost

(Schließlich) fand den relevanten Teil im Composer-Handbuch zu dieser Fehlerbehebung: xdebug Auswirkungen auf Composer . Es wird erklärt, dass das Deaktivieren aller xdebug-Optionen über INI-Flags nicht ausreicht, um die Leistungsprobleme zu verringern. Mein Skript funktioniert also nicht. Schade!
Joost

Ich habe etwas Timing gemacht (unter Mac OS X) und ich muss sagen, dass ich mit den Leistungsverbesserungen mit meinem Skript ziemlich zufrieden bin! Mit xdebug Optionen aktiviert es dauert 1m33 , mit den Optionen deaktiviert es dauert 0m19 . Ohne die xdebug-Erweiterung dauert es 0m10 .
Joost

Ok, es gibt sowieso eine Verbesserung. Nicht die beste verfügbare Verbesserung, aber dennoch eine enorme Verbesserung (zumindest unter OS X)
Greg0ire

6

Wenn Sie PHPStorm verwenden, enthält die neueste Version (2016.2) eine Funktion zum Aktivieren von XDebug für CLI-Skripten bei Bedarf. Dies bedeutet, dass Sie XDebug einfach global auf Ihrem Entwicklungscomputer deaktivieren können. Die IDE aktiviert es im laufenden Betrieb, wenn es von Code in Ihren Projekten benötigt wird.

https://blog.jetbrains.com/phpstorm/2016/06/xdebug-on-demand-for-cli-php-scripts-in-phpstorm-2016-2-eap/

PhpStorm 2016.2 führt den Xdebug On Demand-Modus ein, in dem Sie Xdebug für Ihre globale PHP-Installation deaktivieren können. PhpStorm aktiviert es nur dann, wenn dies erforderlich ist - beim Debuggen Ihrer Skripte oder wenn Sie Berichte zur Codeabdeckung benötigen.

Sie müssen die Einstellungen Ihrer PHP-Interpreter bearbeiten, um den Pfad zu XDebug einzuschließen, wie im verlinkten Artikel beschrieben.

Für mich scheint dies die perfekte Lösung zu sein, da ich normalerweise nur XDebug möchte, während ich in der IDE bin.

XDebug hat jedoch andere Verwendungsmöglichkeiten, wenn Sie "offline" sind, z. B. erweiterte Stack-Dumps in Fehlerprotokollen, die Sie verlieren würden, wenn Sie es global deaktivieren. Natürlich sollte XDebug in der Produktion nicht aktiviert sein, daher ist dies auf Anwendungsfälle wie Betatests oder automatisierte Tests von CLI-Skripten in der Entwicklung beschränkt.


5

Anstatt das PHP-Modul vorübergehend zu aktivieren oder zu deaktivieren, können Sie PHP anweisen, auf ein anderes Modulladeverzeichnis zu verweisen, wenn Sie möglicherweise gleichzeitig Prozesse mit PHP verwenden (z. B. als Teil einer CI-Pipeline).

Dies ähnelt zwar einigen der oben genannten Lösungen, löst jedoch einige Randfälle, was sehr nützlich ist, wenn es von Jenkins oder einem anderen CI-Läufer verwendet wird, der gleichzeitig Tests auf demselben Computer ausführt.

Der einfachste Weg, dies zu tun, ist die Verwendung der Umgebungsvariablen PHP_INI_SCAN_DIR

Die Verwendung in einem Skript oder einer Build-Aufgabe ist einfach:

export PHP_INI_SCAN_DIR=/etc/php.d.noxdebug php composer install

Natürlich möchten Sie zuerst /etc/php.d.noxdebug vorbereiten und dabei Folgendes tun:

mkdir /etc/php.d.noxdebug cp /etc/php.d/* /etc/php.d.noxdebug rm /etc/php.d.noxdebug/xdebug.ini

Dies bedeutet, dass Sie eine ähnliche Umgebung wie die alte PHP-Umgebung haben und nur ein Modul fehlt. Das heißt, Sie müssen sich keine Sorgen machen, dass Sie die phar / json-Module wie bei der php-n-Lösung laden müssen.


Ich würde Symlinks verwenden, anstatt nur INI-Dateien zu kopieren.
Greg0ire

1
Ich habe mich gescheut, Symlinks zu verwenden, da dies den Eindruck erweckt, dass die Ordner synchron sind, während neue Module nicht automatisch in den Ordner 'noxdebug' aufgenommen werden.
KHobbits

4

Ich habe eine Lösung für das Windows-basierte Composer-Installationsprogramm entwickelt. Sie sollte für jede Composer-Installation funktionieren. Sie erstellt lediglich eine Kopie der geladenen INI-Datei, kommentiert die Erweiterung xdebug zend aus und lädt diese Konfigurationsdatei, wenn Composer ausgeführt wird .

Ich habe eine Ausgabe geöffnet, um zu sehen, ob sie diese Änderung integrieren möchten:

https://github.com/composer/windows-setup/issues/58

Dort finden Sie meine Anweisungen und meinen Code.


Einfach und effektiv :) Müssen Sie dies erneut anwenden, nachdem Sie den Composer durch Selbstaktualisierung aktualisiert haben?
Marcovtwout

4

Wie in der Antwort von Joyce erwähnt , ist dieses Problem in der neuesten Version von Composer nicht mehr vorhanden.

Die Composer-Dokumentation wurde aktualisiert, um dies zu beachten . Hier erfahren Sie, wie Sie xdebug mit Composer aktivieren können (falls erforderlich).

Sie können Ihre Composer-Version mithilfe der Selbstaktualisierung aktualisieren .

Auf meinem Mac musste ich Folgendes tun: sudo php /opt/local/bin/composer self-update

Weitere Details dazu im Rahmen einer Homebrew PHP-Installation finden Sie in dieser Ausgabe .


Das ist großartig! Wissen Sie, wo PR für diese Änderung ist? Ich brauche es in einer anderen CLI-App
Tomáš Votruba

3

Direkte Manipulation der PHP-Konfiguration

Hier ist mein Beitrag basierend auf einer von Homebrew installierten PHP-Installation unter Mac OS X.

Es handelt sich um einen Shell-Script-Wrapper, der als ausführbare Datei unter gespeichert werden kann /usr/local/bin/composer, wobei die Composer-Binärdatei unter /usr/local/bin/composer.phar:

#!/bin/sh
sed -i '' -e 's:zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini
/usr/local/bin/php /usr/local/bin/composer.phar "$@"
sed -i '' -e 's:;zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":zend_extension="/usr/local/opt/php55-xdebug/xdebug.so":' /usr/local/etc/php/5.5/conf.d/ext-xdebug.ini

Theorie der Arbeitsweise

Das Wrapper-Skript:

  • verwendet sed , um die Konfigurationsdatei vorübergehend zu ändern und Xdebug zu deaktivieren (Zeile 2)
  • führt Composer aus und übergibt args an den Befehl (Zeile 3)
  • verwendet sed, um die Konfigurationsdatei wiederherzustellen und Xdebug wieder zu aktivieren (Zeile 4)

Das Skript ist an eine OS X / Homebrew-Installation von PHP 5.5 gekoppelt. Die Pfade sollten so angepasst werden, dass sie mit anderen PHP-Versionen und Verzeichnislayouts anderer Betriebssysteme und Paketmanager funktionieren. Beachten Sie auch, dass einige Versionen von sed das Argument der leeren Zeichenfolge nach der -iOption nicht benötigen .

Vorbehalt Utilitor

Das Skript ist sehr einfach, indem sich direkt auf den wichtigsten PHP - Konfigurationsdateien arbeiten, jedoch ist dies auch ein Nachteil: Xdebug auch für alle Skripts deaktiviert werden , die gleichzeitig mit diesem Skript ausgeführt werden passieren.

In meiner Entwicklungsumgebung ist dies ein akzeptabler Kompromiss, da Composer manuell und nur gelegentlich ausgeführt wird. Möglicherweise möchten Sie diese Technik jedoch nicht verwenden, wenn Sie Composer als Teil eines automatisierten Bereitstellungsprozesses ausführen.


Ich bin mir nicht sicher, ob es einen Unterschied machen würde, wie Composer mit Fehlern umgeht. Haben Sie ein bestimmtes Beispiel oder Anliegen? Das Skript ist als schnelle Lösung für das Problem gedacht und wurde nicht gründlich im Kampf getestet. Trotzdem hat es in der Zeit, in der ich es benutzt habe, ohne Probleme funktioniert.
j13k

1
Ich mache mir Sorgen, dass die letzte Zeile des Skripts möglicherweise nicht ausgeführt wird.
Greg0ire

2

In den meisten Fällen benötigen Sie xdebug im CLI-Modus nicht. Wenn dies für Sie akzeptabel ist, können Sie cli und cgi unterschiedlich konfigurieren.

Wenn Sie also php-cli.ini und conf-cli.d in die Nähe des Beendens der Datei php.ini bringen, können Sie cli und cgi unterschiedlich konfigurieren (für cgi wären es php.ini und conf.d ). Fügen Sie xdebug.ini einfach nicht in conf-cli.d ein.


2

Wenn Sie Composer mit Brew unter OS X installieren, können Sie diesen Alias ​​verwenden:

alias composer="php -n $(cat $(which composer) | grep composer.phar | awk '{print $7}')"

1

Meine schnelle Lösung für eine Macports-Installation mit mehreren PHP-Versionen bestand darin, diesen einfachen Shell-Wrapper für Composer zu schreiben:

/user/local/bin/composer-nodebug.sh

#!/bin/bash

sudo mv /opt/local/var/db/php53/xdebug.ini /opt/local/var/db/php53/xdebug.NOT
sudo mv /opt/local/var/db/php54/xdebug.ini /opt/local/var/db/php54/xdebug.NOT
sudo mv /opt/local/var/db/php55/xdebug.ini /opt/local/var/db/php55/xdebug.NOT
composer $1 $2 $3 $4 $5 $6 $7
sudo mv /opt/local/var/db/php53/xdebug.NOT /opt/local/var/db/php53/xdebug.ini
sudo mv /opt/local/var/db/php54/xdebug.NOT /opt/local/var/db/php54/xdebug.ini
sudo mv /opt/local/var/db/php55/xdebug.NOT /opt/local/var/db/php55/xdebug.ini

Führen Sie dann alle Composer-Befehle wie folgt aus:

sudo composer-nodebug.sh update

Nachteile:

  • erfordert sudo (es sei denn, Sie ändern die INI-Dateien)
  • Wenn Sie es auf halbem Weg beenden, werden die INI-Dateien geändert
  • erfordert zukünftige PHP-Versionen hinzugefügt.
  • Während der Ausführung sind andere PHP-Prozesse betroffen

Nicht elegant, aber einfach.


Ich denke, es gibt eine Verknüpfung, die Sie verwenden können, anstatt $1…$7... vielleicht ist es $@oder so, Sie müssen schauen.
Greg0ire

> Wenn Sie es auf halbem Weg beenden, während die INI-Dateien geändert werden, können Sie beheben, dass durch das Abfangen des Kill-Signals> zukünftige PHP-Versionen hinzugefügt werden müssen. Sie können das auch mit einer einfachen Schleife beheben
greg0ire

1

Erstellen eines Alias ​​für Composer zum Deaktivieren von xdebug und zum Verhindern von Speicherfehlern:

Fügen Sie diese Zeile Ihrem ~ / .bash_profile hinzu

alias composer='php -d xdebug.profiler_enable=0 -d memory_limit=-1 /usr/local/bin/composer'

Starten Sie das Terminal neu, um den neuen Alias ​​verfügbar zu machen.


-3

Hier ist meine schnelle Lösung, um die Xdebug-Warnung in der PHP5-cli-Version zu entfernen. Ich habe die Unterstützung von Xdebug für PHP5-cli unter Ubuntu 14.04 entfernt.

cd /etc/php5/cli/conf.d/

sudo rm 20-xdebug.ini

Jetzt keine Xdebug-Warnung mehr auf PHP5-cli.


2
sudo phpdismod xdebugwäre die bevorzugte Methode zu brutalrm
Jeff Puckett
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.