Cockpit für Debian (Server)

Cockpit ist ein Webbasiertes Interface für Server. Auf einen Blick kriegen wir so Informationen über die Systemauslastung, Speichermedien, Hardware, Log-Files und vieles mehr.

 

Das Paket wird mit:

# apt install cockpit

installiert und ist danach via Browser erreichbar.
http://123.456.7.890:9090
falls eine Firewall wie ufw läuft, muss Port 9090 freigegeben werden.

Failed to initialize any backend for Jail sshd

Nach der Installation von fail2ban zeigt systemctl status fail2ban folgendes an:

# systemctl status fail2ban
× fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Fri 2024-05-03 10:30:22 CEST; 54s ago
   Duration: 163ms
       Docs: man:fail2ban(1)
    Process: 4115 ExecStart=/usr/bin/fail2ban-server -xf start (code=exited, status=255/EXCEPTION)
   Main PID: 4115 (code=exited, status=255/EXCEPTION)
        CPU: 142ms

Mai 03 10:30:22 backup systemd[1]: Started fail2ban.service - Fail2Ban Service.
Mai 03 10:30:22 backup fail2ban-server[4115]: 2024-05-03 10:30:22,685 fail2ban.configreader   [4115]: WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'
Mai 03 10:30:22 backup fail2ban-server[4115]: 2024-05-03 10:30:22,698 fail2ban                [4115]: ERROR   Failed during configuration: Have not found any log file for sshd jail
Mai 03 10:30:22 backup fail2ban-server[4115]: 2024-05-03 10:30:22,702 fail2ban                [4115]: ERROR   Async configuration of server failed
Mai 03 10:30:22 backup systemd[1]: fail2ban.service: Main process exited, code=exited, status=255/EXCEPTION
Mai 03 10:30:22 backup systemd[1]: fail2ban.service: Failed with result 'exit-code'.

Lösung:
1. erstelle die Datei jail.local unter /etc/fail2ban/jail.local und trage folgendes ein:

# nano /etc/fail2ban/jail.local

[sshd]
enabled = true
backend = systemd

2. installiere das Paket python3-systemd:

# apt install python3-systemd

3. starte fail2ban neu:

# systemctl restart fail2ban

Benutzer einer bestehenden Gruppe hinzufügen

Ein bestehender Benutzer wird mit usermod der Gruppe hinzugefügt. Um z. B. in Easy Diffusion die GPU zum Rendern zu benutzen muss der normale Benutzer, welcher Easy Diffusion startet der Gruppe render hinzugefügt werden. Die machen wir per:

# usermod -aG render USERNAME

nach einem Neustart kann USERNAME die GPU für das rendern benutzen. Ob das Hinzufügen geklappt hat, lässt sich mit der Eingabe von groups überprüfen:

$ groups
yuna cdrom floppy audio dip video plugdev users render netdev bluetooth lpadmin scanner

docker in Debian installieren

Docker lässt sich in wenigen Schritten installieren. Dafür gehen wir hier den Weg über die repository und erstellen uns ein Installationscript:

# nano docker_install.sh

kopiere nun den Installationscode in das File. Für Debian ist sudo nicht notwendig und wurde im Beispiel entfernt:
# Add Docker's official GPG key:
apt-get update
apt-get install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
#
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

speichere das Script ab, mache es ausführbar und starte es:

# chmod +x docker_install.sh
# ./docker_install.sh

überprüfe ob docker läuft:

# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ein Script erleichtert die Installation von Docker. Es muss nicht alles Zeilenweise abgetippt werden.

Portainer

Zur Verwaltung der Container ist Portainer eine gute Wahlt. Damit könne mittels grafischer Oberfläche im Browser die Container gesteuert werden. Docker läuft bei mir hier auf einem Raspberry Pi 5. Das geniale an Docker ist die schnelle Verfügbarkeit von Entwicklungsumgebungen. So kann innert Sekunden eine Umgebung mit Drupal gestartet werden. Ist man damit fertig, werden die Containers gestoppt. Da wir uns hier im lokalen Netzwerk bewegen, ist eine https-Verbindung absolut nicht notwendig. WordPress, Drupal und Joomla laufen auf Docker im lokalen Netzwerk problemlos auch ohne https.

 

Eine neue Festplatte einhängen

In diesem Beispiel erstellen wir eine Partition mit dem Dateisystem ext4 auf der Festplatte und hängen anschliessend die Festplatte permanent unter /mnt/Volume ein.

01. fdisk -l  zeigt uns alle verfügbaren Laufwerke an. Die Disk unter /dev/sda hat noch keine Partition.

# fdisk -l
# fdisk -l
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: WDC WD10EZEX-60M
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xc64dfc2f

02. Starte fdisk mittels Angabe der Disk. Dabei gilt:

# fdisk /dev/sda

(o) = erstellt ein neues Disklabel (create a new empty MBR (DOS) partition table)
(n) = erstellt eine neue Partition
(p) = primäre Partition
(w) = schreibt die Änderungen final auf die Disk

# fdisk /dev/sda

Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): o
Created a new DOS (MBR) disklabel with disk identifier 0x7ad53c78.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): ENTER
First sector (2048-1953525167, default 2048): ENTER
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1953525167, default 1953525167): 

Created a new partition 1 of type 'Linux' and of size 931.5 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

03. fdisk -l zeigt uns die neu erstellte Partition an:

# fdisk -l
# fdisk -l
(...)
Device     Boot Start        End    Sectors   Size Id Type
/dev/sda1        2048 1953525167 1953523120 931.5G 83 Linux

04. erstelle ein Dateisystem (hier ext4) für die soeben neue Partition /dev/sda1:

# mkfs.ext4 /dev/sda1
# mkfs.ext4 /dev/sda1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 244190390 4k blocks and 61054976 inodes
Filesystem UUID: 923b9fb1-5760-4125-9c8a-7140c0f15ee2
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

05. Um die Partition dauerhaft einzuhängen, benötigen wir die UUID:

# blkid | grep sda
# blkid | grep /dev/sda
/dev/sda1: UUID="923b9fb1-5760-4125-9c8a-7140c0f15ee2" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="7ad53c78-01"

06. öffne die /etc/fstab:

# nano /etc/fstab

# HDD einhängen
UUID=923b9fb1-5760-4125-9c8a-7140c0f15ee2 /mnt/Volume ext4 defaults 0 2


07. falls nötig, ändere den Benutzer. Aktuell hat hier nur root die Berechtigung:

# chown -cR BENUTZER:BENUTZER /mnt/Volume
# chown -cR BENUTZER:BENUTZER /mnt/Volume/
der Eigentümer von '/mnt/Volume/lost+found' wurde von root:root in BENUTZER:BENUTZER geändert
der Eigentümer von '/mnt/Volume/' wurde von root:root in BENUTZER:BENUTZER geändert

read: Connection reset by peer

Bei meinem neuen Backup-Server binde ich die Pfade jeweils mit sshfs ein und starte rsync. Dabei kam es zu folgender Fehlermeldung:
read: Connection reset by peer
Der ssh-Key benötigt auf dem Server chmod = 600. Besitzer (owner) und Gruppe ist der normale Benutzer.

# chmod 600 KEYFILE

von .png nach .jpeg

Um viele Bilder auf einen Rutsch von *.png nach *.jpeg umzuwandeln, benötigen wir das Paket imagemagick:

# apt install imagemagick

Navigiere nun in den Ordner, in welchem sich deine Bilder befinden:

$ cd ~/Bilder

Die Bilder landen alle im selben Verzeichnis, in welchem du dich befindest. Einzelne Bilder werden direkt mit dem Dateinamen angegeben. Die Wildcard als Platzhalter (*) berücksichtig alle Dateien mit der entsprechenden Endung. Die Option -format weist darauf hin, die Datei in ein anderes Bildformat zu wechseln:

$ mogrify -format jpeg *.png

weitere Details findest du mit:

man mogrify
man imagemagick

crontab mit bash-Script

crontab kann per Bash-Script ausgeführt werden. In diesem Beispiel erstellen wir uns einen crontab, der jeweils um 23:30 Uhr auf unserem Rocket.Chat Server ein Backup erstellt.

# nano /etc/crontab
/etc/crontab zeigt beim ersten Aufruf die Tutorialseite an. Tippe hier die systemweiten crontab ein.

# /etc/crontab: system-wide crontab

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Starte Backup um 23:30 Uhr
30 23 * * * root bash /root/backup_chat.sh
# lösche Backups > 3 Tage. Überprüfe jeweils um 23:45 Uhr.
45 23 * * * root find /var/snap/rocketchat-server/common/backup/*.* -mtime +3 -exec rm {} \;
#

dieser crontab ruft somit um 23:30 Uhr das backup-Script backup_chat.sh auf. Das Script liegt hier unter /root/backup_chat.sh
#!/bin/bash
service snap.rocketchat-server.rocketchat-server stop
snap run rocketchat-server.backupdb
service snap.rocketchat-server.rocketchat-server start

das Script kann im Voraus noch geprüft werden:

# bash /root/backup_chat.sh
[*] Creating backup file...
[+] A backup of your data can be found at /var/snap/rocketchat-server/common/backup/rocketchat_backup_20231113.0944.tar.gz

PDF und Texterkennung (OCR)

gescannte PDF-Dateien können im Nachhinein mit der Texterkennung OCR versehen werden.

# apt install ocrmypdf
# apt install imagemagick parallel ghostscript qpdf unpaper tesseract-ocr

ocrmypdf wird über die Kommandozeile gesteuert. Dazu genügt die Eingabe in der Form:

$ ocrmypdf pfad/zur/eingabe.pdf pfad/zur/ausgabe.pdf

ocrmypdf bietet eine Vielzahl weiterer Optionen, welche dem Befehl mitgegeben werden können. Tippe dazu:

$ ocrmypdf -h

grep und find

grep und find sind ideale Werkzeuge um nach einer Datei oder einem bestimmten Muster zu suchen. Typo3 schreibt z. B. folgende Konfiguration für die php.ini vor:

; memory_limit >= 256MB
memory_limit=256M

; max_execution_time >= 240 seconds
max_execution_time=240

; max_input_vars >= 1500
max_input_vars=1500

falls wir jetzt keinen Plan haben, wo wir diese Einstellungen finden, hilft uns grep und find. Mittels grep finden wir das Suchmuster in der Datei. find findet uns die Datei php.ini, falls wir nicht wissen, wo diese abgelegt ist.

# grep -r memory_limit * /etc

/etc/php/8.2/cli/php.ini:memory_limit = -1
/etc/php/8.2/apache2/php.ini:memory_limit = 512M

oder

# find . /etc -name php.ini

/etc/php/8.2/cli/php.ini
/etc/php/8.2/apache2/php.ini