BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

ccache in einer Tinderbox verwenden

Kompiliert man Ports in einer Tinderbox mehrere Male, so kann die Zeit die zum Kompilieren benötigt wird, mit Hilfe von ccache reduziert werden. ccache findet man im FreeBSD Portbaum unter devel/ccache:

# cd /usr/ports/devel/ccache && make install clean

Nun muss ein Tarball, mit den für die Tinderbox benötigten Dateien, erstellt werden. Die FreeBSD Version mit welcher ccache gebaut worden ist, sollte mit der Version der Tindebox-Jail, in welcher man ccache verwenden möchte, übereinstimmen da sonst unter Umständen gewisse Bibliotheken nicht gefunden werden:

# cd /tmp
# mkdir opt
# cp /usr/local/bin/ccache opt
# cd opt
# ln -s ccache gcc
# ln -s ccache cc
# ln -s ccache g++
# ln -s ccache c++
# cd ..
# tar cf ccache.tar opt

Nun kann der ccache-Tarball in das Verzeichnis einer Tinderbox-Jail kopiert werden, in welcher man ccache verwenden möchte. Zum Beispiel:

# cp /tmp/ccache.tar /usr/local/tinderbox/jails/6

Danach muss ccache in der Tinderbox aktiviert werden. Mit der -s Option kann festgelegt werden, wieviel Speicherplatz ccache verwenden darf:

# cd /usr/local/tinderbox/scripts && ./tc configCcache -e -c /ccache -s 10G

Die Dateien die ccache nun anlegt, werden unter /usr/local/tinderbox/ccache gespeichert. Mehr Informationen zu ccache findet man in der Manpage ccache(1).

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

Temporäre Dateien in einem Shellskript verwenden

Erstellt man in einem Shellskript mehrere temporäre Dateien, so muss sichergestellt werden, dass die Dateien noch nicht existieren. Dazu kann man mktemp verwenden. Die X im übergeben Dateinamen werden von mktemp durch einen einmaligen Schlüssel ersetzt. Der Pfad zur erstellten Datei wird von mktemp zurückgegeben:

# mktemp /tmp/test.XXXXXXXXXX
/tmp/test.d8zo9nRkAd

Nun kann mktemp zum Beispiel wie folgt in einem Shellskript verwendet werden:

TMPFILE=`mktemp /tmp/test.XXXXXXXXXX` || exit 1
echo "Test" >> ${TMPFILE}

mktemp ist auf FreeBSD und OpenBSD bereits im Basissystem vorhanden. Mehr Informationen zu mktemp findet man in der Manpage mktemp(1).

 Permalink

CVSup mit SSH tunneln

Möchte man aus einem Netz, in dem Verbindungen auf TCP/5999 nicht zugelassen sind, CVSup benutzen, um Quelldateien zu erneuern, so kann kann man den CVSup Verkehr mit SSH tunneln. Voraussetzung ist, dass SSH-Verbindungen zugelassen sind und man einen Rechner besitzt, der per SSH erreichbar ist und von dem TCP/5999 auf einen CVSup-Server erlaubt ist. Nun kann ein SSH-Tunnel aufgebaut werden:

# ssh -2 -N -f -L <Lokaler Port>:<CVSup Server>:<Port CVSup Server> <Benutzername>@<Server>

Dabei wird der SSH-Tunnel im Hintergrund aufgebaut. Im folgenden Beispiel wird als lokaler Port 5999 und cvsup2.ch.freebsd.org als CVSup-Server verwendet:

# ssh -2 -N -f -L 5999:cvsup2.ch.freebsd.org:5999 benutzer@proxy.chruetertee.ch

Mit sockstat(1) kann überprüft werden, ob der Tunnel aufgebaut ist:

# sockstat -4 | grep 5999
beat     ssh        1466  4  tcp4   127.0.0.1:5999        *:*

Nun kann in der CVSup-Konfiguration als CVSup-Server der lokale Rechner angegeben werden:

# grep "default host" /usr/sup/standard-supfile
*default host=localhost

Hat man als lokalen Port 5999 gewählt, kann c(v)sup direkt gestartet werden, ansonsten muss mit der -p Option der lokale Port angegeben werden:

# csup -L 2 -p <lokaler Port> <Pfad zu CVSup-Konfiguration> 
 Permalink

SSL-verschlüsselte Dienste testen

Unverschlüsselte Netzwerkdienste wie HTTP/POP3/IMAP/SMTP können mit telnet(1) auf ihre Funktionalität getestet werden:

# telnet www.chruetertee.ch 80
Trying 217.150.245.53...
Connected to www.chruetertee.ch.
Escape character is '^]'.
GET /
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.chruetertee.ch/">here</a>.</p>
</body></html>
Connection closed by foreign host.

Wird der Datenverkehr mit SSL verschlüsselt, kann telnet nicht mehr verwendet werden. Möchte man den Dienst trotzdem testen, kann s_client von OpenSSL verwendet werden. Zuerst werden Informationen zum Zertifikat und der SSL-Verbindung angezeigt, danach können Befehle wie mit telnet abgesetzt werden:

# openssl s_client -connect www.chruetertee.ch:443
CONNECTED(00000003)
<Zertifikatisinfo>
---
Certificate chain
0 s:/C=CH/ST=Zurich/L=Zurich/O=chruetertee.ch/CN=www.chruetertee.ch/emailAddress=hostmaster@chreutertee.ch
i:/C=CH/ST=Zurich/L=Zurich/O=chruetertee.ch/CN=www.chruetertee.ch/emailAddress=hostmaster@chreutertee.ch
---
Server certificate
-----BEGIN CERTIFICATE-----
<Zertifikat>
-----END CERTIFICATE-----
subject=/C=CH/ST=Zurich/L=Zurich/O=chruetertee.ch/CN=www.chruetertee.ch/emailAddress=hostmaster@chreutertee.ch
issuer=/C=CH/ST=Zurich/L=Zurich/O=chruetertee.ch/CN=www.chruetertee.ch/emailAddress=hostmaster@chreutertee.ch
---
No client certificate CA names sent
---
SSL handshake has read 1231 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
SSL-Session:
<Session Info>
---
GET /
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.chruetertee.ch/">here</a>.</p>
</body></html>
closed

OpenSSL und s_client sind auf FreeBSD und OpenBSD bereits im Basissystem vorhanden. Mehr Informationen zu s_client findet man in der Manpage s_client(1), eine Übersicht der OpenSSL Tools findet man in der Manpage openssl(1).

Comments (2)  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

Temperatur bei neueren Intel Prozessoren auslesen

Seit FreeBSD 7.0 lässt sich die Kerntemperatur von neuen Intel Prozessoren, welche der Familie der Intel Core oder Neuer angehören, auslesen. Dazu muss zuerst das coretemp Kernel-Modul geladen werden:

# kldload coretemp

Werden die Sensoren erkannt, wird dies in der dmesg angezeigt:

# dmesg | grep coretemp
coretemp0: <CPU On-Die Thermal Sensors> on cpu0
coretemp1: <CPU On-Die Thermal Sensors> on cpu1
coretemp2: <CPU On-Die Thermal Sensors> on cpu2
coretemp3: <CPU On-Die Thermal Sensors> on cpu3

Soll das Modul automatisch beim Systemstart geladen werden, so kann folgender Eintrag in der /boot/loader.conf gemacht werden:

coretemp_load="YES"

Nun lassen sich die Temperaturen mit Hilfe von sysctl(8) auslesen. Die Temperaturen werden dabei in Grad Celsius angezeigt:

# sysctl dev.cpu | grep temperature
dev.cpu.0.temperature: 23
dev.cpu.1.temperature: 21
dev.cpu.2.temperature: 19
dev.cpu.3.temperature: 15

Mehr Informationen zu coretemp findet man in der Manpage coretemp(4).

Comments (5)  Permalink

Aufzeichnen welche Dateien von einem Programm angelegt werden

Mit Hilfe von ftrace lässt sich aufzeichnen, welche Dateien von einem Programm erstellt werden. ftrace findet man in den FreeBSD Ports unter sysutils/ftrace:

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

Im folgenden Beispiel wird aufgezeichnet, welche Dateien angelegt werden, wenn man ein make install in /usr/ports/ports-mgmt/portsopt ausführt. Das Ergebnis wird nach /tmp/filelist geschrieben:

# cd /usr/ports/ports-mgmt/portsopt
# ftrace /tmp/filelist make install
===> 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 /usr/local/sbin
===> Registering installation for portsopt-1.4
# cat /tmp/filelist
/usr/ports/ports-mgmt/portsopt/work
/usr/ports/ports-mgmt/portsopt/work/portsopt-1.4
/usr/ports/ports-mgmt/portsopt/work/portsopt-1.4/portsopt
/usr/ports/ports-mgmt/portsopt/work/.extract_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.patch_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.configure_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.build_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/local/share/nls/POSIX
/usr/local/share/nls/en_US.US-ASCII
/usr/local/sbin/portsopt
/var/db/pkg/portsopt-1.4
/var/db/pkg/portsopt-1.4/+CONTENTS
/var/db/pkg/portsopt-1.4/+DESC
/var/db/pkg/portsopt-1.4/+COMMENT
/var/db/pkg/portsopt-1.4/+MTREE_DIRS
/usr/ports/ports-mgmt/portsopt/work/.PLIST.flattened
/usr/ports/ports-mgmt/portsopt/work/.PLIST.setuid
/usr/ports/ports-mgmt/portsopt/work/.PLIST.writable
/usr/ports/ports-mgmt/portsopt/work/.PLIST.objdump
/usr/ports/ports-mgmt/portsopt/work/.install_done.portsopt._usr_local

Sollen versteckte Dateien nicht aufgezeichnet werden, kann die -i Option verwendet werden:

# cd /usr/ports/ports-mgmt/portsopt && ftrace -i /tmp/filelist make install
===> 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 /usr/local/sbin
===> Registering installation for portsopt-1.4
# cat /tmp/filelist
/usr/local/share/nls/POSIX
/usr/local/share/nls/en_US.US-ASCII
/usr/local/sbin/portsopt
/var/db/pkg/portsopt-1.4
/var/db/pkg/portsopt-1.4/+CONTENTS
/var/db/pkg/portsopt-1.4/+DESC
/var/db/pkg/portsopt-1.4/+COMMENT
/var/db/pkg/portsopt-1.4/+MTREE_DIRS
 Permalink
1-7/7