Categories
Debian Linux RedHat Ubuntu

Prozess zu einem offenen Port ermitteln

Um den Prozess zu einem offenen Port zu finden gibt es verschiedene Möglichkeiten. Als Beispiel wollen wir für einen Port 5000 in Erfahrung bringen, welcher Prozess dahinter läuft.

Der erste Versuch könnte ein grep auf den Port mit ps -ef sein.

dockeradm@ubuntusrv001:~$ ps -ef|grep 5000
UID PID PPID C STIME TTY TIME CMD
root 80078 79851 0 14:42 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5000 -container-ip 172.17.0.2 -container-port 5000
root 80087 79851 0 14:42 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 5000 -container-ip 172.17.0.2 -container-port 5000

Dieser Ansatz ist nur ergfolgreich, wenn ein Prozess den Port als Argument übergeben bekommt. Das ist nur in wenigen Fällen so.

LSOF

lsof mit der Option -i gefolgt von :<PORT> werden die Prozess angezeigt, die diesen Port offen halten.
❗ Wenn man nicht der technische Benutzer ist, unter dem der Prozess läuft, sieht man keine Ausgabe:

dockeradm@ubuntusrv001:~$ lsof -i :5000
                                       

Mit sudo oder als Benutzer, dem der Prozess gehört, wird der Prozessnamen und die Prozess ID ausgegeben:

dockeradm@ubuntusrv001:~$ sudo lsof -i :5000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 80078 root 4u IPv4 665614 0t0 TCP *:5000 (LISTEN)
docker-pr 80087 root 4u IPv6 660124 0t0 TCP *:5000 (LISTEN)

NETSTAT

netstat zeigt ebenfalls (angemeldet als technischer Benutzer unter dem der Prozess läuft oder als root) den Prozess und den Port an. Ist man nicht der technische Benutzer, so wird der Prozessname nicht ausgeben:

dockeradm@ubuntusrv001:~$ netstat -tulnp|grep 5000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN -
tcp6 0 0 :::5000 :::* LISTEN -

Als Benutzer, dem der Prozess gehört oder als root sieht man auch den zugehörigen Prozess.

dockeradm@ubuntusrv001:~$ sudo netstat -tulnp|grep 5000
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 80078/docker-proxy
tcp6 0 0 :::5000 :::* LISTEN 80087/docker-proxy

Fazit

netstat erzeugt immer eine Ausgabe. Man erkennt zumindest, dass ein Prozess den Port belegt und man sieht den Status (CONNECTED/ LISTEN / …). ps und lsof zeigen bei fehlenden Berechtigungen unter Umstängen kein Ergebnis, obwohl ein Prozess den Port belegt.

Categories
Konzepte

Daten Visualisierung

Bezüglich Datenvisualisierung bin ich vor Kurzem auf einen Bericht gestossen. Er ist inhaltich zwar sehr umfassend, aber trotzdem gut lesbar und in dem Sinne kompakt, dass der Inhalt nicht zu gesprächig erläutert wird. Das Dokument ist auf Github als Web Version, EPub und PDF verfügbar:
Data Visualization Guide for Presentations, Reports, and Dashboards

Ich kann das Dokument uneingeschränkt empfehlen.

Categories
IBM WebSphere Application Server Middleware

WebSphere Application Server Support bis 2030

IBM hat für WebSphere Application Server die Support Laufzeit bis mindestens Ende 2030 verlängert. Das gilt für diese Produkte:
– IBM WebSphere Application Server V8.5.5
– IBM WebSphere Application Server V9.0.5
– IBM WebSphere Application Server Network Deployment V8.5.5
– IBM WebSphere Application Server Network Deployment V9.0.5
– IBM WebSphere Application Server Family Edition V8.5.5
– IBM WebSphere Application Server Family Edition V9.0.5
– IBM WebSphere Application Server – Express® V8.5.5
– IBM WebSphere Application Server for z/OS®, V8.5.5
– IBM WebSphere Application Server for z/OS, V9.0.5

Original Bekanntmachung

Categories
IBM WebSphere Application Server Middleware

WebSphere Application Server Configuration Comparison Tool

A few days ago a found the WebSphere Configuration Comparison Tool (WCCT), developed by IBM. Is is a comparison utility written in python for WebSphere Application Server traditional.

The sources can be found in Github project websphere-cct. IBM announced it here: www.ibm.com/support/pages/node/711615

In times of automated installations, such a tool should actually no longer be necessary.

Categories
Git

git Einstellungen

Ein paar Einstellugnen für Git, die sich bei mir für effizientes Arbeiten bewährt haben:

settings

git config –global branch.autosetupmerge true
git config –global push.default tracking

Anzeige

git config –global log.decorate short
git config –global color.ui auto
git config –global color.interactive auto
git config –global color.diff auto
git config –global color.branch auto
git config –global color.status auto
git config –global pager.status true
git config –global pager.show-branch true
git config –global format.numbered auto

Abkürzungen / Aliasse

git config –global alias.st status
git config –global alias.ci commit
git config –global alias.co checkout
git config –global alias.ru “remote update”
git config –global alias.br branch
git config –global alias.cam “commit -a -m”

Powershell Alias für schöneres git log

git log –pretty=format:’%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s’ –date=short

Categories
Branching & Merging DevOps Git

Branching Modell für den Betrieb in großen Umgebungen

Ich habe in großen Rechenzentren mit verschiedenen Gir Branch Modellen Erfahrungen gesammelt. Kurz:
git Flow ist meist zu komplex.
gitlab flow berücksichtigt einige wichtige Aspekte des Betriebs nicht.
Trunk Based Development funktioniert meines Erachtens nicht bei Service Providern, die keine Anwendungen entwickeln sondern nur betreiben, dies aber in hohen Installationszahlen mit vielen unterschiedlichen Releases.

Der Betriebsaspekt wird meines Erachtens zu oft unterschätzt. DevOps ist eben genau Dev und Ops. Die meisten Branch Konzepte finden Lösungen für Entwickler. Die betrieblichen Aspekte eines langfristigen, stabilen Betriebes in großen Umgebungen werden oft nicht bedacht.

Ein Beispiel eines Service Providers

Der Service Provider administriert eine Anwendung, nennen wir Sie “Banking v1.0”, auf WebSphere Application Server oder Tomcat und betriebt diese für Kunden. Die Anwendung selbst wird von einem Softwarehersteller geliefert. Es erfolgt keine Entwicklung.

Das Betriebsteam hat einen Branch master, der die Banking App v1.0 auf der Middleware deployt. Wird eine neue Version v1.1 geliefert, und auf dem master Branch eingecheckt, kann diese auf die Test und Integraions Stages ausgerollt werden. Nach erfolgreichem Tests kann in Produktion deployt werden. Was aber macht man, wenn die Tests noch andauern, aber in der Produktion ein Patch 1.0.1 eingespielt werden muss.
Was macht man, wenn die App in verschiedenen Versionen v1.1 und v1.2 auf verschiedenen Systemen des Service Providers im Auftrag des Kunden läuft?

Ein Lösungsansatz

Mit tags sind solche Konstellationen schwierig zu lösen. Ein guter Ansatz ist hier dargestellt:
A Successful Git Branching Model With Enterprise Support

Er geht von zusätzlichen Branches für den Support und einem Branch “stable” (ich würde ihn eher “prod” nennen) aus. Ich persönlich würde die Nutzung solcher Branches so weit wie möglich einschränken und diese schnell wieder “abbauen”, aber in den oben beschriebenen Szenarien sind sie sicherlich sinnvoll.

Categories
Git Github

Githubs geheimes Repository

Nur wenige kennen das “secret Repository” in Github.

Github hat ein neues Feature eines besonderen, geheimen Repository bekannt gegeben. Mit diesem Repository können der Startseite eigene Informationen, als Art dynamisches Profil hinzugefügt werden. Es kann als einleitende Darstellung zur Person genutzt werden.

Wie legt man ein “Secret Repository” an?

Das ist sehr einfach: Auf der Seite Repositories mit “New Repository” ein neues Repoitory mit – das ist der Trick dem eigenen GitHub Benutzernamen anlegen.

Das Ergebnis sieht bei mir so aus:

Live kann man es hier sehen:
https://github.com/slommi71

Categories
IBM WebSphere Application Server Java Middleware

Java Bug in WAS 8.5.5.17

Die WebSphere Application Server 8.5.5.17 Pakete haben einen Java Bug, der dazu führt, dass die JVMs gelegentlich einen Java-Dump mit dem Auslöser „traceassert“ schreiben und sich beenden.
Der Bug kam mit Java 8.0.6.5 und soll mit 8.0.6.10 gefixed werden.
Ursprünglich war die korrigierte Version 8.0.6.10 für 14. Mai 2020 angekündigt. Inzwischen teilt IBM mit, dass die Korrektur für 8.5.5.17 bundled java schon verfügbar ist.

Da WAS 9.0.5.3 die Java Version 8.0.6.7 nutzt, ist es ziemlich sicher auch betroffen.

Categories
Branching & Merging DevOps Git

Alternative zu git stash

Bei der Arbeit in einem Feature Branch kann es passieren, dass aus verschiedenen Gründen ein anderer Branch kurz ausgescheckt und bearbeitet werden muss.

Normalerweise verwendet man git stash dafür.
Ich möchte kurz eine Alternative erläutern.

Die Idee ist, einen zweiten worktree anzulegen und zu nutzen. Der bereits ausgescheckte Feature Branch ist in einem lokalen worktree auf der Festplatte abgelegt. Normalerweise hat man für jedes Projekt nur einen worktree. Daher muss man bei einem Wechsel der Branches die Änderungen committen oder zurückstellen/stashen.

Der git Client bietet allerdings die wenig bekannte Option, einen zweiten worktree basierend auf einem Branch anzulegen. Der folgende Befehl legt in einem neuen Verzeichnis einen worktree des master Branches an:

cd <HomeDirOfProject>
git worktree add ../worktree_master master

Mit einfachen Verzeichniswechseln (cd)

cd ../worktree_master
cd ../<HomeDirOfProject$gt;

kann man jetzt zwischen den Branches wechseln.

Hinweis: Einen zweiten worktree des bereits aktiven, ausgecheckten Branches quittiert git mit einem
fatal: 'master' is already checked out at ...

Mit

cd <HomeDirOfProject>
git worktree remove ../worktree_master

wird man den worktree wieder los.

Die offizielle Dokumentation findet man hier. Bitte für den produktiven Einsatz die Warnung am Ende der Dokumentation beachten:
Multiple checkout in general is still experimental, and the support for submodules is incomplete. It is NOT recommended to make multiple checkouts of a superproject.

Categories
Middleware PowerShell

Umbenennung von Dateien per powershell

In Linux Umgebungen haben Administratoren für Logdateien von WebSphere Application Server, Tomcat und andere Middleware Produkte meist Skripte, um die Protokolle täglich oder wöchentlich umzubenennen (per crontab).

Unter Windows habe ich auf die schnelle keine vernünftige Scriptlösung gefunden. Meine Lösung stelle ich in meinem Azure DevOps Projekt pwshLogSwitch zur Verfügung.

Das kleine Script erwartet mindestens ein Startverzeichnis als Parameter. Alle Dateien in diesem Verzeichnis und darunter werden umbenannt, solange die Kriterien passen.

Die Auswahlkriterien werden mit den Parametern
-Filter
-IncludePattern
-ExcludePattern
definiert und entsprechen den gleichnamigen Parametern von Get-ChildItem. Es können auch reguläre Ausdrücke und Wildcards übergeben werden.

Als Verzeichnis können mehrere Verzeichnisnamen per : getrennt übergeben werden.

IncludePattern und ExcludePattern können ebenfalls mehrere Werte enthalten. Diese sind per Komma zu trennen.

Beispiele:

logswitch.ps1 -s -x *.ps1 -i ‘*.ot,*.out’ -d folder1:folder2:nonexistingFolder

logswitch.ps1 -simulate -ExcludePattern *.ps1 -IncludePattern ‘*.ot,*.out’ -Directories folder1:folder2:nonexistingFolder

logswitch.ps1 -x ‘[2][0][12][0-9]*,1.*’ -f *.log -d folder1:folder2:nonexistingFolder