RaspberryPi4B: Difference between revisions

From Wiki RB4
Line 11: Line 11:


===Operating System===
===Operating System===
* 2025-09-15 Version 12 bookworm
* at 2025-09-15 change to version 12 bookworm
* install rpi imager tool by
* install rpi imager tool by
** <code>sudo apt update</code>
** <code>sudo apt update</code>

Revision as of 13:43, 1 October 2025

Type Information

  • Raspberry 4B 8GB (1,5 GHz Quad-Core ARM-Cortex A72 CPU)
  • bought at pi3g.com via their shop buyzero.de at 12/08/2021 as Raspberry Pi 4 Server Set:
    • 64GB microSD
    • USB C 5 Volt 3 Ampere Netzteil
    • microHDMI auf HDMI Kabel
    • FLIRC Gehäuse
    • CAT 6 LAN Kabel 2 m

Installation

Operating System

  • at 2025-09-15 change to version 12 bookworm
  • install rpi imager tool by
    • sudo apt update
    • sudo apt install rpi-imager
  • start VNCViewer on Laptop
  • open cmd shell and rpi-imager
  • select 64bit OS (bookwarm) and write to SD writer
  • poweroff and change SD, plug-in monitor, mouse and keyboard
  • switch on until asked to set
    • Country (Germany, German, Berlin)
    • User (uwe, <Lr><STANDARD><Lr>)
    • reboot
  • opens desktop
  • open terminal for checking fixed IP
    • ip link show eth0 gives MAC address e4:5f:01:47:89:ef
    • this is configured in fritz box
  • open terminal to enable ssh login, VNC
    • sudo raspi-config
    • Interface Options -> SSH
    • Interface Options -> VNC
  • check by
    • lsb_release -a
    • cat /etc/os-release
  • insert old boot sd card
    • it has two partitions boot and rootfs
  • prepare backup of Raspberry 3B like on the old OS
    • ssh-keygen and ssh-key-cp
    • because the new OS is using a new ssh version and a check with ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa root@192.168.178.35 worked (login w/o password)
    • create ~/.ssh/config with

Host raspberry3

   HostName 192.168.178.35
   User root
   PubkeyAcceptedAlgorithms +ssh-rsa
   HostKeyAlgorithms +ssh-rsa
   IdentityFile /home/uwe/.ssh/id_rsa
    • can be tested by ssh raspberry3
    • install sshfs
    • create mount /home/uwe/backup/mnt_raspberry3_for_backup
    • check sshfs access by sshfs raspberry3:/media/usbstick/backup /home/uwe/backup/mnt_raspberry3_for_backup
      • ls should show owncloud directory and zip file inside
    • create /home/uwe/.config/systemd/user/mount_raspberry3.service
    • create /home/uwe/bin/mount_raspberry3.sh
    • setup service by
      • systemctl --user daemon-reload
      • systemctl --user restart mount_raspberry3.service
      • systemctl --user status mount_raspberry3.service // check status
      • systemctl --user enable mount_raspberry3.service
      • and make it permanent after reboot by loginctl enable-linger uwe
    • install rclone and configure Google backup drive uh_gdrive_backup
    • create ~/backup/raspberry3/backup_raspberry3.sh
    • crontab -e and add 0 4 * * * nice -n 19 /home/uwe/backup/raspberry3/backup_raspberry3.sh
    • check by crontab -l
    • VNC is already part of installation

Angular

npm install -g @angular/cli

Docker

  • installation according to here with the convenience script (because of the comment regarding raspberry installation)
curl -fsSL https://get.docker.com -o get-docker.sh
DRY_RUN=1 sudo sh ./get-docker.sh
sudo reboot
sudo usermod -aG docker $USER // logout and login
  • architecture is linux/arm64/v8
  • edited /usr/lib/systemd/system/docker.service, saved the old version to ~/SoftwareProjects/eclipse-workspace/uweheuer-backend/docker.service.2023-01-07 to get rid of iptables error and missing dPort parameter when calling docker compose up for uweheuerbackend

Test by:

docker 
docker version
docker compose version
docker run hello-world

Portainer Community Edition (CE)

mkdir ~/PortainerData
docker volume create portainer_data
docker run -d   -p 8000:8000 -p 9443:9443   --name portainer   --restart=always   -v /var/run/docker.sock:/var/run/docker.sock   -v portainer_data:/home/uwe/PortainerData   cr.portainer.io/portainer/portainer-ce:latest
admin <Lp><Lp><STANDARD><Lp><Lp>

Git and GitHub CLI

sudo apt install git
git --version
git config --global user.email uwe.heuer@gmail.com
git config --global user.name UweHeuer
  • GitHub CLI from here
type -p curl >/dev/null || sudo apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
  • test by
gh version

Java

java -version
sudo apt install openjdk-17-jdk

Maven

sudo apt install maven

Mediawiki

Installation

There are 2 docker compositions:

Production
Import from Raspberry 3
Testing

Used for testing e.g. configuration changes or extensions

Operation

MySQL

Node.js

  • installation according to here
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install nodejs
node -v // prints v18.14.0
sudo apt install build-essential

PostgreS(QL)

// create a docker container
docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=Halloo0@1 -e POSTGRES_DB=postgres -e POSTGRES_USER=postgres -v pgdata:/var/lib/postgresql/data -d postgres
// -p <HOSTPORT>:<CONTAINERPORT>
// -e <ENV_VARIABLE>=<VALUE>
// -v <VOLUME_NAME>:<CONTAINER_DIR>
// -n <NAME>
pi@raspberrypi:~ $ docker volume inspect pgdata
[
    {
        "CreatedAt": "2021-09-30T21:44:54+01:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/pgdata/_data",
        "Name": "pgdata",
        "Options": null,
        "Scope": "local"
    }
]
// test access
C:\Uwes\Programme\PostgreSQL\12\bin> .\psql.exe -h uweheuer.spdns.de -U postgres postgres

// clean up everything
docker stop postgres
docker rm postgres
docker volume rm pgdata // this seems to be important, because it seems otherwise the password is denied

RClone

  • main purpose to backup to Google cloud
  • sudo apt install rclone
  • rclone config should be run from a cmd shell on a desktop because the browser is needed
  • test with
    • rclone listremotes
    • rclone ls uh_gdrive_backup:
    • rclone about uh_gdrive_backup:

Remode Desktop (RDP)

  • login via SSH
    • sudo apt install xrdp
    • sudo service xrdp start
  • remote desktop via Windows is empty => try VNC

SSH

  • login via cmd line
ssh uwe@uweheuer.spdns.de -p 54445 <Lr><STANDARD><Lr>

VNC (Remote Desktop)

  • update raspberry
  • install VNC server in a long process with ChatGPT error search and handling
  • reboot
  • install RealVNC Viewer on Windows

Backup

Backup of Raspberry 3B

  • fetch files from Raspberry 3B and copy it to Google Drive

Preparation

  • create keys in order to avoid providing user and password for accessing Raspberry3B by ssh-keygen // always enter
  • creates keyfile in ls -al /home/uwe/.ssh/
  • copy key to Raspberry3B ssh-copy-id root@192.168.178.35
  • test without entering password ssh root@192.168.178.35
  • create a mount to Raspberry3B mkdir -p ~/backup/mnt_raspberry3_for_backup
  • install sshfs sudo apt install sshfs
  • mount with sshfs sshfs root@192.168.178.35:/media/usbstick/backup /home/uwe/backup/mnt_raspberry3_for_backup
  • make it boot save by adding a row by sudo nano /etc/fstab
  • decomment allow_other in sudo nano /etc/fuse.conf
  • create /home/uwe/backup/Raspberry3B/backup_raspberry3.sh
    • copies files from raspberry 3 to raspberry 4 by cp -u -p /home/uwe/backup/mnt_raspberry3_for_backup/owncloud/owncloud_backup.zip /home/uwe/backup/Raspberry3B/owncloud/
      • -u := only if new
      • -p := preserve file attributes in particular timestamps
    • copies files to Google Drive by rclone copy /home/uwe/backup/Raspberry3B/owncloud/owncloud_backup.zip uh_gdrive_backup:/Raspberry3B/owncloud/
      • rclone copy will only copy files that are new or have changed.
      • the comparison is done using file size and modification time (mtime).
    • writes log file /home/uwe/backup/Raspberry3B/backup_raspberry3.log
  • schedule job which runs every night at 4 by crontab -e with nice to maintain responsiveness of the system

Operation

On/Off

  • on/off by plug-in/off power supply

Reboot

sudo reboot

Update

sudo apt-get update && sudo apt-get upgrade


Archive

Obsolete Update to 64-bit OS

  • installation of Windows app Pi Imager
  • write 64-bit OS lite (w/o desktop) to 64GB microSD
  • boot by plug in power
  • user 'uwe' <Lr><STANDARD><Lr>
  • fixed ip address by Fritzbox
  • execute 'raspi-config' and enable SSH, set timezone to Berlin, hostname to 'raspberrypi4', ...
  • check version by cat /etc/os-release
  • check 32-bit or 64-bit by uname -m arm64 is 64 bit

Obsolete Initial Operation

  • copy empty file named 'ssh' to root at microSD to enable SSH access
  • microSD to slot
  • plug-in USB power supply
  • login via SSH with user 'pi' and pwd 'raspberry'
  • enable WLAN via raspi-config
  • set fixed IP for LAN and WLAN via fritz.box to 192.168.178.(72|73)
  • update OS via
sudo apt update
sudo apt dist-upgrade