BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

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

RSS-Feed der zuletzt gebauten Ports einer Tinderbox

Seit der Tinderbox Version 3.1 können die zuletzt gebauten Ports auch als RSS-Feeds aboniert werden. Dazu kann folgende URL mit einem RSS-Reader aufgerufen werden. Ab sofort werden dann alle gebauten Ports und deren Status im RSS-Reader angezeigt: http://<Tinderbox URL>/tb/index.php?action=latest_buildports_rss

Related Entries:
Tinderbox aufräumen
Wartezeit von tinderd ändern
Quellcode in der Tinderbox speichern
Tinderbox-Jail ohne Kompilieren erstellen
Port-Optionen in der Tinderbox verwenden
 Permalink

Port-Optionen in der Tinderbox verwenden

Möchte man Optionen für Ports verwenden, so können diese entweder global, per Jail, per Portbaum oder per Build gesetzt werden. Dazu können die Optionen unter /usr/local/tinderbox/scrips/etc/env in die entsprechende Datei geschrieben werden. Für globale Optionen verwendet man die Datei GLOBAL. Für Optionen per Jail verwendet man die Datei jail.<Jailname>, für Optionen per Portbaum die Datei portstree.<Portsbaumname> oder für Optionen per Build die Datei build.<buildname>:

# cd /usr/local/tinderbox/scripts/etc/env && cat build.6-FreeBSD-NO
export NOPORTDOCS=yes
export NOPORTEXAMPLES=yes
export NOPORTDATA=yes

Nun werden die Ports mit den entsprechenden Optionen gebaut. Besitzt der zu bauende Port ein OPTIONS-Menü, so können diese Optionen aus dem Menü pro Port gesetzt werden. Dazu muss zuerst ein entsprechendes Verzeichnis pro Build erstellt werden:

# mkdir -p /usr/local/tinderbox/options/<Buildnamen>

Nun kann eine Datei mit den Portoptionen unter /usr/local/tinderbox/options/<Build>/<Port>/options erstellt werden:

# cat /usr/local/tinderbox/options/6-FreeBSD/swaks/options
_OPTIONS_READ=swaks-20061116.0
WITH_PERL_NET_DNS=true
WITH_PERL_NET_SSLEAY=true
WITH_PERL_AUTHEN_NTLM=true

Nun müssen die Optionen noch aktiviert werden. Dies muss allerdings nur das erste Mal gemacht werden. Danach werden die Ports automatisch mit den konfigurierten Optionen gebaut.

# cd /usr/local/tinderbox/scripts && ./tc configOptions -e
# ./tc configOptions -o /options

Mehr Informationen zur Tinderbox findet man auf der Homepage http://tinderbox.marcuscom.com/.

Related Entries:
Tinderbox aufräumen
Wartezeit von tinderd ändern
Quellcode in der Tinderbox speichern
Tinderbox-Jail ohne Kompilieren erstellen
RSS-Feed der zuletzt gebauten Ports einer Tinderbox
 Permalink

Ports testen und Pakete erstellen mit einer Tinderbox Version 3.2

Mit einer Tinderbox können FreeBSD Ports getestet und Pakete aus den Ports erstellt werden. Möchte man Ports für FreeBSD-7.1, FreeBSD 7-STABLE oder FreeBSD 8-CURRENT testen, muss man auch eine solche Version installiert haben, da sich Aufgrund von ABI Änderungen, diese Versionen nicht mit FreeBSD-6.x testen lassen. Die Tinderbox Version 3.2 findet man in den aktuellen FreeBSD Ports unter ports-mgmt/tinderbox.:

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

Im Konfigurationsmenü kann danach ausgewählt werden, was für eine Datenbank und was für ein Webserver verwendet wird und ob cvsup oder csup zum Aktualisieren der Quelldateien verwendet werden soll. Im folgenden Beispiel wird mySQL als Datenbank und ein Apache Webserver verwendet.

[ ] PGSQL           With pgsql
[X] MYSQL           With mysql
[X] CSUP            Use csup for updates
[ ] CVSUP           Use cvsup for updates
[X] WEBUI           Install web interface
[X] APACHE          Use Apache for web interface
[ ] LIGHTTPD        Use LightHTTPD for web interface
[X] CHECK_FOR_ROOT  Check it ./tc is run by uid 0 

Ist noch kein Datenbank-Server installiert, muss dieser auch noch installiert werden:

# cd /usr/ports/databases/mysql50-server && make install clean

Nun kann die Webserverkonfiguration den eigenen Wünschen angepasst werden:

# vi /usr/local/etc/apache/httpd.conf

Sollen die Datenbank und der Webserver bei einem Systemstart automatisch gestartet werden, müssen die benötigten Einträge in /etc/rc.conf gemacht werden:

mysql_enable="YES"
apache_enable="YES"

Nun können mySQL und der Apache gestartet werden:

# /usr/local/etc/rc.d/apache.sh start
# /usr/local/etc/rc.d/mysql-server start

Danach kann mit der Konfiguration der Tinderbox begonnen werden:

# cd /usr/local/tinderbox/scripts && ./tc Setup

Dabei müssen verschieden Angaben gemacht werden:

Welcome to the Tinderbox Setup script.  This script will guide you through
some of the automated Tinderbox setup steps.  Once this script completes ,
you should review the documentation in /usr/local/tinderbox/scripts/README
or on the web at http://tinderbox.marcuscom.com/ to complete your setup.

Hit <ENTER> to get started: <Enter>
INFO: Checking prerequisites ...
DONE.

INFO: Creating default configuration files ...
DONE.

INFO: Beginning database configuration.
Enter database driver (mysql pgsql): mysql
Does this host have access to connect to the Tinderbox database as a database administrator? (y/N)y
Enter database admin user [root]:<Benutzer>
Enter database host [localhost]:<DB Server>
Enter database name [tinderbox]:<Datenbankname>

Are these settings corrrect:
    Database Administrative User : root
    Database Host                : localhost
    Database Name                : tinderbox
(y/N)y
Do you want to cache root's password, and pass it to subsequent database command calls (note: this presents a security risk) (y/N) ?y
Enter root's password : <Passwort>
Confirm password for root : <Passwort>
INFO: Checking for prerequisites for mysql database driver ...
DONE.

Enter the desired username for the Tinderbox database : <Benutzername>
Enter the desired password for tinderbox : <Passwort>
Confirm password for tinderbox : <Passwort>
Are these the settings you want:
    Database username      : tinderbox
    Database user password : ****
(y/N) y
INFO: Checking to see if database tinderbox already exists on localhost ...
The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort> INFO: Database tinderbox does not exist.  Creating tinderbox on localhost
...
INFO: Creating user tinderbox on host localhost (if required) ...
DONE.

The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort>
INFO: Loading Tinderbox schema into tinderbox ...
The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort>
INFO: Adding permissions to tinderbox for tinderbox ...
The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort>
DONE.

INFO: Database configuration complete.

Congratulations!  The scripted portion of Tinderbox has completed successfully.
You should now verify the settings in /usr/local/tinderbox/scripts/tinderbox.ph
are correct for your environment, then run "/usr/local/tinderbox/scripts/tc
init" to complete the setup.  Be sure to checkout
http://tinderbox.marcuscom.com/ for further instructions

In der Datei /usr/local/tinderbox/scripts/tinderbox.ph müssen noch einige Variablen ausgefüllt werden:

# Configurable options
$TINDERBOX_HOST  = '<URL der Tinderbox>';
$TINDERBOX_URI   = '/tb';
$SUBJECT         = '<Betreff einer Tinderbox Mail>';
$SENDER          = '<Senderadresse>';
$SMTP_HOST       = '<Mailserver>';

Danach müssen noch zwei PHP Scripts kopiert und angepasst werden:

# cp /usr/local/tinderbox/scripts/webui/inc_ds.php.dist /usr/local/tinderbox/scripts/webui/inc_ds.php
# cp /usr/local/tinderbox/scripts/webui/inc_tinderbox.php.dist /usr/local/tinderbox/scripts/webui/inc_tinderbox.php

Einträge in der /usr/local/tinderbox/scripts/webui/inc_ds.php:

$DB_DRIVER = 'mysql';
#$DB_DRIVER = 'pgsql';
$DB_HOST = '<DB Server>';
$DB_NAME = '<DB Name>';
$DB_USER = '<DB User>';
$DB_PASS = '<DB Passwort>';

Einträge in der /usr/local/tinderbox/scripts/webui/inc_tinderbox.php. Möchte man das paefchen-Webui-Frontend verwenden, so kann die template_dir-Variable auf 'paefchen' gesetzt werden:

$tinderbox_name  = '<Tinderbox Name>';
$tinderbox_title = '<Tinderbox Titel>';
[...]
# Comment out the next line, and uncomment the line after it to enable
# the paefchen frontend template.
#$template_dir   = 'default';
$template_dir   = 'paefchen'

Jetzt kann die Tinderbox initialisiert werden:

# cd /usr/local/tinderbox/scripts && ./tc init
Enter a default cvsup host [cvsup12.FreeBSD.org]: <CVSup Server>
Enter a default update type or command [CSUP]: Enter
Default update host and type have been set.  These can be changed later by
modifying /usr/local/tinderbox/scripts/etc/env/GLOBAL.

Möchte man die Tinderbox über das Web-GUI steuern, muss noch der tinderd Dienst aktiviert werden:

# echo 'tinderd_enable="YES"' >> /etc/rc.conf
# echo 'tinderd_directory="/usr/local/tinderbox/scripts"' >> /etc/rc.conf
# echo 'tinderd_flags="-nullfs"' >> /etc/rc.conf
# /usr/local/etc/rc.d/tinderbox start

Nun muss noch ein Benutzer für das Web-GUI erstellt werden:

# cd /usr/local/tinderbox/scripts && ./tc addUser -u <Benutzername> -e <E-Mailadresse> -p <Passwort> -w
# ./tc setWwwAdmin -u <Benutzername>

Nun müssen noch die Einträge in der /usr/local/etc/apache/httpd.conf gemacht werden:

 Alias /tb/logs/ "/usr/local/tinderbox/logs/"
 Alias /tb/packages/ "/usr/local/tinderbox/packages/"
 Alias /tb/errors/ "/usr/local/tinderbox/errors/"
 Alias /tb/ "/usr/local/tinderbox/scripts/webui/"
 <Directory "/usr/local/tinderbox/">
         Order allow,deny
         Allow from all
 </Directory>

Danach kann der Apache neu gestartet werden:

# /usr/local/etc/rc.d/apache.sh restart

Als erstes wird ein Portbaum mit der Bezeichnung FreeBSD erstellt:

# cd /usr/local/tinderbox/scripts
# ./tc createPortsTree -p FreeBSD -u CSUP -d "FreeBSD ports tree" -w http://www.freebsd.org/cgi/cvsweb.cgi/ports/

Mit einer Tinderbox können Packet für verschieden FreeBSD Versionen erstellt werden. Folgender Befehl erstellt eine Tinderbox-Jail für FreeBSD 6.4:

# ./tc createJail -j 6.4 -d "FreeBSD 6.4" -t RELENG_6_4

Nun wird der Tinderbox-Jail dem Portbaum zugewiesen:

# ./tc createBuild -b 6.4-FreeBSD -j 6.4 -p FreeBSD -d "6.4-RELEASE with FreeBSD ports tree"

Es können nun auch weiter Tinderbox-Jails mit anderen FreeBSD Versionen und unterschiedliche Portbäume erstellt werden.

Danach können schon Ports, in diesem Beispiel www/fluxcms, getestet und Pakete dafür erstellt werden:

# ./tc addPort -b 6.4-FreeBSD -d www/fluxcms
# ./tc tinderbuild -nullfs -b 6.4-FreeBSD www/fluxcms

Die Logdateien und die Pakete können ganz einfach über das Web-GUI gefunden werden. Dieses ist über http://tinderboxserver/tb/ erreichbar.

Auch lassen sich bestehende Portbaume aktualisieren. Folgender Befehl aktualisiert den Portbaum welcher FreeBSD benannt wurde:

# ./tc updatePortsTree -p FreeBSD

Mehr Informationen zur Tinderbox findet man auf der Homepage http://tinderbox.marcuscom.com/. Eine Installationsanleitung für die Tinderbox Version 2.4.x findet man hier: http://www.chruetertee.ch/blog/archive/2007/11/10/ports-testen-und-pakete-erstellen-mit-einer-tinderbox.html

Related Entries:
Tinderbox aufräumen
Wartezeit von tinderd ändern
Quellcode in der Tinderbox speichern
Tinderbox-Jail ohne Kompilieren erstellen
RSS-Feed der zuletzt gebauten Ports einer Tinderbox
 Permalink

Festplatte mit recoverdisk kopieren

Mit Hilfe von recoverdisk lässt sich der Inhalt einer Festplatte auf eine andere Festplatte kopieren. Kann dabei ein Block nicht gelesen werden, wird der Block übersprungen, am Schluss jedoch nochmals mit einer kleineren Blockgrösse gelesen. Im folgenden Beispiel wird die Festplatte da2 auf da3 kopiert:

# recoverdisk /dev/da2 /dev/da3
        start    size     block-len state          done     remaining    % done
  36419141632  933376        933376     0   36420075008             0 100.00000
Completed

Auch lässt sich der Inhalt einer Partition in eine Datei kopieren. Dazu muss zuerste eine entsprechende Datei angelegt werden:

# touch /usr/ad4s3e.dump
# recoverdisk /dev/ad4s3e /usr/ad4s3e.dump
        start    size     block-len state          done     remaining    % done
    101711872 1048576     435159040     0     101711872     435159040  18.94531

Ist das Kopieren abgeschlossen, kann die in eine Datei kopierte Partition z.B. nur lesend ins System gemountet werden:

# recoverdisk /dev/ad4s3e /usr/ad4s3e.dump
        start    size     block-len state          done     remaining    % done
    535822336 1048576       1048576     0     536870912             0 100.00000
Completed
# mdconfig -a -t vnode -f /usr/ad4s3e.dump -u 0
# mount -o ro /dev/md0 /mnt

Werden die kopierten Daten nicht mehr benötigt, können diese wieder aus dem System entfernt werden:

# umount /mnt
# mdconfig -d -u 0

Seit FreeBSD 7.0 findet man recoverdisk im FreeBSD -Basissystem. Mehr Informationen zu recoverdisk findet man in der Manpage recoverdisk(1).

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

Informationen zu einem UFS-Dateisystem anzeigen

Möchte man herausfinden, mit welchen newfs-Optionen ein UFS-Dateisystem angelegt wurde, so kann die -m Option von dumpfs verwendet werden:

# dumpfs -m /tmp
newfs command for /tmp (/dev/ad4s3e)
newfs -O 2 -U -a 8 -b 16384 -d 16384 -e 2048 -f 2048 -g 16384 -h 64 -m 8 -o time -s 262144 /dev/ad4s3e

Ruft man dumpfs ohne Optionen auf, werden ausführliche Informationen zu allen Zylindergruppen und zum Superblock angezeigt. Im FreeBSD Basissystem ist dumpfs bereits enthalten. Mehr Informationen zu dumpfs findet man in der Manpage dumpfs(8).

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

Alle Änderungen eines ZFS-Pools anzeigen

Mit Hilfe von zpool history können alle Befehle, die auf einen ZFS-Pool angewandt wurden, angezeigt werden:

# zpool history
History for 'tank':
2008-09-05.21:11:04 zpool create tank /dev/ad0s2
2008-09-05.21:12:33 zfs create tank/src
2008-09-05.21:12:36 zfs create tank/obj
2008-09-05.21:12:40 zfs create tank/ports
2008-09-05.21:12:55 zfs set mountpoint=/usr/src tank/src
2008-09-05.21:13:02 zfs set mountpoint=/usr/obj tank/obj
2008-09-05.21:13:12 zfs set mountpoint=/usr/ports tank/ports
2008-09-07.23:40:01 zfs set compression=gzip tank/src
2008-09-06.19:20:01 zfs snapshot tank/ports@upgrade
2008-09-10.21:22:05 zfs destroy tank/ports@upgrade
2008-09-29.18:30:44 zfs create tank/doc
2008-09-29.18:30:58 zfs set mountpoint=/usr/doc tank/doc
2008-09-29.18:32:45 zfs set compression=lzjb tank/doc

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

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Automatisch ZFS Snapshots erstellen
ZFS Dateisystemoptionen verwenden
Comments (1)  Permalink

Coredump analysieren

Benutzer der kommenden FreeBSD Versionen 6.4 und 7.1 können mit Hilfe von crashinfo automatisch einen Coredump nach einem Absturz analysieren. Dazu muss ein coredump in /var/crash vorhanden sein:

# ls /var/crash/
bounds          info.0          minfree         vmcore.0

Sind mehrere Coredumps vorhanden wird der aktuellste Coredump analysiert. Wird crashinfo aufgerufen, werden automatisch Debuggerinformationen und Systeminformationen zur Zeit des Absturzes mit Hilfe von ps, vmstat, pstat, iostat, ipcs, nfsstat, netstat, fstat und dmesg aus dem Coredump ausgelesen und in einer Textdatei gespeichert:

# crashinfo
Writing crash summary to /var/crash/core.txt.0.

Eine Beispielausgabe von crashinfo findet man hier: core.txt.0. Mehr Informationen zu crashinfo findet man in der Manpage crashinfo(8).

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

Automatisch ZFS Snapshots erstellen

Verwendet man das ZFS Dateisystem, können mit zfs-snapshot-mgmt regelmässig automatisch ZFS Snapshots erstellt werden. Im FreeBSD Portbaum findet man zfs-snapdhot-mgmt unter sysutils/zfs-snapshot-mgmt:

# cd /usr/ports/sysutils/zfs-snapshot-mgmt && make install clean

Nun kann unter /usr/local/etc/zfs-snapshot-mgmt.conf eine Konfiguration erstellt werden, in der festgelegt wird, wann Snapshots erstellt werden sollen, wie lange die verschiedenen Snapshots erhalten bleiben sollen und wann sie dementsprechend automatisch wieder gelöscht werden:

# Automatic ZFS snapshot management configuration file
#
# This is a YAML file (see http://www.yaml.org)
# Use exactly 2 spaces for each indentation level
#
snapshot_prefix: auto-
filesystems:
  tank/home:
    # Create snapshots every 10 minutes, starting at midnight
    creation_rule:
      at_multiple: 10
      offset: 0
    # Keep all snapshots for the first 90 minutes,
    # then only those that were created at 30 minute intervals for 12 hours
    # (after snapshot creation),
    # then only those that were created at 3 hour intervals, counting at 2:00
    # (i.e. 2:00, 5:00, 8:00, 11:00, 14:00, 17:00, 20:00, 23:00)
    # for 7 days
    preservation_rules:
      - { for_minutes:    90, at_multiple:    0, offset:    0 }
      - { for_minutes:   720, at_multiple:   30, offset:    0 }
      - { for_minutes: 10080, at_multiple:  180, offset:  120 }
  tank/ports:
    # Create snapshots every 24 hours, starting at 20:00.
    creation_rule:
      at_multiple: 1440
      offset: 1200
    # Keep daily snapshots created at 20:00 (in this case all).
    preservation_rules:
      - { for_minutes: 5760, at_multiple: 1440, offset: 1200 }

Ist die Konfiguration erstellt, kann der benötigte crontab-Eintrag gemacht werden, so dass die Snapshots automatisch erstellt und gelöscht werden:

# echo "*/5 * * * *       root   /usr/local/bin/zfs-snapshot-mgmt" >> /etc/crontab

Die aktuell vorhandenen Snapshots können mit zfs list angezeigt werden:

# zfs list
NAME                               USED  AVAIL  REFER  MOUNTPOINT
tank                              3,06G  11,6G    18K  /tank
tank/home                          982M  11,6G   770M  /usr/home
tank/home@auto-2008-09-06_10.00   65,3M      -   682M  -
tank/home@auto-2008-09-07_11.00   54,4M      -   682M  -
tank/home@auto-2008-09-07_16.00       0      -   682M  -
tank/home@auto-2008-09-07_21.00       0      -   682M  -
tank/home@auto-2008-09-08_22.00       0      -   682M  -
tank/home@auto-2008-09-09_13.00       0      -   682M  -
tank/home@auto-2008-09-09_18.00       0      -   682M  -
tank/home@auto-2008-09-09_23.00       0      -   682M  -
tank/home@auto-2008-09-10_09.00       0      -   682M  -
tank/home@auto-2008-09-10_14.00       0      -   682M  -
tank/home@auto-2008-09-11_00.00       0      -   682M  -
tank/home@auto-2008-09-11_10.00       0      -   682M  -
tank/home@auto-2008-09-11_15.00     36K      -   682M  -
tank/home@auto-2008-09-12_09.00    286K      -   746M  -
tank/home@auto-2008-09-12_09.30    247K      -   746M  -
tank/home@auto-2008-09-12_10.00     49K      -   763M  -
tank/home@auto-2008-09-12_10.30       0      -   763M  -
tank/home@auto-2008-09-12_11.00       0      -   763M  -
tank/home@auto-2008-09-12_11.30       0      -   763M  -
tank/home@auto-2008-09-12_12.00       0      -   763M  -
tank/home@auto-2008-09-12_12.30       0      -   763M  -
tank/home@auto-2008-09-12_13.00       0      -   763M  -
tank/home@auto-2008-09-12_13.30     29K      -   770M  -
tank/home@auto-2008-09-12_14.00       0      -   770M  -
tank/home@auto-2008-09-12_14.30       0      -   770M  -
tank/home@auto-2008-09-12_14.50       0      -   770M  -
tank/home@auto-2008-09-12_15.00       0      -   770M  -
tank/home@auto-2008-09-12_15.10       0      -   770M  -
tank/home@auto-2008-09-12_15.20       0      -   770M  -
tank/home@auto-2008-09-12_15.30       0      -   770M  -
tank/home@auto-2008-09-12_15.40       0      -   770M  -
tank/home@auto-2008-09-12_15.50       0      -   770M  -
tank/home@auto-2008-09-12_16.00       0      -   770M  -
tank/home@auto-2008-09-12_16.10       0      -   770M  -
tank/obj                          1,62G  11,6G  1,62G  /usr/obj
tank/ports                         800M  11,6G   800M  /usr/ports
tank/ports@auto-2008-09-09_10.00    36K      -   493M  -
tank/src                           493M  11,6G   493M  /usr/src

Mehr Informationen findet man in der Manpage zfs-snapshot-mgmt(8). Eine Einführung in das Arbeiten mit ZFS und ZFS Snapshots findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Alle Änderungen eines ZFS-Pools anzeigen
ZFS Dateisystemoptionen verwenden
Comments (2)  Permalink

ZFS Dateisystemoptionen verwenden

Mit UFS können auf FreeBSD verschiedene Mount-Optionen angegeben werden, mit welchen eine Partition gemountet werden kann. So kann das Schreiben der Zugriffszeit mit noatime, das Ausführen von Programmen mit noexec und das Verwenden des setuid-Bit mit der nosuid Option verhindert werden:

# mount -o noatime,noexec,nosuid /dev/da0s1d /tmp

Diese Optionen können auch mit ZFS gesetzt werden. Dazu muss zuerst ein ZFS Dateisystem vorhanden sein:

# zfs create tank/beat
# zfs set mountpoint=/home/beat tank/beat

Bei jeder Datei wird die Zeit des letzten Zugriffs festgehalten. Werden diese Daten nicht benötigt, kann dies deaktiviert werden, was unter anderem auf Dateisystemen mit viel Dateizugriffen die Performance verbessern kann:

# cd /home/beat
# echo test > datei
# stat -f "access: %Sa" datei
access: Aug 26 19:44:07 2008
# cat datei
test
# stat -f "access: %Sa" datei
access: Aug 26 19:44:20 2008
# zfs set atime=off tank/beat
# cat datei
test
# stat -f "access: %Sa" datei
access: Aug 26 19:44:20 2008

Auch kann verhindert werden, dass innnerhalb eines ZFS Dateisystemes Programme ausgeführt werden:

# cp -p /sbin/ping /home/beat/
# ./ping -c 1 localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.080 ms

--- localhost ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.080/0.080/0.080/0.000 ms
# zfs set exec=off tank/beat
# ./ping -c 1 localhost
./ping: Permission denied.

Zusätzlich lässt sich auch das setuid-Bit innerhalb eines ZFS Dateisystemes deaktivieren:

# cp -p /usr/bin/passwd /home/beat
# su - beat
$ ./passwd
Changing local password for beat
Old Password:
New Password:
Retype New Password:
$ exit
# zfs set setuid=off tank/beat 
# su - beat
$ ./passwd
Old Password:
passwd: sorry

Mehr Informationen zu ZFS findet man in der Manpage zfs(8). Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Alle Änderungen eines ZFS-Pools anzeigen
Automatisch ZFS Snapshots erstellen
Comments (1)  Permalink
Prev Next31-40/125