BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

SVN-Server mit Trac auf FreeBSD installieren

Um einen Subversion-Server, auf welchen man per WebDAV zugreift, und dazu ein Trac auf FreeBSD zu installieren, können das Trac und Subversion aus den Ports installiert werden:

# cd /usr/ports/devel/subversion
# make -DWITH_MOD_DAV_SVN install clean
# cd /usr/ports/www/trac
# make install clean

Nun kann ein Verzeichnis erstellt werden, in dem alle SVN-Repositories gespeichert werden sollen:

# mkdir -p /var/db/svn/repos

Danach kann ein Repository erstellt werden:

# svnadmin create /var/db/svn/repos/<Projektname>

Ist das Repository erstellt, kann eine gewünschte initiale Verzeichnisstruktur dem Repository hinzugefügt werden:

# svn import <Pfad zu initialer Verzeichnisstruktur> file:///var/db/svn/repos/<Projektname> -m "Initial Import"

Nun kann ein Verzeichnis erstellt werden, in dem die Zugriffsberechtigungen für den SVN-Server abgelegt werden:

# mkdir -p /var/db/svn/access

Anschliessend kann eine Passwortdatei mit dem SVN-Benutzer erstellt werden:

# htpasswd -c /var/db/svn/access/users <Benutzer1>

Weitere Benutzer können wie folgt hinzugefügt werden:

# htpasswd  /var/db/svn/access/users <Benutzer2>

Nun kann eine Datei angelegt werden, in der die Lese- und Schreibrechte geregelt werden. Folgende Datei gewährt allen Leserechte und Benutzer1 und Benutzer2 Lese- und Schreibrechte:

# vi /var/db/svn/access/control
[/]
* = r
<Benutzer1> = rw
<Benutzer2> = rw

Die Rechte auf die Benutzerdateien werden nun noch eingeschränkt:

# chmod 600 /var/db/svn/access/*
# chown -R www:www /var/db/svn

Damit über den Apache auf den SVN-Server zugegriffen werden kann, muss der Apache-Server in der rc.conf aktiviert werden:

# echo 'apache2_enable="YES"' >> /etc/rc.conf
# echo 'apache2ssl_enable="YES"' >> /etc/rc.conf

Damit auch über SSL auf den SVN-Server zugegriffen werden kann, muss ein Zertifikat für den Apache erstellt werden.

Nun können die SVN-Einstellungen in der httpd.conf gemacht werden:

# vi /usr/local/etc/apache2/httpd.conf
# SVN WebDAV Repository Setup
<Location /svn>
DAV svn
SVNParentPath /var/db/svn/repos
SVNIndexXSLT "http://<Domain>/svnindex.xsl"

# anonymous first
Satisfy Any
Require valid-user

# authenticating them valid ones
AuthType Basic
AuthName "Subversion Repositories"
AuthUserFile /var/db/svn/access/users
AuthzSVNAccessFile /var/db/svn/access/control
</Location>

<Directory "/usr/local/share/subversion/xslt/">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

Alias /svnindex.xsl "/usr/local/share/subversion/xslt/svnindex.xsl"
Alias /svnindex.css "/usr/local/share/subversion/xslt/svnindex.css"

Nun kann ein Verzeichnis erstellt werden, in dem alle Trac-Instanzen gespeichert werden:

# mkdir -p /var/db/trac

Danach kann ein Trac initialisiert werden:

# trac-admin /var/db/trac/<Projektname> initenv

Dabei müssen verschiedene Fragen beantwortet werden:

Project Name [My Project]> <Projektname>
Database connection string [sqlite:db/trac.db]>[Enter]
Repository type [svn]>[Enter]
Path to repository [/path/to/repos]> /var/db/svn/repos/<Projektname>
Templates directory [/usr/local/share/trac/templates]>[Enter]

Danach kann auch das Trac in der httpd.conf konfiguriert werden:

# vi /usr/local/etc/apache2/httpd.conf
ScriptAlias /cgi-bin/ "/usr/local/share/trac/cgi-bin/"
<Directory "/usr/local/share/trac/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

ScriptAlias /<Projektname> /usr/local/share/trac/cgi-bin/trac.cgi
<Location /<Projektname> >
SetEnv TRAC_ENV "/var/db/trac/<Projektname>"
</Location>

<Location "/<Projektname>/login">
AuthType Basic
AuthName "Guete Morge"
AuthUserFile /var/db/svn/access/users
Require user <Benutzer1> <Benutzer2>
</Location>

Die Rechte für das Trac müssen noch angepasst werden:

# chown -R www:www /var/db/trac

Zu guter Letzt muss der Apache gestartet werden:

# /usr/local/etc/rc.d/apache2.sh start

Der SVN-Server ist nun unter https://<Domain>/svn/<Projektname>/, das Trac unter https://<Domain>/<Projektname>/ erreichbar.

Eine ausführliche Anleitung zu SVN unter FreeBSD findet man unter: http://www.bsdguides.org/guides/freebsd/misc/subversion.php

Vielen Dank an Alain für seine Tipps zur Konfiguration.

Comments (6)  Permalink

System per Skript automatisch härten

Besitzt man viele Mehrbenutzersysteme, die man immer auf die gleiche Weise härten möchte, empfiehlt es sich einen Blick auf lockdown zu werfen. lockdown findet man im Portsbaum unter security/lockdown.

# cd /usr/ports/security/lockdown && make install clean 

Nun wird ein Shellskript unter /usr/local/bin/lockdown installiert. Dieses kann nun den eigenen Wünschen angepasst werden. Dazu erstellt man eine Kopie des Skriptes:

# cp /usr/local/bin/lockdown /usr/local/bin/lockdown.custom
lockdown passt folgende Dateien den eigenen Wünschen an:
  • /etc/ssh/sshd_config
  • /etc/rc.conf
  • /etc/auth.conf
  • /etc/sysctl.conf
  • Kernelkonfiguration

Ausserdem werden die Rechte von Programmen angepasst oder ganz entfernt, so dass normale Benutzer diese Programme nicht mehr benutzen können.

Zuerst muss die kern-Variable gesetzte werden, so dass sie auf die verwendete Kernelkonfiguration zeigt:

kern="/usr/local/bin/editkernel /usr/src/sys/i386/conf/<Kernelname>"

In der Section Mounting options werden die Optionen von Mountpunkten angepasst. In Build a debug kernel können Kerneloptionen der aktuellen Kernelkonfiguration hinzugefügt werden. Der Kernel muss danach allerdings manuell neu gebaut werden. Danach werden die verschiedenen Konfigurationsdateien der Maschine angepasst. Im letzten Abschnitt werden dann die Rechte von verschiedenen Programmen angepasst.

Hat man das Skript einmal seinen Wünschen angepasst, kann es ausgeführt werden:

# lockdown

Möchte man nun das Skript auf einem anderen Server ausführen, kann man einfach lockdown aus den Ports installieren, das selber angepasste Skript auf diesen Server kopieren und ausführen. So können mehrere Systeme innert kürzester Zeit identisch abgesichert werden.

 Permalink

Partitionen per Label mounten

Besitzt man zum Beispiel eine USB-Festplatte, welche mit UFS formatiert ist und an verschiedenen FreeBSD Rechnern benutzt wird, so kann man sich das Mounten der Festplatte vereinfachen, indem man Labels benutzt. Damit man ein Label auf einer Partition erstellen kann, muss die Festplatte mit einem FreeBSD Rechner verbunden, jedoch nicht gemountet sein. Auch muss man zuerst das geom_label-Kernelmodul laden:

# kldload geom_label.ko

Nun kann das Label mit Hilfe von tunefs(8) auf die Partition geschrieben werden:

# tunefs -L <Label> <Partition>

Zum Beispiel:

# tunefs -L usbdisk /dev/da0s3c

Will man nun auf einem FreeBSD Rechner die Festplatte mounten, so muss, falls dies noch nicht geschehen ist, das geom_label-Kernelmodul geladen werden. Möchte man das Modul dauerhaft laden, so trägt man folgende Zeile in der /boot/loader.conf ein:

geom_label_load="YES"

Sobald man nun die Festplatte mit dem System verbindet, wird folgende Meldung auf der Konsole ausgegeben:

GEOM_LABEL: Label for provider da0s3 is ufs/usbdisk.

Nun lässt sich die Festplatte auf jedem FreeBSD System immer gleich mounten:

mount /dev/ufs/usbdisk /mnt/usb/

Mehr Informationen zu den Labels findet man in der Manpage glabel(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
Comments (3)  Permalink

Fortschritt eines Programmes beobachten

Muss der Fortschritt eines Prozesses immer durch die Eingabe eines Befehls nachgeschaut werden, so kann man dies mit cmdwatch(1) automatisieren. Übergibt man cmdwatch nur den Befehl, den man ausführen möchte, so wird dieser alle 2 Sekunden ausgeführt und die Ausgabe angezeigt:

# cmdwatch "<Befehl>"

Möchte man zum Beispiel den Fortschritt beim Wiederherstellen eines RAID1-Arrays beobachten, kann man cmdwatch wie folgt benutzen:

# cmdwatch "atacontrol status ar0"

Every 2s: atacontrol status ar0 Fri Mar 16 19:44:07 2007

ar0: ATA RAID1 subdisks: ad3 ad2 status: REBUILDING 59% completed

Soll das Zeitintervall verändern werden, so kann der -n Option die Anzahl Sekunden übergeben werden, nach denen der Befehl wieder ausgeführt wird. Möchte man zum Beispiel alle 5 Sekunden einen df -k ausführen um zuzusehen wie sich die Partitionsbenutzung verändert, so kann man cmdwatch wie folgt verwenden:

# cmdwatch -n 5 "df -k"

Every 5s: df -k Sat Mar 17 12:21:28 2007

Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 507630 110396 356624 24% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 507630 18 467002 0% /tmp
/dev/ad0s1f 42645860 29636174 9598018 76% /usr
/dev/ad0s1e 1012974 94138 837800 10% /var
linprocfs 4 4 0 100% /usr/compat/linux/proc

Verwendet man zusätzlich die -d Option, so werden die Änderungen markiert.

cmdwatch findet man in den FreeBSD-Ports unter sysutils/cmdwatch und kann wie folgt installiert werden:

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

cmdwatch beendet man mit Ctrl + c.

Comments (2)  Permalink

Dateinamen aus Pfad extrahieren

In einem Shellskript kann es vorkommen, dass man einen vollständigen Pfad zu einer Datei besitzt und man nur den Dateinamen verwenden möchte. Dazu gibt es basename(1). Man übergibt einfach den vollständigen Pfad an basename und kriegt den Dateinamen zurück:

# basename /usr/local/sbin/portsopt
portsopt

Umgekehrt kriegt man mit dirname(1) das Verzeichnis zurück, in dem sich die Datei befindet:

# dirname /usr/local/sbin/portsopt
/usr/local/sbin

Sowohl basename als auch dirname findet man in FreeBSD und OpenBSD im Basissystem.

 Permalink

OpenBSD in FreeBSD mit QEMU installieren

Mit QEMU lassen sich nicht nur ISO-Images testen, sondern auch ganze Betriebssysteme installieren. Dazu muss zuerst QEMU installiert werden:

# cd /usr/ports/emulators/qemu && make install clean

Nun kann eine Datei erstellt werden, in die ein Betriebssystem installiert werden soll:

# qemu-img create <Dateiname> <Grösse>

Möchte man zum Beispiel OpenBSD 4.0 in einer 2 GB grossen Datei installieren, so erstellt man diese Datei wie folgt:

# qemu-img create OPENBSD.img 2GB
Formating 'OPENBSD.img', fmt=raw, size=2097152 kB

Nun kann man das OpenBSD cd40.iso Image starten (welches sich auf der OpenBSD-CD befindet oder man im Internet herunterladen kann), um das System zu installieren:

# qemu -hda <Datei in die das System installiert werden soll> -cdrom <Installations ISO Image> -boot d

In diesem Fall zum Beispiel:

# qemu -hda OPENBSD.img -cdrom /cdrom/4.0/i386/cd40.iso -boot d

Sollte das Starten mit folgender Fehlermeldung fehlschlagen,

# qemu -hda OPENBSD.img -cdrom /cdrom/4.0/i386/cd40.iso -boot d
Falscher Systemaufruf(core dumped)

so muss das aio Kernelmodul nachgeladen werden:

# kldload aio

Hat man das KQEMU-Kernelmodul geladen, so hängt QEMU während des Startens von OpenBSD. Also muss das KQEMU Kernelmodul entladen werden:

# kldunload kqemu.ko

Nun startet OpenBSD und kann installiert werden. Konfiguriert man die erkennte Netzwerkkarte mit DHCP, so wird in QEMU automatisch eine IP-Adresse vergeben, mit welcher man auch aus QEMU heraus ins Internet kann, solange der Rechner mit dem Internet verbunden ist. Als Installationsquelle kann danach ftp ausgewählt werden und ein FTP-Server, zum Beispiel mirror.switch.ch, angegeben werden, von welchem die Dateisets heruntergeladen und installiert werden.

Ist die Installation beendet, so kann man OpenBSD in der QEMU herunterfahren und danach das frisch installierte System wie folgt starten:

# qemu -hda OPENBSD.img

Mit QEMU lässt sich nicht nur OpenBSD installieren, sondern auch zum Beispiel NetBSD, Linux oder Windows.

Comments (1)  Permalink

Festplattenbenutzung anzeigen

Ähnlich wie top(1) den Ressourcenverbrauch von Prozessen anzeigt, zeigt gstat(8) die Auslastung von Festplatten, Partitionen, RAID Arrays und virtuellen Laufwerken wie RAM-Disks an. Damit gstat ausgeführt werden kann, muss man root-Rechte besitzen. Die Anzeige wird automatisch regelmässig aktualisiert. Im folgenden Beispiel sieht man einen Ausschnitt während ein make clean in /usr/src ausgeführt wird:

# gstat
L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name
0 0 0 0 0.0 0 0 0.0 0.0| fd0
0 0 0 0 0.0 0 0 0.0 0.0| acd0
0 0 0 0 0.0 0 0 0.0 0.0| ad4
0 0 0 0 0.0 0 0 0.0 0.0| ad6
32 559 0 0 0.0 559 1238 509.4 98.8| ar0
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1
32 559 0 0 0.0 559 1238 511.5 98.8| ar0s1
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1a
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1b
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1c
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1d
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1e
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1f
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1a
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1b
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1c
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1d
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1e
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1f
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1a
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1b
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1c
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1d
0 0 0 0 0.0 0 0 0.0 0.0| ar0s1e
32 559 0 0 0.0 559 1238 520.8 98.8| ar0s1f

Die Spalten bedeuten folgendes:

L(q) = Länge der Queue

ops/s, r/s, w/s = Operationen, Leseoperatationen und Schreiboperationen pro Sekunde

kBps = kiloBytes pro Sekunde

ms/r, ms/w = Millisekunden pro Lese- und Schreiboperation

%busy = % der Zeit mit mindestens einem Eintrag in der Queue

Man sollte sich allerdings nicht zu fest auf die %busy Spalte konzentrieren, da auch Werte über 100% auftreten können:

 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
[...]
5 261 0 0 0.0 261 31965 31.8 119.6| ar0
0 0 0 0 0.0 0 0 0.0 0.0| ad4s1
0 0 0 0 0.0 0 0 0.0 0.0| ad6s1
5 261 0 0 0.0 261 31965 31.8 119.6| ar0s1
[...]
5 261 0 0 0.0 261 31965 32.0 119.7| ar0s1

gstat verlässt man wie top indem man q drückt. Mehr Informationen findet man in der Manpage gstat(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

Vervollständigung in der tcsh

Eine der wirklich starken Funktionen der tcsh ist die Vervollständigung. Standardmässig werden unter FreeBSD nur Verzeichnisse und Dateien vervollständigt. Gibt man ein Kommando, zum Beispiel ls, in die Shell ein, und drückt danach Ctrl + d, werden einem die verfügbaren Dateien und Verzeichnisse angezeigt. Nun kann man den Anfang eines Dateinamens eingeben und versuchen mit der Tabulatortaste den Dateinamen zu vervollständigen. Dies klappt nur, wenn nur noch ein Dateiname zu der Eingabe passt, treffen mehrere zu, so passiert nichts und man muss noch einen weiteren Teil des Namens eingeben. Man kann jederzeit mit Ctrl + d die Dateinamen anzeigen lassen, mit der die eingegebenen Zeichen vervollständigt werden können.

Mit der tcsh kann jedoch noch viel mehr vervollständigt werden. Folgende Zeilen können in der ~/.cshrc oder in der /etc/csh.cshrc eingefügt werden. Die folgenden Beispiele basieren auf der .tcshrc von Justin Randall. Die Zeilen für die Vervollständigungen in der cshrc müssen zwischen folgenden Zeilen stehen, damit Wildcards nicht interpretiert werden:

set noglob
<... Regeln für die Vervollständigungen ...>
unset noglob

Möchte man zum Beispiel, bei ssh <Host> den Host vervollständigen, so fügt man folgende Regel, die die /etc/hosts und ~/.ssh/known_hosts ausliest und damit den Host vervollständigt, in die cshrc hinzu. Auch werden mirror.switch.ch und ftp.freebsd.ch manuell zur Host-Liste hinzugefügt:

   if ( -r /etc/hosts ) then
set hosts=(`awk '/^[1-9].*/ {print $2'} /etc/hosts`)
endif
if ( -r $HOME/.ssh/known_hosts ) then
set f=`cat $HOME/.ssh/known_hosts | cut -f 1 -d \ ` >& /dev/null
set hosts=($hosts $f)
unset f
endif
set hosts=($hosts mirror.switch.ch ftp.freebsd.ch)
complete ssh 'n/-l/u/' 'n/*/$hosts/'

Verwendet man mit dieser Regel die -l Option von ssh, um einen Benutzer anzugeben, so werden die Benutzer aus /etc/passwd zur Vervollständigung angeboten.

Ist die Variable $host gesetzt, so wie es in der obigen Regel gemacht wurde, so kann folgende Regel verwendet werden, um bei ping und traceroute den host zu vervollständigen:

   complete {ping,traceroute} p/1/\$hosts/

Zur Vervollständigung von kill verwendet man folgende Regel:

   complete kill    'c/-/S/' 'p/1/(-)//' 'c/%/j/' \
'n/*/`ps -U $LOGNAME | awk '"'"'{print $1}'"'"'`/'

Damit werden bei einem kill -<Signal> <PID> das Signal durch alle verfügbaren Signale und die PID durch alle PID's von Prozessen des aktuellen Benutzers vervollständigt.

Mit folgender Regel wird bei einem ifconfig die Schnittstelle durch alle verfügbaren Schnittstellen vervollständigt und auch ein paar öfters gebrauchte Optionen wie up, down und noch ein paar andere vervollständigt:

   complete ifconfig   'p@1@`ifconfig -l`@' 'n/*/(range phase link netmask \
mtu up metric mediaopt down delete \
broadcast arp debug)/'

Sollen bei einem bunzip2 nur noch Dateien mit der Endung bz2 vervollständigt werden, benutzt man diese Regel:

  complete bunzip2     'p/*/f:*.bz2/'
Sollen bei einem umount nur die gemounteten Partitionen zur Vervollständigung angeboten werden, so kann man folgende Regel verwenden:
  complete umount       c/-/"(a A f c)"/ \
n/*/'`mount | cut -d " " -f 3`'/

Möchte man selber Vervollständigungen erstellen, so findet man in der tcsh(1) eine detaillierte Anleitung.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink

Alten Quellcode von Ports mit portmaster löschen

Mit der Zeit sammeln sich alte Quellcodedateien von Ports in /usr/ports/distfiles, die zum Teil nicht mehr benötigt werden. Natürlich kann man regelmässig den Inhalt dieses Verzeichnisses löschen, aber es gibt auch bessere Möglichkeiten, indem man nur die Dateien löscht, die nicht mehr gebraucht werden.

Benutzer von portupgrade können dies mit portsclean machen.

Seit der heute veröffentlichten Version 1.13 von portmaster können nun auch damit veraltete Quellcodedateien gelöscht werden.

Möchte man, dass der Benutzer zuerst gefragt wird, ob eine Datei gelöscht werden soll, so benutzt man portmaster wie folgt:

# portmaster --clean-distfiles

Möchte man die veralteten Dateien automatisch ohne Nachfrage löschen, kann man portmaster wie folgt benutzen:

# portmaster --clean-distfiles-all
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

Manpage mittels F1 aufrufen

Hat man unter Umständen einen längeren Befehl in der tcsh eingegeben, möchte aber noch was zum Befehl in der Manpage nachlesen, so kann man zum Beispiel ein neues Terminal aufmachen und die Manpage zum Befehl lesen. Einen einfacheren Weg bekommt man, wenn man folgende Zeilen in die ~/.cshrc einfügt:

alias helpcommand man
bindkey ^[OP run-help # F1 xterm
bindkey ^[[M run-help # F1 cons25

Jetzt kann man während der Eingabe eines Befehls die F1 Taste drücken, wodurch die Manpage des eingegebenen Befehls geöffnet wird. Beendet man die Manpage wieder mit q, so ist der Befehl noch immer in der tcsh eingegeben und man kann sofort weiterarbeiten.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink
Prev Next201-210/305