CGI mit NGINX unter CentOS7

12 Nov 2019 Lesezeit: 3 Minuten

CGI ist nicht tot zu bekommen. Warum auch? Ist es doch eine (für den Admin) coole Lösung um mal fix ein BASH Skript zu schreiben und dieses durch eine URL angetriggert auszuführen.

Leider läuft das ganze nicht out-of-the-Box, daher müssen folgende Dinge auf einem CentOS System passieren, damit es funktioniert:

yum install -y fcgiwrap.x86_64 spawn-fcgi

damit haben wir dann schon die Grundlage geschaffen.

  • fcgiwrap ist das tool der Wahl und die als Wrapper für unsere Skripts
  • spawn-fcgi dient uns damit, das es fcgiwrap für uns als deamon startet

Nun müssen wir noch spawn-fcgi konfigurieren, damit es später mit unserem NGINX zusammenspielt:

cat << EOF > /etc/sysconfig/spawn-fcgi
FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/sbin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
FCGI_EXTRA_OPTIONS="-M 0777"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
EOF

damit legen wir nach dem Start einen unix socket für die Kommunikatio unter /var/run/fcgiwrap.socket an und übergeben die Rechte an NGINX.

Nun machen wir uns noch ein Skriptverzeichnis:

mkdir -p -m 770 /var/www/cgi-bin
chown -vR nginx:nginx /var/www/cgi-bin

und natürlich müssen wir unserem NGINX beibringen mit dem Dienst zu reden - dazu nutzen wir eine location directive:

  location / {
    root /var/www/cgi-bin;
    fastcgi_intercept_errors on;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    fastcgi_pass unix:/var/run/fcgiwrap.socket;
  }

im Anschluss müssen wir unsere Dienste noch aktualisieren:

systemctl enable spawn-fcgi
systemctl start spawn-fcgi
systemctl restart nginx

von nun an sollten wir in der Lage sein Skripte unter /var/www/cgi-bin über den Aufruf innerhalb der URL anzusprechen und zur Ausführung zu bewegen. Ein Skript sollte übrigens in etwa so beginnen:

#!/bin/bash

echo "Content-type: text/html"
echo ""

echo "<html>"
echo "<head>"
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"
echo "<title>Bash CGI script</title>"
echo "</head>"
echo "<body>"
echo ""
echo ""
echo ""
echo "</body>"
echo "</html>"

ClusterSSH als super duper Adminwerkzeug

9 Aug 2019 Lesezeit: 2 Minuten

Bekanntlich ist der beste Admin faul. Einfach weil er es kann und verstanden hat, das man die Dinge vereinfachen muss die einem begegnen. Wenn einem dazu auch noch ein wenig das eigene Ego überkommt und man es etwas geekig haben möchte, so bietet sich das Tool cluster-ssh zur Serververwaltung von mehreren Linux-Servern gleichzeitig an.

Die Installation ist einfach und man kann recht unkompliziert damit starten seine Server einzutragen. Dabei kommt einem auch zugute, dass es möglich ist Gruppen zu verschachteln.

Am einfachsten ist es, wenn man in seiner $HOME/.clusterssh/clusters die zu verwaltenden Cluster einpflegt.

alle-server cluster1 cluster2 cluster3

cluster1 server1 benutzer@server2
cluster2 111.222.333.444 server42.domain.de
cluster3 geheimserver:2222 root@999.888.777.666:2345

Hier ist auch schön zu sehen, welche Formen der Schreibweise man bei den Hosts angeben kann. Es ist vollkommen egal, ob man allein die IP-Adresse, den FQDN, mit Angabe des Ports oder eines Benutzers oder was auch immer verwendet. Zum Schluss kann man dann alle einzelnen Cluster noch zu übergeordneten Gruppen zusammenführen - das macht es dann nochmals schicker.

Wer langeweile hat, kann sich die Datei $HOME/.clusterssh/config anschauen. Hier können diverse Standardwerte vergeben vorgegeben werden.

Anschließend kann man mit einem einfachen Befehl wie cssh -l root alle-server eine SSH Verbindung zu alle-server aufbauen und durch die Eingabe der Befehle in das kleine Wunderfenster alle-server gleichzeitig bedienen.

Ich mag sowas ja


IOPS messen unter Linux

28 Apr 2019 Lesezeit: ~1 Minute

Vielleicht kommt der eine oder andere mal in die Situation die möglichen IOPS auf einem Linux-System messen zu wollen oder müssen. Leider ist das Thema nicht ganz so eindeutig gelöst, daher bleibt immer ein wenig Interpretationsspielraum.

Wie dem auch sei. Irgendwie muss man ja anfangen.

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Dieser Aufruf war für mich schon mal ein ziemlich guter Anfang.

Quellen und Hinweise: