Privates MODX und LINUX BLOG, User Registrierung ist deaktiviert! Fragen oder Tipps? Bitte per Matrix: @jolichter:tchncs.de
ZitatDie Cloud-Dienste der Smart Home/Care Produkte müssen daher zum 29. März 2024 eingestellt werden. Eine Aufrechterhaltung ist insolvenzrechtlich nicht möglich. Dadurch werden die Apps für die Smart Home/Care Produkte und die vernetzten Sensoren und Geräte nicht mehr nutzbar sein. Sollten Sie Kamera Service Pakete gebucht haben, enden diese ebenfalls spätestens zum 29. März 2024. Hinsichtlich sämtlicher ggf. bestehender Vertragsverhältnisse wird Nichterfüllung gewählt.
Wir bedauern die Unannehmlichkeiten, bla bla bla ... Eine Rücksendung der Geräte ist leider nicht möglich, bla bla bla ...
ZitatFor the foreseeable future we will still support the use of 'dbus-daemon', the previous implementation. Pacman will ask you whether to install 'dbus-broker-units' or 'dbus-daemon-units'. We recommend picking the default.
Systemaktualisierung:
Vorbereitung...
Synchronisiere Paketdatenbanken...
Aktualisierung von core.db...
Aktualisierung von extra.db...
Aktualisierung von community.db...
Aktualisierung von multilib.db...
Wähle einen Anbieter für dbus-units:
1: dbus-broker-units 35-2 core
2: dbus-daemon-units 1.14.10-2 core
Nummer eingeben (Standard=1): 1
ssh pi4m@192.168.1.42
sudo pacman -Syu
sudo pacman -Sy --needed yay base-devel git php-fpm php-sqlite inetutils curl lighttpd php-cgi gnu-netcat xxd-standalone unbound
(für netcat wähle ich "gnu-netcat" und für xxd "xxd-standalone")php -v
(zu dem Zeitpunkt war das PHP 8.2.12)sudo nano /etc/php/php.ini
Zitatopen_basedir = /srv/http/pihole:/run/pihole-ftl/pihole-FTL.port:/run/log/pihole/pihole.log:/run/log/pihole-ftl/pihole-FTL.log:/etc/pihole:/etc/hosts:/etc/hostname:/etc/dnsmasq.d/02-pihole-dhcp.conf:/etc/dnsmasq.d/03-pihole-wildcard.conf:/etc/dnsmasq.d/04-pihole-static-dhcp.conf:/var/log/lighttpd/error-pihole.log:/proc/loadavg:/proc/meminfo:/proc/cpuinfo:/sys/class/thermal/thermal_zone0/temp:/tmp
yay -S pi-hole-server
Der AUR-Helfer-Prompt (ohne sudo!) zeigt dann Optionen zum installieren an, hier wähle ich [A]lle. Dadurch werden sowohl die expliziten AUR-Pakete (wie pi-hole-server und pi-hole-ftl) als auch alle notwendigen Abhängigkeiten (sowohl aus dem AUR als auch aus den offiziellen Repositories) installiert.pihole -a -p
(du kannst das auch leer lassen)sudo nano /etc/php/php.ini
Prüfe und aktiviere diese Einstellungen:Zitatextension=curl
extension=pdo_sqlite
extension=sockets
extension=sqlite3
sudo cp /usr/share/pihole/configs/lighttpd.example.conf /etc/lighttpd/lighttpd.conf
sudo systemctl enable lighttpd.service
sudo systemctl start lighttpd.service
Stelle sicher, dass Lighttpd auf deinem Raspberry Pi läuft. Du kannst dies mit dem folgenden Befehl überprüfen:sudo systemctl status lighttpd
sudo nano /etc/hosts
Zitat127.0.0.1 localhostErsetze 192.168.1.42 mit der IP-Adresse deines Pi-hole-Servers und manjaro-arm mit dem tatsächlichen Hostnamen dieses Servers. Diese Einstellung sorgt dafür, dass Anfragen an "pi.hole" und "manjaro-arm" korrekt an deinen Pi-hole-Server weitergeleitet werden.
192.168.1.42 pi.hole manjaro-arm
192.168.1.1 fritz.box
sudo systemctl restart systemd-network
DNS-Resolver von Pi-hole neu starten:pihole restartdns
pihole -g
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
und evtl. eine Sperrliste die Malware verbreiten:https://urlhaus.abuse.ch/downloads/hostfile
sudo nano /etc/pihole/pihole-FTL.conf
Zitat### This file contains parameters for FTL behavior.
### At install, all parameters are commented out. The user can select desired options.
### Options shown are the default configuration. No modification is needed for most
### installations.
### Visit https://docs.pi-hole.net/ftldns/configfile/ for more detailed parameter explanations
## Max Database Days
## How long should queries be stored in the database -days-?
## Setting this to 0 disables the database
## See: https://docs.pi-hole.net/ftldns/database/
## Options: number of days
MAXDBDAYS=90
## Database Interval
## How often do we store queries in FTL's database -minutes-?
## See: https://docs.pi-hole.net/ftldns/database/
## Options: number of minutes
DBINTERVAL=60.0
## Privacy Level
## Which privacy level is used?
## See: https://docs.pi-hole.net/ftldns/privacylevels/
## Options: 0, 1, 2, 3
PRIVACYLEVEL=0
# This setting limits the number of requests that Pi-hole accepts from a single IP address per minute
RATE_LIMIT=2000/60
sudo systemctl restart pihole-FTL.service
sudo nano /etc/dnsmasq.d/99-edns.conf
Füge die folgende Zeile in die Datei ein:Zitatedns-packet-max=1232
dns-forward-max=300
pihole restartdns
sudo nano /etc/systemd/timesyncd.conf
Setze den NTP-Server auf die IP-Adresse deiner FritzBox. Zum Beispiel: NTP=192.168.1.1sudo pacman -Sy --needed unbound
sudo mkdir -p /var/log/unbound/
sudo chown -R unbound:unbound /var/log/unbound/
sudo mkdir -p /etc/unbound/unbound.conf.d/
sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf
Füge diese Daten ein und passe evtl. die "forward-zone" an:Zitatserver:
# If no logfile is specified, syslog is used
# (e.g.: 'journalctl -u unbound' or 'journalctl -u unbound -p err')
# logfile: "/var/log/unbound/unbound.log"
verbosity: 0
directory: "/etc/unbound"
username: unbound # root ->only for testing!
interface: 127.0.0.1
port: 5335
do-ip4: yes
do-udp: yes
do-tcp: yes
# May be set to yes if you have IPv6 connectivity
do-ip6: yes
# You want to leave this to no unless you have *native* IPv6. With 6to4 and
# Terredo tunnels your web browser should favor IPv4 for the same reasons
prefer-ip6: yes
# Use this only when you downloaded the list of primary root servers!
# If you use the default dns-root-data package, unbound will find it automatically
root-hints: "/etc/unbound/root.hints"
# The following line will configure unbound to perform cryptographic
# DNSSEC validation using the root trust anchor
auto-trust-anchor-file: "/etc/unbound/trusted-key.key"
# Trust glue only if it is within the server's authority
harden-glue: yes
# Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
harden-dnssec-stripped: yes
# Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
use-caps-for-id: no
# Reduce EDNS reassembly buffer size.
# IP fragmentation is unreliable on the Internet today, and can cause
# transmission failures when large DNS messages are sent via UDP. Even
# when fragmentation does work, it may not be secure; it is theoretically
# possible to spoof parts of a fragmented DNS message, without easy
# detection at the receiving end. Recently, there was an excellent study
# >>> Defragmenting DNS - Determining the optimal maximum UDP response size for DNS <<<
# by Axel Koolhaas, and Tjeerd Slokker (https://indico.dns-oarc.net/event/36/contributions/776/)
# in collaboration with NLnet Labs explored DNS using real world data from the
# the RIPE Atlas probes and the researchers suggested different values for
# IPv4 and IPv6 and in different scenarios. They advise that servers should
# be configured to limit DNS messages sent over UDP to a size that will not
# trigger fragmentation on typical network links. DNS servers can switch
# from UDP to TCP when a DNS response is too big to fit in this limited
# buffer size. This value has also been suggested in DNS Flag Day 2020.
edns-buffer-size: 1232
# Perform prefetching of close to expired message cache entries
# This only applies to domains that have been frequently queried
prefetch: yes
# One thread should be sufficient, can be increased on beefy machines. In reality for most users running on small networks or on a single machine, it should be>
num-threads: 1
# Ensure kernel buffer is large enough to not lose messages in traffic spikes
so-rcvbuf: 1m
# Ensure privacy of local IP ranges
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
# ADD
# maximum number of simultaneous DNS requests (default: 150)
num-queries-per-thread: 300
#
# "forward-zone" directs specific domain queries to designated upstream DNS servers
# Adjust your IP addresses!
forward-zone:
name: "fritz.box"
forward-addr: 192.168.1.1@53
sudo chmod 644 /etc/unbound/unbound.conf.d/pi-hole.conf
sudo unbound-anchor -a /etc/unbound/trusted-key.key
Testen:sudo unbound-anchor -v
Ergebnis:Zitat/etc/trusted-key.key has content
success: the anchor is ok
sudo chown -R unbound:unbound /etc/unbound
sudo nano /etc/unbound/unbound.conf
Ersetze den Inhalt der Hauptkonfigurationsdatei von Unbound mit den folgenden Zeilen, um sicherzustellen, dass alle zusätzlichen Konfigurationsdateien aus dem Verzeichnis "/etc/unbound/unbound.conf.d/" automatisch eingebunden werden:Zitat# Unbound configuration file
#
# The following line includes additional configuration files from the
# /etc/unbound/unbound.conf.d directory.
include-toplevel: "/etc/unbound/unbound.conf.d/*.conf"
sudo curl --output /etc/unbound/root.hints https://www.internic.net/domain/named.cache
sudo unbound-checkconf /etc/unbound/unbound.conf.d/pi-hole.conf
Das Ergebnis sollte "no errors in /etc/unbound/unbound.conf.d/pi-hole.conf" sein.sudo systemctl enable unbound
sudo systemctl start unbound
Unbound Status prüfen:sudo systemctl status unbound
dig pi-hole.net @127.0.0.1 -p 5335
dig fail01.dnssec.works @127.0.0.1 -p 5335
dig dnssec.works @127.0.0.1 -p 5335
Der erste Befehl sollte einen Statusbericht von SERVFAIL und keine IP-Adresse liefern. Der zweite sollte NOERROR plus eine IP-Adresse liefern.drill badsig.go.dnscheck.tools
drill go.dnscheck.tools
Der erste Befehl sollte einen rcode von SERVFAIL liefern. Der zweite Befehl sollte einen rcode von NOERROR liefern.dig @127.0.0.1 -p 5335 +dnssec +cd internet.nl
Hierbei fordert +dnssec die Authentifizierung von DNS-Daten unter Verwendung von DNSSEC an. +cd (Checking Disabled) deaktiviert die DNSSEC-Validierung und gibt jede Antwort zurück, auch wenn sie nicht authentifiziert wurde. Das erwartete Ergebnis ist eine DNS-Antwort, die zeigt, dass die Domain internet.nl erfolgreich mit DNSSEC signiert wurde. Achte besonders auf den "ad" (Authenticated Data) Flag in den Flags der Antwort:Zitat...
;; flags: qr rd ra ad cd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
...
dig posteo.de SOA +dnssec
Dieser Befehl fragt den SOA (Start of Authority)-Eintrag für posteo.de ab und fordert DNSSEC-Informationen an. Die Ausgabe des Befehls zeigt folgende wichtige Informationen:...
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
...
Das Vorhandensein des "ad"-Flags in der Antwort zeigt an, dass die DNS-Antwort für die SOA-Abfrage von posteo.de von DNSSEC validiert wurde und als sicher und authentisch gilt. Dies ist ein gutes Zeichen dafür, dass die Domain korrekt mit DNSSEC konfiguriert ist.ldns-dane -d verify posteo.de 443
Das Ergebnis zeigt, ob die TLS-Verbindung zu posteo.de über Port 443 erfolgreich mit DANE validiert wurde:Zitat185.67.36.168 dane-validated successfully
185.67.36.169 dane-validated successfully
2a05:bc0:1000::168:1 dane-validated successfully
2a05:bc0:1000::169:1 dane-validated successfully
2a05:bc0:1000:80::168:1 dane-validated successfully
2a05:bc0:1000:80::169:1 dane-validated successfully
ping fritz.box
ip addr show | grep inet | awk '{print $2}'
Dieser Befehl zeigt nur die IP-Adresse der spezifischen Netzwerkschnittstelle "end0" von manjaro-arm an (kann auch in der FritzBox geprüft werden):ip addr show dev end0 | grep inet | awk '{print $2}'
Es scheint, dass die Bezeichnung "end0" anstatt "eth0" unter Manjaro-ARM für die Netzwerkschnittstelle verwendet wird. Dieser Befehl listet alle Netzwerkschnittstellen auf und zeigt ihre aktuellen Bezeichnungen an:ip link show
ping 192.168.1.42
ping -6 fd00::1111:5555:9cba:def1
sudo nano /etc/systemd/network/10-static.network
Zitat[Match]
Name=end0
[Network]
Address=192.168.1.42/24 # Ersetze mit deiner festen IPv4-Adresse
Gateway=192.168.1.1 # Ersetze mit dem IPv4-Gateway, normalerweise die IP-Adresse deines Routers
DNS=192.168.1.1 # Ersetze mit der IP-Adresse deines bevorzugten DNS-Servers
Address=fd00::1111:5555:9cba:def1/64 # Ersetze mit deiner festen ULA-Adresse
DHCP=no
IPv6AcceptRA=no
sudo systemctl restart systemd-networkd
Überprüfe nach dem Neustart des Dienstes, ob die IP-Adressen korrekt zugewiesen wurden:ip addr show end0
Teste die IPv4- und IPv6-ULA-Adresse, indem du von einem anderen Rechner im selben Netzwerk aus einen Ping durchführst, z.B. so:ping 192.168.1.42
ping -6 fd00::1111:5555:9cba:def1
sudo nano /etc/sudoers.d/unbound
In der neuen Datei fügst du die Regel ein, die dem unbound-Benutzer erlaubt, den reload-unbound.service ohne Passwort zu starten:Zitatunbound ALL=(ALL) NOPASSWD: /bin/systemctl start reload-unbound.serviceEs ist wichtig, dass die Pfade in der sudoers-Konfiguration genau mit den tatsächlichen Installationspfaden der Befehle auf deinem System übereinstimmen. Diese Datei sollte mit chmod 440 gesichert werden:
sudo chmod 0440 /etc/sudoers.d/unbound
sudo nano /etc/systemd/system/reload-unbound.service
Füge den folgenden Inhalt in die Datei ein:Zitat[Unit]
Description=Reload Unbound service (need sudo)
[Service]
Type=oneshot
ExecStart=/bin/systemctl reload unbound.service
[Install]
WantedBy=multi-user.target
sudo nano /etc/systemd/system/update-root-hints.service
Füge den folgenden Inhalt in die Datei ein:Zitat[Unit]
Description=Update root hints file and reload Unbound
After=network.target
[Service]
User=unbound
Group=unbound
ExecStart=/bin/sh -c 'rm -f /etc/unbound/root.hints.new; /usr/bin/curl --output /etc/unbound/root.hints.new https://www.internic.net/domain/named.cache && mv /etc/unbound/root.hints.new /etc/unbound/root.hints'
ExecStartPost=/bin/sudo /bin/systemctl start reload-unbound.service
[Install]
WantedBy=multi-user.target
sudo nano /etc/systemd/system/update-root-hints.timer
Füge den folgenden Inhalt in die Datei ein:Zitat[Unit]
Description=Run the update-root-hints.service monthly
[Timer]
OnCalendar=monthly
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl enable update-root-hints.timer
Starte den Timer und den Service:sudo systemctl start update-root-hints.timer
sudo systemctl start update-root-hints.service
sudo systemctl status update-root-hints.timer
sudo systemctl list-timers
sudo systemctl start update-root-hints.service
Überprüfen auf mögliche Fehler:journalctl -u update-root-hints.service
sudo pacman -Syu
yay -Syu # Achtung: 'sudo' wird hier nicht benötigt!
pihole -g
sudo pacman -Rsn $(pacman -Qdtq)
sudo pacman -Scc
cat /etc/unbound/trusted-key.key
Die Ausgabe der Datei enthält Einträge wie last_queried und last_success, die anzeigen, wann die Datei zuletzt abgefragt und erfolgreich aktualisiert wurde. Diese Informationen helfen zu bestimmen, wie aktuell die Trust-Anchor-Informationen in deinem Unbound-DNS-Resolver sind.ls -l /etc/unbound/root.hints
Manuelles Update, falls erforderlich:sudo curl --output /etc/unbound/root.hints https://www.internic.net/domain/named.cache
Hinweis: Dies sollte nicht notwendig sein, wenn du eine .timer-Datei dafür eingerichtet hast.sudo systemctl list-timers
sudo chown -R unbound:unbound /etc/unbound
df -h
Überwache die Systemressourcen:htop
Dieses Tool zeigt eine kontinuierliche Liste der Netzwerkverbindungen und deren Bandbreitennutzung auf "end0" an:sudo iftop -i end0
Neustart deines Systems, z.B. nach einem Kernel-Update mit:reboot
shutdown -h 0
// V23.12.002
// Linux Pi-System Monitor
//
// Das Skript überwacht die CPU-Temperatur und die Uptime eines Raspberry Pi-Systems,
// und speichert diese Informationen regelmäßig in ioBroker-Datenpunkten,
// wobei die Temperatur auf eine Stelle und die Uptime auf zwei Stellen hinter dem Komma begrenzt wird.
var exec = require("child_process").exec;
// Pfad für die Datenpunkte
var dataPath = "javascript.0.linux-pi-system";
// Funktion zur Aktualisierung eines Zustands, falls vorhanden, oder zur Erstellung eines neuen Zustands
function updateOrCreateState(path, value, callback) {
getObject(path, function (err, obj) {
if (!err && obj) {
// Der Zustand existiert bereits, aktualisiere ihn
setState(path, value, true, callback);
} else {
// Zustand erstellen
createState(path, value, true, callback);
}
});
}
// Funktion zur Speicherung der CPU-Temperatur
function saveCPUTemperature() {
exec("cat /sys/class/thermal/thermal_zone0/temp", function (error, stdout, stderr) {
if (!error) {
// Umrechnung in Grad Celsius mit einer Stelle hinter dem Komma begrenzt
var millikelvin = parseFloat(stdout.trim());
var celsius = (millikelvin / 1000).toFixed(1);
// Speichern des Wertes in ioBroker
updateOrCreateState(dataPath + ".temperature", celsius, function () {});
} else {
log("Fehler beim Abrufen der CPU-Temperatur: " + error);
}
});
}
// Funktion zur Umrechnung der Uptime in Stunden und Speicherung
function saveUptime() {
exec("cat /proc/uptime", function (error, stdout, stderr) {
if (!error) {
// Zerlegen des stdout-Strings und Umwandlung der ersten Zahl in Stunden
var uptimeInSeconds = parseFloat(stdout.split(' ')[0]);
var uptimeInHours = (uptimeInSeconds / 3600).toFixed(2);
// Speichern des umgerechneten Wertes in ioBroker
updateOrCreateState(dataPath + ".uptime", uptimeInHours, function () {});
} else {
log("Fehler beim Abrufen der Uptime: " + error);
}
});
}
// Initialer Aufruf der Funktionen
saveCPUTemperature();
saveUptime();
// Zeitplan für die regelmäßige Ausführung
schedule("*/5 * * * *", saveCPUTemperature); // Alle 5 Minuten die CPU-Temperatur abrufen und speichern
schedule("*/10 * * * *", saveUptime); // Alle 10 Minuten die Uptime abrufen und speichern
sudo nano /boot/config.txt
Zitatdtoverlay=disable-bt
enable_uart=1
sudo nano /boot/cmdline.txt
Entferne den Eintrag "console=serial0,115200". Diese Änderung verhindert, dass der Serial Port für Konsolenausgaben genutzt wird, was für die Verwendung des Z-Wave Moduls entscheidend ist.sudo ldconfig
sudo usermod -a -G uucp iobroker
sudo reboot
Nach dem Neustart sind die Änderungen aktiv und der Serial Port ist für die Nutzung mit dem Z-Wave Modul bereit.groups iobroker
ls -l /dev/ttyA*
In meinem Fall ist es /dev/ttyAMA0, den ich im zwave2 Adapter von ioBroker als "Serielle Schnittstelle auswählen" eingetragen habe.id iobroker &>/dev/null || sudo useradd -m -s /usr/sbin/nologin iobroker
Hinweis: Dieser Befehl erstellt einen Benutzer namens `iobroker` mit einem Home-Verzeichnis, aber ohne eine Login-Shell, was bedeutet, dass er sich nicht direkt anmelden kann. Prüfen mit:id iobroker
sudo chmod -v 755 /home/iobroker
(von 0700 in 0755)sudo usermod -a -G iobroker $USER
Prüfen mit:id $USER
sudo su -s /bin/bash -c "cd /opt/iobroker && npm install iobroker.js-controller@stable --unsafe-perm --no-audit" iobroker
sudo -u iobroker bash -c "cd /opt/iobroker && npm install iobroker.admin@stable --unsafe-perm --no-audit"
(ja, diese kürzere Syntax funktioniert auch)sudo -u iobroker bash -c "cd /opt/iobroker && npm install iobroker.web@stable --unsafe-perm --no-audit"
sudo -u iobroker bash -c "cd /opt/iobroker && npm install iobroker.backitup@stable --unsafe-perm --no-audit"
sudo -u iobroker bash -c "cd /opt/iobroker && npm install iobroker.discovery@stable --unsafe-perm --no-audit"
sudo -u iobroker /opt/iobroker/iobroker start
Ersteinrichtung von ioBroker durchzuführen:sudo -u iobroker /opt/iobroker/iobroker setup first
sudo -u iobroker /opt/iobroker/iobroker status
sudo -u iobroker /opt/iobroker/iobroker stop
sudo -u iobroker /opt/iobroker/iobroker update
sudo -u iobroker /opt/iobroker/iobroker upgrade self
sudo -u iobroker /opt/iobroker/iobroker upgrade
sudo -u iobroker /opt/iobroker/iobroker start
sudo nano /usr/lib/systemd/system/iobroker.service
Inhalt der Service-Datei:Zitat[Unit]Wichtig: Passe den 'ExecStart'-Pfad an deine Node.js-Installation an.
Description=ioBroker Server
Documentation=http://iobroker.net
After=network.target redis.service influxdb.service mysql-server.service mariadb-server.service
Wants=redis.service influxdb.service mysql-server.service mariadb-server.service
[Service]
Type=simple
User=iobroker
Environment="NODE=$(which node)"
ExecStart=/usr/bin/bash -c '${NODE} /opt/iobroker/node_modules/iobroker.js-controller/controller.js'
Restart=on-failure
RestartSec=3s
[Install]
WantedBy=multi-user.target
sudo chmod 644 /usr/lib/systemd/system/iobroker.service
sudo systemctl daemon-reload
sudo systemctl enable iobroker.service
sudo ln -s /usr/lib/systemd/system/iobroker.service /etc/systemd/system/multi-user.target.wants/iobroker.service
ls -l /etc/systemd/system/multi-user.target.wants/iobroker.service
sudo systemctl start iobroker.service
sudo systemctl status iobroker.service
(Beenden mit "Q")sudo nano /etc/sudoers.d/iobroker
Diese sieht bei mir so aus:Zitatiobroker ALL=(ALL) ALL
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/shutdown
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/halt
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/poweroff
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/reboot
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/systemctl start
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/systemctl stop
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/mount
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/umount
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/systemd-run
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/make
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/ping
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/setcap
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/vcgencmd
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/cat
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/df
iobroker ALL=(ALL) NOPASSWD: /usr/sbin/ldconfig
ALL ALL=NOPASSWD: /usr/sbin/systemctl start iobroker
ALL ALL=NOPASSWD: /usr/sbin/systemctl stop iobroker
ALL ALL=NOPASSWD: /usr/sbin/systemctl restart iobroker
ALL ALL=(iobroker) NOPASSWD: /usr/sbin/node /opt/iobroker/node_modules/iobroker.js-controller/iobroker.js *
sudo chmod 444 /etc/sudoers.d/iobroker
Wenn du die Datei bearbeiten möchtest, kannst du die Berechtigungen kurz auf chmod 644 setzen:sudo chmod 644 /etc/sudoers.d/iobroker
Nachdem du die erforderlichen Bearbeitungen vorgenommen hast, solltest du die Berechtigungen jedoch erneut auf chmod 444 setzen, um die Sicherheit der Datei zu gewährleisten.iob stop
curl -fsSL https://iobroker.net/fix.sh | bash -
iob start
ZitatYour installation was fixed successfully
Run iobroker start to start ioBroker again!
arp-scan --local
auf einem Linux-Computer ausführen. Im Router habe ich diesem Netzwerkgerät immer die gleiche IPv4-Adresse zugewiesen.ssh root@192.168.x.y
Beim ersten Login wird ein neuer SHA256 Fingerprint erstellt, dann erscheint ein Assistent um die Manjaro ARM Installation abzuschließen, Beispiel:ssh pi4m@192.168.x.y
Beim ersten Aktualisieren kannst du die Spiegelserver (Mirrors) für Pacman auf Server in Deutschland, Frankreich und Österreich beschränken, alles aktualisieren und nur die zwei neuesten Versionen jedes Pakets im Cache behalten. Hier ist der Befehl:sudo pacman-mirrors --country Germany,France,Austria && sudo pacman -Syyuu && sudo paccache -rk2
Wenn du aufgefordert wirst, "rpi-eeprom durch extra/rpi4-eeprom ersetzen? [J/n]" und du ein Raspberry Pi 4 verwendest, dann ist es in der Regel eine gute Idee, diese Frage mit "J" (default) für Ja zu beantworten und das rpi-eeprom-Paket durch das rpi4-eeprom-Paket zu ersetzen.sudo pacman -Syyuu && sudo paccache -rk2
Der Befehl aktualisiert auch das linux-rpi4-Paket auf deinem Manjaro ARM-System und kann damit den Kernel auf eine neuere Version anheben, wenn eine solche in den Repositories verfügbar ist. Die Version eines Kernel-Pakets kann mit 'pacman -Si linux-rpi4' überprüft werden.sudo pacman -Rsn $(pacman -Qdtq)
Optional alle Pakete im Pacman Cache vollständig entfernen:sudo pacman -Scc
sudo pacman -S --needed acl avahi base-devel cairo cmake curl gcc giflib git htop iftop libcap libjpeg-turbo librsvg lm_sensors make neofetch net-tools pam pango pkgconf systemd-libs unzip sqlite cifs-utils nfs-utils
lsb_release -a
ZitatLSB Version: n/aoder:
Distributor ID: Manjaro-ARM
Description: Manjaro ARM Linux
Release: 23.02
Codename: n/a
neofetch
htop
sudo reboot
oder ausschalten:sudo shutdown -h 0
systemctl get-default
Wenn das Ergebnis "graphical.target" liefert, bedeutet das, dass dein System standardmäßig in einer grafischen Umgebung (GUI) startet. Mit dem Befehlsudo systemctl set-default multi-user.target
stellst du das System so ein, dass es im Headless-Modus startet, also ohne grafische Benutzeroberfläche (GUI). Dieser Modus eignet sich besonders für Server, da er weniger Ressourcen beansprucht, die sonst für die GUI benötigt würden. Ein weiterer Vorteil ist die erhöhte Stabilität, da weniger Komponenten vorhanden sind, die potenziell abstürzen oder Probleme verursachen könnten (zurück zur GUI: 'sudo systemctl set-default graphical.target').systemctl get-default
Dieser Befehl sollte jetzt "multi-user.target" als Antwort geben. Starte das System neu:sudo reboot
sudo nano /boot/config.txt
Zitat# gpu_mem=64
auto_initramfs=1
arm_64bit=1
disable_overscan=1
# dtparam=krnbt=on
# disable sound
dtparam=audio=off
# hdmi_drive=2
# disable vc4
# dtoverlay=vc4-kms-v3d
# max_framebuffers=2
disable_splash=1
[all]
dtoverlay=disable-wifi
dtoverlay=disable-bt
sudo nano /etc/systemd/timesyncd.conf
ZitatNTP=192.168.1.1
sudo nano /etc/fstab
Zitat# <file system> <dir> <type> <options> <dump> <pass>Dieser Eintrag verhindert, dass das System bei jedem Lesezugriff die Zugriffszeit (atime) aktualisiert, was die Anzahl der Schreibvorgänge auf der SSD reduziert. Starte das System neu:
PARTUUID=d42a0555-01 /boot vfat defaults,noexec,nodev,showexec 0 0
PARTUUID=d42ba555-02 / ext4 defaults,noatime 0 1
sudo reboot
df -h
ausführst (tmpfs schont die SSD und erhöht die Geschwindigkeit).sudo systemctl status fstrim.timer
zeigt an, dass der TRIM-Timer aktiviert und eingerichtet ist. Der Timer ist so konfiguriert, dass er einmal pro Woche (standardmäßig) ausgeführt wird, um nicht mehr benötigte Blöcke auf der SSD freizugeben. Befehl um die SSD manuell zu trimmen:sudo fstrim -a -v
sudo nano /etc/systemd/system/disable-pwr-led.service
Füge den Inhalt für den Service hinzu:Zitat[Unit]
Description=Disable the PWR LED on Raspberry Pi
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo 0 > /sys/class/leds/PWR/brightness"
[Install]
WantedBy=multi-user.target
sudo systemctl enable disable-pwr-led.service
Starte den Service oder das System neu um zu testen, ob der Service funktioniert, kannst du ihn manuell starten oder einfach dein System neu starten. Um den Service zu starten, verwende:sudo systemctl start disable-pwr-led.service
Oder starte dein System neu, um zu sehen, ob der Service beim Booten korrekt ausgeführt wird. Durch diesen systemd-Service wird sichergestellt, dass der Befehl zum Ausschalten der LED bei jedem Systemstart ausgeführt wird.ls /sys/class/leds/
ZitatACT default-on mmc0 mmc0:: PWR
sudo rpi-eeprom-update -a
Es ist wichtig zu beachten, dass das Aktualisieren des EEPROMs ein kritisches Verfahren ist, da es die Firmware und Konfigurationseinstellungen ändern kann. Durch Hinzufügen der "-a" oder "--stable" Option wird sichergestellt, dass nur die stabile Version des EEPROMs heruntergeladen und aktualisiert wird, wenn eine solche verfügbar ist.sudo cat /var/log/pacman.log
ARL (Arch Rollback Machine) Fehlerprotokoll auslesensudo cat /var/log/pacman.log | grep "ARL"
systemctl --failed
journalctl -p err --since yesterday
journalctl --since "20:30:00" --until "20:42:00"
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s
Der erste Befehl dreht die Protokoll-Dateien und erstellt neue. Der zweite Befehl löscht alle Protokolldaten, die älter als eine Sekunde sind. Du kannst die Zeitspanne nach Bedarf anpassen.sudo pacman -S nodejs-lts-hydrogen npm
(V20: nodejs-lts-iron, V18: nodejs-lts-hydrogen, V16: nodejs-lts-gallium, V14: nodejs-lts-fermium, V12: nodejs-lts-erbium)iob stop && iob update && iob upgrade self && iob upgrade
sudo pacman -Syyuu
sudo pacman -Rns nodejs-lts-hydrogen npm
sudo pacman -S nodejs-lts-iron npm
sudo paccache -rk2
reboot
pacman -Qi nodejs-lts-hydrogen
node -v
Ausgabe: v18.18.0npm -v
Ausgabe: v10.2.4sudo find / -name npm
nano ~/.bashrc
Zitat# Setze den PATH für npm
export PATH=/usr/lib/node_modules/corepack/shims:$PATH
source ~/.bashrc
npm -v
curl -sL https://iobroker.net/install.sh | bash -
sudo systemctl status iobroker.service
(Beenden mit "Q")sudo systemctl start iobroker.service
sudo chmod -v 755 /home/iobroker
(von 0700 in 0755)iob diag
iob stop && iob fix
Alternativ kannst du den ioBroker-Fixer auch aus dem Internet herunterladen und ausführen:iob stop && curl -fsSL https://iobroker.net/fix.sh | bash -
sudo systemctl status iobroker.service
● iobroker.service - ioBroker Server
Loaded: loaded (/usr/lib/systemd/system/iobroker.service; enabled; preset: disabled)
Active: active (running) since Sun 2023-12-12 14:42:11 CET; 7h ago
Docs: http://iobroker.net
Main PID: 476 (iobroker.js-con)
Tasks: 185 (limit: 9279)
CPU: 2h 25min 24.513s
CGroup: /system.slice/iobroker.service
├─ 476 iobroker.js-controller
├─ 560 io.admin.0
├─ 648 io.javascript.0
├─ 733 io.email.0
├─ 849 io.ping.0
├─ 878 io.shelly.0
├─ 896 io.tr-064.0
├─ 927 io.info.0
├─ 998 io.zwave2.0
├─1097 io.fullybrowser.0
├─1252 io.simple-api.0
├─1580 io.web.0
├─1591 io.yahka.0
└─3790 io.backitup.0
(Beenden mit "Q")sudo nano /home/iobroker/.bashrc
Überprüfe dann die folgenden Zeilen in der .bashrc-Datei:Zitat# Setze den PATH für npmWenn du die Änderungen in der Konfigurationsdatei vorgenommen hast, ist ein Neustart erforderlich.
export PATH=/usr/lib/node_modules/corepack/shims:$PATH
ls -l /usr/bin/nodejs
b) Erstellen eines Symlinks (falls /usr/bin/nodejs nicht existiert):sudo ln -s /usr/bin/node /usr/bin/nodejs
Dieser Befehl erstellt einen Symlink nodejs, der auf die node-Anwendung verweist. Damit wird jeder Aufruf von nodejs an node weitergeleitet. Test:nodejs -v
iob stop && iob update && iob upgrade self && iob upgrade && sudo pacman -Syyuu && sudo paccache -rk2 && reboot
sudo pacman -Rsn $(pacman -Qdtq)
sudo pacman -Scc