BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

pkg-message eines Ports nachträglich anzeigen

Bei der Installation von Ports werden manchmal zusätzliche Informationen zur Installation angezeigt. Diese pkg-message wird automatisch unter /var/db/pkg/<Port>/+DISPLAY gespeichert. Mit der -D Option von pkg_info(1) kann man sich diese Meldung zu einem späteren Zeitpunkt anzeigen lassen:

# pkg_info -D fluxcms-1.6.0_4

Möchte man nicht die vollständige Versionsnummer angeben, so kann man mit einer Wildcard arbeiten:

# pkg_info -D fluxcms-\*

pkg_info ist auf FreeBSD bereits im Basissystem vorhanden.

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

Herausfinden welcher Prozess das Unmounten einer Partition verhindert

Versucht man eine Partition zu unmounten, dies schlägt jedoch fehl, so hat meistens noch ein Prozess eine Datei auf dieser Partition offen:

# umount /tmp
umount: unmount of /tmp failed: Device busy

Mit fstat lässt sich die Prozess-ID und der Programmname des Prozesses ermitteln, der noch eine Datei auf dieser Partition geöffnet hat:

# fstat -f /tmp
USER     CMD          PID   FD MOUNT      INUM MODE         SZ|DV R/W
beat     xpdf        1312   wd /tmp          2 drwxrwxrwt     512  r
beat     xpdf        1312    4 /tmp          7 -rwxr-xr-x  148794  r

Mit der Prozess-ID lässt sich danach das Kommando mit allen Parametern bestimmen, mit dem der Prozess gestartet wurde.

# ps -p 1312
  PID  TT  STAT      TIME COMMAND
  1312  p3  S+     0:00,43 xpdf talk.pdf

Beendet man diesen Prozess, kann die Partition mit umount(8) aus dem Verzeichnisbaum entfernt werden.

Auch lassen sich mit fstat alle Prozesse von einem bestimmten Benutzer ermitteln, welche zur Zeit noch eine Datei geöffnet haben.

# fstat -u <Benutzername>

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

 Permalink

ipfw Logdatei auswerten

In einer ipfw Regel kann zusätzlich ein log-Schlüsselwort angegeben werden:

/sbin/ipfw -q add deny log ip from any to any

Nun werden alle Pakete, auf die diese Regel zutrifft, von syslog protokolliert. In /etc/syslog.conf findet man heraus, in welche Logdatei diese Meldungen geschrieben werden:

security.*                   /var/log/security

Mit Hilfe von ipfwcount kann nun diese Datei ausgewertet werden. ipfwcount findet man im FreeBSD Portbaum unter security/ipfwcount:

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

Möchte man nun herausfinden, welchen Destination-Port die meisten geblockten Pakete haben, kann man folgenden Befehl verwenden:

# ipfwcount -dink dport -t 5 /var/log/security
Destination port (denied, incoming, 5 of 21)
------------------------------------------------
http 124
netbios-ssn 47
1026 44
microsoft-ds 26
loc-srv 22

Mit der -d Option werden geloggte Pakete einer deny Regel und mit -i werden eingehende Pakete gezählt. Mit -n werden die Portnummern durch den Portnamen ersetzt und mit -k dport wird angegeben, dass nach den Destination-Ports sortiert werden soll und durch -t 5 werden nur die Top 5 Ports angezeigt.

Soll nun gleichzeitig angezeigt werden, welche Rechner am meisten auf diese Ports zugegriffen haben, so kann folgender Befehl verwendet werden:

# ipfwcount -dink dport,shost -t 2 /var/log/security
Destination port (denied, incoming, 2 of 21)
------------------------------------------------
http 124
Source host (2 of 11)
------------------------------------------------
xyz.dclient.hispeedy.hc 71
xyz.dsl.cest1wll.ten 21

netbios-ssn 47
Source host (2 of 8)
------------------------------------------------
217.150.xyz.xyz 18
xyz.aci.mehs.da.pj 8

Nun sieht man für die zwei meist geblockten Destination-Ports je die beiden Rechner, die am meisten versucht haben auf diese Ports zuzugreifen.

Möchte man automatisch mit den periodic daily Mails eine Auswertung der ipfw Logdatei erhalten, so kann man einen Symlink in /usr/local/etc/portiodic/security erstellen:

# cd /usr/local/etc/periodic/security/ && ln -s /usr/local/share/examples/ipfwcount/100.ipfwcount

Danach muss ipfwcount in der /etc/periodic.conf aktiviert werden:

echo 'daily_status_security_ipfwcount_enable="YES"' >> /etc/periodic.conf

Mehr Informationen zu ipfwcount findet man in der Manpage ipfwcount(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

Nur neue Einträge einer Logdatei anzeigen

Beobachtet man regelmässig einige Logdateien und möchte, dass nur die neuen Einträge, die seit dem letzten Mal betrachten dazugekommen sind, angezeigt werden, so kann man since verwenden. since findet man im FreeBSD Portsbaum unter misc/since:

# cd /usr/ports/misc/since && make install clean

Betrachtet man nun eine Datei das erste Mal mit since, wird die ganze Datei angezeigt. Beim nächstem Aufruf mit since werden dann nur noch die neuen Einträge angezeigt. Sind in der Zwischenzeit keine Einträge dazugekommen, wird nichts angezeigt:

# since /var/log/messages
...
Sep  1 11:22:36 daedalus kernel: info: [drm] Setting GART location based on new memory map
Sep  1 11:22:36 daedalus kernel: info: [drm] Loading R300 Microcode
Sep  1 11:22:36 daedalus kernel: info: [drm] writeback test succeeded in 1 usecs
Sep  1 11:22:37 daedalus dhclient: New IP Address (ath0): 192.168.1.38
Sep  1 11:22:37 daedalus dhclient: New Subnet Mask (ath0): 255.255.255.0
Sep  1 11:22:37 daedalus dhclient: New Broadcast Address (ath0): 255.255.255.255
Sep  1 11:22:37 daedalus dhclient: New Routers (ath0): 192.168.1.1
Sep  1 11:36:14 daedalus kernel: ipfw: limit 100 reached on entry 700
Sep  1 11:45:36 daedalus su: beat to root on /dev/ttyp1
# since /var/log/messages
# logger test
# since /var/log/messages
Sep  1 11:51:50 daedalus beat: test

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

 Permalink

I/O- anstatt CPU-Werte in top anzeigen

Möchte man auf FreeBSD herausfinden, welcher Prozess wieviel I/O-Last verursacht, kann man top im I/O Modus starten:

# top -mio
last pid: 1688; load averages: 0.90, 0.59, 0.40 up 0+03:14:51 21:27:52
51 processes: 3 running, 48 sleeping
CPU states: 28.8% user, 0.0% nice, 55.6% system, 1.2% interrupt, 14.4% idle
Mem: 175M Active, 616M Inact, 167M Wired, 16M Cache, 111M Buf, 21M Free
Swap: 1024M Total, 16K Used, 1024M Free

PID USERNAME VCSW IVCSW READ WRITE FAULT TOTAL PERCENT COMMAND
1688 beat 17 643 0 174 0 174 29.15% dd
1004 root 130 8 0 0 0 0 0.00% Xorg
1033 beat 47 10 0 0 0 0 0.00% gkrellm
1676 beat 2595 712 81 60 0 141 23.62% thunderbird-bin
836 root 4 8 0 0 0 0 0.00% powerd
...

In diesem Modus werden nicht nur die Anzahl Lese- und Schreibvorgänge, sondern auch die Anzahl von Voluntary Context Switches (VCSW) und Involuntary Context Switches (IVSW) angezeigt. Ein Voluntary Context Switch wird ausgeführt, wenn ein Thread eine Ressource benötigt, welche zur Zeit nicht vorhanden ist, bei einem Involuntary Context Switch hat ein Thread seine Zeit in der CPU aufgebraucht oder ein höher priorisierter Thread soll ausgeführt werden. Mehr Informationen zu top findet man in der Manpage top(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

RAM-Disk mit tmpfs auf FreeBSD erstellen

Wollte man bis anhin auf FreeBSD zum Beispiel die /tmp Partition in einer RAM-Disk anlegen, so musste man eine RAM-Disk mit fixer Grösse erstellen.

Seit einiger Zeit ist in FreeBSD 7-CURRENT eine Portierung der NetBSD tmpfs Implementation vorhanden. Somit können Partitionen im Arbeitsspeicher erstellt werden, ohne dass eine feste Grösse vorgegeben werden muss und auch nur der auf der Partition verwendete Platz im Arbeitsspeicher verwendet wird.

Eine RAM-Disk kann wie folgt erstellt werden:

# mount -t tmpfs tmpfs <Mountpunkt>

Möchte man /tmp fest in den Arbeitspeicher auslagern, fügt man folgende Zeile in der /etc/fstab ein:

tmpfs          /tmp        tmpfs   rw,mode=1777    0       0

Wird nun das System neu gestartet oder man mountet /tmp neu, ist /tmp als RAM-Disk vorhanden:

# mount
/dev/ad0s3a on / (ufs, local)
devfs on /dev (devfs, local)
tmpfs on /tmp (tmpfs, local)
/dev/ad0s3f on /usr (ufs, local, soft-updates)
/dev/ad0s3e on /var (ufs, local, soft-updates)
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 (4)  Permalink

Tastaturlayout ändern

Arbeitet man auf der Konsole oder im Single User Mode und das Tastaturlayout stimmt nicht mit der vorhandenen Tastatur überein, so kann das Layout ganz einfach mit kbdcontrol angepasst werden. Voraussetzung im Single User Mode ist aber, dass /usr gemountet ist. Soll ein Tastaturlayout, zum Beispiel das schweizerdeutsche, geladen werden, verwendet man kdbcontrol mit der -l Option:

# kbdcontrol -l /usr/share/syscons/keymaps/swissgerman.iso.kbd

Wenn sich die Layoutdatei unter /usr/share/syscons/keymaps befindet, kann auf die vollständige Pfadangabe auch verzichtet werden:

# kbdcontrol -l swissgerman.iso

Um ein Layout automatisch zu laden, fügt man folgende Zeile in die /etc/rc.conf ein:

keymap="swissgerman.iso"

kbdcontrol befindet sich bereits im Basissystem vom FreeBSD. Mehr Informationen zu kbdcontrol findet man in der Manpage kbdcontrol(1).

 Permalink

Empfohlenes Aktualisieren von portmaster

Benutzer von portmaster sollten nach dem Aktualisieren des Portbaums unbedingt portmaster deinstallieren und neu installieren. Ältere Versionen von portmaster haben mit den Änderungen in ports/Mk/bsd.port.mk durch die gestern eingeführte neue DESTDIR Implementation Probleme:

# portmaster portmaster
"/usr/ports/Mk/bsd.port.mk", line 1092: Could not find /Mk/bsd.commands.mk
-p: not found
"/usr/ports/Mk/bsd.port.mk", line 1139: warning: " -p" returned non-zero status
-s: not found
"/usr/ports/Mk/bsd.port.mk", line 1147: warning: " -s" returned non-zero status
-r: not found
-e: not found
"/usr/ports/Mk/bsd.port.mk", line 1152: warning: " -r | -e 's/[-(].*//'" returned non-zero status
/^#define __FreeBSD_version/ {print $3}: not found
"/usr/ports/Mk/bsd.port.mk", line 1158: warning: " '/^#define __FreeBSD_version/ {print $3}' < /usr/include/sys/param.h" returned non-zero status
/var/db/ports//options: not found
"/usr/ports/Mk/bsd.port.mk", line 1217: warning: " "/var/db/ports//options"" returned non-zero status
make: fatal errors encountered -- cannot continue
"/usr/ports/Mk/bsd.port.mk", line 1092: Could not find /Mk/bsd.commands.mk
-p: not found
"/usr/ports/Mk/bsd.port.mk", line 1139: warning: " -p" returned non-zero status
-s: not found
"/usr/ports/Mk/bsd.port.mk", line 1147: warning: " -s" returned non-zero status
-r: not found
-e: not found
"/usr/ports/Mk/bsd.port.mk", line 1152: warning: " -r | -e 's/[-(].*//'" returned non-zero status
/^#define __FreeBSD_version/ {print $3}: not found
"/usr/ports/Mk/bsd.port.mk", line 1158: warning: " '/^#define __FreeBSD_version/ {print $3}' < /usr/include/sys/param.h" returned non-zero status
/var/db/ports//options: not found
"/usr/ports/Mk/bsd.port.mk", line 1217: warning: " "/var/db/ports//options"" returned non-zero status
-u: not found
"/usr/ports/Mk/bsd.port.mk", line 2245: warning: " -u" returned non-zero status
-e: not found
"/usr/ports/Mk/bsd.port.mk", line 2341: warning: "/usr/local/sbin/pkg_info -P 2>/dev/null | -e 's/.*: //'" returned non-zero status
make: fatal errors encountered -- cannot continue
usage: mkdir [-pv] [-m mode] directory_name ...
===>>> Update portmaster-1.18? [n] n

Aus diesem Grund sollte man zuerst portmaster wie folgt aktualisieren:

# pkg_delete portmaster\* && cd /usr/ports/ports-mgmt/portmaster && make install clean

Mehr Informationen findet man in der Mail von Doug Barton auf ports@.

 Permalink

Drahtloses Netzwerk suchen

Möchte man auf FreeBSD nach vorhandenen drahtlosen Netzwerken suchen, so muss zuerst die Netzwerkschnittstelle, falls noch nicht geschehen, hochgefahren werden:

# ifconfig <WLAN Karte> up

Danach kann nach drahtlosen Netzwerken gesucht werden. Dies kann einige Zeit dauern:

# ifconfig <WLAN Karte> scan
SSID BSSID CHAN RATE S:N INT CAPS
Netz1 00:13:49:11:22:33 1 54M 16:0 100 EPSB WPA
Netz2 00:09:5b:44:55:66 1 54M 5:0 100 EPS WPA
Netz3 00:13:49:77:88:99 6 54M 18:0 200 EPS
Netz4 00:14:c1:00:aa:bb 6 54M 15:0 100 EP
Netz5 00:00:c5:cc:dd:ee 7 11M 20:0 100 E
Netz6 00:ff:cc:ff:00:01 13 54M 70:0 100 EPSB WPA

Das E in der Spalte CAPS zeigt an, dass es sich um einen Access Point und nicht um ein Ad-Hoc Netzwerk handelt. Ein P symbolisiert ein verschlüsseltes Netzwerk. Diese Liste kann danach jederzeit bis zu einem neuen Scan wiedergegeben werden:

# ifconfig <WLAN Karte> list scan

Nun kann man sich zum Beispiel mit einem unverschlüsselten Netzwerk verbinden:

# ifconfig <WLAN Karte> inet <IP-Adresse> netmask <Netzmaske> ssid <SSID>

Mit einem WEP-verschlüsselten Netz kann man sich wie folgt verbinden:

# ifconfig <WLAN Karte> inet <IP-Adresse> netmask <Netzmaske> wepkey 1:<WEP-Schlüssel> wepmode on weptxkey 1 ssid <SSID>

Eine ausführliche Anleitung zu drahtlosen Netzwerken findet man im FreeBSD Handbuch: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-wireless.html

 Permalink

Apache in einer Jail einsperren

Möchte man einen Apache Webserver in einer gesicherten Umgebung laufen lassen, so muss man nicht unbedingt eine vollständige Jail aufsetzen, nur um einen Apache darin laufen zu lassen, sondern kann mit Hilfe von mod_jail den Apache mittels des jail-Systemcalls einsperren. mod_jail kann über den Portbaum installiert werden:

# cd /usr/ports/www/mod_jail && make install clean

Danach kann mod_jail in der httpd.conf aktiviert werden. Für einen Apache 2.0 fügt man folgende Zeilen in die /usr/local/etc/apache2/httpd.conf ein:

LoadModule jail_module        libexec/apache2/mod_jail.so

<IfModule mod_jail.c>
jail_rootdir "/usr/local/www"
jail_hostname "test.chruetertee.ch"
jail_address 192.168.1.12
jail_scrlevel 3
</IfModule>

Mit der Variable jail_scrlevel kann festgelegt werden, mit welchem Securelevel die Jail des eingesperrten Apaches laufen soll. Da nach dem Starten des Apaches mittels chroot nach jail_rootdir gewechselt wird, muss darunter das richtige Verzeichnis für die PID-Datei erstellt werden:

# mkdir /usr/local/www/var/run

Auch müssen die Pfadangaben in der httpd.conf an die chroot-Umgebung angepasst werden. Nun kann der Apache ganz normal gestartet werden:

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

Mit jls(8) kann nun die Jail mit dem eingesperrten Apache angezeigt werden:

# jls
JID IP Address Hostname Path
2 192.168.1.12 test.chruetertee.ch /usr/local/www

Zum Stoppen des Apaches kann nun die Jail mit Hilfe von killall beendet werden:

# killall -j 2

Mehr Informationen zu mod_jail findet man auf der Webseite: http://igorpopov.newmail.ru/mod_jail/

Comments (2)  Permalink
Prev Next171-180/305