20 Jahre Innovation, IT-Kompetenz und Zukunftsblick -Unser Firmenjubiläum

In diesem Jahr feiern wir ein besonderes Ereignis, unser 20-jähriges Firmenjubiläum - zwei Jahrzehnte voller technologischer Entwicklungen, spannender Kundenprojekte und kontinuierlicher Innovation. Was 2005 mit einer klaren Vision begann, ist heute ein etabliertes IT-Unternehmen mit tiefgreifender Expertise in der Entwicklung, Optimierung und Sicherung von IT-Systemen.

Rückblick: Von der Idee zur etablierten IT-Kompetenz

Unsere Reise begann mit der Überzeugung, dass Daten weit mehr sind als Zahlen in Tabellen - sie sind der Schlüssel zu fundierten Entscheidungen, effizienteren Prozessen und nachhaltigem Unternehmenserfolg. Daher stehen Datenbanken im Zentrum unserer Dienstleistungen. Von Architektur-Konzepten, Automatisierung und Monitoring zu Training und Know-How-Aufbau bei den Mitarbeitern unserer Kunden. So erfüllen wir den Anspruch, mit unseren Kunden tragfähige, sichere und zukunftsweisende Lösungen zu schaffen.

Heute: Von KI und IT-Sicherheit

In den letzten Jahren hat sich die IT-Welt rasant gewandelt. Künstliche Intelligenz (KI) ist dabei, ganze Branchen zu transformieren - und das Fundament dieser Entwicklung sind leistungsfähige, strukturierte und saubere Daten. Unsere Erfahrung im Datenbank-Bereich bildet die passende Brücke zwischen klassischen Datenarchitekturen und modernen KI-Anwendungen.

Wir begleiten Unternehmen bei der Frage: Wie machen wir unsere Daten KI-ready? Ob durch strukturierte Datenpipelines, semantische Modellierung oder durch die Integration moderner KI-Dienste in bestehende Datenbankumgebungen - wir gestalten aktiv mit.

In einer Ära zunehmender Cyberangriffe und wachsender regulatorischer Anforderungen ist es zudem unerlässlich, Daten nicht nur intelligent, sondern auch sicher zu verarbeiten. Hierbei unterstützen wir unsere Kunden mit dem passenden Know-How, bei der Realisierung ihrer IT-Systeme, nach dem Security-by-Design Prinzip.

Blick nach vorn: Gemeinsam in die Zukunft

20 Jahre sind ein Meilenstein - aber längst kein Endpunkt. Unser Anspruch bleibt: Daten in Wissen verwandeln, Systeme sicher halten und unsere Kunden in der digitalen Transformation unterstützen. Dabei werden wir weiterhin auf technologischen Fortschritt, partnerschaftliche Zusammenarbeit und verantwortungsvolle IT-Lösungen setzen.

Wir danken all unseren Kunden, Partnern und Wegbegleitern für das entgegengebrachte Vertrauen. Ohne Euch wäre diese Reise nicht möglich gewesen!

Auf die nächsten 20 Jahre - mit Herz, Hirn und Hightech...

Ansible Teil 2 - Facts und Jinja2 Filter

Im ersten Teil der kleinen Ansible Serie ging es um die Installation von RPM Paketen für die Oracle Software. Der nächste Schritt wäre nun der Aufbau einer Datenbank mit dem Database Configuration Assistant (DBCA) der Firma Oracle. Es macht aber Sinn, vorab zum besseren Verständnis die Punkte Ansible Facts und Jinja2 Filter zu behandeln.

In unserem Demo-Beispiel soll es später die Möglichkeit geben, die Hauptspeicher-Grösse der Datenbank-Instanz in Megabyte als Variable zu definieren. Ist kein Wert explizit gesetzt, soll als Default-Wert 50% des verfügbaren Hauptspeichers genutzt werden. Für die praktische Umsetzung gibt es in Ansible Standard-Facts die automatisch vom Zielsystem ermittelt werden. In unserem Fall das Fact ansible_memtotal_mb das wir als Grundlage für eigene Berechnungen nutzen könnten:

- name: calculate totalMemory parameter for dbca
  debug:
    msg: "{{ oracle_memory | default((ansible_memtotal_mb / 2) | round | int) }}"

Zusätzlich möchten wir den DBCA später nur starten, wenn auf dem Zielsystem noch keine entsprechende Datenbank vorhanden ist. Ein Indikator für diese Erkennung ist der Inhalt der Datei /etc/oratab. In diesem Fall ist die Verarbeitung etwas aufwendiger, zunächst könnten wir den Inhalt von /etc/oratab in Ansible verfügbar machen:

- name: Slurp /etc/oratab
  ansible.builtin.slurp:
    src: /etc/oratab
  register: slurped_etc_oratab

Aus diesem Inhalt können wir dann mit Jinja2 Filtern eine Liste der ORACLE_SIDs herausfiltern:

- name: Extract list of Oracle SIDs from slurped /etc/oratab
  ansible.builtin.set_fact:
    oracle_sids: "{{ slurped_etc_oratab.content | 
                     ansible.builtin.b64decode | 
                     ansible.builtin.regex_findall('^((?!#).+):.*:.*$', multiline=True) }}"

Die so ermittelten ORACLE_SIDs könnten wir für Debug-Zwecke in einer Schleife ausgeben lassen:

- name: Iterate over list of Oracle SIDs and display them
  ansible.builtin.debug:
    msg: "{{ item }}"
  loop: "{{ oracle_sids }}"

Um zu verhindern, dass der DBCA gestartet wird, wenn die gewünschte ORACLE_SID schon in der /etc/oratab vorhanden ist, könnten wir den späteren Task mit folgender when-Bedingung versehen:

- name: Only execute if given SID is not in extracted Oracle SID list
  ansible.builtin.debug:
    msg: "Database {{ oracle_sid }} is not in list..."
  when: oracle_sid not in oracle_sids

Ansible Teil 1 - YUM und RPM-Pakete

In einem der letzten Blog-Posts hatte ich gezeigt, wie mit wenigen Schritten ein Yum-Repository für RPM-Pakete auf einem NAS angelegt werden kann. Nun soll es darum gehen, diese Pakete auf einem System mit Rocky Linux 9 via Ansible automatisiert zu installieren.

Einer der Grundbaustein von Ansible sind die Tasks in denen definiert wird, was auf einem System automatisiert werden soll. Glück für uns, für die Konfiguration von Yum-Repositories und die Installation von RPM-Paketen gibt es schon fertige Standard-Module.

Hier ein Beispiel für die YUM-Repository Konfiguration und die Installation der Oracle 23ai Free Edition:

- name: "Handle local YUM Repository"
  ansible.builtin.yum_repository:
    name: "local-yum-repo"
    baseurl: "{{ yum_repo_url }}"
    file: "local_yum_repo"
    description: "Local YUM Repo on NAS"
    enabled: yes
    gpgcheck: no
    proxy: "_none_"
    state: "present"

- name: Install Oracle RPM Packages for 23ai
  ansible.builtin.dnf:
    name: 
      - oracle-database-preinstall-23ai
      - oracle-database-free-23ai
    state: installed

In weiteren Blog-Posts werde ich zeigen, wie sich im Anschluss eine Oracle Datenbank erstellen lässt und welche weiteren Bausteine für eine Ansible Automatisierung notwendig sind.

IT-Sicherheitsvorfall in der Oracle Cloud?

Das Nachrichtenportal heise.de berichtet heute von einem möglichen IT-Sicherheitsvorfall in der Oracle Cloud: https://www.heise.de/news/Oracle-angeblich-gehackt-Nutzerdaten-im-Darknet-zum-Verkauf-10327980.html

Zum Stand dieser Mitteilung (25.03.2025 17:04) bestreitet die Firma Oracle einen entsprechenden Angriff. Zwecks Transparenz bestätige ich aber, dass die Domain "fm-berger.de" in der vom Angreifer veröffentlichten Firmenliste (Company.List.txt - SHA1 dad5b71e2077044c0f4ac69a79b7d7e393e15129) enthalten ist.

Grund zur Panik besteht, zumindest in meinem Fall, nicht. Das entsprechende Konto ist über einen zweiten Faktor (2FA) gesichert. Das genutzte Passwort war zudem mehr als 20 Zeichen lang und entsprechend komplex.

Allgemeine Empfehlung:

  • Ohne Passwort-Manager geht es nicht mehr - meine Empfehlung KeePassXC: https://keepassxc.org/
  • Multi-Faktor-Authentifizierung ist aus meiner Sicht ebenfalls Pflicht, wird aber leider bis heute nicht von allen Diensten sauber unterstützt
  • Von SMS als zweitem Faktor rate ich aus Sicherheitsgründen ab

Es ist inzwischen leider normal, dass im Prinzip jeder mehrmals pro Jahr mit ähnlichen Vorfällen rechnen muss. Das gleiche Passwort bei mehreren Diensten zu nutzen ist ein absolutes No-Go!

Lokales YUM-Repository für eigene RPM-Pakete

Speziell für eigene RPM-Pakete bietet sich ein YUM-Repository im LAN an. Damit lässt sich die Installation von RPM-Paketen automatisieren und man spart sich - gerade bei großen Paketen - den Download aus dem Netz.

Für Test- und Entwicklungszwecke hat sich bei mir ein NAS der Firma Synology bewährt. Als Basis dient ein NFS-Share und der "Web Station"-Service. So lassen sich die RPM-Pakete bequem von meiner Workstation auf das NAS schieben. Das YUM-Repository lässt sich im zweiten Schritt mit dem Befehl createrepo anlegen oder aktualisieren.

Zunächst die gewünschen RPM-Pakete auf das NFS-Share verschieben / kopieren:

mv oracle-database-preinstall-23ai-1.0-2.el9.x86_64.rpm /media/web/
mv oracle-database-free-23ai-1.0-1.el9.x86_64.rpm /media/web/

Falls noch kein YUM-Repository existiert:

createrepo /media/web/

Nach diesem Aufruf gibt es ein Unterverzeichnis repodata mit den entsprechenden Metadaten des Repository.

Um die Metadaten nach dem Hinzufügen von Paketen zu aktualisieren reicht ein:

createrepo --update /media/web/