Categories
Middleware Tomcat

Tomcat Versionen 7.0.100, 8.5.51, 9.0.31 – neue Parameter

Die Tomcat-Versionen 7.0.100, 8.5.51, 9.0.31 führen zwei neue Parameter in den AJP-Connectoren verpflichtend ein, die bei vielen Instanzen bisher sicher nicht verwendet wurden, bzw. nicht gesetzt ware.

Bis auf weiteres bitte das hier in der server.xml bei den AJP-Connectoren hinzufügen:

secretRequired=”false”
address=”${host.ip}”

Erläuterung:
secret sichert die Verbindung so ab, daß sie nur von authorisierten Gegenstellen (die das secret kennen) genutzt werden können. Bis diese zusätzliche Absicherung genutzt wird, kann es explizit deaktiviert werden. Das entspricht dem Zustand der Vorgängerversionen von Tomcat.
Ohne Angabe von „address“ bindet sich der AJP-Connector nur auf localhost und ist dann von außen nicht mehr erreichbar.

Achtung: Wenn die host.ip in der catalina.properties mit Anführungszeichen gesetzt ist oder leer, dann startet der AJP-Connector nur auf loopback.

../conf/catalina.properties
host.ip=”1.2.3.4″

oder

host.ip=

Die richtige Angabe der IP Adresse erfolgt ohne Hochkomma:

../conf/catalina.properties
host.ip=1.2.3.4

Hier noch die offiziellen Aussagen von offizieller Seite (Apache Tomcat 8 Configuration Reference – The AJP Connector)

address
For servers with more than one IP address, this attribute specifies which address will be used for listening on the specified port. By default, the loopback address will be used.

secretRequired
If this attribute is true, the AJP Connector will only start if the secret attribute is configured with a non-null, non-zero length value. The default value is true. This attributue should only be set to false when the Connector is used on a trusted network.

Categories
DevOps Docker Java Middleware

Befehl in mehreren Docker-Containern ausführen

Möchte man bei vielen aktiven Containern bestimmte Inhalte abfragen, kann dies mit eier Schleife elegant als Einzeiler durchgeführt werden. Zuerst ist der Containername zu ermitteln und dann kann via docker exec der eigentliche Befehl im Container ausgeführt werden.

Beispiel: Ermittlung der java Version in allen Containern (zur besseren Lesbarkeit auf mehrere Zeilen umgebrochen)
for i in $(sudo docker ps --format '{{.Names}}') ; do
echo "------" ;
echo $i ;
sudo docker exec $i bash -c "java -version" ;
done

——
important01.service
openjdk version “1.8.0_171”
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode)
——
container02.service
openjdk version “1.8.0_171”
… usw.

Categories
Linux SystemD

Essentielle systemd Befehle

Zur Verwaltung und Überwachung der Systemd Dienste sind hauptsächlich zwei Befehle zuständig:
systemctl
journalctl

Systemctl

systemctl dient zur Verwaltung von Systemd Services (Starten, Stoppen, Neustart, Status Abfragen):
systemctl [stop|start|restart|reload|status] rsyslog.service

Service de-/aktivieren (permanent)

systemctl enable rsyslog.service
systemctl disable rsyslog.service

Abfrage, ob ein Service aktiviert ist:
systemctl is-enabled rsyslog.service; echo $?

Anzeige einer Service Definition

systemctl cat rsyslog.service --no-pager

/usr/lib/systemd/system/rsyslog.service
[Unit]
Description=System Logging Service
;Requires=syslog.socket
Wants=network.target network-online.target
After=network.target network-online.target
Documentation=man:rsyslogd(8)

Anzeige der fehlgeschlagenen Dienste

systemctl --failed

UNIT LOAD ACTIVE SUB DESCRIPTION
● pctl.service loaded failed failed LSB: Start the perfd daemon
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
1 loaded units listed. Pass –all to see loaded but inactive units, too.
To show all installed unit files use ‘systemctl list-unit-files’.

Journalctl

journalctl dient der Abfrage der Systemd Protokolle.
Abfrage der vorhandenen Protokolle der System Neustarts
sudo journalctl --list-boots

Ein einzelnes Protokoll kann über die ID aus der vorherigen Liste (sudo journalctl --list-boots) ausgewählt und ausgegeben werden:
sudo journalctl --boot 9ef7a66734614ed9d1f7331z14bdd389

Kontinuierliche Anzeige, analog tail -f für Linux Dateien:
sudo journalctl –f

Anzeige eines bestimmten Zeitraums mit dem Parameter --since
sudo journalctl --since "60 min ago"

Categories
3D Print Maker

Dremel DigiLab 3D45

Diesmal falle ich ein wenig aus dem Rahmen. Ich habe mir den Dremel DigiLab 3D45 zugelegt und möchte kurz eine Bewertung teilen.
In Kürze: Der Drucker ist schnell aufgebaut und einsatzbereit, einfach zu bedienen und das Druckergebnis gefällt mir sehr gut.
Die Aufwärmzeit der Düse und der beheizten Druckplattform ist kurz.

Einzig mit dem Zugriff auf die Kamera, die anscheinend nur über die Dremel Cloud Plattform geht, hatte ich keinen Erfolg. Diese Url ist nie erreichbar (https://printcloud.dremel.com).

Mitgeliefert wird 1Kg Filament, deren Druckparameter via RFID erkannt, perfekt. Die Modelle erstelle ich über das frei verfügbare Tinkercad. Ich drucke das erstelle Objekt über den mitgelieferten Dremel 3D Digi Slicer. Alles sehr intuitiv, bzw. in Netz gut dokumentiert.

Um Hohlräume und Brücken drucken zu können, druckt der Dremem 3D45 Stützkonstruktionen, die man herausbrechen muss. Dies geht meist sehr gut. Nur bei sehr kleinen, engen Zwischenräumen kann man diese nicht sauber entfernen. Dann muss man nacharbeiten (Schleifen…) Ich persönlich passe meine Objekte inzwischen so, dass ich solche kleinen Strukturen vermeide. Damit stellt sich das Problem fast nei.

Fazit: Den hohen Kaufpreis ist der Drucker wert.

Categories
IBM WebSphere Application Server Middleware

 WebSphere AS Global Security – ADMS0036E: The configuration synchronization failed

Nach dem Aktivieren der Global Security schlägt die Node Synchronisation aus dem Deployment Manager fehl.

Das Problem ist mir zumindest in diesen WebSphere Versionen begegnet:

  • IBM WebSphere Application Server Network Deployment 8.5
  • WAS ND bis 8.5.5 Fixpack 15

In den Protokollen finden sich folgende Fehlermeldungen:

[3/25/19 19:53:27:932 CET] 0000008a NodeSyncTask  A    ADMS0036E: The configuration synchronization failed.
[3/25/19 19:53:30:636 CET] 00000048 FfdcProvider  W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on /log/HSL_CELL85/ffdc/nodeagent_2875f3_19.03.25_19.53.30.628307621416607723793.txt com.ibm.ejs.util.am._Alarm.run 95
[3/25/19 19:54:04:409 CET] 00000044 DefaultTokenP I   HMGR0149E: An attempt to open a connection to core group DefaultCoreGroup has been rejected. The sending process has a name of HSL_CELL85\DMGR1\dmgr and an IP address of 192.168.1.100. Global security in the local process is Disabled. Global security in the sending process is Enabled. The received token starts with . The exception is .
[3/25/19 19:54:27:370 CET] 00000087 FfdcProvider  W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on /log/HSL_CELL85/ffdc/nodeagent_c0ba1e0f_19.03.25_19.54.27.1057436260776741690282.txt com.ibm.ws.management.status.NodeAgentStatusCache$StatusCacheTimedThread.run 1371
[3/25/19 19:54:27:785 CET] 0000009f NodeSync    ADMS0005E: The system is unable to generate synchronization request java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy15.queryNames(Unknown Source)
        at com.ibm.ws.management.AdminClientImpl.queryNames(AdminClientImpl.java:108)

Lösung

Eine erste Synchronisation vom DMGR funktioniert nicht nach dem Einschalten der Global Security. Der Node muss die Synchronisation einmalig starten: 

cd Profile_dir/bin/
./stopServer.sh nodeagent

./syncNode.sh localhost SOAPPORT
ADMU0116I: Tool information is being logged in file /logs/syncNode.log
ADMU0128I: Starting tool with the node profile
ADMU0401I: Begin syncNode operation for node NODE01 with Deployment Manager
ADMU0016I: Synchronizing configuration between node and cell.
ADMU0402I: The configuration for node NODE01 has been synchronized with Deployment Manager

./startServer.sh nodeagent
ADMU3000I: Server nodeagent open for e-business; process id is 20059

Danach kann die Synchronisation auch erfolgreich vom WebSphere Deployment Manager aus gestartet werden.

Categories
IBM WebSphere Application Server Middleware

Neuerungen in WebSphere 8.5.5 Fixpack 14

Mit Fixpack 14 für IBM WebSphere Application Server entfällt Java 6:

When updating to 8.5.5.14, any existing profile that uses Java SDK 6 is replaced by Java SDK 8. You can continue to use the optional Java SDK Java Technology Edition Version 7.0 and Version 7.1, but no service can be provided after the end of support in September 2019, which could expose your environment to security risks.

Bisher war im WebSphere-Verzeichnis Java SDK 6 installiert, jetzt findet man dort das Java SDK 8. In der WebSphere Konsole schaut das dann so aus:

Installierte Java SDKs bis WebSphere 8.5.5 Fixpack 13

Ab WebSpehre 8.5.5 FP14 fehlt Java SDK 6:

Installierte Java SDKs bis WebSphere 8.5.5 Fixpack 14

Daher ist vor dem Ausbringen von Fixpack 14 zu prüfen, ob Java 6 auch wirklich nicht mehr verwendet wird. Eine Übersicht über die verwendeten Java-Versionen erhält man einfachsten mit dem Tool managesdk.sh:

<PROFILE_DIR>/bin/managesdk.sh -listEnabledProfileAll
CWSDK1004I: Profile node-profile1 :
CWSDK1006I: PROFILE_COMMAND_SDK = 1.7_64
CWSDK1008I: Node node01 SDK name: 1.7_64
CWSDK1009I: Server jvm01 SDK name: 1.8_64_bundled
CWSDK1009I: Server nodeagent SDK name: 1.8_64
 
CWSDK1004I: Profile dmgr :
CWSDK1006I: PROFILE_COMMAND_SDK = 1.7_64
CWSDK1008I: Node dmgr SDK name: 1.7_64
CWSDK1009I: Server dmgr SDK name: 1.8_64
CWSDK1001I: Successfully performed the requested managesdk task.

Version 1.6 sollte in dieser Ausgabe nicht mehr erscheinen.

Categories
PowerShell

Powershell Tail und Head vereint

Ausgabe der letzten und der ersten n-Zeilen in einemBefehl

In Unix/Linux Derivaten sind die Befehle tail und Head oft benutzte Werkzeuge zur Ausgabe der ersten/letzten Zeilen einer Datei oder der Ergebnisse eines Befehls. Direkt kombinieren kann man sie nicht. Hier sind sed/awk und andere Werkzeuge und Lösungen gefordert. Powershell bietet eine sehr effiziente Lösung.

Der erste Ansatz wäre die Ausgabe mit Select -Last und Select -First zu behandeln.

Get-ChildItem somefolder | Select -First 10

Get-ChildItem somefolder | Select -Last 10

Das geht aber nicht in einem Befehl (oder nur mit einer zu schreibenden Funktion). Damit haben wir das gleiche Problem wie mit head und tail in Unix.

Per Get-ChildItem und einem auf die Ausgabe angewendetem Sort Befehl erhält man eine Liste. Diese Ausgabe kann man als Array / Liste von Zeichenketten interpretieren und einzelne Elemente mit einen nachfolgenden Index in eckigen Klammern auswählen.

(Get-Content hashes.csv)[1]

Der “Trick” besteht darin, dass eine solche Powershell Liste auch einen Bereich adressieren kann und dieser Bereich “überlaufen” darf und dann von vorn anfängt. [0..10] gibt die ersten 11 Elemente aus. [10..-1] gibt alle Zeilen ab der 11. Zeile bis zur letzten (-1) aus.

[-10..10] gibt die letzten  10 und die ersten 11 Zeilen  aus (da 0 die erste Zeile ist). Das Ergebnis sieht etwas ungewöhnlich aus, da zuersrt die letzten Zeilen ausgegeben werden:

(gci $folder *jpg |Sort-Object LastWriteTime)[-10..10]

Dier zweite bis zehnte Zeile der Datei und die letzten sind sind in den blauen Rechtecken hervorgehoben, dier erste Zeile der Ausgabeliste ist in der Mitte.

Dieses Verfahren funktioniert für alle Listausgaben, wie Get-ChildIten, Get-Content, Get-Prozess und so weiter.

Categories
Middleware PowerShell

Powershell tail für Textdateien

In Powershell kann die Ausgabe der letzten n Zeilen in grossen Text/Ascii Dateien mit der -tail Option von Get-Content erfolgen:

Get-Content meineRiesigeDatei.csv -tail 25

Seit Powershell v3 bietet Get-Content (oder der zugehörige alias gc) die Option -tail. Leider gibt es keinen tail -f zur fortlaufenden Aktualisierung.

Categories
Middleware PowerShell

Powershell Equivalent zu Unix ‘ls -ltr | tail’

In Powershell kann die Ausgabe der neuesten n-Dateien mit diesem Befehl erfolgen:

  gci | sort LastWriteTime | select -last 60

In diesem Beispiel werden die Dateien im aktuellen Verzeichnis mit gci ausgegeben, nach letztem Schreibzugriff mit sort sortiert (neueste zuletzt) und dann werden nur die letzten 60 per select last 60 ausgegeben.

Categories
Debian Korn Shell / Bash Linux RedHat Ubuntu

Welcher Prozess belegt wieviel Swap?

Wenn die Kommandos (in den Linux Varianten Debian, Ubuntu, RedHat und ähnlich)

  free
  cat /proc/swaps
  swapon -s

eine hohe Auslastung des Swap Spaces anzeigen, kommt die Frage nach dem Verbraucher des Swap hoch.

Folgendes Miniskript gibt die Liste der Prozesse nach Größe des belegten Swap an. Mit der Variable THRESHOLD kann man die Liste auf die Verbraucher eingrenzen, die mehr als diesen Wert in kB an Swap belegen.

  THRESHOLD=5000
  for pid in `ls /proc`; do
    vmswap=`awk '/VmSwa/{print $2}' /proc/${pid}/status 2>/dev/null`;
    if [ ${vmswap} -gt ${THRESHOLD} ];then
      pName=`ps -ef|awk '$2=="'"${pid}"'" {print $8}'`;
      echo "PID ${pid}: ${vmswap} kB (${pName})";
    fi;
  done 2>/dev/null|sort -un -k3

Die Ausgabe sieht wie folgt aus:

  PID 123857: 7826 kB (/usr/bin/python)
  PID 768456: 9876 kB (/usr/bin/java)
  PID 6543: 11392 kB (/usr/bin/python)
  PID 367682: 12420 kB (/usr/bin/python)