Künstliche Intelligenz GPD4all unter Linux installieren

Künstliche Intelligenz ist ein sehr breites Feld, in dem man schnell den Überblick verlieren kann. Large Language Models (LLM), wie ChatGPD verarbeiten natürliche Sprache und können je nach Datenbasis verschiedene Probleme lösen. Neben netten Unterhaltungen, die durchaus therapeutischen Charakter haben können, kann man mit LLM durchaus komplexe Aufgaben bewältigen. Ein solches Szenario wäre das Verfassen von behördlichen Schreiben. In diesem Artikel gehen wir nicht darauf ein, wie Sie die KI nutzen können, sondern erklären Ihnen, wie Sie Ihre eigene KI auf Ihrem Computer lokal installieren können.

Bevor wir ans Eingemachte gehen, beantworten wir die Frage, wozu das Ganze überhaupt nütze ist. Man kann ja problemlos auf die zum Teil kostenlos online verfügbaren KI Systeme zurückgreifen.

Was vielen Menschen nicht bewusst ist, ist die Tatsache, dass alle Anfragen, die man an ChatGPT, DeepSeek und Co. sendet, protokolliert und dauerhaft gespeichert werden. Wie diese Protokollierung im Detail aussieht, können wir nicht beantworten, aber IP Adresse und Nutzeraccount mit der Prompt Anfrage dürften sicherlich zu den minimal erhobenen Daten gehören. Hat man indessen seine eigene KI auf dem lokalen Computer installiert, werden diese Informationen nicht ins Internet übertragen. Zudem kann man so oft man möchte mit der KI interagieren, ohne dass Gebühren erhoben werden.

Für unser Projekt, eine eigene künstliche Intelligenz auf dem eigenen Linux Rechner zu installieren, benötigen wir keine ausgefallene Hardware. Ein handelsüblicher Rechner reicht durchaus. Wie zuvor erwähnt: Als Betriebssystem verwenden wir Linux, da dies viel ressourcenschonender als Windows 10 oder Windows 11 ist. Für den Workshop kann jedes beliebige von Debian abgeleitetes Linux verwendet werden. Debian Derivate sind zum Beispiel Ubuntu und Linux Mint.

Als Arbeitsspeicher sollten mindestens 16 GB (RAM) vorhanden sein. Wer mehr RAM hat, umso besser. Dann läuft die KI viel flüssiger. Als Prozessor (CPU) sollte mindestens ein aktueller i5 / i7 oder AMD Ryzen 5+ verbaut sein. Wenn dann noch eine SSD mit 1 TB Speicher vorhanden ist haben wir das notwendige Setup komplett. Computer / Laptops mit dieser Spezifikation bekommt man schon für kleines Geld gebraucht. Ohne zu viel Werbung machen zu wollen, kann man sich ein wenig bei den gebrauchten Lenovo ThinkPad Laptops umschauen. Aber auch andere Hersteller mit den Mindestanforderungen zur Hardware leisten gute Dienste.

Nachdem die notwendigen Voraussetzungen geklärt sind, machen wir uns zuerst daran, GPT4all auf unserem Rechner zu installieren. Keine Sorge, das ist auch für Anfänger recht leicht zu bewerkstelligen. Es ist kein besonderes Vorwissen notwendig. Beginnen wir damit, die Datei gpd4all.run von der Homepage (https://gpt4all.io/index.html?ref=top-ai-list) herunterzuladen. Ist dies erledigt, machen wir uns daran, die Datei ausführbar (exikutierbar) zu machen.

Wie im Screenshot zu sehen ist, selektieren wir die heruntergeladene Datei mit einem rechts Klick und wählen in dem Menü den Eintrag Eigenschaften aus. Unter dem Reiter Zugriffsrechte setzen wir dann das Häkchen bei Ausführen. Nun kann man die Datei mit dem gewohnten Doppelklick starten, was wir auch sofort tun.

Nun beginnt der Installationsprozess, wo wir unter anderem auswählen können, an welchem Ort GPT4all installiert wird. Bei Linux kommen selbst installierte Programme in der Regel in das Verzeichnis /opt.

Im nächsten Schritt können wir noch eine Desktop-Verknüpfung anlegen. Dazu klicken wir mit der rechten Maustaste in den leeren Desktop und wählen Verknüpfung erstellen. In der aufpoppenden Maske tragen wir nun einen Namen für die Verknüpfung ein z. B. GPT 4 all und setzen den Pfad zur ausführbaren Datei bin/chat und bestätigen mit OK. Nun können wir GPT4all bequem von unserem Desktop aus starten.

Damit GPT4all auch funktioniert, muss ein Modell geladen werden. Wie in den Screenshots zu sehen ist, stehen verschiedene Modelle zur Verfügung. Das Modell muss bei jedem Start des Programms erneut ausgewählt werden. Nun kann die KI lokal auf dem eigenen Rechner genutzt werden.

Bildstrecke:

Andere KI Systeme sind unter anderem:

Abonnement / Subscription

[English] This content is only available to subscribers.

[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.

Privatsphäre mit Kodachi Linux im Internet zurückgewinnen

Windows 11 integriert eine ominöse History-Funktion, bei der sämtliche Interaktionen mit dem Computer aufgezeichnet und aller Wahrscheinlichkeit per Telemetrie an Microsoft übertragen werden. Aber auch die unzähligen durch die EU beschlossenen und von Deutschland umgesetzten Gesetze zur Überwachung der Bürger geben vielen Anlass, über das Thema Datenschutz und Privatsphäre neu nachzudenken. Unsere Welt ist stetig im Wandel und die digitale Welt verändert sich um einiges schneller. Es liegt an jedem Einzelnen, wie er oder sie mit diesen Veränderungen umgehen möchte. Dieser Artikel soll dazu anregen, sich ein wenig mehr mit Linux und Sicherheit zu beschäftigen. Vielleicht bekommen Sie ja auch gleich Lust, das hier vorgestellte Kodachi Linux einmal selbst auszuprobieren. Es gibt mehrere Wege, wie Sie Kodachi Linux ausprobieren können.

  1. Virtuelle Maschine: Erstellen Sie einfach mit der ISO‑Datei und dem Programm VirtualBox oder VMWare eine Virtuelle Maschine mit Kodachi Linux. Diese virtuellen Maschinen können Sie auch von einem Windows-Rechner aus erstellen und verwenden.
  2. Booten vom USB-Stick: Tools wie Disks (Linux) oder Rufus (Windows) erlauben es, bootfähige USB‑Sticks zu erstellen. Auf diese Art und Weise können Sie Ihren PC direkt von USB mit Kodachi starten, ohne dass das auf der Festplatte installierte Betriebssystem davon beeinflusst wird.
  3. Native Installation: Sie können den bootfähigen USB-Stick auch dazu verwenden, Kodachi Linux dauerhaft auf Ihrem Computer zu installieren. Diese Methode ist dann zu empfehlen, wenn Sie bereits Erfahrungen mit Kodachi gesammelt haben.

Kodachi OS ist, wie der Name schon vermuten lässt, eine japanische Linux-Distribution mit einem angepassten XFCE Desktop. Kodachi sind eigentlich klassische japanische Samurai-Schwerter, was bereits einen Bezug auf das Thema Sicherheit hinleitet. Kodachi OS selbst ist ein Xubuntu Derivat und somit ein Enkel von Ubuntu und ein Urenkel von Debian Linux. Kodachi Linux bietet eine hoch-sichere, anti-forensische und anonyme Computerumgebung. Es wurde mit Blick auf eine sichere Privatsphäre konzipiert. Alle notwendigen Funktionen, um Vertraulichkeit und Sicherheit der Benutzer zu gewährleisten, sind enthalten. Kodachi ist benutzerfreundlich und eignet sich auch für Linux-Neulinge und Windows-Umsteiger. Zu Testzwecken können Sie das System von einem USB-Stick starten und Sie haben ein voll funktionsfähiges Betriebssystem mit:

  • automatisch etablierte VPN Verbindung
  • vorkonfigurierte TOR Verbindung
  • laufendem DNSCrypt Dienst

Die aktuelle Version von Kodachi kann kostenfrei auf der Homepage [1] heruntergeladen werden. Mit der heruntergeladenen ISO können sie nun entweder eine bootfähigen USB Stick erstellen oder Kodachi in eine Virtuelle Maschine installieren. Wir haben uns für die Variante mit VMWare eine virtuelle Maschine zu erstellen entschieden.

Die Installation ist dank dem VM Ware Ubuntu Template in wenigen Minuten erledigt. Für unseren Test haben wir der VM 20 GB Festplattenspeicher spendiert. Damit das ganze füssig läuft haben wir den RAM auf 8 GB angehoben. Wer nicht so viel RAM zu Verfügung hat kann auch mit 4 GB arbeiten. Nach dem Start der VM sehen Sie das Kodachi OS Desktop wie im untenstehende Screenshot in der Version 8.27. Für alle Linux Nerds sei noch erwähnt das diese Version den Kernel 6.2 verwendet. Laut der Homepage wird bereits fleißig an der neuen Version 9 gearbeitet.

Da die Installation auch für Anfänger möglichst einfach gehalten ist, wurden bereits Benutzerkonten eingerichtet. Der Benutzer lautet kodachi und hat das Passwort r@@t00 (00 sind Nullen). Der Administrator-Account heißt wie unter Linux üblich root und hat ebenfalls das Passwort r@@t00. Wer sich dafür entscheidet, Kodachi fest auf seiner Maschine zu installieren, sollte mindestens die Passwörter ändern.



Eine möglichst hohe Anonymität erreicht man leider nur auf Kosten der Surfgeschwindigkeit. Kodachi Linux bietet daher für unterschiedliche Anforderungen mehrere Profile, zwischen denen gewählt werden kann.

  1. Maximale Anonymität (langsamer)
    • ISP → Router VPN → Kodachi VPN (VM NAT) → Torified System → Tor DNS → Kodachi geladener Browser
  2. Hoch anonym (langsam)
    • ISP → Kodachi VPN → TOR-Endpunkt → Tor DNS → Kodachi geladener Browser
  3. Anonym & Schnell
    • ISP → Kodachi VPN → TOR-Endpunkt → Tor DNS → Kodachi lite Browser
  4. Mäßige Anonymität
    • ISP → Kodachi VPN mit erzwungenem VPN-Verkehr → Tor DNS → Kodachi geladener Browser
  5. Standard Anonymität
    • ISP → Kodachi VPN → Torified System → Tor DNS → Kodachi geladener Browser
  6. Verbesserte Anonymität mit Double TOR
    • ISP → Kodachi VPN mit erzwungenem VPN-Verkehr → Tor-Browser → Tor-Browser
  7. Double TOR Alternative
    • ISP → Kodachi VPN → Tor-Browser → Tor-Browser → Tor DNS
  8. Hochsicheres Setup
    • ISP → Host-Maschine (XMR VPN) → Kodachi VPN (VM) mit erzwungenem VPN-Verkehr → Kodachi-Browser → Dnscrypt
  9. Sicher und schnell
    • ISP → Kodachi VPN mit erzwungenem VPN-Verkehr → Kodachi geladener Browser → Dnscrypt
  10. Erhöhte Sicherheit
    • ISP → Kodachi VPN mit erzwungenem VPN-Verkehr → Kodachi geladener Browser → Tor DNS
  11. Hochgeschwindigkeit und Sicherheit
    • ISP → Kodachi VPN mit erzwungenem VPN-Verkehr → Kodachi lite Browser → Tor DNS
  12. Doppelsicherung mit Dnscrypt
    • ISP → Kodachi VPN mit erzwungenem VPN-Verkehr → Tor-Browser → Dnscrypt
  13. Doppelsicherung mit Tor DNS
    • ISP → Kodachi VPN mit erzwungenem VPN-Verkehr → Tor-Browser → Tor DNS

Kommen wir nun zur Bedienung von Kodachi. Dazu rufen wir das Dashboard auf, das wir auf dem Desktop als Verknüpfung finden. Nach dem Start sehen wir verschiedene Reiter wie VPN, TOR und Settings. Unter Settings haben wir die Möglichkeit, mehrere Profile zu aktivieren, die für Sicherheit und Datenschutz im Internet relevant sind. Wie im unten stehenden Screenshot zu sehen ist, wählen wir Level 1 aus und aktivieren das Profil.

Im unteren Panel finden sich im Abschnitt Security Services verschiedene Dienste wie beispielsweise GnuNet, die sich zuschalten lassen. Hier gibt es mehrere Optionen, die problemlos ausprobiert werden können. GnuNet leitet etwa den gesamten Traffic ins TOR-Netzwerk um. Das hat natürlich zur Folge, dass die Seiten länger brauchen, bis sie vollständig geladen werden.

Mit den Bordmitteln von Kodachi Linux können Sie Ihre Sicherheit und Anonymität beim Surfen im Internet erheblich verbessern. Auch wenn die Benutzung am Anfang etwas ungewöhnlich ist, findet man sich schnell hinein. Wenn Sie sich für die Verwendung als Live-System oder virtuelle Maschine entscheiden, können Sie sich problemlos mit den verschiedenen Programmen und Einstellungen vertraut machen, ohne das Gastbetriebssystem zu beschädigen. Gerade als Anfänger nimmt die Benutzung einer VM die Angst, beim Ausprobieren der verschiedenen Konfigurationen etwas kaputtzumachen.

Wer sich ein wenig zu Kodachi Linux im Internet umschaut, findet auch schnell einen Artikel [2] aus 2021, der sich durchaus kritisch zu Kodachi äußert. Die Hauptkritik bezieht sich darauf, dass Kodachi eher als Ubuntu Distro mit einem angepassten Look and Feel zu betrachten ist, das mit ein paar Shell Scripten aufgepeppt ist, als ein eigenständiges Linux. So ganz von der Hand zu weisen ist diese Kritik nicht. Wer sich etwas genauer mit der Kritik beschäftigt, stellt fest, dass Kadochi durchaus einige praktische Anonymisierungs-Features aufweist. Dennoch ist es wohl weit davon entfernt, eine sogenannte Hackers Toolbox zu sein. Der Autor der Kritik hat sich 2025 [3] Kadochi noch einmal vorgenommen und hat auch für die aktuelle Version kein anderes Fazit als bereits 2021. Ob die anstehende Version 9 des Kadochi Linux sich die angemerkten Punkte zu Herzen nimmt, bleibt abzuwarten.

Resources

Abonnement / Subscription

[English] This content is only available to subscribers.

[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.

Nativen Git Server unter Linux aufsetzen

Wer sein Git-Repository zur gemeinsamen Bearbeitung für Quelltexte benutzen möchte, benötigt einen Git-Server. Der Git Server ermöglicht die Kollaboration mehrere Entwickler auf der gleichen Codebasis. Die Installation des Git-Clients auf einem Linux Server ist zwar ein erster Schritt zur eigenen Serverlösung, aber bei Weitem nicht ausreichend. Um den Zugriff mehrere Personen auf ein Code Repository zu ermöglichen, benötigen wir eine Zugriffsberechtigung. Schließlich soll das Repository öffentlich über das Internet erreichbar sein. Wir möchten über die Benutzerverwaltung verhindern, dass unberechtigte Personen den Inhalt der Repositories lesen und verändern können.

Für den Betrieb eines Git-Servers gibt es viele hervorragende und komfortable Lösungen, die man einer nativen Serverlösung vorziehen sollte. Die Administration eines nativen Git Servers erfordert Linux Kenntnisse und wird ausschließlich über die Kommandozeile bewerkstelligt. Lösungen wie beispielsweise der SCM-Manager haben eine grafische Benutzeroberfläche und bringen viele nützliche Werkzeuge zur Administration des Servers mit. Diese Werkzeuge stehen bei einer nativen Installation nicht zur Verfügung.

Wieso sollte man nun Git als nativen Server installieren? Diese Frage lässt sich recht leicht beantworten. Der Grund ist wenn der Server, auf dem das Code Repository bereitgestellt werden soll, nur wenige Hardware-Ressourcen besitzt. Besonders der Arbeitsspeicher ist in diesem Zusammenhang immer ein wenig problematisch. Gerade bei angemieteten Virtuellen Private Servern (VPS) oder einem kleinen RaspberryPI ist das oft der Fall. Wir sehen also, es kann durchaus Sinn ergeben, einen nativen Git Server betreiben zu wollen.

Als Voraussetzung benötigen wir einen Linux-Server, auf dem wir den Git-Server installieren können. Das kann ein Debian oder Ubuntu Server sein. Wer CentOS oder andere Linux Distributionen verwendet, muss anstatt APT zur Softwareinstallation den Paketmanager seiner Distribution nutzen.

Wir beginnen im ersten Schritt mit der Aktualisierung der Pakete und der Installation des Git-Clients.

sudo apt-get update
sudo apt-get upgrade 
sudo apt-get install git


Als zweiten Schritt erstellen wir einen neuen Benutzer mit dem Namen git und legen für diesen ein eigenes home Verzeichnis an und aktivieren dort den SSH-Zugriff.

sudo useradd --create-home --shell /bin/bash git
sudo su - git
cd /home/git/
mkdir .ssh/ && chmod 700 .ssh/ 
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys


Nun können wir im dritten Schritt in dem neu angelegten home Verzeichnis des git Users unsere Git-Repositories erstellen. Diese unterscheiden sich gegenüber dem lokalen Arbeitsbereich darin, dass diese den Source Code nicht ausgecheckt haben.

mkdir /home/git/repos/project.git 
cd /home/git/repos/project.git
git init --bare


Leider sind wir noch nicht ganz fertig mit unserem Vorhaben. Im vierten Schritt müssen wir die Benutzerberechtigung für das erstellte Repository setzen. Dies geschieht durch das Ablegen des öffentlichen Schlüssels auf dem Git Server für den SSH-Zugriff. Dazu kopieren wir den Inhalt aus der Datei unseres privaten Schlüssels in die Datei /home/git/.ssh/authorized_keys in eine eigene Zeile. Möchte man nun vorhandenen Nutzern den Zugriff verwehren, kommentiert man lediglich mit einem # die zeie des privaten Schlüssels wieder aus.

Wenn alles korrekt durchgeführt wurde, erhält man den Zugriff auf das Repository über folgenden Kommandozeilenbefehl: git clone ssh://git@<IP>/~/<repo>

Dabei ist <IP> durch die tatsächliche Server-IP zu ersetzen. Für unser Beispiel lautet der korrekte Pfad für <repo> project.git es ist also das von uns erstellte Verzeichnis für das Git-Repository.

Auf dem nativen Git Server können mehrere Repositories angelegt werden. Dabei gilt zu beachten, dass alle berechtigenden Nutzer auf alle so angelegenen Reposiories lesenden und schreibenden Zugriff haben. Das lässt sich nur dadurch einschränken, dass auf dem Linux-Server der unsere Git-Repositories bereitstellt, mehrere Benutzer auf dem Betriebssystem angelegt werden, denen dann die Repositories zugewiesen werden.

Wir sehen, dass eine native Git Server Installation zwar schnell umgesetzt werden kann, diese aber für die kommerzielle Softwareentwicklung nicht ausreichend ist. Wer gerne experimentiert, kann sich eine virtuelle Maschine erstellen und diesen Workshop darin ausprobieren.

Konfigurationsdateien in Softwareanwendungen

Wieso benötigen wir überhaupt die Möglichkeit, Konfigurationen einer Anwendung in Textdateien zu speichern? Genügt nicht einfach eine Datenbank für diesen Zweck? Die Antwort auf diese Frage ist recht trivial. Denn die Information, wie sich eine Anwendung mit einer Datenbank verbinden kann, lässt sich ja schlecht in der Datenbank selbst speichern.

Jetzt könnte man sicher argumentieren, dass man solche Dinge mit einer integrierten Datenbank (embedded) wie beispielsweise SQLite hinbekommt. Das mag auch grundsätzlich korrekt sein. Leider ist diese Lösung für hoch skalierbare Anwendungen nicht wirklich praktikabel. Zudem muss man nicht immer gleich mit Kanonen auf Spatzen schießen. Das Speichern wichtiger Konfigurationsparameter in Textdateien hat bereits eine lange Tradition in der Softwareentwicklung. Mittlerweile haben sich aber auch verschiedene Textformate wie INI, XML, JSON und YAML für diesen Anwendungsfall etabliert. Angesichts dessen stellt sich die Frage, auf welches Format man am besten für das eigene Projekt zurückgreifen sollte.

INI Dateien

Eines der ältesten Formate sind die bekannten INI Dateien. Sie speichern Informationen nach dem Schlüssel = Wert Prinzip. Wenn ein Schlüssel in solch einer INI-Datei mehrfach vorkommt, wird der finale Wert immer durch den zuletzt in der Datei vorkommenden Wert überschrieben.

; Example of an INI File
[Section-name]
key=value ; inline 

text="text configuration with spaces and \' quotas"
string='can be also like this'
char=passwort

# numbers & digets
number=123
hexa=0x123
octa=0123
binary=0b1111
float=123.12

# boolean values
value-1=true
value-0=false

Wie wir in dem kleinen Beispiel sehen können, ist die Syntax in INI-Dateien sehr einfach gehalten. Der Sektionsname [section] dient vor allem der Gruppierung einzelner Parameter und verbessert die Lesbarkeit. Kommentare können entweder durch ; oder # gekennzeichnet werden. Ansonsten gibt es die Möglichkeit, verschiedene Text- und Zahlen-Formate, sowie Boolean-Wert zu definieren.

Web-Entwickler kennen INI Files vor allem von der PHP-Konfiguration, der php.ini in der wichtige Eigenschaften wie die Größe des Datei-Uploads festgelegt werden können. Auch unter Windows sind INI-Dateien noch immer verbreitet, obwohl seit Windows 95 für diesen Zweck die Registry eingeführt wurde.

Properties

Eine andere sehr bewährte Lösung sind sogenannte property Files. Besonders verbreitet ist diese Lösung in Java-Programmen, da Java bereits eine einfache Klasse mitbringt, die mit Properties umgehen kann. Das Format key=value ist den INI-Dateien entlehnt. Kommentare werden ebenfalls mit # eingeleitet.

# PostgreSQL
hibernate.dialect.database = org.hibernate.dialect.PostgreSQLDialect
jdbc.driverClassName = org.postgresql.Driver 
jdbc.url = jdbc:postgresql://127.0.0.1:5432/together-test

Um in Java-Programmen beim Einlesen der .propreties auch die Typsicherheit zu gewährleisten, hat die Bibliothek TP-CORE eine erweiterte Implementierung. Trotz dass die Properties als Strings eingelesen werden, kann auf die Werte mittels Typisierung zugegriffen werden. Eine ausführliche Beschreibung, wie die Klasse PropertyReader verwendet werden kann, findet sich in der Dokumentation.

Auch im Maven Build Prozess können .property Dateien als Filter für Substitutionen genutzt werden. Selbstredend sind Properties nicht nur auf Maven und Java beschränkt. Auch in Sprachen wie Dart, nodeJS, Python und Ruby ist dieses Konzept nutzbar. Um eine größtmögliche Kompatibilität der Dateien zwischen den verschiedenen Sprachen zu gewährleisten, sollten exotische Optionen zur Notation vermieden werden.

XML

XML ist seit vielen Jahren auch eine weitverbreitete Option, Konfigurationen in einer Anwendung veränderlich zu speichern. Gegenüber INI und Property Dateien bietet XML mehr Flexibilität in der Definition der Daten. Ein sehr wichtiger Aspekt ist die Möglichkeit, fixe Strukturen durch eine Grammatik zu definieren. Dies erlaubt eine Validierung auch für sehr komplexe Daten. Dank der beiden Prüfmechanismen Wohlgeformtheit und Datenvalidierung gegen eine Grammatik lassen sich mögliche Konfigurationsfehler erheblich reduzieren.

Bekannte Einsatzszenarien für XML finden sich beispielsweise in Java Enterprise Projekten (J EE) mit der web.xml oder der Spring Framework und Hibernate Konfiguration. Die Mächtigkeit von XML gestattet sogar die Nutzung als Domain Specific Language (DSL), wie es bei dem Build-Werkzeug Apache Maven zum Einsatz kommt.

Dank vieler frei verfügbarer Bibliotheken existiert für nahezu jede Programmiersprache eine Implementierung, um XML-Dateien einzulesen und gezielt auf Daten zuzugreifen. Die bei Web-Entwicklern beliebte Sprache PHP hat zum Beispiel mit der Simple XML Erweiterung eine sehr einfache und intuitive Lösung, um mit XML umzugehen.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/assembly/ApplicationContext.xml</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>${jsf.project.stage}</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

JavaScript Object Notation oder kurz JSON ist eine vergleichsweise neue Technik, obwohl diese mittlerweile auch schon einige Jahre existiert. Auch JSON hat für nahezu jede Programmiersprache eine entsprechende Implementierung. Das häufigste Einsatzszenario für JSON ist der Datentausch in Microservices. Der Grund liegt in der Kompaktheit von JSON. Gegenüber XML ist der zu übertragene Datenstrom in Webservices wie XML RPC oder SOAP mit JSON aufgrund der Notation wesentlich geringer.

Ein signifikanter Unterschied zwischen JSON und XML besteht aber auch im Bereich der Validierung. Grundsätzlich findet sich auf der offiziellen Homepage [1] zu JSON keine Möglichkeit, eine Grammatik wie in XML mit DTD oder Schema zu definieren. Auf GitHub existiert zwar ein Proposal zu einer JSON-Grammatik [2] hierzu fehlen aber entsprechende Implementierungen, um diese Technologie auch in Projekten einsetzen zu können.

Eine Weiterentwicklung zu JSON ist JSON5 [3], das bereits 2012 begonnen wurde und als Spezifikation in der Version 1.0.0 [4] seit dem Jahr 2018 offiziell veröffentlicht ist. Zweck dieser Entwicklung war es, die Lesbarkeit von JSON für Menschen erheblich zu verbessern. Hier wurden wichtige Funktionen, wie beispielsweise die Möglichkeit, Kommentare zu schreiben, hinzugefügt. JSON5 ist als Erweiterung vollständig zu JSON kompatibel. Um einen kurzen Eindruck zu JSON5 zu gewinnen, hier ein kleines Beispiel:

{
  // comments
  unquoted: 'and you can quote me on that', 
  singleQuotes: 'I can use "double quotes" here',
  lineBreaks: "Look, Mom! \
No \\n's!",
  hexadecimal: 0xdecaf,
  leadingDecimalPoint: .8675309, andTrailing: 8675309.,
  positiveSign: +1,
  trailingComma: 'in objects', andIn: ['arrays',],
  "backwardsCompatible": "with JSON",
}

YAML

Viele moderne Anwendungen, wie zum Beispiel YAML, zur Konfiguration. Die sehr kompakte Notation erinnert stark an die Programmiersprache Python. Aktuell ist YAML in der Version 1.2 veröffentlicht.

Der Vorteil von YAML gegenüber anderen Spezifikationen ist die extreme Kompaktheit. Gleichzeitig besitzt die Version 1.2 eine Grammatik zu Validierung. Trotz der Kompaktheit liegt der Fokus von YAML 1.2 in einer guten Lesbarkeit für Maschinen als auch Menschen. Ob YAML dieses Ziel erreicht hat, überlasse ich jedem selbst zu entscheiden. Auf der offiziellen Homepage findet man alle Ressourcen, die für eine Verwendung im eigenen Projekt benötigt werden. Dazu zählt auch eine Übersicht zu den vorhandenen Implementierungen. Das Design der YAML Homepage gibt auch schon einen guten Vorgeschmack auf die Übersichtlichkeit von YAML Dateien. Anbei noch ein sehr kompaktes Beispiel einer Prometheus Konfiguration in YAML:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules" 
  # - "second.rules"

#IP: 127.0.0.1
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['127.0.0.1:8080']

  # SPRING BOOT WEB APP
  - job_name: spring-boot-sample 
    scrape_interval: 60s
    scrape_timeout: 50s
    scheme: "http"
    metrics_path: '/actuator/prometheus' 
    static_configs:
     - targets: ['127.0.0.1:8888']
    tls_config:
     insecure_skip_verify: true

Resümee

Alle hier vorgestellten Techniken sind im praktischen Einsatz in vielen Projekten erprobt. Sicher mag es für spezielle Anwendungen wie REST Services einige Präferenzen geben. Für meinen persönlichen Geschmack bevorzuge ich für Konfigurationsdateien das XML Format. Dies ist leicht im Programm zu verarbeiten, extrem flexibel und bei geschickter Modellierung auch kompakt und hervorragend für Menschen lesbar.

Referenzen

Abonnement / Subscription

[English] This content is only available to subscribers.

[Deutsch] Diese Inhalte sind nur für Abonnenten verfügbar.


Arbeiten mit Textdateien auf der Linux-Shell

Linux entwickelt sich mehr und mehr zu einem beliebten Betriebssystem für IT-Profis. Einer der Gründe für diese Entwicklung sind die Serverlösungen. Stabilität und geringer Ressourcenverbrauch sind einige der wichtigsten Eigenschaften für diese Wahl. Wer schon einmal mit einem Microsoft Server herumgespielt hat, wird den grafischen Desktop bei einem Linux Server vermissen. Nach dem Einloggen in einen Linux Server siht man nur die Kommandozeile, die auf Eingaben wartet.

In diesem kurzen Artikel stelle ich einige hilfreiche Linux-Programme zur Umgang mit Text Dateien auf der Kommandozeile vor. Auf diese Weise lassen sich leicht Informationen sammeln, zum Beispiel aus Protokolldateien (Logfiles). Bevor ich beginne, möchte ich noch einen einfachen und leistungsfähigen Editor namens joe empfehlen.

Strg + C – Abbrechen der aktuellen Bearbeitung einer Datei ohne Speichern der Änderungen
Strg + KX – Beenden der aktuellen Bearbeitung und Speichern der Datei
Strg + KF – Text in der aktuellen Datei suchen
Strg + V – Einfügen der Zwischenablage in das Dokument (CMD + V für Mac)
Strg + Y – Aktuelle Zeile an der Cursorposition löschen

Um joe auf einer Debian-basierten Linux-Distribution zu installieren, müssen Sie nur folgendes eingeben:

1. Wenn Sie Inhalte in einer großen Textdatei finden müssen, ist GREP Ihr bester Freund. Mit GREP können Sie nach Textmustern (Pattern) in Dateien suchen.

gerp <pattern> file.log 
    -n : number of lines that matches
    -i : case insensitive
    -v : invert matches
    -E : extended regex
    -c : count number of matches
    -l : find filenames that matches the pattern
Bash

2. Wenn Sie Netzpakete analysieren müssen, ist NGREP das Werkzeug Ihrer Wahl.

ngrep -I file.pcap
    -d : specify the network interface 
    -i : case insensitive
    -x : print in alternate hexdump
    -t : print timestamp
    -I : read a pcap file
Bash

3. Wenn Sie die Änderungen zwischen zwei Versionen einer Datei sehen wollen, ist DIFF genau das Richtige für Sie.

diff version1.txt version2.txt
    -a : add 
    -c : change
    -d : delete
     # : line numbers
     < : file 1
     > : file 2
Bash

4. Manchmal ist es notwendig, die Einträge in einer Datei in eine bestimmte Reihenfolge zu bringen. SORT wird Ihnen bei dieser Aufgabe helfen.

sort file.log 
     -o : write the result to a file 
     -r : reverse order
     -n : numerical sort
     -k : sort by column
     -c : check if orderd
     -u : sort and remove
     -f : ignore case
     -h : human sort
Bash

5. Wenn Sie Strings innerhalb eines großen Textes ersetzen müssen, z. B. durch Suchen und Ersetzen, können Sie dies mit SED, dem Stream-Editor, tun.

sed s/regex/replace/g
     -s : search 
     -g : replace
     -d : delete
     -w : append to file
     -e : execute command
     -n : suppress output
Bash

6. Das Parsen von Feldern mit Begrenzungszeichen in Textdateien kann mit CUT durchgeführt werden.

cut -d ":" -f 2 file.log 
     -d : use the field delimiter
     -f : field numbers
     -c : specific characters position
Bash

7. Die Extraktion von Teilstrings, die nur einmal in einer Textdatei vorkommen, erreichen Sie mit UNIQ.

uniq file.txt
     -c : count the numbers of duplicates 
     -d : print duplicates
     -i : case insesitive
Bash

8.  AWK ist eine Programmiersprache, mit der Daten manipuliert werden können.

awk {print $2} file.log 
Bash

Chemnitzer Linux Tage 2022

Eine Einführung in P2P Netzwerke

Wer seine Anwendung nicht als zentralisierte Client / Server Architektur, sondern in einem dezentralisierten P2P Netzwerk betreiben möchte hat einige Herausforderungen zu bewältigen. Nach der Hochzeit von Napster und BitTorrent erleben neuen Medienplattformen wie Odysee und PeerTube mit P2P Technologie eine neue Renaissance. Ohne auf direkte Implementierungsdetails einzugehen bespreche ich in diesem Vortrag wichtige Grundlagen, die für den Einstig in die P2P Welt notwendig sind. Im besonderen Fokus stehen dabei die Vor und Nachteile der verschieden Algorithmen wie sich die einzelnen Peer finden und welche Probleme dabei auftreten können.


Grazer Linux Tage 2022

Heimnetz ohne Werbung mit AdGuard auf dem RaspberryPI

Leider ist von Minute 1:00 bis 2:10 kein Tonmitschnitt vorhanden 🙁 – einfach überspringen

Es gibt viele Projekte die sich für einen Raspberry PI eignen. Aus eigener Anwendung zeige ich wie man im Heimnetzwerk das Tool AdGuard in einem Docker Container zum laufen bringt, um damit die Werbung für alle im Netwerk verbundenen Geräte abstellt.

In diesem kleinen Workshop geht es darum auf einem Raspberry PI 4 mit einem Ubuntu Server Docker zum Laufen zu bekommen. Das ist aber der einfachste Schritt, denn dann geht es ans Eingemachte und wir fühlen den Netzwerkmöglichkeiten von Docker ein wenig auf den Zahn. Ein bischen SSH und Shell, ganiert mit Routerkonfiguration und vielen kleine praktischen Tipps runden den Talk ab.


Grazer Linux Tage 2019

Challenges to create your own Open Source Project

Den eigenen Source-Code auf GitHub zu veröffentlichen ist ein erster Schritt zum eigene Open-Source-Projekt. Aber bei weitem nicht der einzige.

  • das kleine Lizenz 1×1
  • Promotion on GitHub
  • Veröffentlichungen auf Maven Central
  • Continuous Integration in the Cloud – Travis CI
  • Public Code Coverage with Coveralls

Neben diesen Themen werden viele kleine Aspekte, die sich im Rahmen eines Projektes ergeben, angeschnitten. In Zusammenarbeit mit: KreativgeistAT