Eine echt witzige Art das alte Thema Brief-Freundschaften neu zu beleben: roostsocial.app/invite/R7YXHT
Das fühlt sich an wie eine Mischung zwischen Taubenzüchter und Briefmarkensammler 😂😂😂
Eine echt witzige Art das alte Thema Brief-Freundschaften neu zu beleben: roostsocial.app/invite/R7YXHT
Das fühlt sich an wie eine Mischung zwischen Taubenzüchter und Briefmarkensammler 😂😂😂
Auf dem Rechner, auf dem Duplicati läuft, wird ein Schlüsselpaar erstellt
ssh-keygen -t ed25519 -f ~/.ssh/sftpusr_key -N ""
Ergebnis:
Private Key: `~/.ssh/sftpusr_key`
Öffentlicher Key: `~/.ssh/sftpusr_key.pub`
Der Parameter `-N „“` sorgt für kein Passwort.
Optional: Verhindere SSH-Login mit Passwort:
sudo adduser --disabled-password --gecos "" sftpusr sudo passwd -l sftpusr # sudo usermod -d /home/sftpusr sftpusr sudo usermod -s /usr/sbin/nologin sftpusr
1. Verzeichnisse erstellen:
sudo mkdir -p /home/sftpusr/.ssh sudo chown sftpusr:sftpusr /home/sftpusr/.ssh sudo chmod 700 /home/sftpusr/.ssh
2. Öffentlichen Schlüssel auf Pi übertragen:
ssh-copy-id -i ~/.ssh/sftp_user_key.pub sftp-user@raspi
Oder manuell:
cat ~/.ssh/sftpusr_key.pub | ssh pi@ "sudo tee /home/sftpusr/.ssh/authorized_keys" sudo chown sftpusr:sftpusr /home/sftpusr/.ssh/authorized_keys sudo chmod 600 /home/sftpusr/.ssh/authorized_keys
Angenommen, das Backup-Ziel ist: `/media/san2tb/backup_x13g3`
Ordner erstellen und Besitzerrechte auf `sftpusr` ändern:
sudo mkdir -p /media/san2tb/backup_x13g3 sudo chown -R sftpusr:sftpusr /media/san2tb/backup_x13g3
`sftpusr` braucht Schreibrechte in diesem Ordner – ohne Zugriff auf andere SSD-Bereiche.
Den User auf reines SFTP einschränken. Das ist empfohlen für Backup-Ziele. SSH-Konfiguration auf dem Pi anpassen:
sudo nano /etc/ssh/sshd_config
Am Ende einfügen:
Match User sftpusr
ForceCommand internal-sftp
ChrootDirectory /home/sftpusr
PermitTTY no
AllowTcpForwarding no
X11Forwarding no
Das sperrt `sftpusr` in `/home/sftpusr`. Dann muss das Backup-Verzeichnis darin sein.
⚠️ WICHTIG:
`ChrootDirectory` muss root gehören, sonst funktioniert SFTP nicht.
sudo chown root:root /home/sftpusr sudo chmod 755 /home/sftpusr sudo mkdir -p /home/sftpusr/backup sudo chown sftpusr:sftpusr /home/sftpusr/backup
Temporär zum testen:
sudo mount --bind /media/san2tb/backup_x13g3 /home/sftpusr/backup sudo systemctl restart ssh
Mount dauerhaft via /etc/fstab einbinden.
Am Ende der Datei einfügen:
/media/san2tb/backup_x13g3 /home/sftpusr/backup none bind 0 0
Neues Backup erstellen
/backup/home/sftpusr/backupsftpusr✅ Fertig!
Mit dem Raspberry Pi OS Bookworm kommt der Netzwerkmanager.
Neben einer CLI-Version gibt es auch eine grafische Version die mit sudo nmtui aufgerufen werden kann.
Hier ein paar Befehle für die CLI-Version die Helfen können:
Zeige eine Liste der Geräte
nmcli -o device show
Zeige eine Liste mit den angelegten Verbindungen an:
sudo nmcli -p connection show
Zum Anlegen einer statischen Verbindung:
sudo nmcli c mod "Wired connection 1" ipv4.addresses 192.168.130.11/24 ipv4.method manual sudo nmcli con mod "Wired connection 1" ipv4.gateway 192.168.130.1 sudo nmcli con mod "Wired connection 1" ipv4.dns 192.168.130.1
Wenn mehrere IP-Adressen angebunden werden sollen:
sudo nmcli c mod "Wired connection 1" ipv4.addresses "192.168.130.11/24, 192.168.130.12/24, 192.168.130.13/24" ipv4.method manual
Zum Altivieren der Verbindung:
sudo nmcli c down "Wired connection 1" && sudo nmcli c up "Wired connection 1"
Dabei ist aber zu beachten, sollte man per ssh verbunden sein, wird die Verbindung hierdurch natürlich beendet…
So langsam aber sicher wird der Speicherplatz für den Massespeicher auf dem Laptop zu klein, das ganze KI-Zeug braucht relativ viel Speicherplatz.
Da wir mit LVM / LUKS arbeiten, sind ein paar Schritte mehr notwendig…
Einen Überblick über die einzelnen Volume erhalten wir mit lvdisplay
Zunächst entfernen wir die Swap-Partition:
# Swap deaktivieren swapoff -a # mit lvremove die die logische Partionion lvremove /dev/vgmint/swap_1
Ermittel nun den freien Platz in der Partition: vgdisplay. Wenn die Einheit nicht ganz passt, kann sie mit vgdisplay --unit G angepasst werden.
Nachdem der Versuch das ganze mit GB anzugeben wegen Umrechnungsungenauigkeiten nicht geklappt hat, rechnen wir das ganze in Extends aus:
1 Extent = 4 MiB = 0,00390625 GB 32 GB / 0.00390625 ≈ 8192 Extents 715128 (verfügbar) - 8192 (für Reserve) = 706936 Extents # Befehl zur Vergrößerung des Volumens lvextend -l +706936 /dev/vgmint/root
Anschließend muss noch das Dateisystem vergrößert werden:
resize2fs /dev/vgmint/root
Und die Swap-Partion wieder hergestellt (es wird der komplette leere Platz verwendet) werden:
lvcreate -l 100%FREE -n swap_1 vgmint mkswap /dev/vgmint/swap_1 swapon /dev/vgmint/swap_1 # Zum Überprüfen ob alles läuft: swapon --show free -h
Die Einrichtung erfolgt im Verzeichnis in dem das Script liegt/ von dem das Script aus gestartet wird.
python3 -m venv NAME
Der NAME ist durch den zu verwenden Name zu ersetzten. Sinnvoll ist es die Umgebung gleich zu benennen wie das Script, damit später die Zuordnung klar ist.
Die Umgebung wird aktiviert mit:
source NAME/bin/activate
Nach dem aktivieren können fehlende bzw. spezielle Bibliotheken installiert werden. z.B.:
pip3 install pillow pyexiftool langchain-ollama
Wir verwenden Ollama (https://ollama.com/)
Installation über docker compose.
docker-compose.yaml
services:
ollama:
image: docker.io/ollama/ollama:rocm
container_name: ollama
volumes:
- ollama:/root/.ollama
ports:
- 11434:11434
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
# environment:
# - OLLAMA_KEEP_ALIVE=1h
# - OLLAMA_HOST=127.0.0.1
pull_policy: always
tty: true
restart: unless-stopped
volumes:
ollama:
driver: local
Umgang mit Models:
# Modell installieren docker exec -it ollama ollama pull llava:v1.6 # Modell entfernen docker exec -it ollama ollama rm llava:v1.6 # Modell aus dem Speicher entladen docker exec -it ollama ollama stop llava:v1.6 # Modell auflisten docker exec -it ollama ollama list
Multimodal-Model (die sich u.a. für die Bildanalyse eignen)
Modelle für Übersetzungen:
Um die aktuelle Version anzuzeigen:
sudo dmidecode -s bios-version
Update der Firmware-Infos:
sudo fwupdmgr refresh --force
Geräte anzeigen lassen:
sudo fwupdmgr get-devices
Alle verfügbaren Updates herunterladen:
fwupdmgr get-updates
Firmeware-Update durchführen, sofern notwenig:
sudo fwupdmgr update
pihole und unbound in jeweils einem eigenen Container, um mögliche Port Konflikte zu vermeinden.
Es wird macvlan verwendet
Quelle: https://forum.openmediavault.org/index.php?thread/50758-pihole-and-unbound-in-docker/
Was gegen diese Lösung mit den macvlan spricht: https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/
Erstelle unter „Networks“ ein neues Netzwerk:
# Pihole
#
# https://github.com/pi-hole/docker-pi-hole?tab=readme-ov-file
#
version: "3"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
hostname: pihole #Choose your hostname
dns:
- "192.168.130.13" #DNS1: Should be the address of your unbound system
- "9.9.9.9" #DNS2: Quad9 as an example, optional
networks:
mypiholevlan: #the network name you specified in the first step
ipv4_address: 192.168.130.12 #The IP address you want to assign to your pihole. Make sure this address is available to be used in your network
# For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
ports:
- "53:53/tcp"
- "53:53/udp"
# - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
- "80:80/tcp"
# Volumes store your data between container upgrades
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
environment:
- TZ='Europe/Berlin'
- WEBPASSWORD=${PIHOLE_WEBPASSWORD}
- DHCP_ACTIVE=false
labels:
- com.centurylinklabs.watchtower.enable=false
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
restart: unless-stopped
# Required if you are using Pi-hole as your DHCP server, else not needed
# cap_add:
# - NET_ADMIN
networks:
mypiholevlan: #network name
external: true
version: "3"
services:
unbound:
container_name: unbound
image: mvance/unbound:latest
hostname: unbound
networks:
mypiholevlan: #the network name you specified in the first step
ipv4_address: 192.168.130.13 #The IP address you want to assign to Unbound. Make sure this address is available to be used in your network
ports:
- "53:53/tcp"
- "53:53/udp"
#volumes: #It's important to comment out these two lines if you don't want to use your own unbound configuration! An own configuration can be tricky as you have to provide several config files manually.
# - './etc-unbound:/opt/unbound/etc/unbound'
restart: unless-stopped
networks:
mypiholevlan: #the network name you specified in the first step
external: true
Mit dem Raspberry Pi Imager das Raspberry Pi OS Lite (hier verwende ich die 64-bit-Version [Debian 12 – bookworm]) installieren.
Bei den erweiterten Einstellungen hostname festlegen, ssh mit public-key aktivieren sowie Spracheinstellungen festlegen…
In der /boot/firmeware/config.txt den Hardware-Watchdog aktivieren:
dtparam=watchdog
Installation des Watchdog
sudo apt update sudo apt install watchdog
In der Datei /etc/watchdog.conf folgende Zeilen aktivieren
watchdog-device = /dev/watchdog watchdog-timeout = 15 log-dir = /var/log/watchdog max-load-1 = 24
Der Raspi hat wohl als maximales timeout 15 Sekunden!
Anschließend der Service aktivieren und starten
sudo systemctl enable watchdog sudo systemctl start watchdog sudo systemctl status watchdog
Original hier: www.elektronik-kompendium.de/sites/raspberry-pi/2002101.htm
sudo apt-get install unattended-upgrades # Aktivieren/Deaktivieren: sudo dpkg-reconfigure -plow unattended-upgrades # genaue Config: sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
siehe Artikel dort…
Zentrale Dokumente für die Migration sind hier zu finden:
Der Text kommt von hier: https://nodebb.org/blog/nodebb-specific-bootstrap-3-to-5-migration-guide/
pull-left changed to float-startpull-right changed to float-endtext-right changed to text-endimg-responsive changed to img-fluid<div class="d-grid gap-2"> <button class="btn btn-primary" type="button">Button</button> <button class="btn btn-primary" type="button">Button</button> </div>
btn-xs removed use btn-smbtn-default removed use btn-outline-secondarycol-xs-<n> changed to col-<n>col-md-offset-<n> changed to offset-md-<n>inline-block changed to d-inline-block… has been removed completely, use flex display classes instead:
<div class="d-flex">
<div class="flex-shrink-0">
image
</div>
<div class="flex-grow-1 ms-3">
text
</div>
</div>
navbar-toggle changed to navbar-toggler… have all been removed in favour of the “card” component.
To convert a panel into a card:
<div class=”card”> <div class=”card-header”>header</div> <div class=”card-body”>body</div> <div class=”card-footer”>footer</div> </div>
<div class="well"> changed to <div class="card card-body text-bg-light"><select class="form-control"> changed to <select class="form-select">form-label class to labels form-check-input to checkboxes. Sample checkbox with label:<div class="”form-check”"> <input class="”form-check-input”" type="”checkbox”" /> <label class="”form-check-label”">a checkbox</label> </div>
form-group, .form-row, or .form-inline are removed use spacing utilitieshelp-block changed to form-textdata-toggle="dropdown" changed to data-bs-toggle="dropdown"dropdown-item to dropdown list item <a class="dropdown-item">Item 1</a>dropdown-menu-right changed to dropdown-menu-enddropdown-dividerdata-toggle="collapse" changed to data-bs-toggle="collapse"data-target=".classname" changed to data-bs-target=".classname"data-dismiss="modal" changed to data-bs-dismiss="modal"Instead of using media queries using old Bootstrap 3 variables (e.g. @media (max-width: @screen-sm-max) { ... }), Bootstrap 5 introduces a new mixin for breakpoints.
Read more about it in Bootstrap 5’s article re: responsive breakpoints.