Kategorien
Randnotiz

Ansible: Logparser

Ich musste mal Ansible Zweck entfremden: Auslesen von Log Dateien und Anzeige nur bestimmter Einträge.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
---
- hosts: hal52b
  gather_facts: no
  vars:
   nummer: [
            " 500",
            " 404"
           ]
 
  tasks:
   - name: Suche Error in Access LOG
     shell:
       chdir: /var/log/apache2
       cmd: "grep -ari -e '^halsec.de' other_vhosts_access.log | cat"
     changed_when: false
     ignore_errors: true
     become: true
     register: grep_cmd
 
   - debug:
       msg: "{{item| regex_findall('\\s\\d{3,5}')}} gefunden"
     when: "item| regex_findall('\\s\\d{3,5}')|intersect(nummer)|length != 0"
     loop: "{{ grep_cmd.stdout_lines }}"

Beim Aufruf des Playbooks lese ich eine Apache Log Datei aus. Mit grep findet die erste grobe Selektion statt. In dem Debug Loop nehmen wir uns Zeile für Zeile und vergleichen 3-5 stellige gefundene Errorcodes mit einer definierten Liste. Kommt der Errorcode in der Liste vor, wird er „OK“ – alle nicht vorkommenden Errorcode werden „skipped“ ausgegeben.

Die Ausgabe kann über Konfiguration der ansible.cfg beeinflusst werden. Bei langen Debug Ausgaben kann es sinnvoll sein, „skipped“ Nachrichten auszublenden. Auch farblich kann die Ausgabe angepasst werden.

Angepasste Farben in der ansible.cfg
1
2
3
4
5
[defaults]
display_skipped_hosts = yes
[colors]
ok = purple
skip = dark gray

„display_skipped_hosts = no“ unterdrückt alle skipped Nachrichten. Da kann/muss mit gespielt werden. Viel Spaß!

Kategorien
Randnotiz Schulung

CLI: mySQL pgsql Spickzettel

Zur Zeit arbeiten wir im Team an der Programmierung mit zwei unterschiedlichen Datenbank Backend’s: mySQL und Postgres. „Mal eben“ die Struktur einer Tabelle aufrufen, läuft über die Bash CLI unterschiedlich.

schnelle CLI Befehle

BeschreibungmySQLpgsql
einfaches Loginmysql -u user -h IP -p -D db
psql -U user -h IP -d db
Befehlsausführung
ohne Login
mysql -u user -h IP -p -D db -e "select * from tabelle;"psql -U user -h IP -d db -c "select * from schema.tabelle;"
Auflistung Datenbankenshow databases;\l+
Auflistung Tabellenshow tables;\dt+
Kontext Datenbankuse database;\c db
Beschreibung Tabelledescribe table;\d+ table
Auflistung Schemasshow schemas;\dn+
Postgresql: Tabellen werden mit \dt in Bezug auf Schema und Suchpfad aufgelistet. Als Standard ist nur der Suchpfad "public" eingestellt. Der Suchpfad kann temp. mit "SET search_path TO schema1,schema2,public" oder dauerhaft durch "alter database db set search_path = schema1,schema2, public;" eingestellt werden.

Obacht mit Großschreibung im Schema! Ein Schema mit Großschreibung im Suchpfad, wird in Kleinbuchstaben gespeichert. Das Schema ist als String zu maskieren!

Kategorien
Randnotiz

Tipp: Anpassung Script nach StableNet Update

Nach dem Update von StableNet von Version 10 auf 11 kann es zu Problemen mit sh Agent Scripts kommen.

Die Agent Scripts werden im neuen StableNet vor Aufruf (genauer) geprüft – sh Scripte wohl bemerkt. Der Parameter „Name“ darf nicht fehlen!

sh Script für StableNet Agent

Im StableNet 10 reichte es aus, wenn das sh Script als <parameters> lediglich <version> mitteilte. Jetzt ist auf einen belibigen <name> zu achten.

Grundsätzlich sind Änderungen im XML Schema bzgl. Business Process Scripts ergangen – unter Umständen erscheinen bei JAR Agent Scripts die Fehlermeldung „Attribute default is not allowed“ was dann in jedem AgentScript anzupassen ist.

Die MariaDB nicht auf die höchst mögliche Version updaten. Maximal Version 10.5.13. NICHT 10.5.16

Abgesehen davon läuft das Update einwandfrei.

Kategorien
Randnotiz

Datei Säuberungsaktion

Eine Unart ist es, Sonderzeichen in Datei- oder Ordnernamen zu vereinbaren.

Der Grund ist mir nicht klar. User, eben.

Sonderzeichen sind häufig ein Grund für seltsame Fehler, wenn es um die
Verarbeitung von Dateien geht. Dateinamen mit Sonderzeichen oder Umlauten
lassen sich auf Anwenderebene problemlos vereinbaren – mit Einschränkungen.
Linux mag keine Komma oder Semikolon, Windows verträgt keine | im Namen.

Kurz: Vor der Verarbeitung, insbesondere Datenarchivierung, sollte das
entfernt werden.

Mittels find /dir -type f *[üÜöÖäÄß]* -exec sed.. usw. kann man alle Fehler
nach eigenem Gusto beheben.

Tipp: Einfacher, schneller und fehlerfrei ist detox. Leider nicht in jeder
Distribution enthalten. Debian ist kein Problem – RedHat verwaist auf RPM aus
Fremdquellen.

Hat jemand schönere Lösungen?

Kategorien
Allgemein Randnotiz Schulung

tar: Archive anlegen

Vor geraumer Zeit war das auch Thema im CCGL (Link) – wie nutze ich TAR um Archive verschlüsselt auf einem öffentlichen Laufwerk zu sichern.

Zahlreiche Varianten neben TAR/aespipe/split nutze ich. Eine weitere und sicherere Art ist es, TAR in Kombination mit OpenSSL zu nutzen. Zunächst aber das Handling.

Im CCGL haben wir TAR als Stream durch „split“ in kleinere Pakete zerteilt. Das kann TAR auch alleine:

tar -cvML 1945600 -V Testlauf  –files-from=tarliste.txt -F ‚echo sicherung/${TAR_ARCHIVE}-${TAR_VOLUME} >&${TAR_FD}‘ -f test.tar

Wir sehen, analog zum Beispiel im Link, ein Multi-Volume (M), begrenzt auf eine Bandlänge (L) von 1.9GB. Ohne das Script (F) würde der Befehl zum Wechseln des Mediums auffordern, wenn eine Menge von 1.9GB geschrieben wurde. Die Datei, die wir anstatt Band mit (f) konfiguriert haben, wird zur Laufzeit im Parameter TAR_FD (File Descriptor) gehalten und mit dem Script bei jedem „Bandwechsel“ neu gesetzt. Coole Sache! Aus test.tar wird nach den ersten 1.9GB dann 2-test.tar. Mit „V“ setzte ich gerne Label – vergleichbar mit dem Aufkleber den wir früher auf die Band Rollen oder Disketten geklebt haben.

Versuchen wir den Inhalt darzustellen, ohne zu Wissen das es sich um ein Multi Volume Archiv handelt:

Man erkennt die Problematik? Sicherlich wenn man das ganze mit dem Multi Volume Script sieht:

Das Archiv wird nahtlos und vollständig aufgelistet. Es wird nur das Label des ersten Archivs aufgeführt.

Wenn ich Zeit finde, zeige ich wie ich das in meinem jetzigen Projekt gelöst habe und wie man das Archiv verschlüßelt ablegt.

Kategorien
Randnotiz

fstab: auf richtige UID/GID achten

Kleiner Tipp am Rande:

Es ist gute Sitte, beim mounten von Freigaben eine UID nebst GID zu konfigurieren. Die Distributionen halten dazu eine kleine Falle bereit: Debian und RedHat vergeben im Standard >= 1000 für GID’s und >= 1000 für UID’s.

OpenSuse (Leap) oder SLES beginnen bei der Vergabe der GID bei 100!

Versucht man dann zB. ein WebDAV Laufwerk mit der GID 1000 zu mounten, kommt es zum Fehler: getuid() –> exit_group(1) , da die Gruppe in SLES >= 100 bekommen hat.

Kategorien
Randnotiz Schulung

Ansible: Update Raspbian

Im CCGL halten wir unsere Raspberry Pi’s mit Ansible synchron. Je nach Aufgabe werden Softwarestände und Code gleich gehalten.

Bestimmte Task sollten aber nicht mit dem allgemeinen Playbook ablaufen: Löschen von Verzeichnissen, unbeabsichtigte Installationen und kein ausserplanmäßiges Update.

Dazu habe ich die kritischen Task’s mit dem Tag „never“ versehen. Das Tag „never“ sorgt dafür, dass dieser Tag „never“ abläuft. Es sei denn, wir geben ihn expliziet an.

Beim Aufruf also, auf den „-t“ Tag und eine eventuelle Beschränkung mit „-l“ auf die im Inventory konfigurierten Maschinen achten!

ansible-playbook -D  -i inventory/hosts tasks/main.yml -l pi -t update

Bis zum nächsten Workshop im CCGL 😉

Kategorien
Randnotiz

Tipp: CEntOS 8 No URLs in mirrorlist

Kurzer Hinweis

Die Standrad Repositories für Installation und Updates müssen auf andere Quellen geändert werden. Das ist komfortabel automatisiert:

dnf –disablerepo ‚*‘ –enablerepo=extras swap centos-linux-repos centos-stream-repos

dnf distro-sync

Danach funktioniert dnf update und dnf install

Gibt es andere Lösungen? Oder habt ihr die Distribution gewechselt?

Kategorien
Randnotiz

Tipp: Linphone abgehend ohne Audio

Kurzer Tipp wenn Linphone bei einem initiierten SIP Anruf kein Audio überträgt:

Ich nutze Linphone ohne Linphone Account. Es wird aber intern im Standard der STUN Server des zwangsweise konfigurierten Linphone-Account genutzt.

Findige Kollegen haben das durch Beobachtung mit Wireshark heraus gefunden:

Auch bei Anruf über den SIP Account, wird der Download-Stream über STUN.linphone.org erwartet. Nimmt man den Anruf temporär in „Hold“ und setzt wieder zurück, ist Audio in beide Richtungen verfügbar. Das Phänomen tritt nicht bei ankommenden Anrufen über den SIP Account auf!

Wenn kein Account auf Linphone.org genutzt wird, hilft der Eintrag in der /etc/hosts:

127.0.0.1        stun.linphone.org
127.0.0.1        sip.linphone.org

und alles läuft einwandfrei.

Kategorien
Randnotiz

Bash: Spalte in CSV hinzufügen

Bei der Aggregation von CSV Files, die in EXCEL weiter verarbeitet werden

sollen, ist auf den Zeilenabschluss zu achten.

 

Automatisiertes hinzufügen einer SPALTE mit korrektem Zeilenabschluss:

 

sed ’s/\r/;\r/‘ datei.csv > datei_neu.csv

 

(wenn Original beibehalten werden soll)

oder mit direkter Verarbeitung:

 

sed -i  ’s/\r/;\r/‘ datei.csv