Intelligente Lösungen
in neuer Dimension

Raspberry Pi: Untersuchen einer IMG-Datei

Ubuntu wird für den Raspi in Form von IMG-Dateien ausgeliefert. Heute wollte ich den Inhalt dieser IMG-Datei untersuchen und herausfinden, wie er sich ändert wenn der Raspi einmal von der IMG-Datei gestartet wurde.

Sehr einfach kann man IMG-Dateien untersuchen, wenn man “kpartx” greifbar hat. Also:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# kpartx installieren
sudo apt install kpartx

# loop mounts anlegen
sudo kpartx -v -a ubuntu-20.04.2-preinstalled-server-armhf+raspi.img

# mount points anlegen
mkdir system-boot writable

# einbinden
sudo mount /dev/mapper/loop20p1 system-boot
sudo mount /dev/mapper/loop20p2 writable

# untersuchen
# ...

# ausbinden
sudo umount system-boot
sudo umount writable

# mount points entfernen
rmdir system-boot writable

# loop mounts entfernen
sudo kpartx -v -d ubuntu-20.04.2-preinstalled-server-armhf+raspi.img

Links

Historie und Anmerkung

  • 2021-04-20: Erste Version

Linux: Warnung wegen Zeitstempeln beim Auspacken von TARs

Wenn ich “frische” Dateien auf Rechner A in ein TAR verpacke, dies dann auf Rechner B übertrage und dort entpacke, dann gibt es manchmal Fehlermeldungen wie diese:

1
2
3
4
5
uli:~$ tar xf ../downloads/in-the-future.tar 
tar: in-the-future/README.md: Zeitstempel 2035-01-31 11:54:00 liegt 435036629.458266836 Sekunden in der Zukunft.

uli:~$ LANG=C tar xf ../downloads/in-the-future.tar 
tar: in-the-future/README.md: time stamp 2035-01-31 11:54:00 is 435036610.953802137 s in the future

Ursache sind auseinanderlaufende Rechneruhren, da kann ich auf die Schnelle keine Abhilfe schaffen. Ich möchte aber

  • die TAR-Datei entpacken können
  • ohne dass ich eine Fehlermeldung sehe
  • und ohne dass ich alle Fehlermeldungen unterdrücke (tar 2>/dev/null ...)

Gefunden habe ich dies:

1
2
uli:~$ tar --touch -xf ../downloads/in-the-future.tar 
uli:~$

Seiteneffekt: Die Dateien bekommen einen aktuellen Zeitstempel!

Für den Nachtest habe ich in-the-future.tar angelegt.

Historie und Anmerkung

  • 2021-04-19: Erste Version

Raspberry Pi: IP-Adresse ermitteln

Die Standard-Anleitung zur Ermittlung der IP-Adresse funktioniert bei mir nicht. Ich kann ewig warten, bei arp -a erscheint einfach keine IP-Adresse.

So geht’s:

1
2
3
4
5
6
7
8
9
10
11
12
uli:~$ nmap 192.168.0.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2021-04-19 14:07 CEST
...
Nmap scan report for 192.168.0.186
Host is up (0.0086s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
...

uli:~$ arp -na | grep -i "b8:27:eb"
? (192.168.0.186) auf b8:27:eb:4d:30:b7 [ether] auf enp3s0

Links

Historie und Anmerkung

  • 2021-04-18: Erste Version

Raspberry Pi: Anmelden mittels SSH

Wenn ich versuche, mich per SSH an einem frisch installierten Raspi anzumelden, dann erhalte ich diesen Fehler:

1
2
3
4
5
6
7
uli:~$ ssh ubuntu@192.168.0.186
The authenticity of host '192.168.0.186 (192.168.0.186)' can't be established.
ECDSA key fingerprint is SHA256:Zi+H2BeAHrWlomrcpktmYu+asI5N951voxDOVJ/icRE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.186' (ECDSA) to the list of known hosts.
Received disconnect from 192.168.0.186 port 22:2: Too many authentication failures
Disconnected from 192.168.0.186 port 22

Ursache sind die vielen SSH-Schlüssel, die in meinem SSH-Unterverzeichnis bereitliegen und allesamt nicht auf dem Raspi hinterlegt sind. So geht’s:

1
2
3
4
5
6
7
8
9
uli:~$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no ubuntu@192.168.0.186
ubuntu@192.168.0.186's password: 
You are required to change your password immediately (administrator enforced)
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1028-raspi armv7l)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
...

Links

Historie und Anmerkung

  • 2021-04-17: Erste Version

Raspberry Pi: Geräteversion ermitteln

Manchmal weiß ich nicht so ganz genau, welche Geräteversion ein Raspi hat. Sie sehen ja ziemlich ähnlich aus und die Gehäuseart gibt keinen direkten Anhaltspunkt auf die Geräteversion.

Ermitteln kann ich das nach Anmelden am Raspi so:

1
2
3
4
5
uli@raspi$ tail -4 /proc/cpuinfo 
Hardware  : BCM2835
Revision  : a01041
Serial        : 000000002a69ad35
Model     : Raspberry Pi 2 Model B Rev 1.1

Mein Gerät ist also ein Raspi2!

Bevor zu viele Hinweise kommen: Mir ist klar, dass man den Raspi4 vom Raspi3 relativ gut unterscheiden kann!

Historie und Anmerkung

  • 2021-04-16: Erste Version

Raspberry Pi: Ubuntu-SD-Karte erstellen

Ich habe ein paar alte Raspberry Pis rumliegen und möchte diese testweise verwenden. Unklar ist mir, welche Firmware-Version auf den Raspis aktiv ist und ob ich sie aktualisieren muß.

  1. Ubuntu-Server herunterladen: ubuntu-20.04.2-preinstalled-server-armhf+raspi.img.xz
  2. SD-Karte ermitteln mit sudo lsblk und sudo lshw -c disk oder sudo lshw -c storage –> /dev/sdb
  3. SD-Karte überschreiben: xz -cd /media/uli/Zwischenspeicher/iso/ubuntu-20.04.2-preinstalled-server-armhf+raspi.img.xz | pv | sudo dd of=/dev/sdb bs=1024k

Raspberry Pi: Firmware-Verion ermitteln

Ich habe ein paar alte Raspberry Pis rumliegen und möchte diese testweise verwenden. Unklar ist mir, welche Firmware-Version auf den Raspis aktiv ist und ob ich sie aktualisieren muß.

  1. Ubuntu-20.04.2-Server einspielen
  2. Raspi starten
  3. Anmelden
  4. Aktualisieren: sudo apt update; sudo apt upgrade (dauert ewig)
  5. Raspi-Tools einspielen: sudo apt install libraspberrypi-bin

Nun kann ich die Firmware-Version abfragen:

1
2
3
4
ubuntu@ubuntu:~$ sudo vcgencmd version
Jan  8 2021 14:33:35 
Copyright (c) 2012 Broadcom
version 194a85abd768c7334bbadc3f1911c10a7d18ed14 (clean) (release) (start)

Für mich sieht das nach einer recht aktuellen Version aus!

Historie und Anmerkung

  • 2021-04-14: Erste Version

Markdown: Tabelle ausrichten

Wenn man mit Markdown eine Tabelle erstellt, so passen recht schnell die Spaltenbreiten im Rohtext nicht mehr sonderlich gut und die Tabelle wird seht unübersichtlich:

1
2
3
4
5
6
7
8
Von-Name                              | Von-Url                                                                                | Nach-Name      | Nach-Url
--------------------------------------|----------------------------------------------------------------------------------------|----------------|-----------------
datenschutz                           | ssh://git@internal.daemons-point.com:2222/uli/datenschutz.git                          | datenschutz    | gitea@gitea.daemons-point.com:dp-team/datenschutz.git
dp-tools-public                       | ssh://git@internal.daemons-point.com:2222/dp-public/dp-tools-public.git                | dp-browser     | gitea@gitea.daemons-point.com:dp-team/dp-browser.git
FadaWS | ssh://git@internal.daemons-point.com:2222/mhp/FadaWS | |
FzgInfo | ssh://git@internal.daemons-point.com:2222/mhp/FzgInfo | |
FzgInfoWsClient | ssh://git@internal.daemons-point.com:2222/mhp/FzgInfoWsClient | |
...

Via Kommandozeile kann man das mit diesem einfachen Ablauf korrigieren:

  • Zeichen raussuchen, welches in der Tabelle nicht enthalten ist: !
  • Kommandozeile erstellen: sed -e 's/|/|!/g'|column -s "|" -t -n|sed -e 's/!/|/g'
  • Kommandozeile ausführen (bleibt hängen)
  • Murks-Tabelle markieren, kopieren und in hängende Kommandozeile einfügen
  • Strg-D drücken

Als Ergebnis sieht man am Ende eine sauber ausgerichtete Tabelle:

1
2
3
4
5
6
7
8
9
10
11
12
uli:~$ sed -e 's/|/|!/g'|column -s "|" -t -n|sed -e 's/!/|/g'
datenschutz                           | ssh://git@internal.daemons-point.com:2222/uli/datenschutz.git                          | datenschutz    | gitea@gitea.daemons-point.com:dp-team/datenschutz.git
dp-tools-public                       | ssh://git@internal.daemons-point.com:2222/dp-public/dp-tools-public.git                | dp-browser     | gitea@gitea.daemons-point.com:dp-team/dp-browser.git
FadaWS | ssh://git@internal.daemons-point.com:2222/mhp/FadaWS | |
FzgInfo | ssh://git@internal.daemons-point.com:2222/mhp/FzgInfo | |
FzgInfoWsClient | ssh://git@internal.daemons-point.com:2222/mhp/FzgInfoWsClient | |
Strg-D
datenschutz                             | ssh://git@internal.daemons-point.com:2222/uli/datenschutz.git                            | datenschutz      | gitea@gitea.daemons-point.com:dp-team/datenschutz.git
dp-tools-public                         | ssh://git@internal.daemons-point.com:2222/dp-public/dp-tools-public.git                  | dp-browser       | gitea@gitea.daemons-point.com:dp-team/dp-browser.git
FadaWS                                  | ssh://git@internal.daemons-point.com:2222/mhp/FadaWS                                     |                  |
FzgInfo                                 | ssh://git@internal.daemons-point.com:2222/mhp/FzgInfo                                    |                  |
FzgInfoWsClient                         | ssh://git@internal.daemons-point.com:2222/mhp/FzgInfoWsClient                            |                  |

Historie und Anmerkung

  • 2021-04-11: Erste Version

Scannen mit Gscan2PDF

Installieren

1
2
3
4
sudo apt update
sudo apt upgrade
sudo apt install gscan2pdf
sudo apt install tesseract-ocr tesseract-ocr-deu

Start

1
gscan2pdf

Scannen

Folgende Einstellungen mußte ich ändern:

  • Scanmodus: Strichzeichnung –> Graustufen
  • Scanauflösung: 75 ppi –> 150 ppi
  • Scanquelle: Flachbett

Damit hat das Einscannen und die Texterkennung ganz gut funktioniert.

Historie und Anmerkung

  • 2021-04-03: Erste Version

SSH: Auswertung von SSH_ORIGINAL_COMMAND

Manchmal möchte man bei einem SSH-Server ein für bestimmte Benutzer ein festes Kommando hinterlegen via “authorized_keys” und “command=xyz”. Wenn sich die Benutzer dann am SSH-Server anmelden, wird immer das Kommando xyz ausgeführt, also:

  • Benutzer: ssh ich@server –> xyz wird auf “server” ausgeführt

Nun kann man dem SSH-Kommando noch Argumente dranhängen und diese werden via SSH_ORIGINAL_COMMAND an xyz übergeben. Dadurch kann dann das Verhalten von xyz gesteuert werden.

Problem: “Gruppierung” von Argumenten in SSH_ORIGINAL_COMMAND geht leicht verloren. Wenn man also

  • ssh ich@server start "Uli Heller" now

aufruft, so erhält man bei naiver Auswertung von SSH_ORIGINAL_COMMAND diese Parameter

  • P1: start
  • P2: Uli
  • P3: Heller
  • P4: now

Wnsch wäre dies:

  • P1: start
  • P2: Uli Heller
  • P3: now