Skip to content
{{TecBauer}}
  • Home
  • Datenschutzerklärung
  • Impressum

Alle Beiträge von tecbauer

  • Home   /  
  • Beiträge von tecbauer
Bugs, Tools, Unnützes Wissen, Windows Okt 28,2019

Bug im Windows 10 Home Edition Taschenrechner ?

Neulich bat mich ein Kollege auf der Arbeit kurz um Hilfe. Ihm war ein komisches Phänomen aufgefallen. Er wollte ein SQL update Statement auf eine Integer Spalte einer SQL Datenbank ausführen. Doch SQL zeigte ihm nur eine seltsame Fehlermeldung. Den Integer hatte er zuvor mit Hilfe des in Windows eingebauten Taschenrechners berechnet.

mysql> UPDATE auth_token SET version = '1200' where id = 2;
ERROR 1265 (01000): Data truncated for column 'version' at row 1

Auffällig war auch, wurde die Zahl mit Hilfe von STRG-C aus dem Taschenrechner kopiert oder war die Zahl kleiner als 1000 funktionierte alles einwandfrei. Auch wenn man die Zahl von Hand eingab funktionierte es. Der Taschenrechner musste also irgend ein Zeichen an die Zahl hängen. Also ließen wir uns die Base64 Repräsentation der Zeichenkette anzeigen.

Aus dem Taschenrechner kopiert:

tecbauer@XELO:~$ echo -n  "1200" | base64
MTIwMOKArg==

Von Hand eingegeben:

tecbauer@XELO:~$ echo -n  "1200" | base64
MTIwMA==

Eindeutig. Die zwei Zeichenketten waren unterschiedlich. Um nun herauszufinden um welches Zeichen es sich handelte öffneten wir den Vim-Editor und stellten ihn auf :set list um. Nun fügten wir die Zeichenkette ein. Und da war unser Sonderzeichen:

<202e> … Doch was bedeutet dieses Zeichen und warum sollte es vom Windows Taschenrechner an das Ergebnis angefügt werden? Nach kurzer Recherche fanden wir heraus, dass das Zeichen ein Unicode Zeichen ist für den RIGHT-TO-LEFT OVERRIDE ist. Nachdem wir uns dann die Zahl im Taschenrechner noch einmal anschauten war uns die Sache klar.

Der Taschenrechner setzt Tausender Punkte. Um zu errechnen an welcher Stelle ein Punkt gesetzt werden muss, müsste er wenn er von Links nach Rechts schreibt (wie üblich), den Ersten Punkt nach dem 1. Zeichen setzen. Um dies zu wissen müsste man aber eine Modulo-Rechnung machen nur um festzustellen wo Punkte gesetzt werden sollen. Dies umgeht der Taschenrechner, in dem er die Zahl reverse schreibt. Dann kann nämlich nach jedem dritten Zeichen einfach ein Punkt gesetzt werden. Leider wurde vergessen am Ende das entsprechende Unicode-Zeichen dafür zu entfernen.

von tecbauer
DevOps, Docker, Kubernetes, Linux, Tricks Okt 23,2019

TCPdump eines einzelnen Kubernetes Pods / Docker Containers erstellen

Manchmal ist es nötig die Netzwerkverbindung von nur genau einem Pod oder Container zu beobachten und zu analysieren. In der Regel laufen aber auf dem Host des Containers eine Vielzahl von Containern. Wie bekommt man nun den einzelnen Container seinem virtuellem Interface auf dem Host zugeordnet. Hier nur eine kleine Anleitung wie dies in den meisten Fällen möglich sein sollte. Gezeigt wird das ganze an Kubernetes.

Zuerst muss geprüft werden, mit welchem ifindex des Hosts, der Container, bzw. dessen zu prüfenden Interfaces verbunden sind. Konkret sieht das wie folgt aus. Wir lassen uns alle Interfaces des Containers anzeigen:

tecbauer@XELO:~$ kubectl exec -i pod-52ds-lfbxv -- ifconfig -a
eth0      Link encap:Ethernet  HWaddr B2:F2:50:32:70:1B  
          inet addr:100.96.5.50  Bcast:0.0.0.0  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:518 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:765979 (748.0 KiB)  TX bytes:7462 (7.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:156923 errors:0 dropped:0 overruns:0 frame:0
          TX packets:156923 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:71332776 (68.0 MiB)  TX bytes:71332776 (68.0 MiB)

bzw. mit:

tecbauer@XELO:~$ kubectl exec -i pod-52ds-lfbxv -- ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: eth0@if53: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 9001 qdisc noqueue state UP 
    link/ether b2:f2:50:32:70:1b brd ff:ff:ff:ff:ff:ff
    inet 100.96.5.50/24 scope global eth0
       valid_lft forever preferred_lft forever

Nun suchen wir das zu Überwachende Interface, in userem fall eth0. Hier fällt uns folgendes auf, das Interface heißt eth0@if53. Dieses if53 bedeutet, das Interface eth0 ist mit dem Hostinterface mit dem ifindex 53 verbunden. Wenn wir nur ifconfig zur Verfügung haben können wir das wie folgt herausfinden:

tecbauer@XELO:~$ kubectl exec -i pod-52ds-lfbxv -- cat /sys/class/net/eth0/iflink
53

Nun wissen wir, mit welchem Interface (kann auch virtuell) des Hosts der Container verbunden ist. Um herauszufinden wie dieses Interface heißt müssen wir uns per SSH mit dem entsprechendem Host des Containers verbinden. Hier führen wir dann folgende Kommando aus:

root@host:/home/admin# grep -r "53" /sys/class/net/*/ifindex
/sys/class/net/veth740b54a8/ifindex:53

Wir sehen nun, dass das Interface mit dem Index 53 veth740b54a8 heißt. Nun sind wir in der Lage mit tcpdump mitzuschneiden:

root@host: tcpdump -i veth740b54a8 -w record.pcap

Die entstandene Datei record.pcap können wir nun mit Wireshark analysieren.

von tecbauer
Bash, Linux, Tricks Okt 16,2019

Kommando Multithreaded in der BASH ausführen

Heute möchte ich euch vorstellen, wie es möglich ist mehrere Kommandos multithreaded in der Bash auszuführen. Einen konkreten Anwendungsfall könnt ihr euch wie folgt vorstellen:

Ihr habt eine Liste mit IP-Adressen die ihr pingen wollt. Oder noch besser eine List mit Objekten, die ihr gegen einen Server mittels curl POSTen wollt. Oder klassisch eine Liste von URLs die ihr herunterladen wollt. Eine solche Liste könnte so aussehen:

tecbauer@XELO:/tmp$ cat urls.txt 
google.de
tecbauer.de
google.com
bing.de

Ganz simple könnte man jetzt hergehen, über jede Zeile der Datei iterieren und den Prozess mit & in den Hintergrund legen, z. B. so:

for i in $(cat urls.txt); do wget -O- $i &; done

Wie aber kontrollieren wir aber nun wie viele Threads gleichzeitig gestartet werden? – Gar nicht. Es wäre viel zu kompliziert eine Logik dafür in einem Terminal auf einen Rutsch einzutippen. Stattdessen benutzen wir das Kommando xargs und dessen Option -P mit dieser Option kann man angeben mit wie vielen Threads der std-input in xargs verabeitet werden soll. Das ganze würde dann so aussehen:

cat urls.txt | xargs -P 4 -i wget -O- {}

Wir arbeiten also die Liste mit insgesamt 4 Threads ab. Und laden die Ressourcen paralell herunter.

von tecbauer
Tools, Wordpress Okt 14,2019

Product Catalog X – Ein einfacher WordPress Produktkatalog

Heute möchte ich euch Product Catalog X vorstellen, ein einfacher Produktkatalog für WordPress.

Gestern hatte ich von einem meiner WordPress-Kunden folgende Anforderung. Der Kunde möchte auf seiner Seite Werkstücke, wie Schränke oder Tische präsentieren. Dabei sollen Besucher der Seite Werkstücke sehen, die bereits verkauft wurden und Werkstücke, welche noch zu verkaufen sind. Das ganze soll nicht als Web-Shop aufgebaut werden, sondern eher wie ein digitales Schaufenster. Die Produkte / Werkstücke will der Kunden selbst bequem einpflegen können. Preise sollen nicht angezeigt werden. Ein Produkt soll jederzeit als einfach verkauft markiert werden können.

Nach kurze Recherche und dem Testen verschiedener Plugins habe ich das meiner Meinung nach perfekte kostenlose Plugin für diesen Use-Case gefunden: Product Catalog X von impleCode.

Mit Hilfe dieses Plugins lässt sich in der Free Version genau ein Katalog anlegen (in meinem Fall Werkstücke). Dem Katalog kann man mehrere Kategorien hinzufügen, in meinem Fall Verkauft und Zu verkaufen.

Danach können dem Katalog mehrere Produkte hinzugefügt werden, die man in ein oder mehrere Kategorien ordnet. Jede Kategorie kann einzeln über einen WordPress Include-Code z.B. [show_products category=”2″] eingebunden werden.

Das wirklich coole an dem Plugin ist aber, das definiert werden kann, unter welchem Namen der Katalog im WordPress-Backend angezeigt wird. Das hat den großen Vorteil, das auch Kunden die sich nicht mit WordPress auskennen ohne große Schulung oder ähnliches den Katalog finden und verwalten können. Das ganze sieht dann folgender Maßen aus:

Bei Feedback oder Bedarf mache ich gerne ein ausführliches Tutorial zu diesem Thema, oder auch speziell zu diesem Plugin.

von tecbauer
Aliase, DevOps, Kubernetes, Tricks Okt 11,2019

Versionsbefreite Kubernetes Deploymentfiles

Wer des Öfteren mit Kubernetes arbeitet, kennt sehr wahrscheinlich das folgende Problem:

Man hat initial an einer bestimmten Stelle, z.B. in einem Git-Repository Kubernetes Deploymentfiles in folgender Form erstellt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Im Laufe des Lebenszyklus eines Deployments ändert sich aber immer mal wieder die Version des Docker-Images. Diese wird dann z.B. folgendermaßen gesetzt:

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true

Danach wird dann von Hand im besten Fall das Deploymentfile angepasst. Das Problem hierbei ist, wird vergessen das Deploymentfile anzupassen und ein Kollege (oder man selbst) verlässt sich darauf, das die Deploymentfiles immer aktuell sind, führt ein naives kubectl apply -f in machen Fällen dazu, dass eine unerwünschte Version deployed wird. Um dies zu verhindern habe ich folgenden BASH-Alias eingerichtet:

alias kubectla='f() { [ $# -eq 2 ] && for i in $(find ${2}); do sed s/=VERSION=/$1/g $i | kubectl apply -f -; done || echo -e "Wrong argument count!\ndo: kubectla  "; unset -f f; }; f'

Hinter dem Alias steckt eine Funktion, welche den Platzhalter =VERSION= in einer Datei ersetzt, bevor sie mit kubectl apply -f deployed wird. Die Deploymentfiles enthalten also in Zukunft keine explizite Version mehr, sondern lediglich unseren Platzhalter:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:=VERSION=
        ports:
        - containerPort: 80

Deployed wird dann mittels des Aliases kubectla

kubectla 1.91 nginx.yaml

Schon wird die entsprechende Version deployed und wir müssen uns in Zukunft keine Sorgen mehr machen, ob alle Versionen in unseren Deploymentfiles aktuell sind.

von tecbauer
Tools, Ubuntu Okt 10,2019

LaTeX mit Gummi

Heute möchte ich euch einen LaTeX Editor vorstellen, welchen ich entdeckt habe, während ich etwas gesurft habe. Es handelt sich dabei um den sehr simplen Editor Gummi welcher nicht unnötig aufgeblasen wurde und eine Vorschau besitzt, was für mich ein essentielles Kriterium ist.

Da der Editor in den offiziellen Paketquellen von Ubuntu 18.04.1 vorhanden ist, geht die Installation denkbar einfach von statten. Hier gezeigt mit Hilfe eines Terminalkommands.

sudo apt install gummi

Nach der Installation kann der Editor mit Hilfe des folgenden Kommandos im Terminal gestartet werden.

gummi &

Alternativ lässt sich der Editor natürlich auch über das Applications Menü starten.

Nach dem Start begrüßt uns der Editor mit einem kleinem LaTeX Dokument.

von tecbauer
Uncategorized Okt 1,2019

Hello world!

Hallo und herzlich willkommen zu meinem WordPress-Blog rund um das Thema IT!

von tecbauer

Neueste Beiträge

  • Bug im Windows 10 Home Edition Taschenrechner ?
  • TCPdump eines einzelnen Kubernetes Pods / Docker Containers erstellen
  • Kommando Multithreaded in der BASH ausführen
  • Product Catalog X – Ein einfacher WordPress Produktkatalog
  • Versionsbefreite Kubernetes Deploymentfiles

Neueste Kommentare

    Kategorien

    • Aliase
    • Bash
    • Bugs
    • DevOps
    • Docker
    • Kubernetes
    • Linux
    • Tools
    • Tricks
    • Ubuntu
    • Uncategorized
    • Unnützes Wissen
    • Windows
    • Wordpress

    All Rights Reserved by TecBauer.