BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

KDE 4.2 auf FreeBSD

Seit kurzem ist KDE 4.2 als Testversion für FreeBSD vorhanden. Zum Installieren von KDE 4.2 muss zuerst der Portbaum, zum Beispiel mit portsnap, auf den neusten Stand gebracht werden:

# portsnap fetch update

Da KDE 4.2 noch nicht im offiziellen Portbaum vorhanden ist, muss es mit Subversion heruntergeladen werden. Dazu muss ggf. zuerst Subversion installiert werden:

# cd /usr/ports/devel/subversion-freebsd && make install clean

Nun können die benötigten Dateien mit Subversion in ein Verzeichnis, in diesem Fall /usr/area51, heruntergeladen werden:

# svn co https://kf.athame.co.uk/kde-freebsd/trunk/area51/ /usr/area51

Anschliessend können die Ports, welche für KDE 4.2 benötigt werden, z.B. mit UnionFS über den offiziellen Portbaum gelegt werden:

# mount -t unionfs /usr/area51 /usr/ports
# mount
/dev/ad4s3a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad4s3d on /tmp (ufs, local, soft-updates)
/dev/ad4s3f on /usr (ufs, local, soft-updates)
/dev/ad4s3e on /var (ufs, local, soft-updates)
<above>:/usr/area51 on /usr/ports (unionfs, local)

Alternativ dazu kann auch das kdemerge-Script verwendet werden, welches sich unter /usr/area51/Tools/scripts/kdemerge befindet. Im Skript müssen zuerst die KDEDIR und PORTSDIR-Variablen angepasst werden:

# Path to the KDE ports without the trailing /. 
KDEDIR="/usr/area51"  
# Path to the official ports collection.
PORTSDIR="/usr/ports"

Nun können die für KDE 4.2 benötigten Ports mit dem Portbaum verbunden werden:

# /usr/are51/Tools/scripts/kdemerge
===> Merging files from area51 to the ports directory
/usr/area51 --> /usr/ports

You can now run "portupgrade -a" or "portmaster -a" to upgrade your ports
tree. Please read /usr/home/beat/ports/UPDATING-area51 before you run
portupgrade or portmaster. We suggest that you backup your ~/.kde4
configuration dir and start with a clean config.

Danach kann KDE 4.2 über den Portbaum installiert werden:

# cd /usr/ports/x11/kde4
# make install clean

Möchte man eine frühere Version von KDE 4 aktualisieren, so sollte man zuerst die Datei /ust/ports/UPDATING-area51 lesen. Anschliessend können die Ports gemäss der Anleitung in /ust/ports/UPDATING-area51 aktualisiert werden.

Verwendet man UnionFS kann es sein, dass Patches aus den aktuellen, im Portbaum vorhandenen KDE Ports noch sichtbar sind, welche mit KDE 4.2 nicht mehr benötigt werden:

===>   Returning to build of kdebase-runtime-4.2.0
===>   kdebase-runtime-4.2.0 depends on file: /usr/local/bin/cmake - found
===>   kdebase-runtime-4.2.0 depends on shared library: intl - found
===>   kdebase-runtime-4.2.0 depends on shared library: kimproxy.5 - not found
===>    Verifying install for kimproxy.5 in /usr/ports/x11/kdelibs4
===>  Vulnerability check disabled, database not found
=> kdelibs-4.2.0.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/KDE.
=> Attempting to fetch from http://mirrors.isc.org/pub/kde/stable/4.2.0/src/.
kdelibs-4.2.0.tar.bz2                         100% of 9797 kB  369 kBps 00m00s
===>  Extracting for kdelibs-4.2.0
=> MD5 Checksum OK for KDE/kdelibs-4.2.0.tar.bz2.
=> SHA256 Checksum OK for KDE/kdelibs-4.2.0.tar.bz2.
/bin/mkdir -p /usr/ports/x11/kdelibs4/work/kdelibs-4.2.0/build
===>  Patching for kdelibs-4.2.0
===>  Applying FreeBSD patches for kdelibs-4.2.0
1 out of 3 hunks failed--saving rejects to
../cmake/modules/FindKDE4Internal.cmake.rej
=> Patch patch-FindKDE4Internal.cmake failed to apply cleanly.
*** Error code 1

Stop in /usr/ports/x11/kdelibs4.
*** Error code 1

Stop in /usr/ports/x11/kdebase4-runtime.
*** Error code 1

Stop in /usr/ports/x11/kdebase4-runtime.
*** Error code 1

Stop in /usr/area51/x11/kde4.
*** Error code 1

Stop in /usr/area51/x11/kde4.

In solch einem Fall können die vorhandenen Patches gelöscht und nochmals mit SVN heruntergeladen werden:

# cd /usr/ports/x11/kdelibs4/files/
# rm patch-*
# svn up

Danach kann die Installation erneut gestartet werden:

# cd /usr/ports/x11/kde4
# make clean install clean

Sind alle benötigten Ports installiert, kann KDM (KDE Login Manager) in der Datei /etc/ttys eingetragen werden:

#ttyv8  "/usr/local/bin/xdm -nodaemon"  xterm   on  secure
ttyv8   "/usr/local/kde4/bin/kdm -nodaemon"     xterm on secure

Falls noch nicht vorhanden müssen D-Bus und der HAL-Daemon in der Datei /ect/rc.conf aktiviert werden:

dbus_enable="YES"
hald_enable="YES"

Danach wird bei einem Systemstart automatisch KDM für die Anmeldung gestartet und KDE 4.2 kann verwendet werden.

KDE4

Folgende Punkte sollten bei der Verwendung von KDE 4.2 beachtet werden:

  •  Der FreeBSD Support für Systeminformationen in Plasma fehlt zur Zeit noch, das heisst, es werden keine Informationen zum Prozessor und den Temperaturen angezeigt.
  •  Die Beschriftung der Tabs in der Konsole fehlen und müssen manuell gesetzt werden.
  •  In ksysguard wird die Prozessoranzeige nicht richtig angezeigt. Das ist jedoch abhängig vom Systemboard.
  •  Dem FAM-Subsystem fehlt zur Zeit noch die FreeBSD-Unterstützung und ist deshalb abgeschaltet, dadurch kann es hier teilweise zu Geschwindigkeitseinbussen kommen.

Damit KDE 4.2 möglichst fehlerfrei in den Portbaum gebracht werden kann, werden weiterhin Tester gesucht. Probleme und Erfolgsmeldungen können an die Mailingliste kde-freebsd gesendet werden.

Vielen Dank an Martin für seine Hilfe beim Erstellen dieses Artikels. 

Comments (5)  Permalink

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

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

Lokale Kopie der FreeBSD Dokumentation

Möchte man eine aktuelle lokale Kopie der offiziellen FreeBSD Dokumentation, welche unter anderem das Handbuch beinhaltet, zur Verfügung haben, so muss zuerst der textproc/docproj-nojadetex Port installiert werden:

# cd /usr/ports/textproc/docproj-nojadetex && make install clean

Danach kann eine neue Sup-Datei für die Dokumentation erstellt werden. Dazu muss der gewünschte CVSup Server eingetragen werden:

*default host=cvsup.<mirror>.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
doc-all

Nun können die Quelldateien der Dokumentation mit csup heruntergeladen werden:

# csup -L 2 <Pfad zur Doc-Sup-Datei>

Die Quelldateien werden nach /usr/doc heruntergeladen. Die einzelnen Dokumente der Dokumentation sind je nach Sprache und Dokumentationsart in verschiedene Unterverzeichnisse aufgeteilt. Das FreeBSD Handbuch in deutsch befindet sich unter /usr/doc/de_DE.ISO8859-1/books/handbook, die englische Version unter /usr/doc/en_US.ISO8859-1/books/handbook. Sollen nun die dazugehörigen HTML-Seiten generiert werden, kann make im entsprechenden Verzeichnis aufgerufen werden:

# cd /usr/doc/en_US.ISO8859-1/books/handbook && make

Möchte man die lokale Kopie lesen, kann im entsprechenden Verzeichnis die Datei index.html mit einem Browser aufgerufen werden.

 Permalink

FreeBSD Portbaum durchsuchen

Mit Hilfe von psearch kann der FreeBSD Portbaum nach einem gesuchten Wort durchsucht werden. Standardmässig wird dabei der Portname und die "Short description" durchsucht. Im Portbaum findet man psearch unter ports-mgmt/psearch:

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

Bei der Suche mit psearch wird die Gross-/Kleinschreibung ignoriert, es kann einfach das gewünschte Wort angegeben werden nach dem der Portsbaum durchsucht werden soll:

# psearch KNOBS
ports-mgmt/lsknobs        Simple script to help configure ports knobs and options
ports-mgmt/portconf       A universal tool to set specific port knobs
ports-mgmt/portsopt       Shows WITH(OUT)-knobs of a port makefile

Verwendet man die -l Option wird zusätzlich noch die Beschreibung der gefundenen Ports angezeigt:

# psearch -l KNOBS
ports-mgmt/lsknobs        Simple script to help configure ports knobs and options
    lsknobs is a simple sh(1) script designed to help configure
    ports knobs and options by listing them together with their
    status (either enabled or not). It uses portconf for knobs.
    
ports-mgmt/portconf       A universal tool to set specific port knobs
    Portconf is a simple framework to set ports options in an
    universal way. Knobs set to specific ports are honoured
    by portmaster, portupgrade, portmanager and 'make install'.
    
    - Alex Dupre
    ale@FreeBSD.org
    
ports-mgmt/portsopt       Shows WITH(OUT)-knobs of a port makefile
    Shows WITH(OUT)-knobs of a port makefile and if you want also the knobs of
    all port dependencies.
    
    WWW: http://www.chruetertee.ch/portsopt/

Möchte man zusätzlich die ausführlichen Beschreibungen aus pkg-descr durchsuchen, so kann die -s Option verwendet werden. Mit der -c Option kann die zu durchsuchende Kategorie eingeschränkt werden:

# psearch -s -c www linkchecker
www/linkchecker           Check HTML documents for broken links
www/p5-HTTP-SimpleLinkChecker Check the HTTP response code for a link
www/p5-W3C-LinkChecker    Checks the validity of links in an HTML or XHTML document
www/p5-chklinks           A non-threaded Perl link checker

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

 Permalink

FreeBSD Installations-CDs erstellen

Mit Hilfe des FreeBSD -Quellcodes lassen sich einfach FreeBSD-Installations-CDs erstellen. So kann man zum Beispiel eine Installations-CD von einem aktuellen CURRENT-Stand erzeugen. Zuerst muss ein release-Verzeichnis erstellt werden, in welche alle zur Erstellung der CDs benötigten Daten geschrieben werden. Hat man die FreeBSD-Quelldateien nicht mit CVS aktualisiert, muss auch noch ein CVS-Verzeichnis erstellt werden, welches aber leer bleibt:

# mkdir /home/beat/cvs /home/beat/release

Nun muss die Welt in /usr/src gebaut werden:

# cd /usr/src
# make buildworld

Nun können aus dem Quellcode die Installationsdateien mit make release in /usr/src/release erstellt werden. Folgende Variable müssen dabei zwingend angegeben werden:

  • CHROOTDIR: Das Verzeichnis, in welchem die Daten installiert werden
  • CVSROOT: Das Verzeichnis, in welchem die mit CVS aktualisieren Quelldateien liegen (kann auch leer sein)

Folgende Variablen können unter anderem noch zusätzlich gesetzt werden:

  • BUILDNAME: Name des Buildes, wird unter anderem auch für den Namen der ISO-Images verwedent
  • EXTSRCDIR: Werden die Quelldateien nicht mit CVS aktualisiert, kann hier ein Verzeichnis angegeben werden, in welchem die Quelldateien vorhanden sind.
  • NO_FLOPPIES: Floppy-Images werden nicht gebaut
  • NODOC: Die FreeBSD-Dokumentation wird nicht gebaut
  • NOPORTS: Es werden keine Ports gebaut und auf die CDs kopiert
  • MAKE_ISOS: Die Installations-CDs werden erstellt
# cd /usr/src/release
# make CHROOTDIR=/home/beat/release CVSROOT=/home/beat/cvs BUILDNAME=CURRENT-SNAP EXTSRCDIR=/usr/src NO_FLOPPIES=YES NODOC=YES NOPORTS=YES MAKE_ISOS=YES release
[...]
Generating MD5 and SHA256 sums...
touch iso.1
Release done
+ LC_ALL=C TZ=GMT date
+ echo >>> make release for i386 finished on Tue Aug 26 00:27:20 GMT 2008
>>> make release for i386 finished on Tue Aug 26 00:27:20 GMT 2008

Danach sind die ISO-Images im release-Verzeichnis unter R/cdrom/ verfügbar.

# ls -l /home/beat/release/R/cdrom/
total 514718
-rw-r--r--   1 root  wheel   35227648 26 Aug 02:26 CURRENT-SNAP-i386-bootonly.iso
-rw-r--r--   1 root  wheel  266092544 26 Aug 02:26 CURRENT-SNAP-i386-disc1.iso
-rw-r--r--   1 root  wheel     372736 26 Aug 02:26 CURRENT-SNAP-i386-disc2.iso
-rw-r--r--   1 root  wheel     372736 26 Aug 02:26 CURRENT-SNAP-i386-disc3.iso
-rw-r--r--   1 root  wheel        349 26 Aug 02:27 CURRENT-SNAP-i386-iso.CHECKSUM.MD5
-rw-r--r--   1 root  wheel        524 26 Aug 02:27 CURRENT-SNAP-i386-iso.CHECKSUM.SHA256
-rw-r--r--   1 root  wheel  224604160 26 Aug 02:26 CURRENT-SNAP-i386-livefs.iso
drwxr-xr-x   3 root  wheel        512 26 Aug 02:26 bootonly/
drwxr-xr-x   4 root  wheel        512 26 Aug 02:26 disc1/
drwxr-xr-x   2 root  wheel        512 26 Aug 02:26 disc2/
drwxr-xr-x   2 root  wheel        512 26 Aug 02:26 disc3/
drwxr-xr-x  17 root  wheel        512 26 Aug 02:26 livefs

Mehr Informationen zu make release und allen vorhanden Variablen findet man in der Manpage release(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 Ports mit Hilfe von porttools erstellen oder aktualisieren

Möchte man einen FreeBSD Port erstellen oder aktualisieren, so können verschiedene Aufgaben mit porttools vereinfacht werden. Zuerst müssen die porttools installiert werden. Diese findet man im FreeBSD Portbaum unter ports-mgmt/porttools:

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

Ruft man die porttools das erste Mal auf, wird die .porttools Konfigurationsdatei angelegt, und die verfügbaren Module der porttools angezeigt:

# port
===> Generating /home/beat/.porttools configuration file
FreeBSD Port Tools 0.77
Usage:  port <command> [<options>]

Available commands:
commit  - commit a port into the FreeBSD Ports CVS Repository
create  - create new port from template using newfile(1)
diff    - generate diff against original port version
fetch   - fetch distfile(s) of new port version
getpr   - get patch/shar from a PR
help    - display this command summary
install - install a port
submit  - submit Problem Report with new port, or port change/update
test    - test port (build, install, package, deinstall)
upgrade - upgrade a port

In der angelegten ~/.porttools Datei können nun Variablen gesetzt werden, welche von den porttools verwendet werden. Für was die Variablen verwendet werden, findet man in der Manpage porttools(5).

# FreeBSD Port Tools configuration file - see porttools(5)
# vim: ft=sh
EMAIL="beat@chruetertee.ch"
FULLNAME="Beat Gätzi"
ORGANIZATION=""
BUILDROOT="/tmp"
ARCHIVE_DIR=""
DIFF_MODE="CVS"
DIFF_VIEWER="more"
PORTLINT_FLAGS="abct

Um einen neuen Port zu erstellen, wechselt man in das Verzeichnis, in dem man den Port erstellen möchte und erstellt den Port mit Hilfe des create-Modules:

# cd /tmp
# port create portsopt

Es wurde nun ein Verzeichnis für den Port angelegt und eine Vorlage vom Makefile, pkg-descr und der pkg-plist erstellt:

# ls portsopt
Makefile   pkg-descr  pkg-plist

Jetzt können im Makefile die Variablen CATEGORIES, COMMENT, PORTVERSION, und MASTER_SITES gesetzt werden. Gegebenenfalls müssen die restlichen Variablen auch noch gesetzt werden, damit der Quellcode des Ports heruntergeladen werden kann:

# cd portsopt
# cat Makefile 

# New ports collection makefile for:    portsopt
# Date created:         2008-05-03
# Whom:                 Beat Gätzi <beat@chruetertee.ch>
#
# $FreeBSD$
#

PORTNAME=       portsopt
PORTVERSION=    1.4
#PORTREVISION=  0
#PORTEPOCH=     0
CATEGORIES=     ports-mgmt
MASTER_SITES=   http://www.chruetertee.ch/files/download/
#MASTER_SITE_SUBDIR=
#PKGNAMEPREFIX=
#PKGNAMESUFFIX=
#DISTNAME=
#EXTRACT_SUFX=
#DISTFILES=
#DIST_SUBDIR=   ${PORTNAME}
#EXTRACT_ONLY=

MAINTAINER=     beat@chruetertee.ch
COMMENT=        Shows WITH(OUT)-knobs of a port makefile

.include <bsd.port.pre.mk>
.include <bsd.port.post.mk>

Nicht benötigte Variablen können aus dem Makefile entfernt werden. Nun kann mit Hilfe des porttools der Quellcode heruntergeladen werden. Die Prüfsummen des Ports werden automatisch erstellt. Diese müssen noch mit den offiziellen Prüfsummen verglichen werden:

# port fetch
=> portsopt-1.4.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://www.chruetertee.ch/files/download/.
portsopt-1.4.tar.gz                           100% of 1126  B 1348 kBps
# cat distinfo 
MD5 (portsopt-1.4.tar.gz) = 9062b0fa280e98750dc29a13c41617e3
SHA256 (portsopt-1.4.tar.gz) = 845d6518ff2369fc6f17b6fa0299cba6e3251c7d2568b34c78e603d1a3d556f7
SIZE (portsopt-1.4.tar.gz) = 1126

Nun müssen die restlichen Variablen und make-Targets erstellt werden, die zum Bauen des Ports benötigt werden. Damit auch alle installierten Dateien beim Deinstallieren des Portes wieder entfernt werden, müssen alle Dateien in der Datei pkg-plist aufgelistet werden. Welche Dateien alles installiert werden, kann zum Beispiel mit ftrace herausgefunden werden. Werden nur wenige Dateien oder Verzeichnisse erstellt, können diese auch im Makefile unter PLIST_FILES und PLIST_DIRS aufgeführt und die Datei pkg-plist kann gelöscht werden. Wie die pkg-plist aufgebaut ist, findet man im Porters Hanbook. In der Datei pkg-descr muss nun noch eine Beschreibung des Programms erstellt und die URL zur offiziellen Seite des Programms eingefügt werden. Ist der Port fertig, kann er mit port test getestet werden. Der Port wird dabei standardmässig nach /tmp installiert:

# port test
===> Validating port with portlint
WARN: Makefile: only one MASTER_SITE configured.  Consider adding additional mirrors.
0 fatal errors and 1 warning found.
===> flags: PREFIX=/tmp/portsopt-1.4 NO_DEPENDS=yes PKG_DBDIR=/tmp/pkg_db.ud9qtv5I 
===> Cleaning workspace before port test
===>  Cleaning for portsopt-1.4
===>  Extracting for portsopt-1.4
=> MD5 Checksum OK for portsopt-1.4.tar.gz.
=> SHA256 Checksum OK for portsopt-1.4.tar.gz.
===>  Patching for portsopt-1.4
===>  Configuring for portsopt-1.4
===>  Installing for portsopt-1.4
===>   Generating temporary packing list
===>  Checking if ports-mgmt/portsopt already installed
install  -o root -g wheel -m 555 /usr/ports/ports-mgmt/portsopt/work/portsopt-1.4/portsopt /tmp/portsopt-1.4/sbin
===>   Registering installation for portsopt-1.4
===>  Building package for portsopt-1.4
Creating package /usr/ports/packages/All/portsopt-1.4.tbz
Registering depends:.
Creating bzip'd tar ball in '/usr/ports/packages/All/portsopt-1.4.tbz'
===> Checking pkg_info
portsopt-1.4        Shows WITH(OUT)-knobs of a port makefile
===> Checking shared library dependencies
===>  Deinstalling for ports-mgmt/portsopt
===>   Deinstalling portsopt-1.4
===> Extra files and directories check
===> Cleaning up after port test
===>  Cleaning for portsopt-1.4
===>  Removing existing /tmp/portsopt-1.4 dir
===> Done.

Treten beim Testen keine Fehler auf, kann der Port mittels einem Problem Report eingesandt werden. Dazu kann einfach port submit im Port-Verzeichnis eingegeben werden:

# port submit

Nun wird ein Editor mit dem Problem Report geöffnet. Die wichtigsten Teile des Problem Reports sind bereits ausgefüllt. Auch ist der neue Port als shar-Archiv bereits angehängt. Speichert man den Problem Report und schliesst den Editor, wird nachgefragt, was man damit machen möchte. Um den Problem Report abzusenden kann s gedrückt werden:

s)end, e)dit or a)bort? s

Den Problem Report findet man nach einiger Zeit im GNATS und wird danach von einem FreeBSD-Commiter in den Portbaum aufgenommen.

Mit den porttools lassen sich nicht nur Ports erstellen, sondern auch bestehende Ports aktualisieren. Dazu sichert man zuerst den aktuellen Port:

# cd /usr/ports/www
# cp -Rp fluxcms fluxcsm.orig

Nun können alle Änderungen am Port durchgeführt werden. Die Änderungen können danach auch wieder mit port test geprüft werden. Möchte man die gemachen Änderungen anschauen, kann dazu port diff verwendet werden. Hat der originale Port den Suffix .orig, kann dies den porttools mit der -d Option übergeben werden:

# ls -d /usr/ports/www/fluxcms*
/usr/ports/www/fluxcms/      /usr/ports/www/fluxcms.orig/
# cd /usr/ports/www/fluxcms
# port diff -d .orig

Sind alle Änderungen abgeschlossen, können diese wieder mit einem Problem Report eingesandt werden. Auch hier wird der Patch automatisch von den porttools erstellt. Dazu muss auch wieder der Suffix des originalen Portverzeichnisses mit -d übergeben werden. Der Problem Report wird standardmässig als "non-critical" und der Dringlichkeit low eingesandt. Das kann, wenn nötig, mit der -s und der -s Option, zum Beispiel bei einem Sicherheitsupdate ,überschrieben werden. Gültige Werte bei -s sind non-critical, serious oder critical, bei -p low, medium oder high.

# port submit -d .orig

Nun müssen im Editor noch in der Zeile Synopsis der Platzhalter [SUMMARIZE CHANGES] durch einen kleine Beschreibung der Änderung ersetzt werden. Bei Description sollte der Platzhalter [DESCRIBE CHANGES] durch eine ausführlichere Beschreibung der Änderungen ersetzt werden. Beim Beenden des Editors muss das Versenden des Problem Reports wieder bestätigt werden.

Mehr Informationen wie man FreeBSD Ports erstellt oder aktualisiert findet man im FreeBSD Porter's Handbook. Mehr Informationen zu den porttools findet man in der Manpage port(1) .

Vielen Dank an Martin für seine hilfreichen Anregungen beim Erstellen dieses Artikels.

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

Smart Array RAID Controller auf FreeBSD verwalten

Auf einem Server mit einem Smart Array Controller kann der RAID Controller mit Hilfe des hpacucli (HP Array Configuration Utility CLI) direkt aus dem Betriebssystem heraus verwaltet werden. hpacucli findet man im FreeBSD Portsbaum unter sysutils/hpacucli:

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

Danach kann hpacucli gestartet werden, wobei die vorhandenen RAID Controller erkannt werden. Möchte man sich danach alle verfügbaren Kommandos von hpacucli anschauen, kann help eingegeben werden.

# hpacucli
HP Array Configuration Utility CLI 7.50.18.0
Detecting Controllers...Done.
Type "help" for a list of supported commands.
Type "exit" to close the console.

=>

Alle verfügbaren Informationen zu allen verfügbaren RAID Controllern, in diesem Beispiel nur einer, erhält man mit ctrl all show:

=> ctrl all show 
Controller Smart Array P400 at 0
Bus Interface: PCI
Slot: 0
Serial Number: 123456789
Cache serialnumber: 123456789
RAID 6 (ADG) Status: Enabled
RAID 6 (ADG) Enabler Status: Enabled
Controller Status: OK
Chassis Slot: 1
Hardware Revision: Rev D
Firmware Version: 2.08
Rebuild Priority: Medium
Expand Priority: Medium
Surface Scan Delay: 15 sec
Cache Board Present: True
Cache Status: OK
Accelerator Ratio: 100/0 (read/write)
Total Cache Size: 512 MB
Battery Pack Count: 1
Battery Status: OK

Möchte man sich nur den Status des Controllers anzeigen lassen, kann dies mit ctrl all show status gemacht werden:

=> ctrl all show status
Smart Array P400 in Slot 0
Controller Status: OK
Cache Status: OK
Battery Status: OK

Möchte man sich nun die Komponenten des Controllers genauer anschauen, kann der Controller festgelegt werden:

=> set target ctrl slot=0
controller slot=0

Nun lassen sich die Informationen zu allen Festplatten an diesem Controller mit pd all show anzeigen:

=> pd all show
Smart Array P400 in Slot 0
physicaldrive 1:1
Port: 2I
Box: 1
Bay: 1
Status: OK
Drive Type: Data Drive
Interface Type: SAS
Size: 73.4 GB
Transfer Speed: 3.0 Gbps
Rotational Speed: 10000
Firmware Revision: HPD5
Serial Number: 3123456789
physicaldrive 1:2
Port: 2I
Box: 1
Bay: 2
Status: OK
Drive Type: Data Drive
Interface Type: SAS
Size: 73.4 GB
Transfer Speed: 3.0 Gbps
Rotational Speed: 10000
Firmware Revision: HPD5
Serial Number: 123456789

Auch die daraus erstellten "Logical Drives" können mit ld all show angezeigt werden:

=> ld all show
Smart Array P400 in Slot 0
Logical Drive: 1
Size: 68.3 GB
Fault Tolerance: 1+0
Heads: 255
Sectors Per Track: 32
Cylinders: 17562
Stripe Size: 128 KB
Status: Ok
Array Accelerator: Enabled
Has Data On Drive: True
Unique Identifier: 123456704C3953554112345678
Preferred Controller Chassis Slot: 1

Nun kann man mit hpacucli direkt neue "Logical Drives" erstellen und Parameter des Controllers während des Betriebs verändern. Eine komplette Übersicht der Befehle findet man auf folgender Seite: http://people.freebsd.org/~jcagle/hpacucli-readme

Mehr Informationen zu FreeBSD auf HP Proliant Servern findet man auf folgender Seite: http://people.freebsd.org/~jcagle/

Der Status eines "Logical Drives" kann auch mit cciss_vol_status ausgelesen werden.

 Permalink

FreeBSD binär auf eine neue Version aktualisieren

Mit Hilfe von freebsd-update(8) kann man ein FreeBSD System binär aktualisieren. Folgende Anleitung funktioniert allerdings nur, wenn man auf eine Version des gleichen Branches aktualisiert. In diesem Beispiel wird ein FreeBSD 6.1-RELEASE binär auf ein FreeBSD 6.3-RELEASE aktualisiert.

# uname -a
FreeBSD test.chruetertee.ch 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sun May 7 04:32:43 UTC 2006 root@opus.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

Zuerst muss freebsd-update heruntergeladen werden. Danach empfiehlt es sich, die Signatur von freebsd-update mit Hilfe von gpg(1) zu überprüfen:

# fetch http://www.daemonology.net/freebsd-update/freebsd-update-upgrade.tgz 
freebsd-update-upgrade.tgz 100% of 21 kB 38 kBps
# fetch http://www.daemonology.net/freebsd-update/freebsd-update-upgrade.tgz.asc
freebsd-update-upgrade.tgz.asc 100% of 187 B 1251 kBps
# gpg --verify freebsd-update-upgrade.tgz.asc freebsd-update-upgrade.tgz
gpg: Signature made Fr 16 Nov 15:01:38 2007 CET using DSA key ID CA6CDFB2
gpg: Good signature from "FreeBSD Security Officer <security-officer@FreeBSD.org>"

Sollte das Verzeichnis /var/db/freebsd-update nicht vorhanden sein, muss es angelegt werden, da sonst das Skript nicht funktioniert:

# sh freebsd-update.sh -f freebsd-update.conf -r 6.3-RELEASE upgrade
freebsd-update.sh: Directory does not exist or is not writable: /var/db/freebsd-update
# mkdir /var/db/freebsd-update

Nun kann das System auf die gewünschte Version aktualisiert werden. freebsd-update analysiert, welche Komponenten installiert sind und aktualisiert werden müssen:

# sh freebsd-update.sh -f freebsd-update.conf -r 6.3-RELEASE upgrade
Looking up update.FreeBSD.org mirrors... 1 mirrors found.
Fetching public key from update1.FreeBSD.org... done.
Fetching metadata signature for 6.1-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic world/base

The following components of FreeBSD do not seem to be installed:
kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games
src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue
src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin
world/catpages world/dict world/doc world/games world/info
world/manpages world/proflibs

Does this look reasonable (y/n)? y

Fetching metadata signature for 6.3-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 2033 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170....180....190....200....210....220....230....240....250....260....270....280....290....300....310....320....330....340....350....360....370....380....390....400....410....420....430....440....450....460....470....480....490....500....510....520....530....540....550....560....570....580....590....600....610....620....630....640....650....660....670....680....690....700....710....720....730....740....750....760....770....780....790....800....810....820....830....840....850....860....870....880....890....900....910....920....930....940....950....960....970....980....990....1000....1010....1020....1030....1040....1050....1060....1070....1080....1090....1100....1110....1120....1130....1140....1150....1160....1170....1180....1190....1200....1210....1220....1230....1240....1250....1260....1270....1280....1290....1300....1310....1320....1330....1340....1350....1360....1370....1380....1390....1400....1410....1420....1430....1440....1450....1460....1470....1480....1490....1500....1510....1520....1530....1540....1550....1560....1570....1580....1590....1600....1610....1620....1630....1640....1650....1660....1670....1680....1690....1700....1710....1720....1730....1740....1750....1760....1770....1780....1790....1800....1810....1820....1830....1840....1850....1860....1870....1880....1890....1900....1910....1920....1930....1940....1950....1960....1970....1980....1990....2000....2010....2020....2030. done.
Applying patches... done.
Fetching 124 files... done.
The following files will be removed as part of updating to 6.3-RELEASE-p1:
/boot/kernel/hptmv.ko
/etc/periodic/weekly/120.clean-kvmdb
/usr/include/c++/3.4/ext/demangle.h
/usr/lib/libpcap.so.4
/usr/lib/libpthread.so.2
[...]
/var/named/etc/namedb/PROTO.localhost-v6.rev
/var/named/etc/namedb/PROTO.localhost.rev
/var/named/etc/namedb/make-localhost
The following files will be added as part of updating to 6.3-RELEASE-p1:
/bin/pgrep
/bin/pkill
/boot/kernel/acpi_dock.ko
/boot/kernel/amdsmb.ko
/boot/kernel/coretemp.ko
/boot/kernel/geom_md.ko
[...]
/usr/share/zoneinfo/Europe/Volgograd
/var/named/etc/namedb/master/empty.db
/var/named/etc/namedb/master/localhost-forward.db
/var/named/etc/namedb/master/localhost-reverse.db
The following files will be updated as part of updating to 6.3-RELEASE-p1:
/COPYRIGHT
/bin/[
/bin/cat
/bin/chflags
/bin/chio
/bin/chmod
[...]
/usr/share/zoneinfo/zone.tab
/var/named/etc/namedb/named.conf
/var/named/etc/namedb/named.root
/var/yp/Makefile.dist

Nun kann der neue Kernel installiert werden:

# sh freebsd-update.sh -f freebsd-update.conf install
Installing updates...
Kernel updates have been installed. Please reboot and run
"freebsd-update.sh install" again to finish installing updates.

Ist der Kernel installiert, muss das System neu gestartet werden:

# shutdown -r now

Nun kann der Rest des Systems aktualisiert werden:

# freebsd-update.sh -f freebsd-update.conf install
Installing updates...
Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "freebsd-update.sh install"
again to finish installing updates.

Danach sollten die Ports neu gebaut werden. Zum Beispiel kann man alle Ports deinstallieren und anschliessend neu bauen. Dazu kann portmaster(8) zur Hilfe genommen werden:

# portmaster -l > ~/installed-port-list
# portsnap fetch update
# portmaster --clean-distfiles-all
# portmaster -Faf
# pkg_delete *

portmaster erstellt eine Liste aller installierten Ports. Möchte man alle diese Ports wieder installieren, nachdem man sie gelöscht hat, so müssen nur die Root- und Leaf-Ports installiert werden. Alle anderen werden automatisch als Abhängigkeit installiert.

# cat ~/installed-port-list
===>>> Root ports (No dependencies, not depended on)
===>>> cciss_vol_status-1.03
===>>> libtool-1.5.24
===>>> poptop-1.3.4_1
===>>> portaudit-0.5.12
===>>> portmaster-2.1
===>>> portsopt-1.4
===>>> rsync-2.6.9_2
===>>> screen-4.0.3_1
===>>> sudo-1.6.9.6
===>>> 9 root ports

===>>> Trunk ports (No dependencies, are depended on)
===>>> autoconf-wrapper-20071109
===>>> expat-2.0.0_1
===>>> libiconv-1.11_1
===>>> m4-1.4.9,1
===>>> mysql-client-5.0.51
===>>> perl-5.8.8_1
===>>> pkg-config-0.22_1
===>>> 7 trunk ports

===>>> Branch ports (Have dependencies, are depended on)
===>>> apache-2.0.63
===>>> gettext-0.16.1_3
===>>> libxml2-2.6.30
===>>> p5-DBD-mysql50-4.005
===>>> p5-DBI-1.60.1
===>>> p5-Storable-2.18
===>>> p5-gettext-1.05_1
===>>> pear-1.6.2_1
===>>> pear-DB-1.7.13,1
===>>> php5-5.2.5
===>>> php5-mysql-5.2.5
===>>> php5-pcre-5.2.5
===>>> php5-session-5.2.5
===>>> php5-xml-5.2.5
===>>> 14 branch ports

===>>> Leaf ports (Have dependencies, not depended on)
===>>> autoconf-2.61_2
===>>> gmake-3.81_2
===>>> help2man-1.36.4_1
===>>> mysql-server-5.0.51
===>>> tinderbox-2.4.2
===>>> vim-lite-7.1.175
===>>> 6 leaf ports

===>>> 36 total installed ports

Nun können noch die alten Libraries gelöscht werden:

# sh freebsd-update.sh -f freebsd-update.conf install
Installing updates... done.

Danach sollte das System nochmals neu gestartet werden:

# shutdown -r now

Nach dem Neustart ist die Aktualisierung abgeschlossen.

# uname -a
FreeBSD test.chruetertee.ch 6.3-RELEASE-p1 FreeBSD 6.3-RELEASE-p1 #0: Wed Feb 13 02:40:56 UTC 2008 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386
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

Notizen zur Konfiguration eines Servers mit FreeBSD 7.0

Das PDF mit Notizen zur Konfiguration eines Servers mit FreeBSD wurde auf FreeBSD 7.0 aktualisiert. Es kann unter http://www.chruetertee.ch/freebsd/ heruntergeladen werden. Dabei handelt es sich nicht um eine Schritt-für-Schritt Anleitung, sondern mehr um eine Sammlung von Möglichkeiten zur Konfiguration.
 Permalink
Prev Next11-20/48