BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Relevante Dateien einer Kernel-Panic sichern

Mit Hilfe von bsdcrashtar können alle relevanten Dateien einer Kernelpanic gesichert werden. Diese können dann zum Beispiel auf einem anderen Rechner analysiert, einem Entwickler zur Verfügung gestellt oder archiviert werden. Im FreeBSD Portbaum findet man bsdcrashtar unter sysutils/bsdcrashtar:

# cd /usr/ports/sysutils/bsdcrashtar && make install clean

Führt man bsdcrashtar aus, werden alle relevanten Dateien (die core-Datei, der Kernel, alle geladenen Kernelmodule und alle im Backtrace erwähnten Quellcode-Dateien) der neusten Kernelpanic gesichert:

# bsdcrashtar
Archiving the crash to /var/crash/crash.15.tar.gz.

Mehr Informationen zu bsdcrashtar findet man in der Manpage bsdcrashtar(8).

 Permalink

Root-Partition im Single User Mode beschreibbar machen

Startet man ein FreeBSD-System im Single User Mode, so ist die root-Partition nur lesend ins System eingebunden. Möchte man die root-Parition nun beschreibbar ins System einbinden, so können dazu die -u und die -w Optionen von mount verwendet werden:

# mount 
/dev/ad0s1a on / (ufs, local, read-only)
devfs on /dev (devfs, local, multilabel)
# echo test > /test
cannot create /test: Read.only file system
# mount -uw /
# mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local, multilabel)
# echo test > /test
# cat /test
test

Mehr Informationen findet man in der Manpage mount(8).

 Permalink

pf-Logdatei auslesen

Benutzt man die pf-Firewall so können zum Beispiel alle geblockte Pakete aufgezeichet werden. Dazu muss auf FreeBSD der pf-Log-Mechanismus in der /etc/rc.conf aktiviert werden:

pflog_enable="YES"

Regeln in der pf-Konfiguration, die das Schlüsselwort log enthalten, zeichnen nun die Pakete auf, welche auf die Regel zutreffen:

block log all

Die Logdatei kann nun mit Hilfe von tcpdump(1) ausgelesen werden:

# tcpdump -n -e -ttt -r /var/log/pflog

Auch können die aufgezeichneten Pakete in Echtzeit betrachtet werden:

# tcpdump -n -e -ttt -i pflog0

Mehr Informationen findet man in der Manpage pflogd(8).

Comments (3)  Permalink

Superpages auf FreeBSD verwenden

Seit FreeBSD 7.2 können auf den Plattformen i386 und amd64 Superpages aktiviert werden. Dadurch kann FreeBSD mit grossen Seiten im virtuellen Speicher umgehen, was vor allem auf neueren Mehrkern-Prozessoren zu Leistungssteigerungen führen kann. Möchte man die Superpages aktivieren, fügt man folgende Zeile in der /boot/loader.conf ein und startet danach das System neu:

vm.pmap.pg_ps_enabled=1
Comments (1)  Permalink

Installierte Ports auf aktualisierte Versionen überprüfen

Mit Hilfe von pver werden alle installierten Ports mit dem Portindex verglichen und jene Ports aufgelistet von welchen eine neuere Version im Portbaum vorhanden ist. Im FreeBSD Portbaum findet man pver unter ports-mgmt/pver:

# cd /usr/ports/ports-mgmt/pver && make install clean

Zuerst muss vom aktuellen Portindex mit Hife von pver_dbgen eine Datenbank erstellt werden:

# pver_dbgen

Ist die Datenbank angelegt, können die installierten Ports mit der Index-Datenbank verglichen werden. In der zweiten Spalte wird die Version des installierten Ports, in der dritten Spalte die Version welche im Index vorhanden ist angezeigt:

# pver
portmaster                              2.10                    2.11
libxml2                                 2.7.3                   2.7.3_1
glib                                    2.20.4                  2.20.5
compat5x-i386                           5.4.0.8_9               5.4.0.8_11
gtk                                     2.16.5_1                2.16.6
pptpclient                              1.7.2                   1.7.2_2
help2man                                1.36.4_2                1.36.4_3
pinentry                                0.7.6                   0.7.6_1
subversion-freebsd                      1.6.4                   1.6.5
diablo-jdk                              1.6.0.07.02_3           1.6.0.07.02_5
firefox-3.6.a1,1                        is not in /usr/ports/INDEX
pulseaudio                              0.9.14_5                0.9.15_4
compat6x-i386                           6.4.604000.200810       6.4.604000.200810_3
opera-devel                             10.00.b2_1,1            10.00.b3_1,1
fortune-mod-hitchhiker-20050611         is not in /usr/ports/INDEX
libxul                                  1.9.0.11_1              1.9.0.13
smartmontools                           5.38_6                  5.38_7
pdfjam                                  1.21_1                  1.21_2
Comments (1)  Permalink

Port-Patches automatisch generieren

Ändert man einen FreeBSD -Port und möchte dazu Patches erstellen, welche im Port unter dem Verzeichnis files gespeichert werden, so muss man diese nicht unbedingt von Hand mit diff(1) erzeugen. Zuerst erstellt man von jeder Datei, die man verändern möchte, unterhalb des work/-Verzeichnisses eine Kopie mit der Endung .orig und bearbeitet das Original.

# cd /usr/ports/security/nss/work/nss-3.12.4/mozilla/security/nss/lib/nss/
# ls -l config.mk*
-rw-r-----  1 root  wheel  3181 30 Aug 22:27 config.mk
-rw-r-----  1 root  wheel  3182 11 Jun 02:55 config.mk.orig

Sind alle Änderungen gemacht, geht man in das Port-Verzeichnis und gibt make makepatch ein:

# cd /usr/ports/security/nss
# ls -l files
total 0
# make makepatch
/usr/bin/diff -ud ./cmd/modutil/modutil.h.orig ./cmd/modutil/modutil.h > /usr/ports/security/nss/files/patch-cmd__modutil__modutil.h
/usr/bin/diff -ud ./cmd/modutil/pk11.c.orig ./cmd/modutil/pk11.c > /usr/ports/security/nss/files/patch-cmd__modutil__pk11.c
/usr/bin/diff -ud ./cmd/platlibs.mk.orig ./cmd/platlibs.mk > /usr/ports/security/nss/files/patch-cmd__platlibs.mk
/usr/bin/diff -ud ./tests/common/init.sh.orig ./tests/common/init.sh > /usr/ports/security/nss/files/patch-tests__common__init.sh
/usr/bin/diff -ud ./lib/ckfw/dbm/ckdbm.h.orig ./lib/ckfw/dbm/ckdbm.h > /usr/ports/security/nss/files/patch-lib__ckfw__dbm__ckdbm.h
/usr/bin/diff -ud ./lib/ssl/config.mk.orig ./lib/ssl/config.mk > /usr/ports/security/nss/files/patch-lib__ssl__config.mk
/usr/bin/diff -ud ./lib/smime/config.mk.orig ./lib/smime/config.mk > /usr/ports/security/nss/files/patch-lib__smime__config.mk
/usr/bin/diff -ud ./lib/certdb/xauthkid.c.orig ./lib/certdb/xauthkid.c > /usr/ports/security/nss/files/patch-lib__certdb__xauthkid.c
/usr/bin/diff -ud ./lib/certdb/xbsconst.c.orig ./lib/certdb/xbsconst.c > /usr/ports/security/nss/files/patch-lib__certdb__xbsconst.c
/usr/bin/diff -ud ./lib/certdb/xconst.c.orig ./lib/certdb/xconst.c > /usr/ports/security/nss/files/patch-lib__certdb__xconst.c
/usr/bin/diff -ud ./lib/softoken/legacydb/cdbhdl.h.orig ./lib/softoken/legacydb/cdbhdl.h > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__cdbhdl.h
/usr/bin/diff -ud ./lib/softoken/legacydb/dbmshim.c.orig ./lib/softoken/legacydb/dbmshim.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__dbmshim.c
/usr/bin/diff -ud ./lib/softoken/legacydb/keydb.c.orig ./lib/softoken/legacydb/keydb.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__keydb.c
/usr/bin/diff -ud ./lib/softoken/legacydb/pcertdb.c.orig ./lib/softoken/legacydb/pcertdb.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__pcertdb.c
/usr/bin/diff -ud ./lib/softoken/legacydb/pk11db.c.orig ./lib/softoken/legacydb/pk11db.c > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__pk11db.c
/usr/bin/diff -ud ./lib/softoken/legacydb/keydbi.h.orig ./lib/softoken/legacydb/keydbi.h > /usr/ports/security/nss/files/patch-lib__softoken__legacydb__keydbi.h
/usr/bin/diff -ud ./lib/softoken/config.mk.orig ./lib/softoken/config.mk > /usr/ports/security/nss/files/patch-lib__softoken__config.mk
/usr/bin/diff -ud ./lib/nss/config.mk.orig ./lib/nss/config.mk > /usr/ports/security/nss/files/patch-lib__nss__config.mk
/usr/bin/diff -ud ./lib/freebl/config.mk.orig ./lib/freebl/config.mk > /usr/ports/security/nss/files/patch-lib__freebl__config.mk
/usr/bin/diff -ud ./lib/pk11wrap/secmodi.h.orig ./lib/pk11wrap/secmodi.h > /usr/ports/security/nss/files/patch-lib__pk11wrap__secmodi.h
/usr/bin/diff -ud ./Makefile.orig ./Makefile > /usr/ports/security/nss/files/patch-Makefile
# ls -l files
total 42
-rw-r--r--  1 root  wheel   434 30 Aug 22:29 patch-Makefile
-rw-r--r--  1 root  wheel   451 30 Aug 22:29 patch-cmd__modutil__modutil.h
-rw-r--r--  1 root  wheel  1448 30 Aug 22:29 patch-cmd__modutil__pk11.c
-rw-r--r--  1 root  wheel   635 30 Aug 22:29 patch-cmd__platlibs.mk
-rw-r--r--  1 root  wheel   341 30 Aug 22:29 patch-lib__certdb__xauthkid.c
-rw-r--r--  1 root  wheel   509 30 Aug 22:29 patch-lib__certdb__xbsconst.c
-rw-r--r--  1 root  wheel   481 30 Aug 22:29 patch-lib__certdb__xconst.c
-rw-r--r--  1 root  wheel   285 30 Aug 22:29 patch-lib__ckfw__dbm__ckdbm.h
-rw-r--r--  1 root  wheel   291 30 Aug 22:29 patch-lib__freebl__config.mk
-rw-r--r--  1 root  wheel   284 30 Aug 22:29 patch-lib__nss__config.mk
-rw-r--r--  1 root  wheel   301 30 Aug 22:29 patch-lib__pk11wrap__secmodi.h
-rw-r--r--  1 root  wheel   311 30 Aug 22:29 patch-lib__smime__config.mk
-rw-r--r--  1 root  wheel   296 30 Aug 22:29 patch-lib__softoken__config.mk
-rw-r--r--  1 root  wheel   333 30 Aug 22:29 patch-lib__softoken__legacydb__cdbhdl.h
-rw-r--r--  1 root  wheel   372 30 Aug 22:29 patch-lib__softoken__legacydb__dbmshim.c
-rw-r--r--  1 root  wheel   332 30 Aug 22:29 patch-lib__softoken__legacydb__keydb.c
-rw-r--r--  1 root  wheel   361 30 Aug 22:29 patch-lib__softoken__legacydb__keydbi.h
-rw-r--r--  1 root  wheel   341 30 Aug 22:29 patch-lib__softoken__legacydb__pcertdb.c
-rw-r--r--  1 root  wheel   353 30 Aug 22:29 patch-lib__softoken__legacydb__pk11db.c
-rw-r--r--  1 root  wheel   368 30 Aug 22:29 patch-lib__ssl__config.mk
-rw-r--r--  1 root  wheel   495 30 Aug 22:29 patch-tests__common__init.sh

Nun wurde von allen veränderten Dateien ein Patch im Verzeichnis files erstellt.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Fehlende Abhängigkeiten eines Ports anzeigen

Möchte man einen Port installieren, vorher aber herausfinden welche Ports als Abhängigkeiten dieses Ports installiert werden, so kann dies mit make missing im Portverzeichnis gemacht werden:

# cd /usr/ports/editors/openoffice.org-3
# make missing
sysutils/coreutils
devel/patch
archivers/p5-Archive-Zip
devel/apache-ant

Mehr Informationen zu den make-Targes des Portbaums findet man in der Manpage ports(7).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

FreeBSD Dokumentation über die Ports installieren

Die FreeBSD Dokumentation kann seit einiger Zeit auch über die Ports installiert werden:

# cd /usr/ports/misc/freebsd-doc-en/ && make install clean

Nun können die Formate ausgewählt werden, welche installiert werden sollen:

[ ] HTML        Single HTML file per document
[X] HTML_SPLIT  The default HTML format used on www.FreeBSD.org 
[X] PDF         PDF format
[ ] PS          PostScript format
[ ] TXT         Plain text

Danach ist die Dokumentation unter /usr/local/share/doc/freebsd/en_US.ISO8859-1 verfügbar. Möchte man lieber die deutsche Übersetzung installieren, kann dies über den Port misc/freebsd-doc-de gemacht werden. Alternativ kann die Dokumentation auch mit Hilfe von CVSup erstellt werden: http://www.chruetertee.ch/blog/archive/2008/10/07/lokale-kopie-der-freebsd-dokumentation.html

 Permalink

Minimale CPU Taktfrequenz im Batteriemodus festlegen

Verwendet man auf einem Laptop powerd und legt fest, dass die kleinste verfügbare CPU-Taktfrequenz im Batteriebetrieb verwendet werden soll, so kann das unter Umständen zu langsam sein:

# sysctl dev.cpu.0.freq
dev.cpu.0.freq: 500

Mit der sysctl-Variable debug.cpufreq.lowest kann deshalb die kleinste verfügbare Taktrate festgelegt werden:

# sysctl debug.cpufreq.lowest
debug.cpufreq.lowest: 500

Dazu müssen zuerst die verfügbaren Taktraten ausgelesen werden:

# sysctl dev.cpu.0.freq_levels
dev.cpu.0.freq_levels: 2500/35000 2187/30625 2000/27000 1750/23625 1600/21000 1400/18375 1200/16000 1050/14000 900/12000 800/14000 700/12250 600/10500 500/8750

Danach kann die minimale Frequenz festgelegt werden:

# sysctl debug.cpufreq.lowest=1200
debug.cpufreq.lowest: 500 -> 1200

Möchte man diese Einstellung dauerhaft speichern, so kann dazu ein Eintrag in /etc/sysctl.conf gemacht werden:

debug.cpufreq.lowest=1200
Comments (1)  Permalink

FreeBSD nur auf ZFS installieren

Möchte man FreeBSD auf einem System nur mit ZFS installieren, so kann man dazu von einer FreeBSD LiveFS CD -ROM oder DVD booten und den Fixit -> CDROM/DVD Modus wählen. Nun kann eine GUID-Partitionstabelle auf der Platte erstellt werden, auf der man FreeBSD mit ZFS installieren kann. Im folgenden Beispiel wird die ganze Festplatte für FreeBSD verwendet, wobei diese noch keine Daten enthält:

Fixit# gpart create -s GPT ad0
ad0 created

Zuerst wird eine Boot-Partition erstellt:

Fixit# gpart add -b 34 -s 128 -t freebsd-boot ad0
ad0p1 added

Mit dem restlichen Speicherplatz wird eine Partition für das ZFS erstellt:

Fixit# gpart show ad0
=>       34  156301421  ad0  GPT  (75G)
         34        128    1  freebsd-boot  (64K)
        162  156301293       - free -   (75G)
Fixit# gpart add -b 162 -s 156301293 -t freebsd-zfs ad0
ad0p2 added

Danach kann der Bootstrap-Code in der Bootpartition installiert werden:

Fixit# gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 ad0
ad0 has bootcode

Das erstellte Partitionsschema kann mit gpart show kontrolliert werden:

Fixit# gpart show ad0
=>       34  156301421  ad0  GPT  (75G)
         34        128    1  freebsd-boot  (64K)
        162  156301293    2  freebsd-zfs  (75G)

Als nächstes werden die für eine ZFS-Installation benötigten Kernelmodule geladen:

Fixit# kldload /mnt2/boot/kernel/opensolaris.ko
Fixit# kldload /mnt2/boot/kernel/zfs.ko

Danach wird auf der freien Partition ein ZFS-Pool namens rpool erstellt, von dem das System später gebootet wird:

Fixit# zpool create rpool /dev/ad0p2
Fixit# zpool set bootfs=rpool rpool

Darin werden nun die gewünschten ZFS-Dateisysteme erstellt:

Fixit# zfs create rpool/tmp
Fixit# zfs create rpool/usr
Fixit# zfs create rpool/var

Im ZFS-Pool wird danach ein Swap-Bereich erstellt, welcher im folgenden Beispiel 2GB gross ist:

Fixit# zfs create -V 2gb rpool/swap
Fixit# zfs set org.freebsd:swap=on rpool/swap
Fixit# zfs set checksum=off rpool/swap

Nun werden das Basissystem und der Kernel installiert:

Fixit# cd /dist/8.0-BETA2/base
Fixit# export DESTDIR=/rpool
Fixit# ./install.sh
You are about to extract the base distribution into /rpool - are you SURE
you want to do this over your installed system (y/n)? y
Fixit# cd ../kernels
Fixit# ./install.sh generic
Fixit# cd /rpool/boot
Fixit# cp -Rp GENERIC/* kernel/

Desweiteren müssen noch die FreeBSD-Quelldateien sowie die Manpages installiert werden:

Fixit# cd /dist/8.0-BETA2/src
Fixit# ./install.sh all
Extracting sources into /usr/src...
  Extracting source component: base
  Extracting source component: bin
  Extracting source component: cddl
  Extracting source component: contrib
  Extracting source component: crypto
  Extracting source component: etc
  Extracting source component: games
  Extracting source component: gnu
  Extracting source component: include
  Extracting source component: krb5
  Extracting source component: lib
  Extracting source component: libexec
  Extracting source component: release
  Extracting source component: rescue
  Extracting source component: sbin
  Extracting source component: secure
  Extracting source component: share
  Extracting source component: sys
  Extracting source component: tools
  Extracting source component: ubin
  Extracting source component: usbin
Done extracting sources.
Done extracting sources.
Fixit# cd ../manpages
Fixit# ./install.sh

Danach müssen die entsprechenden Einträge in rc.conf(5) sowie loader.conf(5) gemacht werden, so dass von einem ZFS-Dateisystem gebootet werden kann. Ausserdem muss der ZFS Support für den Bootloader in src.conf(5) gesetzt werden:

Fixit# echo 'zfs_enable="YES"' > /rpool/etc/rc.conf
Fixit# echo 'LOADER_ZFS_SUPPORT="YES"' > /rpool/etc/src.conf
Fixit# echo 'zfs_load="YES"' > /rpool/boot/loader.conf
Fixit# echo 'vfs.root.mountfrom="zfs:rpool"' >> /rpool/boot/loader.conf

Anschliessend kann die zpool.cache-Datei erstellt werden, indem der ZFS-Pool exportiert und wieder importiert wird:

Fixit# mkdir /boot/zfs
Fixit# zpool export rpool && zpool import rpool
Fixit# cp /boot/zfs/zpool.cache /rpool/boot/zfs/

Nun wird im neu installierten System der Bootloader mit ZFS-Support gebaut und installiert. Ausserdem wird eine leere fstab(5) erstellt, damit beim Booten keine Fehlermeldungen angezeigt werden:

Fixit# chroot /rpool
Fixit# mount -t devfs devfs /dev
Fixit# unset DESTDIR
Fixit# cd /usr/src/sys/boot/
Fixit# make obj
Fixit# make depend
Fixit# make
Fixit# cd i386/loader
Fixit# make install
Fixit# umount /dev
Fixit# touch /etc/fstab
Fixit# exit

Zuletzt wird noch festgelegt, wo die ZFS-Dateisysteme gemountet werden sollen. Damit die dynamisch gelinkten Programme danach noch funktionieren, muss zuerst die LD_LIBRARY_PATH -Umgebungsvariable richtig gesetzt werden:

Fixit# export LD_LIBRARY_PATH=/mnt2/lib
Fixit# zfs set mountpoint=legacy rpool
Fixit# zfs set mountpoint=/tmp rpool/tmp
Fixit# zfs set mountpoint=/var rpool/var
Fixit# zfs set mountpoint=/usr rpool/usr

Nun kann das System neu gestartet werden, welches danach von ZFS bootet. Ist das System gebootet, kann man sich als root ohne Passwort anmelden. Jetzt kann das System in der /etc/rc.conf konfiguriert werden sowie Benutzerkonten angelegt und das root-Passwort gesetzt werden.

Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Dieser Artikel wurde auf der Basis des FreeBSD Wiki Artikels ZFSOnRootWithZFSboot erstellt.

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
Alle Änderungen eines ZFS-Pools anzeigen
Automatisch ZFS Snapshots erstellen
ZFS Dateisystemoptionen verwenden
Comments (6)  Permalink
Prev Next71-80/305