BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

FreeBSD mit einer GUID Partitionstabelle installieren

Ab dem FreeBSD 7.1-Release lässt sich FreeBSD mit Hilfe einer GUID Partitionstabelle anstatt des MBR starten. Damit lassen sich bis zu 128 Partitionen erstellen. Auch lassen sich Partitionen erstellen, welche grösser als 2TB sind.

Um FreeBSD mit einer GUID Partitionstabelle zu installieren, kann man zum Beispiel die FreeBSD-Installations DVD booten und dann den Fixit-Modus und das Live-Dateisystem der CDROM/DVD wählen. Im folgenden Beispiel wird die FreeBSD Installation mit einer GUID Partitionstabelle auf der Disk /dev/ad0 vorgenommen.

# ls /dev/ad0
/dev/ad0

Nun wird als erstes eine GUID Partitionstabelle auf die Disk geschrieben. Mit der -f Option wird ein allfällig vorhandenes Master Boot Record überschrieben:

# gpt create -f ad0

Danach wird das Booten von einer GUID Partitionstabelle ermöglicht. Dabei werden die Bootloader von der Installations-DVD installiert:

# gpt boot -b /dist/boot/pmbr -g /dist/boot/gptboot ad0

Jetzt können die verschiedenen Partitionen erstellt werden. Die Grösse, welche mit der -s Option angegeben wird, wird dabei in Anzahl Blocks (standardmässig 512B) angegeben. Im folgenden Beispiel wird eine 1GB grosse Root-Partition erstellt. Danach wird eine 1GB grosse Swap Partition, eine 1GB grosse Partition für /tmp und eine 2GB grosse Partition für /var erstellt. Mit dem restlichen Speicherplatz wird eine Partition erstellt, auf welcher /usr gemountet wird:

# gpt add -t ufs -s 2097152 ad0
# gpt add -t swap -s 2097152 ad0
# gpt add -t ufs -s 2097152 ad0
# gpt add -t ufs -s 4194304 ad0
# gpt add -t ufs ad0

Nun kann die Partitionstabelle mit dem show Kommando verifiziert werden:

# gpt show ad0
     start      size  index  contents
         0         1         PMBR
         1         1         Pri GPT header
         2        32         Pri GPT table
        34       128      1  GPT part - FreeBSD boot
       162   2097152      2  GPT part - FreeBSD UFS/UFS2
   2097314   2097152      3  GPT part - FreeBSD swap
   4194466   2097152      4  GPT part - FreeBSD UFS/UFS2
   6291618   4194304      5  GPT part - FreeBSD UFS/UFS2
  10485922   6291261      6  GPT part - FreeBSD UFS/UFS2
  16777183        32         Sec GPT table
  16777215         1         Sec GPT header

Einzelne Partitionen können, falls nötig, wieder entfernt werden. Dabei wird der Index der zu entfernenden Partition mit der -i Option angegeben:

# gpt remove -i 3 ad0

Die ganze Partitionstabelle kann, falls gewünscht, mit dem destroy Kommando wieder entfernt werden:

# gpt destroy ad0

Nun kann auf allen Partitionen ein Dateisystem erstellt werden:

# newfs -U /dev/ad0p2
# newfs -U /dev/ad0p4
# newfs -U /dev/ad0p5
# newfs -U /dev/ad0p6

Danach wird die Root-Partition nach /mnt gemountet. Ausserdem werden die Verzeichnisse für die restlichen Partitionen erstellt und entsprechend gemountet:

# mount /dev/ad0p2 /mnt
# mkdir /mnt/tmp
# mkdir /mnt/var
# mkdir /mnt/usr
# mount /dev/ad0p4 /mnt/tmp
# mount /dev/ad0p5 /mnt/var
# mount /dev/ad0p6 /mnt/usr

Nun wechselt man ins base Verzeichnis der Installations-DVD und setzt die DESTDIR Variable auf die gemountete Festplatte:

# cd /mnt2/7.1-RELEASE/base
# DESTDIR=/mnt
# export DESTDIR

Jetzt kann das Basissystem und der GENERIC -Kernel installiert werden:

# ./install.sh
You are about to extract the base distribution into /mnt/ -
are you SURE you want to do this over your installed system (y/n) y
# cd ../kernels
# ./install.sh GENERIC
# cd /mnt/boot
# mv GENERIC kernel

Nachdem die Installation abgeschlossen wurde, wird eine entsprechende fstab erstellt:

# cd /mnt/etc
# vi fstab
/dev/ad0p3      none    swap    sw      0       0
/dev/ad0p2      /       ufs     rw      1       1
/dev/ad0p4      /tmp    ufs     rw      2       2
/dev/ad0p6      /usr    ufs     rw      2       2
/dev/ad0p5      /var    ufs     rw      2       2

Zu guter Letzt werden die gemounteten Partitionen geunmountet und der Fixit-Modus verlassen:

# umount /mnt/usr
# umount /mnt/var
# umount /mnt/tmp
# cd && umount /mnt
# exit

Nachdem der Rechner neu gebootet wurde, startet das installierte FreeBSD und kann nun konfiguriert werden. Mehr Informationen zur GUID Partitionstabelle und zu gpt findet man in der Manpage gpt(8).

Comments (2)  Permalink

Aktuelle sendmail-Aliase anzeigen

Mit Hilfe von Aliasen lassen sich im sendmail-Daemon Mailweiterleitungen einrichten. Dabei werden die Aliase in der Datei /etc/mail/aliases konfiguriert und mit Hilfe von newaliases(1) die /etc/mail/aliases.db Datenbank erstellt, aus welcher die Aliase vom sendmail-Daemon ausgelesen werden.

# newaliases 
/etc/mail/aliases: 28 aliases, longest 35 bytes, 314 bytes total

Möchte man den Inhalt der aliases.db auslesen, falls z.B. die aliases-Datei nicht mehr vorhanden ist, kann praliases aufgerufen werden, wodurch die aktuelle Aliases-Konfiguration angezeigt wird:

# praliases 
root:admin1@example.org,admin2@example.org
beat:beat@example.org
postmaster:root
hostmaster:root
abuse:root
[...]

Im FreeBSD und OpenBSD Basissystem ist praliases bereits vorhanden. Mehr Informationen zu paraliases findet man in der Manpage praliases(8).

 Permalink

Sendmail mit SASL-Authentifizierung und SSL-Verschlüsselung

Möchte man einen Mailserver einrichten, über den Mails versenden werden können, man sich dazu aber authentifizieren muss und die Verbindung mit SSL geschützt ist, so muss zuerst der cyrus-sasl2-saslauthd Port installiert werden:

# cd /usr/ports/security/cyrus-sasl2-saslauthd/ && make install clean

Danach werden die benötigten Einträge in der rc.conf gemacht:

# echo 'saslauthd_enable="YES"' >> /etc/rc.conf
# echo 'sendmail_enable="YES"' >> /etc/rc.conf

Nun kann der saslauthd gestartet werden:

# /usr/local/etc/rc.d/saslauthd start

Damit der sendmail-Daemon nun mit der SASL2 Unterstützung gebaut werden kann, müssen folgende Einträge in der /etc/make.conf gemacht werden:

# with SASLv2:
SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

Danach kann sendmail neu gebaut werden:

# cd /usr/src/lib/libsmutil
# make cleandir && make obj && make
# cd /usr/src/lib/libsm
# make cleandir && make obj && make
# cd /usr/src/usr.sbin/sendmail
# make cleandir && make obj && make && make install

Nun können die Konfigurationsdateien für den sendmail-Daemon erstellt werden:

cd /etc/mail && make

Dabei wurden zwei neue Konfigurationsdateien erstellt, welche den Hostnamen im Dateinamen haben: <hostname>.mc und <hostname>.submit.mc. In die <hostname>.mc werden nun folgende Zeilen eingefügt:

dnl SASL auth
define(`confAUTH_MECHANISMS',`PLAIN LOGIN')dnl
TRUST_AUTH_MECH(`PLAIN LOGIN')dnl

dnl SSMTP
define(`CERT_DIR', `/etc/mail/certs')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/mycert.pem')dnl
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')dnl
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')dnl
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')dnl
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl

Nun müssen noch, falls nicht schon vorhanden, die entsprechenden Zertifikate für den sendmail-Daemon erstellt werden:

# mkdir /etc/mail/certs
# cd /etc/mail/certs
# openssl dsaparam 1024 -out dsa1024.pem
# openssl req -x509 -nodes -newkey dsa:dsa1024.pem -out mycert.pem -keyout mykey.pem
# chmod 600 /etc/mail/certs/*

Als Letztes muss die neue Konfiguration aktiviert und sendmail neu gestartet werden:

# cd /etc/mail
# make all install restart

Danach lässt sich auf TCP -Port 465 eine SSL-verschlüsselte Verbindung aufbauen, wobei der Benutzer gegen die auf dem Server vorhanden Benutzerkonten authentifiziert wird. Zum Testen des Mailservers kann swaks aus dem FreeBSD Portbaum verwendet werden. Mehr Informationen zur SMTP Authentifikation findet man im FreeBSD Handbuch: http://www.freebsd.org/doc/en/books/handbook/smtp-auth.html.

 Permalink

FreeBSD Jails mit NAT betreiben

Möchte man auf einem FreeBSD System mehrere Jails betreiben, ohne jedoch weitere öffentlichen IP-Adressen zur Verfügung zu haben, können die Jails an das Loopback-Interface gebunden werden und mit Hilfe der pf-Firewall ein NAT für die Jails erstellt werden. Dazu muss auf dem Hostsystem in der /etc/rc.conf die pf-Firewall und das IP-Forwarding aktiviert und die Jail entsprechend konfiguriert sein. Im folgenden Beispiel wird die Jail mit der IP 127.0.0.10 an die Schnittstelle lo0 gebunden:

pf_enable="YES
gateway_enable="YES"
ifconfig_lo0_alias0="inet 127.0.0.10 netmask 255.255.255.255"
jail_enable="YES"
jail_list="test"
jail_test_rootdir="/usr/jails/test.chruetertee.ch"
jail_test_hostname="test.chruetertee.ch"
jail_test_ip="127.0.0.10"
jail_test_exec="/bin/sh /etc/rc"
jail_test_devfs_enable="YES"
jail_test_devfs_ruleset="devfsrules_jail"

Danach muss das IP-Forwarding auf dem Hostsystem aktiviert werden:

# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1

Nun kann die pf-Konfiguration so ergänzt werden, dass gewisse UDP und/oder TCP-Ports der Jail von aussen erreichbar sind und die Jail per NAT nach aussen zugreifen kann. Im folgenden Beispiel wird der Zugriff mit UDP auf Port 53 und mit TCP auf Port 53 und 465 von aussen (Schnittstelle bge0) zugelassen:

ext_if="bge0"

testjail_tcp = "{ 53, 465 }"
testjail_udp = "{ 53 }"

testjail = 127.0.0.10

set skip on lo0

rdr pass on $ext_if proto tcp from any to $ext_if port $testjail_tcp -> $testjail
rdr pass on $ext_if proto udp from any to $ext_if port $testjail_udp -> $testjail
nat on $ext_if proto {tcp udp} from $testjail to any -> ($ext_if)

[...] (weitere pf-Konfiguration des Hostsystemes)

Danach muss die neue pf-Konfiguration geladen werden:

# pfctl -f /etc/pf.conf

Nun kann in der /etc/rc.conf der Jail als Default-Gateway die IP-Adresse (in diesem Beispiel die IP-Adresse von bge0) des Hostsystemes angegeben werden:

defaultrouter="<IP-Adresse des Hostsystemes>"

Nun lässt sich aus der Jail via NAT durch die pf-Firewall nach aussen zugreifen.

Comments (8)  Permalink

Kernelausgaben auf Multiprozessor-Rechner synchronisieren

Auf Multiprozessoren-Rechnern können manchmal Kernelausgaben mit anderen Meldungen vermischt dargestellt werden, wodurch die Ausgaben unleserlich werden. Beispielsweise kann dies beim Herunterfahren eines Systems während der Ausgabe von "syncing disks" auftreten. Soll dies verhindert werden, kann folgende Option in der Kernelkonfiguration hinzugefügt werden:

options     PRINTF_BUFR_SIZE=128

Danach muss der Kernel neu gebaut werden. Nach einem Neustart des Systems werden die Meldungen korrekt angezeigt.

 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

Fehlende Shared-Libraries identifizieren

Mit Hilfe von libchk können Programme identifiziert werden, die gegen Shared-Libraries gelinkt sind, welche jedoch nicht mehr existieren. Im FreeBSD Portbaum findet man libchk unter sysutlis/libchk:

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

Standardmässig durchsucht libchk zur Zeit auch noch Verzeichnisse unter dem Verzeichnis /usr/X11R6, welches auf neueren Systemen nach /usr/local gelinkt ist. Dies kann mit der -x Option ausgeschlossen werden. Führt man libchk nun aus, werden alle Programme angezeigt, bei welchen Shared-Libraries fehlen. Auch werden dabei alle Shared-Libraries aufgelistet, welche von keinem Programm benötigt werden. Jedoch sollten diese nicht einfach deinstalliert werden ohne dass vorher genau überprüft wird, dass diese wirklich nicht mehr gebraucht werden.

# libchk -x /usr/X11R6
Will look into:
        /bin
        /lib
        /sbin
        /usr/bin
        /usr/games
        /usr/lib
        /usr/libexec
        /usr/local/bin
        /usr/local/lib
        /usr/local/libexec
        /usr/local/sbin
        /usr/sbin
Unresolvable link(s) found in: /usr/lib/libssh.so.3
        libasn1.so.8
        libroken.so.8
        libkrb5.so.8
Unresolvable link(s) found in: /usr/local/bin/mutt
        libasn1.so.8
        libroken.so.8
        libkrb5.so.8
Unreferenced library: /usr/local/lib/gcc-4.2.3/libffi.so.4
Unreferenced library: /usr/local/lib/gcc-4.2.3/libgfortran.so.2
Unreferenced library: /usr/local/lib/gcc-4.2.3/libgomp.so.1
Unreferenced library: /usr/local/lib/gcc-4.2.3/libmudflap.so.0
Unreferenced library: /usr/local/lib/gcc-4.2.3/libmudflapth.so.0
Unreferenced library: /usr/local/lib/gcc-4.2.3/libobjc.so.2
Unreferenced library: /usr/local/lib/gcc/i386-portbld-freebsd7.1/3.4.6/libg2c.so.0

Das Fehlen der Shared-Libraries kann danach mit ldd(1) verifiziert werden und diese können danach gegebenenfalls wieder installiert werden:

# ldd /usr/local/bin/mutt
/usr/local/bin/mutt:
        libncursesw.so.5.6 => /usr/local/lib/libncursesw.so.5.6 (0x2810b000)
        libgssapi.so.8 => /usr/lib/libgssapi.so.8 (0x28130000)
        libkrb5.so.8 => not found (0x0)
        libasn1.so.8 => not found (0x0)
        libcrypto.so.4 => /lib/libcrypto.so.4 (0x28147000)
        libroken.so.8 => not found (0x0)
        libcrypt.so.3 => /lib/libcrypt.so.3 (0x2823f000)
        libcom_err.so.3 => /usr/lib/libcom_err.so.3 (0x28258000)
        libssl.so.4 => /usr/lib/libssl.so.4 (0x2825a000)
        libz.so.3 => /lib/libz.so.3 (0x28289000)
        libintl.so.8 => /usr/local/lib/libintl.so.8 (0x2829a000)
        libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x282a3000)
        libc.so.6 => /lib/libc.so.6 (0x28398000)
        libtinfow.so.5.6 => /usr/local/lib/libtinfow.so.5.6 (0x2847a000)

Mehr Informationen zu libchk findet man in der Manpage libchk(1).

Comments (1)  Permalink

Netzwerkstatistiken anzeigen

Mit Hilfe der -s Option von netstat können Statistiken zu verschiedenen Netzwerkprotokollen angezeigt werden. Wird die -s Option zweimal verwendet, so werden alle Zähler die auf 0 stehen nicht angezeigt:

# netstat -s -s
tcp:
        20131319 packets sent
                7987509 data packets (3819885096 bytes)
                25265 data packets (20575251 bytes) retransmitted
                1608 data packets unnecessarily retransmitted
                6985545 ack-only packets (551074 delayed)
                25 window probe packets
                4018034 window update packets
                1115356 control packets
        22627937 packets received
                6801128 acks (for 3754613339 bytes)
                511098 duplicate acks
                16166251 packets (1581592327 bytes) received in-sequence
                9474 completely duplicate packets (1610688 bytes)
                112 old duplicate packets
                79 packets with some dup. data (7143 bytes duped)
                249755 out-of-order packets (313240610 bytes)
                462004 window update packets
                29378 packets received after close
                30 discarded for bad checksums
                10468 discarded due to memory problems
        275397 connection requests
        624094 connection accepts
        20132 ignored RSTs in the windows
[...]

Wird die -s Option zusammen mit der -r Option verwendet, so werden verschiedene Zähler zum Routing angezeigt. Auch hier kann die -s Option zweimal verwendet werden, um alle Zähler die auf 0 stehen nicht anzuzeigen:

# netstat -r -s 
routing:
        213 bad routing redirects
        0 dynamically created routes
        0 new gateways due to redirects
        13 destinations found unreachable
        0 uses of a wildcard route
        0 routes not in table but not freed

Mehr Informationen zu netstat findet man in der Manpage netstat(1).

 Permalink

Zugriff auf Systemmeldungen verbieten

Mit Hilfe von dmesg(8) können standardmässig alle Benutzer die Systemmeldungen abrufen:

# dmesg
Copyright (c) 1992-2008 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 7.1-PRERELEASE #0: Fri Sep  5 22:34:11 CEST 2008
[...]

Durch die sysctl-Variable security.bsd.unprivileged_read_msgbuf kann unprivilegierten Benutzern der Zugriff auf die Systemmeldungen verboten werden:

# sysctl security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_read_msgbuf: 1 -> 0

Unprivilegierte Benutzer erhalten fortan eine Fehlermeldung beim Aufruf von dmesg:

# dmesg
dmesg: sysctl kern.msgbuf: Operation not permitted

Soll die Option dauerhaft gesetzt werden, kann folgender Eintrag in der /etc/sysctl.conf eingefügt werden:

security.bsd.unprivileged_read_msgbuf=0

 Permalink

Informationen über einen Prozess anzeigen lassen

Auf FreeBSD können mit Hilfe von procstat verschiedene Informationen zu einem Prozess angezeigt werden. Dazu kann entweder die Prozess-ID an procstat übergeben werden, damit nur Informationen zu einem einzelnen Prozess angezeigt werden, oder man verwendet die -a Option, damit die Informationen zu allen Prozessen angezeigt werden:

# procstat 1830
  PID  PPID  PGID   SID  TSID THR LOGIN    WCHAN     EMUL          COMM        
 1830  1820  1830  1820  1820   1 beat     ttyin     FreeBSD ELF32 vi 

Mit Hilfe der -b Option werden Informationen zum ausgeführten Programm angezeigt:

# procstat -b 1830
  PID COMM             PATH                                                 
 1830 vi               /usr/bin/vi

Durch die -c Option werden die Argumente des ausgeführten Programms angezeigt:

# procstat -c 1830
  PID COMM             ARGS                                                 
 1830 vi               vi chruetertee/test

Alle offenen File-Deskriptoren des Programms können mit der -f Option ausgelesen werden:

# procstat -f 1830
  PID COMM               FD T V FLAGS    REF  OFFSET PRO NAME        
 1830 vi                cwd v d --------   -       - -   /usr/home/test    
 1830 vi               root v d --------   -       - -   /                 
 1830 vi                  0 v c rw------   9   22529 -   -                 
 1830 vi                  1 v c rw------   9   22529 -   -                 
 1830 vi                  2 v c rw------   9   22529 -   -                 
 1830 vi                  3 v r r----n-l   1    2341 -   /usr/home/test/chruetertee/test
 1830 vi                  4 v r rw------   1       0 -   /var/tmp/vi.recover/vi.qE5gVH
 1830 vi                  5 v r rw------   1       0 -   -                 
 1830 vi                  6 v r rw-----l   1     469 -   /var/tmp/vi.recover/recover.fv0apk

Ab dem kommenden FreeBSD 7.1 Release wird procstat im Basissystem vorhanden sein. Weitere Optionen und die Beschreibung aller Spalten der Ausgabe von procstat findet man in der Manpage procstat(1).

 Permalink
Prev Next101-110/305