Keine Treffer – Suchbegriff anpassen.
💻System-Informationen
| uname -a / uname -m -p -r | Vollständige Kennung / Maschine, Prozessor, Release |
| sysctl kern.version | Genaue Kernel-Version inkl. Bau-Datum und Konfigurationsname |
| sysctl hw.model hw.ncpu hw.physmem64 | CPU-Modell, CPU-Anzahl, physischer Speicher |
| sysctl -a | less | Alle Kernel-Variablen |
| dmesg | less bzw. cat /var/run/dmesg.boot | Kernel-Meldungen aktuell / vom letzten Boot |
| pcictl pci0 list | PCI-Geräte am Bus 0 mit Hersteller und Modell |
| drvctl -l / drvctl -p wd0 | Gerätebaum / Eigenschaften eines Geräts |
| cpuctl identify 0 | Detaillierte CPU-Eigenschaften und Features |
| envstat -d / envstat -r | Sensoren: Temperatur, Lüfter, Spannungen |
| df -h / df -hi | Belegung der Dateisysteme / Inode-Belegung |
| swapctl -l -k | Swap-Geräte und Auslastung in KB |
| uptime / w / who -b | Laufzeit und Load / Sitzungen / Bootzeitpunkt |
| sysctl machdep.dmi.system-product | Modellbezeichnung – erkennt auch VMware, KVM, VirtualBox |
| sysctl kern.boottime | Exakter Zeitpunkt des letzten Systemstarts |
| sysctl kern.osrelease kern.osrevision | Release-Nummer für Skripte |
Bestandsaufnahme vor jedem Change:
uname -a; sysctl kern.version; df -h; disklabel -r wd0; ifconfig -a; pkgin list | wc -l
– Ausgabe in eine Datei umlenken und dem Ticket beilegen.⏻Boot & Bootloader
| shutdown -r now / reboot | Sauberer Neustart |
| shutdown -p now / poweroff | Herunterfahren und ausschalten |
| shutdown -r +10 "Wartung" | Neustart in 10 Minuten mit Meldung |
| shutdown now | In den Single-User-Modus wechseln |
| /boot.cfg | Bootmenü: Einträge, Timeout, Konsole (x86) |
| boot netbsd -s | Am Boot-Prompt Single-User starten |
| boot netbsd.old | Alten Kernel starten, wenn der neue nicht bootet |
| boot -a | Beim Start nach dem Root-Gerät fragen lassen |
| installboot -v -o timeout=5 /dev/rwd0a /usr/mdec/bootxx_ffsv2 | Bootblock neu schreiben (Dateisystemtyp beachten) |
| /usr/mdec/ · gpt biosboot -i 1 wd0 | Bootcode-Vorlagen / GPT-Boot-Flag setzen |
| sysctl machdep.booted_kernel | Welcher Kernel läuft gerade? |
| /etc/rc.conf: rc_configured=YES | Muss gesetzt sein, sonst bleibt das System im Single-User |
Root-Passwort zurücksetzen
Am Bootprompt: boot netbsd -s Enter bei der Shell-Abfrage fsck -y / # Dateisystem pruefen mount -u / # Root beschreibbar mounten mount -a # restliche Dateisysteme passwd root reboot
Zugang absichern: In
/etc/ttys die Konsole auf
insecure setzen – dann verlangt der Single-User-Modus das Root-Passwort.
Physischer Zugriff bleibt aber immer ein Risiko.⚙Dienste & rc.d
| /etc/rc.d/sshd status | Zustand eines Dienstes |
| /etc/rc.d/sshd start | stop | restart | Dienst steuern (NetBSD hat kein service-Kommando) |
| /etc/rc.d/sshd reload | Konfiguration neu einlesen, sofern unterstützt |
| /etc/rc.d/sshd onestart | Starten, obwohl in rc.conf nicht aktiviert |
| /etc/rc.conf: sshd=YES | Dienst dauerhaft aktivieren |
| /etc/defaults/rc.conf | Alle Vorgabewerte mit Kommentaren – nur lesen |
| /etc/rc.conf.d/<dienst> | Getrennte Konfiguration je Dienst (Flags, Umgebung) |
| /etc/rc.d/ · /usr/pkg/etc/rc.d/ | Skripte des Basis-Systems / aus pkgsrc |
| rcorder /etc/rc.d/* | Startreihenfolge berechnen – zeigt Abhängigkeiten |
| /etc/rc.local | Eigene Befehle am Ende des Bootvorgangs |
| /etc/rc.conf: rc_rcorder_flags="-s xen" | Bestimmte Dienstgruppen beim Start überspringen |
| cp /usr/pkg/share/examples/rc.d/nginx /etc/rc.d/ | pkgsrc-Startskript ins System übernehmen |
| /etc/rc.conf: nginx=YES nginx_flags="-c /pfad" | Dienst mit eigenen Startparametern |
Unterschied zu FreeBSD: Es gibt kein
sysrc und kein
service. Die rc.conf wird direkt editiert, Dienste werden über ihren
vollen Skriptpfad in /etc/rc.d/ gesteuert.📦pkgsrc & Pakete
| pkgin update | Paketkatalog aktualisieren |
| pkgin search nginx / pkgin avail | Suchen / alle verfügbaren Pakete |
| pkgin install nginx | Binärpaket samt Abhängigkeiten installieren |
| pkgin list / pkgin export | Installierte Pakete / Liste zum Wiederherstellen |
| pkgin remove nginx / pkgin autoremove | Entfernen / verwaiste Abhängigkeiten aufräumen |
| pkgin full-upgrade | Alle Pakete aktualisieren |
| pkgin -n full-upgrade | Trockenlauf – erst ansehen, was passieren würde |
| pkgin clean | Heruntergeladene Pakete aus dem Cache entfernen |
| pkg_info / pkg_info -L nginx | Installierte Pakete / alle Dateien eines Pakets |
| pkg_info -F /usr/pkg/sbin/nginx | Zu welchem Paket gehört diese Datei? |
| pkg_info -r nginx / pkg_info -R nginx | Benötigte Abhängigkeiten / wer hängt davon ab |
| pkg_add -u nginx-1.26.tgz | Einzelnes Paket aus Datei aktualisieren |
| pkg_delete -f nginx | Entfernen, auch wenn Abhängigkeiten bestehen |
| pkg_admin check / pkg_admin rebuild | Prüfsummen prüfen / Paketdatenbank neu aufbauen |
| pkg_admin audit / pkg_admin fetch-pkg-vulnerabilities | Sicherheitslücken prüfen / Liste holen |
| cd /usr/pkgsrc/www/nginx && make install clean | Aus Quellen bauen und installieren |
| make show-options / make show-depends | Build-Optionen / Abhängigkeiten eines Pakets |
| /etc/mk.conf: PKG_OPTIONS.nginx=+ssl | Build-Optionen dauerhaft festlegen |
| /usr/pkg/etc/pkgin/repositories.conf | Repository-Adresse (Release und Architektur müssen passen) |
pkgsrc ist portabel: derselbe Baum läuft auf NetBSD, Linux, Solaris,
macOS. Alles landet unter
/usr/pkg, Konfiguration unter /usr/pkg/etc –
sauber getrennt vom Basis-System unter /etc.🔧System-Updates & build.sh
| cd /usr/src && ./build.sh -O ../obj -T ../tools -U -j4 tools | Cross-Werkzeuge bauen (einmalig, unprivilegiert möglich) |
| ./build.sh -O ../obj -T ../tools -U -j4 distribution | Komplettes Userland bauen |
| ./build.sh -O ../obj -T ../tools -U kernel=GENERIC | Kernel bauen – Ergebnis unter obj/sys/arch/…/compile/GENERIC |
| ./build.sh -O ../obj -T ../tools -U -j4 release | Vollständige Release-Sets erzeugen |
| ./build.sh -O ../obj -T ../tools install=/ | Gebautes Userland ins laufende System installieren |
| cp netbsd /netbsd.new && mv /netbsd /netbsd.old && mv /netbsd.new /netbsd | Kernel tauschen – alten immer aufheben |
| etcupdate -s /usr/src/etc -s /usr/src/distrib/sets | Dateien unter /etc mit der neuen Version abgleichen |
| postinstall -s /usr/src/etc check | Prüfen, was nach dem Update noch angepasst werden muss |
| postinstall -s /usr/src/etc fix | Erkannte Abweichungen automatisch korrigieren |
| sysinst | Installations- und Upgrade-Werkzeug (auch von Installationsmedium) |
| cd / && tar -xzpf base.tar.xz | Release-Sets manuell entpacken (Upgrade-Weg ohne sysinst) |
| cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot co -r netbsd-10 src | Quellen des Stable-Zweigs beziehen |
| /usr/src/UPDATING · /usr/pkgsrc/doc/CHANGES | Vor jedem Update lesen – Sonderfälle stehen dort |
Reihenfolge einhalten: Erst neuen Kernel installieren und booten,
dann Userland (
install=/), danach etcupdate und postinstall fix.
Wer Userland vor Kernel installiert, riskiert ein nicht mehr startfähiges System.🧩Kernel, Module & sysctl
| modstat / modstat -n tmpfs | Geladene Module / ein bestimmtes Modul |
| modload tmpfs | Modul zur Laufzeit laden |
| modunload tmpfs | Modul entladen (nur wenn nicht in Benutzung) |
| /etc/modules.conf | Module, die beim Boot geladen werden |
| /stand/<arch>/<version>/modules/ | Ablageort der Kernel-Module |
| sysctl kern.maxfiles / sysctl -w kern.maxfiles=16384 | Variable lesen / zur Laufzeit setzen |
| /etc/sysctl.conf | Dauerhafte sysctl-Werte |
| sysctl -d kern.maxproc | Beschreibung einer Variable |
| sysctl ddb.onpanic=0 | Bei Panik nicht in den Debugger, sondern Dump und Reboot |
| cd /usr/src/sys/arch/amd64/conf && cp GENERIC MYKERN | Eigene Kernel-Konfiguration ableiten |
| config MYKERN && cd ../compile/MYKERN && make depend && make | Klassischer Kernel-Bau ohne build.sh |
| sysctl security.curtain=1 | Benutzer sehen nur eigene Prozesse und Sockets |
| sysctl kern.securelevel | Sicherheitsstufe – lässt sich nur erhöhen, nie senken |
| veriexecctl load / veriexec | Signaturprüfung ausführbarer Dateien (Konfiguration /etc/signatures) |
Modul oder fest eingebaut?
modstat zeigt in der Spalte
Source, ob ein Modul geladen (filesys) oder fest im Kernel enthalten
(builtin) ist. Builtin-Module lassen sich nicht entladen.🔧Geräte & Datenträger
| dmesg | grep -E '^(wd|sd|cd|ld)[0-9]' | Erkannte Datenträger mit Größe und Anschluss |
| sysctl hw.disknames | Namen aller Platten in einer Zeile |
| iostat -x 5 | Gerätestatistik im Intervall |
| drvctl -l / drvctl -r -a scsibus scsibus0 | Geräte auflisten / Bus neu abtasten (neue LUNs) |
| drvctl -d sd3 / drvctl -Q sd3 | Gerät abmelden / Eigenschaften abfragen |
| scsictl /dev/rsd0c identify | SCSI-Gerät identifizieren |
| atactl /dev/rwd0 identify | ATA-Gerät: Firmware, Features, Seriennummer |
| atactl /dev/rwd0 smart status | SMART-Zustand ohne Zusatzpaket |
| smartctl -a /dev/rwd0 | Ausführliche SMART-Werte (Paket smartmontools) |
| usbdevs -v / usbdevs -d | USB-Geräte / mit Treiberzuordnung |
| dkctl wd0 listwedges | Alle Wedges (GPT-Partitionen als eigene Geräte) einer Platte |
| dkctl wd0 makewedges | Wedges aus der GPT neu erzeugen |
| dkctl dk0 getwedgeinfo | Zu welcher Platte und welchem Bereich gehört der Wedge? |
| envstat -d / powerd | Sensorwerte / Reaktion auf Ereignisse wie Temperatur, Deckel |
Gerätenamen:
wd* = ATA/SATA, sd* = SCSI/SAS/USB,
ld* = logische Laufwerke (RAID-Controller, VirtIO), dk* = Wedges,
raid* = RAIDframe. Der Rohzugriff geht immer über /dev/r…
(z. B. /dev/rwd0a), gepufferte Zugriffe über /dev/wd0a.💾Disklabel, GPT & Wedges
| disklabel wd0 / disklabel -r wd0 | Partitionstabelle aus dem Kernel / direkt vom Datenträger |
| disklabel -e wd0 | Label im Editor bearbeiten |
| disklabel -i wd0 | Interaktiv bearbeiten – führt durch die Felder |
| disklabel -w -r wd0 auto | Neues Label mit Standardgeometrie schreiben |
| disklabel wd0 > /root/wd0.label | Label sichern – vor jeder Änderung machen |
| disklabel -R -r wd0 /root/wd0.label | Gesichertes Label zurückschreiben |
| fdisk wd0 / fdisk -u wd0 | MBR anzeigen / bearbeiten (x86) |
| gpt show wd0 / gpt show -l wd0 | GPT-Einträge / mit Labels |
| gpt create wd1 | Neue GPT anlegen |
| gpt add -t ffs -l data1 -s 200G wd1 | Partition mit Typ, Label und Größe anlegen |
| gpt add -t swap -s 8G wd1 | Swap-Partition anlegen |
| gpt remove -i 3 wd1 / gpt destroy wd1 | Eintrag entfernen / gesamte Tabelle löschen |
| gpt resize -i 3 -s 400G wd1 | Partition vergrößern |
| gpt recover wd1 | Beschädigte GPT-Sicherungskopie wiederherstellen |
| gpt biosboot -i 1 wd0 | Boot-Partition markieren |
| dkctl wd1 addwedge data1 2048 419430400 ffs | Wedge von Hand anlegen (Name, Start, Länge, Typ) |
| dkctl wd1 delwedge dk3 | Wedge entfernen |
Partition ‘c’ nicht anfassen: Im Disklabel bezeichnet
c die gesamte NetBSD-Partition und d (auf x86) die ganze Platte.
Beide sind keine Datenpartitionen. Nutzdaten gehören nach a, e,
f und folgende.🗃RAIDframe & Verschlüsselung
| raidctl -s raid0 | Zustand des RAID-Sets, Komponenten und Rekonstruktion |
| raidctl -C /etc/raid0.conf raid0 | RAID erstmalig konfigurieren (erzwungen, ohne Paritätsprüfung) |
| raidctl -I 20260818 raid0 | Seriennummer setzen – markiert die Komponenten als zusammengehörig |
| raidctl -iv raid0 | Parität initialisieren (dauert, läuft im Hintergrund) |
| raidctl -A yes raid0 / raidctl -A root raid0 | Automatisch konfigurieren / als Root-Gerät markieren |
| raidctl -f /dev/wd1a raid0 | Komponente als ausgefallen markieren |
| raidctl -r /dev/wd1a raid0 | Komponente entfernen (aus dem Set lösen) |
| raidctl -a /dev/wd2a raid0 | Hot Spare hinzufügen |
| raidctl -R /dev/wd2a raid0 | Rekonstruktion auf die genannte Komponente starten |
| raidctl -P raid0 / raidctl -p raid0 | Parität neu berechnen / Status der Parität abfragen |
| raidctl -u raid0 | RAID-Set abbauen (unkonfigurieren) |
| /etc/rc.conf: raidframe=YES | RAID-Sets beim Boot automatisch konfigurieren |
| cgdconfig -g -V disklabel -o /etc/cgd/wd1e aes-cbc 256 | Parameterdatei für verschlüsselte Platte erzeugen |
| cgdconfig cgd0 /dev/wd1e | Verschlüsseltes Gerät öffnen (fragt nach Passwort) |
| cgdconfig -u cgd0 | Verschlüsseltes Gerät schließen |
| /etc/cgd/cgd.conf · cgdconfig -C | Alle konfigurierten cgd-Geräte beim Boot öffnen |
Beispiel /etc/raid0.conf (Spiegel)
START array 1 2 0 START disks /dev/wd0a /dev/wd1a START layout 128 1 1 1 START queue fifo 100
Nach Plattentausch: erst mit
disklabel das Layout der
gesunden Platte auf die neue übertragen, dann raidctl -R. Der Bootblock
muss auf beiden Platten liegen – sonst startet das System nach dem
Ausfall der ersten nicht.📂Dateisysteme & Mounts
| newfs -O2 /dev/rwd1a | FFSv2 anlegen (Standard für größere Dateisysteme) |
| newfs -O2 -b 32768 -f 4096 /dev/rwd1a | Mit angepasster Block- und Fragmentgröße |
| newfs_lfs /dev/rwd1a | Log-strukturiertes Dateisystem anlegen |
| newfs_msdos /dev/rsd1e | FAT-Dateisystem (z. B. EFI-Partition) |
| tunefs -p /dev/rwd1a | Parameter des Dateisystems anzeigen |
| tunefs -l 1 /dev/rwd1a | WAPBL-Journaling aktivieren (Dateisystem ungemountet) |
| mount / mount -v / mount -p | Eingehängte Dateisysteme, ausführlich bzw. im fstab-Format |
| mount -o log /dev/wd1a /data | Mit Journaling einhängen (WAPBL – deutlich schnellerer Neustart) |
| mount -u -o rw / | Root im laufenden Betrieb beschreibbar machen |
| mount -o noatime,nodev,nosuid /dev/wd1a /data | Härtende Mount-Optionen für Datenpartitionen |
| umount /data / umount -f /data | Aushängen / erzwingen |
| fstat /data / fuser -c /data | Wer blockiert das Aushängen? |
| fsck -y /dev/rwd1a / fsck -p | Prüfen und reparieren / bevorzugter Modus beim Boot |
| fsck_ffs -b 32 /dev/rwd1a | Alternativen Superblock verwenden, wenn der erste defekt ist |
| resize_ffs -s 400G /dev/rwd1a | FFS vergrößern oder verkleinern (ungemountet) |
| dump -0auf /backup/data.dump /data | Sicherung eines FFS-Dateisystems |
| mount_null /srv/orig /srv/kopie | Verzeichnis an zweiter Stelle einblenden |
| mount_tmpfs -s 2G tmpfs /tmp | RAM-Dateisystem einhängen |
| vnconfig vnd0 image.iso && mount -t cd9660 /dev/vnd0a /mnt | Image-Datei als Gerät einbinden |
| vnconfig -u vnd0 | Image-Gerät wieder freigeben |
| df -hi / du -h -d1 /var | sort -h | Inodes prüfen / größte Verzeichnisse finden |
| /etc/fstab | Dauerhafte Mounts – Gerät auch als NAME=label möglich |
WAPBL empfohlen: Ohne Journaling dauert
fsck nach einem
Absturz bei großen Dateisystemen sehr lange. Mit -o log in der
fstab ist das System in Sekunden wieder verfügbar.🔄Swap & Speicher
| swapctl -l -k | Swap-Geräte mit Größe und Belegung |
| swapctl -a /dev/wd0b | Swap-Partition aktivieren |
| swapctl -d /dev/wd0b | Deaktivieren – RAM muss den Inhalt aufnehmen können |
| swapctl -A -t noblk | Alle Einträge aus /etc/fstab aktivieren |
| /dev/wd0b none swap sw 0 0 | Typischer fstab-Eintrag (Partition b ist traditionell Swap) |
| swapctl -a -p 1 /swapfile | Swap-Datei mit Priorität aktivieren |
| dd if=/dev/zero of=/swapfile bs=1m count=4096 | Swap-Datei anlegen (vorher, dann chmod 600) |
| vmstat -s | head -25 | Kumulierte Speicher- und Paging-Statistik |
| sysctl vm.uvmexp2 | Detaillierte Werte des virtuellen Speichersystems |
| top -o size / top -o res | Prozesse nach virtuellem bzw. residentem Speicher sortieren |
| sysctl kern.maxvnodes | Obergrenze für zwischengespeicherte Dateiobjekte |
| sysctl vm.filemin vm.filemax vm.anonmin | Aufteilung des Speichers zwischen Dateicache und Anwendungen |
| /etc/rc.conf: dumpdev=/dev/wd0b · savecore -v | Crash-Dump-Gerät / Dump nach Reboot sichern |
Faustregel: Swap sollte mindestens so groß wie der RAM sein,
wenn Crash-Dumps geschrieben werden sollen – sonst passt der Dump nicht hinein
und
savecore findet nach dem Absturz nichts vor.⚙Prozesse & Jobs
| ps auxww / ps -laxww | Alle Prozesse mit vollständiger Kommandozeile |
| ps -axo pid,ppid,%cpu,%mem,rss,state,command | Eigene Spaltenauswahl |
| pgrep -lf nginx / pkill -f nginx | Prozesse per Muster finden / beenden |
| kill -TERM 1234 / kill -9 1234 | Sauber beenden / hart abschießen |
| kill -HUP 1234 | Konfiguration neu einlesen |
| fstat -p 1234 / fstat -u www | Offene Dateien eines Prozesses / Benutzers |
| ktrace -di -p 1234 && kdump -f ktrace.out | less | Systemaufrufe aufzeichnen und auswerten |
| ktruss -p 1234 | Systemaufrufe direkt lesbar mitschneiden |
| gdb -p 1234 / pstack 1234 | Aufrufstapel eines hängenden Prozesses |
| renice 10 -p 1234 / nice -n 10 befehl | Priorität senken |
| psrset / schedctl -A 0-3 -p 1234 | Prozessor-Zuordnung (Affinität) steuern |
| ulimit -a / limits | Grenzwerte der aktuellen Sitzung |
| /etc/login.conf · cap_mkdb /etc/login.conf | Dauerhafte Limits je Login-Klasse |
| crontab -l -u www / crontab -e | Cron-Jobs anzeigen / bearbeiten |
| /etc/crontab · /etc/daily · /etc/security | System-Cron und die täglichen Prüfläufe |
| /etc/daily.conf · /etc/security.conf | Steuert, was die täglichen Berichte prüfen |
Tägliche Mails ernst nehmen: NetBSD schickt an
root
täglich einen Bericht über geänderte setuid-Dateien, Plattenbelegung und
Konfigurationsänderungen. Wer die Mails weiterleitet
(/etc/mail/aliases), merkt Probleme oft vor den Anwendern.📈Performance-Analyse
| top -b -d1 / top -o cpu | Momentaufnahme für Skripte / nach CPU sortiert |
| vmstat 5 | CPU, Paging, Interrupts – erste Zeile ist Durchschnitt seit Boot |
| vmstat -i | Interrupts je Gerät – findet störende Hardware |
| iostat -x 5 / iostat -DI 5 | Gerätestatistik mit Durchsatz und Auslastung |
| systat vmstat / systat iostat / systat netstat | Kompakte Live-Übersichten auf einem Bildschirm |
| netstat -i 1 / netstat -w 1 | Paket- bzw. Byte-Raten pro Sekunde |
| netstat -m | mbuf-Verbrauch – Engpass bei hoher Netzlast |
| fstat | wc -l ; sysctl kern.maxfiles | Offene Dateien gegen die Obergrenze prüfen |
| pmcstat / lockstat sleep 10 | Hardware-Zähler / Kernel-Sperren als Engpass erkennen |
| sysctl kern.cp_time | Rohwerte der CPU-Zeitverteilung |
| envstat -d / sysctl machdep.cpu_brand | Temperaturen / CPU-Bezeichnung bei Drosselverdacht |
| sysctl machdep.est.frequency.available | Mögliche Taktstufen (Intel SpeedStep) |
| sysctl machdep.est.frequency.target=2400 | Takt fest vorgeben – auf Servern oft sinnvoll |
| time befehl / /usr/bin/time -l befehl | Laufzeit / zusätzlich Speicher- und I/O-Werte |
Vorgehen bei "Server ist langsam":
top (CPU oder Speicher?) → iostat -x 5 (Platte am Limit?) →
netstat -w 1 (Netz?) → vmstat -i (Interrupt-Flut?).
lockstat erst, wenn die vier unauffällig sind.🌐Netzwerk
| ifconfig -a / ifconfig wm0 | Alle Schnittstellen / eine bestimmte |
| ifconfig wm0 inet 10.0.0.5/24 up | IP-Adresse zur Laufzeit setzen |
| ifconfig wm0 inet 10.0.0.6/32 alias | Zweite Adresse auf derselben Schnittstelle |
| ifconfig wm0 mtu 9000 | Jumbo Frames setzen (Switch muss mitspielen) |
| ifconfig wm0 media / ifconfig -m wm0 | Aktuelle Verbindung / alle unterstützten Medientypen |
| /etc/ifconfig.wm0 | Dauerhafte Konfiguration je Schnittstelle (eine Zeile je Befehl) |
| /etc/rc.conf: ifconfig_wm0="inet 10.0.0.5/24" | Alternative dauerhafte Konfiguration |
| /etc/rc.conf: dhcpcd=YES · /etc/mygate | DHCP aktivieren / Standard-Gateway hinterlegen |
| netstat -rn / netstat -rn -f inet6 | Routing-Tabelle IPv4 / IPv6 |
| route add -net 192.168.9.0/24 10.0.0.254 | Statische Route zur Laufzeit |
| route show / route -n get default | Routen anzeigen / Details zur Standardroute |
| /etc/rc.conf: static_routes="db" route_db="…" | Statische Routen dauerhaft |
| netstat -an -f inet | grep LISTEN | Lauschende Ports |
| sockstat -l (pkgsrc) bzw. fstat | grep internet | Offene Ports mit zugehörigem Prozess |
| arp -an / ndp -an | ARP- bzw. IPv6-Nachbar-Tabelle |
| ping -c4 host / ping6 -c4 host | Erreichbarkeit prüfen |
| traceroute host / tcpdump -ni wm0 port 443 | Pfad verfolgen / Verkehr mitlesen |
| ifconfig agr0 create && ifconfig agr0 agrport wm0 agrport wm1 | Link-Aggregation (LACP) einrichten |
| ifconfig vlan10 create vlan 10 vlanif wm0 | VLAN-Schnittstelle anlegen |
| brconfig bridge0 add wm0 add tap0 up | Bridge einrichten (NetBSD 9); ab 10 auch ifconfig bridge0 |
| sysctl -w net.inet.ip.forwarding=1 | Routing aktivieren (dauerhaft in /etc/sysctl.conf) |
Zwei Wege, ein Ziel: NetBSD akzeptiert sowohl
/etc/ifconfig.<if> als auch ifconfig_<if> in der
rc.conf. Im Team auf eine Variante einigen – sonst sucht der nächste
Kollege die Konfiguration an der falschen Stelle.🔒Firewall (npf & pf)
| /etc/rc.conf: npf=YES | npf beim Boot starten |
| npfctl validate /etc/npf.conf | Regelwerk prüfen, ohne es zu laden – immer zuerst! |
| npfctl reload / npfctl start / npfctl stop | Regeln laden / Filter aktivieren / deaktivieren |
| npfctl show / npfctl rule "block-in" list | Aktive Konfiguration / eine dynamische Regelgruppe |
| npfctl stats | Zähler: passiert, blockiert, Zustandstabelle |
| npfctl table "badhosts" add 1.2.3.4 | Adresse zur Tabelle hinzufügen |
| npfctl table "badhosts" list / del 1.2.3.4 | Tabelle anzeigen / Eintrag entfernen |
| npfctl save / npfctl load | Zustandstabelle über einen Neustart hinweg retten |
| tcpdump -n -i npflog0 | Protokollierte Pakete live mitlesen |
| /etc/rc.conf: pf=YES pflogd=YES | Alternative: pf verwenden (in NetBSD ebenfalls enthalten) |
| pfctl -nf /etc/pf.conf && pfctl -f /etc/pf.conf | pf-Regeln prüfen und laden |
| pfctl -sr -v / pfctl -ss / pfctl -si | Regeln mit Zählern / Zustände / Statistik |
| ipf -f /etc/ipf.conf ; ipfstat -hio | Ältere Systeme: IPFilter mit Regel-Trefferzählern |
Minimales /etc/npf.conf
$ext_if = "wm0"
table <badhosts> type ipset
alg "icmp"
group "external" on $ext_if {
pass stateful out final all
pass stateful in final proto tcp to $ext_if port ssh
pass stateful in final proto tcp to $ext_if port { http, https }
pass in final proto icmp icmp-type echo all
block in all
}
group default {
pass final on lo0 all
block all
}
Sperr dich nicht aus: Bei Fernwartung vor dem Laden einen
Notausstieg setzen:
echo "npfctl stop" | at now + 5 minutes. Nach
erfolgreichem Test mit atq und atrm wieder entfernen.📡Netzwerkdienste
| /etc/rc.conf: sshd=YES · /etc/rc.d/sshd reload | SSH aktivieren / Konfiguration neu laden |
| /etc/ssh/sshd_config · sshd -t | SSH-Konfiguration / Syntaxprüfung vor dem Reload |
| /etc/rc.conf: nfs_server=YES rpcbind=YES mountd=YES | NFS-Server aktivieren |
| /etc/exports · /etc/rc.d/mountd reload | Freigaben definieren / neu einlesen |
| showmount -e localhost / nfsstat -s | Freigaben prüfen / Serverstatistik |
| mount_nfs srv:/export /mnt | NFS-Freigabe einhängen |
| /etc/rc.conf: ntpd=YES ntpd_flags="-g" | Zeitdienst aktivieren, große Abweichung beim Start korrigieren |
| ntpq -pn / ntpdate -q zeitserver | Synchronisation prüfen / Abweichung messen |
| /etc/resolv.conf · /etc/hosts · /etc/nsswitch.conf | Namensauflösung und deren Reihenfolge |
| host example.com / dig example.com (pkgsrc) | DNS-Abfragen |
| /etc/inetd.conf · /etc/rc.d/inetd reload | Einfache Dienste über inetd bereitstellen |
| /etc/rc.conf: sendmail=NO postfix=YES | MTA umstellen (Postfix aus pkgsrc) |
| /etc/mail/aliases · newaliases | Root-Mails weiterleiten – unbedingt einrichten |
| iscsictl / iscsid (pkgsrc) | iSCSI-Initiator verwalten |
Dienst prüfen in drei Schritten:
/etc/rc.d/<name> status (läuft er?) →
netstat -an | grep <port> (lauscht er?) →
tail -50 /var/log/messages (was meldet er?).👤Benutzer, Gruppen & Rechte
| useradd -m -c "Max Muster" -G wheel -s /bin/sh max | Benutzer mit Homeverzeichnis und Gruppe anlegen |
| usermod -G wheel,operator max | Zusatzgruppen setzen (ersetzt die bisherigen!) |
| usermod -G $(id -Gn max | tr ' ' ',') ,neue max | Gruppe ergänzen, ohne bestehende zu verlieren |
| userdel -r max | Benutzer samt Homeverzeichnis entfernen |
| groupadd projekt / groupdel projekt | Gruppe anlegen / entfernen |
| usermod -e 20261231 max | Ablaufdatum des Kontos setzen |
| usermod -C yes max / usermod -C no max | Konto sperren / entsperren |
| passwd max / chpass max | Passwort ändern / Benutzereintrag bearbeiten |
| vipw · pwd_mkdb -p /etc/master.passwd | Benutzerdatenbank sicher bearbeiten / neu erzeugen |
| /etc/master.passwd · /etc/passwd · /etc/group | Benutzerdatenbank |
| /etc/usermgmt.conf | Vorgaben für useradd: Shell, Basisverzeichnis, Skel |
| /etc/login.conf · cap_mkdb /etc/login.conf | Login-Klassen mit Ressourcen-Limits |
| id max / groups max / last max | Kennungen / Gruppen / Anmeldehistorie |
| su - / doas (pkgsrc) / sudo (pkgsrc) | Root werden – su setzt Mitgliedschaft in wheel voraus |
| chmod 640 datei / chown max:staff datei | Rechte / Eigentümer setzen |
| chflags schg datei / chflags noschg datei | Datei unveränderbar machen / wieder freigeben |
| ls -lo datei | Dateiflags anzeigen |
| getfacl datei / setfacl -m u:max:rwx datei | ACLs (FFS mit Option acls mounten) |
securelevel beachten: Ab
kern.securelevel=1 lassen sich
schg-Flags im laufenden Betrieb nicht mehr entfernen und Rohzugriffe auf
gemountete Platten sind gesperrt. Rücknahme nur im Single-User-Modus.🖥Xen & Virtualisierung
| /boot.cfg: menu=Xen:load /netbsd-XEN3_DOM0 … | Dom0-Kernel im Bootmenü eintragen |
| /etc/rc.conf: xencommons=YES xendomains="dom1 dom2" | Xen-Dienste und automatisch startende Domänen |
| xl list / xl list -l dom1 | Laufende Domänen / Details einer Domäne |
| xl create /etc/xen/dom1.conf | Domäne starten |
| xl shutdown dom1 / xl destroy dom1 | Sauber herunterfahren / hart beenden |
| xl console dom1 | Auf die Konsole schalten (Strg+] zum Verlassen) |
| xl top / xl uptime | Ressourcenverbrauch aller Domänen / Laufzeiten |
| xl mem-set dom1 2048 | Speicher zur Laufzeit anpassen |
| xl vcpu-set dom1 4 / xl vcpu-list | Virtuelle CPUs zuweisen / anzeigen |
| xl save dom1 /var/xen/dom1.save / xl restore … | Zustand sichern und später fortsetzen |
| xl info / xl dmesg | Hypervisor-Informationen / dessen Meldungen |
| nvmm (NetBSD 9+) · qemu-system-x86_64 -accel nvmm | Eigener Hypervisor von NetBSD, von QEMU genutzt |
| modload nvmm ; nvmmctl identify | NVMM laden und Unterstützung prüfen |
Zwei Wege: Xen ist der klassische Weg mit Dom0/DomU-Trennung.
NVMM ist neuer, schlanker und arbeitet mit QEMU zusammen – ohne eigenen
Dom0-Kernel. Für einzelne Gastsysteme auf einem normalen Server ist NVMM
meist der einfachere Weg.
💾Backup & Wiederherstellung
| dump -0auf /backup/root.dump / | Vollsicherung eines FFS-Dateisystems |
| dump -1auf /backup/root.inc / | Inkrementell seit der letzten Sicherung niedrigerer Stufe |
| dump -0auf - / | gzip > /backup/root.dump.gz | Komprimiert wegschreiben |
| restore -rf /backup/root.dump | Komplett in ein leeres Dateisystem zurückspielen |
| restore -if /backup/root.dump | Interaktiv einzelne Dateien wählen (add, extract) |
| restore -tf /backup/root.dump | less | Inhalt ansehen, ohne zurückzuspielen |
| tar -czpf /backup/etc.tgz -C / etc usr/pkg/etc | Konfiguration schnell sichern |
| pax -rw -pe /srv /backup/srv | Verzeichnisbaum mit allen Attributen kopieren |
| rsync -aHAX --delete /srv/ bkp:/srv/ (pkgsrc) | Abgleich über das Netz |
| disklabel wd0 > /backup/wd0.label | Partitionslayout sichern – oft vergessen |
| gpt show wd0 > /backup/wd0.gpt | GPT-Layout dokumentieren |
| pkgin export > /backup/pkglist.txt | Paketliste für den Wiederaufbau sichern |
| pkgin import /backup/pkglist.txt | Pakete auf einem neuen System wiederherstellen |
| dd if=/dev/rwd0 of=/backup/mbr.bin bs=512 count=1 | Bootsektor sichern |
| installboot -v /dev/rwd0a /usr/mdec/bootxx_ffsv2 | Bootblock nach Wiederherstellung neu schreiben |
| amanda / bacula / restic (pkgsrc) | Zentrale Backup-Lösungen aus pkgsrc |
Wiederherstellung üben: Ein
dump ohne getesteten
restore ist kein Backup. Mindestens einmal jährlich auf einem
Testsystem durchspielen – inklusive Bootblock und Disklabel.📜Logs & Fehlersuche
| tail -f /var/log/messages | Wichtigstes System-Log live verfolgen |
| /var/log/messages · authlog · secure · cron | System, Anmeldungen, Sicherheit, Cron |
| /var/run/dmesg.boot | Kernel-Meldungen vom letzten Boot |
| /etc/syslog.conf · /etc/rc.d/syslogd reload | Protokollregeln / nach Änderung neu laden |
| logger -t test -p daemon.notice "Testmeldung" | Eigene Meldung erzeugen und die Konfiguration prüfen |
| /etc/newsyslog.conf · newsyslog -nv | Rotation konfigurieren / Trockenlauf |
| /etc/daily.conf · sh /etc/daily | Täglichen Prüfbericht konfigurieren / manuell ausführen |
| grep -iE 'error|panic|fail' /var/log/messages | tail -50 | Schneller Blick auf Fehler |
| dmesg | grep -iE 'error|timeout|retry' | Hardware-Probleme im Kernel-Log |
| atactl /dev/rwd0 smart status ; raidctl -s raid0 | Platten- und RAID-Zustand prüfen |
| savecore -v ; ls -l /var/crash | Kernel-Dump sichern und prüfen |
| gdb /netbsd /var/crash/netbsd.0.core | Dump analysieren (Kernel mit Debug-Symbolen nötig) |
| sysctl ddb.onpanic=1 · ddb: bt, ps, show registers | In-Kernel-Debugger bei Panik – bt liefert den Aufrufstapel |
| /etc/rc.conf: savecore=YES dumpdev=/dev/wd0b | Voraussetzung dafür, dass überhaupt ein Dump entsteht |
Bei Panik zuerst: Bildschirmfoto oder Abschrift der
Panik-Meldung samt
bt-Ausgabe. Ohne diese Zeilen ist ein Dump
später nur halb so viel wert.📄Wichtige Dateien & Pfade
| /etc/rc.conf · /etc/rc.conf.d/ | Zentrale Systemkonfiguration bzw. je Dienst |
| /etc/defaults/rc.conf | Alle Vorgabewerte mit Kommentaren – beste Referenz |
| /boot.cfg | Bootmenü, Timeout, Konsolenauswahl |
| /etc/fstab · /etc/sysctl.conf | Mounts und Swap / dauerhafte Kernel-Variablen |
| /etc/modules.conf | Beim Boot zu ladende Kernel-Module |
| /etc/ifconfig.<if> · /etc/mygate · /etc/myname | Netzwerk: Schnittstelle, Gateway, Hostname |
| /etc/npf.conf · /etc/pf.conf | Firewall-Regelwerke |
| /etc/raid0.conf · /etc/cgd/ | RAIDframe-Definitionen / Verschlüsselungsparameter |
| /etc/exports · /etc/inetd.conf | NFS-Freigaben / inetd-Dienste |
| /etc/daily.conf · /etc/security.conf · /etc/newsyslog.conf | Tägliche Berichte, Sicherheitsprüfungen, Rotation |
| /etc/login.conf · /etc/usermgmt.conf · /etc/ttys | Login-Klassen, Benutzer-Vorgaben, Konsolen |
| /etc/mk.conf | Bau-Optionen für Basis-System und pkgsrc |
| /usr/pkg/etc/ · /usr/pkg/share/examples/rc.d/ | pkgsrc-Konfiguration / mitgelieferte Startskripte |
| /var/db/pkg/ · /usr/pkgsrc/ | Paketdatenbank / Quellbaum |
| /usr/share/examples/ | Beispielkonfigurationen für fast alles im Basis-System |
| /etc/mail/aliases · newaliases | Root-Mails weiterleiten |
Dokumentation:
man afterboot listet Schritt für Schritt
auf, was nach einer Neuinstallation zu prüfen ist. Dazu man rc.conf,
man 5 npf.conf, man raidctl und man hier
(Verzeichnisstruktur).🛠Praxis-Workflows
Neue Platte einbinden (GPT + Wedge + FFS)
drvctl -r -a scsibus scsibus0 # Bus neu abtasten dmesg | tail # neuen Geraetenamen ablesen gpt create wd1 gpt add -t ffs -l data1 wd1 # nutzt den gesamten freien Platz dkctl wd1 listwedges # Wedge-Name merken, z.B. dk3 newfs -O2 /dev/rdk3 mkdir -p /data mount -o log /dev/dk3 /data echo "NAME=data1 /data ffs rw,log 1 2" >> /etc/fstab df -h /data
Defekte Platte im RAID-Spiegel ersetzen
raidctl -s raid0 # welche Komponente ist failed? raidctl -f /dev/wd1a raid0 # falls noch nicht als failed markiert # --- Platte physisch tauschen --- disklabel wd0 > /tmp/label # Layout der gesunden Platte disklabel -R -r wd1 /tmp/label # auf die neue uebertragen raidctl -R /dev/wd1a raid0 # Rekonstruktion starten raidctl -S raid0 # Fortschritt beobachten installboot -v /dev/rwd1a /usr/mdec/bootxx_ffsv2 # Bootblock nicht vergessen raidctl -P raid0 # Paritaet abschliessend pruefen
Dateisystem vergrößern
gpt show wd1 # ist hinter der Partition Platz frei? umount /data # resize_ffs braucht ungemountet gpt resize -i 1 wd1 # Partition auf Maximum ausdehnen dkctl wd1 makewedges # Wedge-Groesse aktualisieren fsck -y /dev/rdk3 # Pflicht vor dem Vergroessern resize_ffs -y /dev/rdk3 mount -o log /dev/dk3 /data df -h /data
Dateisystem voll – systematisch vorgehen
df -h ; df -hi # Platz oder Inodes erschoepft? du -h -d1 /var | sort -h | tail # groesste Verzeichnisse find /var -type f -size +100M -ls # einzelne grosse Dateien fstat | awk '$5=="-"' | head # geloeschte, noch offene Dateien ls -l /var/crash # alter Kernel-Dump? newsyslog -nv # rotiert die Rotation ueberhaupt?
Sicheres Update des Basis-Systems
uname -a ; sysctl kern.version # Ausgangslage dokumentieren cp /netbsd /netbsd.old # alten Kernel sichern dump -0auf /backup/root.dump / # vollstaendige Sicherung cd /usr/src && ./build.sh -O ../obj -T ../tools -U kernel=GENERIC cp ../obj/sys/arch/amd64/compile/GENERIC/netbsd /netbsd shutdown -r now # zuerst nur den Kernel testen # nach erfolgreichem Boot: ./build.sh -O ../obj -T ../tools -U install=/ etcupdate -s /usr/src/etc postinstall -s /usr/src/etc check # dann gezielt fix shutdown -r now
Dienst startet nicht – Fehlersuche
/etc/rc.d/nginx status # laeuft er ueberhaupt? grep nginx /etc/rc.conf # ist er aktiviert? sh -x /etc/rc.d/nginx start # Startskript mit Ablaufprotokoll tail -100 /var/log/messages # was meldet das System? netstat -an | grep '\.80' # belegt jemand anderes den Port? npfctl stats # blockiert die Firewall? rcorder /etc/rc.d/* | grep -n nginx # startet er zu frueh?