BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Backup-Paket mit portmaster erstellen

Möchte man, beim Aktualisieren einer Software aus den Ports, ein Backup-Paket der installierten Version erstellen, so kann die -b Option von portmaster verwendet werden:

# portmaster -b <Portname>

Das Paket wird dabei in /usr/ports/packages/portmaster-backup/ gespeichert. Soll direkt ein Paket der aktualisieren Version erstellt werden, so kann die -g Option von portmaster verwendet werden.

# portmaster -g <Portname>

Dieses wird in /usr/ports/packages/All/ gespeichert. Mehr Informationen zu portmaster findet man in der Manpage portmaster(8).

 Permalink

Verbleibende Laptop-Batterielaufzeit anzeigen

Die verbleibende Laufzeit einer Laptop-Batterie kann unter FreeBSD mit Hilfe von sysctl-Variablen angezeigt werden. Die Variable hw.acpi.battery.life zeigt den aktuellen Ladestand in Prozent an, die Variable hw.acpi.battery.time die verbleibende Laufzeit in Minuten:

# sysctl hw.acpi.battery.life
hw.acpi.battery.life: 60
# sysctl hw.acpi.battery.time
hw.acpi.battery.time: 56

Wird der Laptop nicht mit der Batterie sondern dem Stromnetz betrieben, wird als verbleibende Laufzeit eine -1 angezeigt:

# sysctl hw.acpi.battery.life
hw.acpi.battery.life: 100
# sysctl hw.acpi.battery.time
hw.acpi.battery.time: -1
Comments (2)  Permalink

Festplatteninformationen auslesen

Mit Hilfe von diskinfo können auf FreeBSD Informationen zu einer Festplatte ausgelesen werden. Dazu kann der Pfad zur Festplatte, zusammen mit der -v Option an diskinfo übergeben werden. Lässt man die -v Option weg, werden die Kommentare zu den zurückgegebenen Werten weggelassen:

# diskinfo -v /dev/ad0
/dev/ad0
512 # sectorsize
80026361856 # mediasize in bytes (75G)
156301488 # mediasize in sectors
155061 # Cylinders according to firmware.
16 # Heads according to firmware.
63 # Sectors according to firmware.
ad:ABCDEFGXZY # Disk ident.

Verwendet man die -c Option, wird die Festplatte bezüglich der Lesegeschwindigkeit getestet:

# diskinfo -c /dev/ad0
/dev/ad0
512 # sectorsize
80026361856 # mediasize in bytes (75G)
156301488 # mediasize in sectors
155061 # Cylinders according to firmware.
16 # Heads according to firmware.
63 # Sectors according to firmware.
ad:MPB4PAXKGXU0HM # Disk ident.

I/O command overhead:
time to read 10MB block 0.315037 sec = 0.015 msec/sector
time to read 20480 sectors 1.976392 sec = 0.097 msec/sector
calculated command overhead = 0.081 msec/sector

Mit der -t Option werden einfache Leistungstests der Festplatte durchgeführt:

# diskinfo -t /dev/ad0
/dev/ad0
512 # sectorsize
80026361856 # mediasize in bytes (75G)
156301488 # mediasize in sectors
155061 # Cylinders according to firmware.
16 # Heads according to firmware.
63 # Sectors according to firmware.
ad:MPB4PAXKGXU0HM # Disk ident.

Seek times:
Full stroke: 250 iter in 5.575812 sec = 22.303 msec
Half stroke: 250 iter in 4.587227 sec = 18.349 msec
Quarter stroke: 500 iter in 7.910360 sec = 15.821 msec
Short forward: 400 iter in 3.944226 sec = 9.861 msec
Short backward: 400 iter in 3.436463 sec = 8.591 msec
Seq outer: 2048 iter in 0.261576 sec = 0.128 msec
Seq inner: 2048 iter in 0.264893 sec = 0.129 msec
Transfer rates:
outside: 102400 kbytes in 2.911632 sec = 35169 kbytes/sec
middle: 102400 kbytes in 3.452332 sec = 29661 kbytes/sec
inside: 102400 kbytes in 5.580136 sec = 18351 kbytes/sec

Mehr Informationen zu diskinfo findet man in der Manpage diskinfo(8).

 Permalink

Aktuelle Zeit einer Zeitzone anzeigen

Mit Hilfe von zdump läst sich die aktuelle Zeit einer bestimmten Zeitzone anzeigen. Dazu muss einfach der Name der Zeitzone oder die Namen der Zeitzonen an zdump übergeben werden:

# zdump CET UTC America/Toronto
CET Sat Jul 26 10:29:26 2008 CEST
UTC Sat Jul 26 08:29:26 2008 UTC
America/Toronto Sat Jul 26 04:29:26 2008 EDT

Die Zeitzonen, welche abgefragt werden können, findet man unter /usr/share/zoneinfo/. Sowohl auf FreeBSD als auch auf OpenBSD ist zdump im Basissystem vorhanden. Mehr Informationen zu zdump findet man in der Manpage zdump(8).

 Permalink

Carriage Return-Zeichen von DOS-Zeilenumbrüchen entfernen

Textdateien welche mit DOS-Zeilenumbrüchen gespeichert werden, erhalten ein Carriage Return-Zeichen, welches zum Beispiel von less(1) als ^M dargestellt wird. Möchte man nun dieses Zeichen entfernen, kann tr mit der -d Option dazu verwendet werden:

# file dosumbrueche.txt 
dosumbrueche.txt: ASCII text, with CRLF line terminators
# less dosumbrueche.txt
Zeile1^M
Zeile2^M
# tr -d '\r' < dosumbrueche.txt > unixumbrueche
# file unixumbrueche
unixumbrueche: ASCII text
# less unixumbrueche
Zeile1
Zeile2

Sowohl auf FreeBSD als auch auf OpenBSD ist tr im Basissystem vorhanden. Mehr Informationen zu tr findet man in der Manpage tr(1).

Comments (1)  Permalink

Einmalig verwendbare Passwörter benutzen

Auf FreeBSD können zum Anmelden einmalig verwendbare Passwörter mit Hilfe von OPIE benutzt werden. Dazu muss OPIE zuerst auf einem sicheren Kanal mit der -c Option initialisiert werden (am besten auf der Konsole des Rechners). Mit der -s Option kann ein mindestens 5 Zeichen langer Seed (ein zufälliger Initialisierungswert, in folgendem Beispiel abc123) angegeben werden. Während der Initialisierung wird man nach einer mindestend 10 Zeichen langen Passphrase gefragt, welche später zum Generieren der Einweg-Passwörter verwendet werden muss:

# opiepasswd -c -s abc123
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:<Passphrase>
Again new secret pass phrase:<Passphrase>

ID beat OTP key is 499 abc123
BOLO SNOW FOUR SWAT FURY FAY

Das erste generierte Passwort besitzt die Nummer 499. Beim nächsten Anmelden wird man aber nach dem Passwort mit der Nummer 498 gefragt, deshalb muss dieses zuerst abgefragt werden. Dazu übergibt man die Passwort-Nummer und den Seed an opiekey:

# opiekey 498 abc123
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <Passphrase>
FRAU NAIR COCO DRAG SLOB RAFT

Meldet man sich nun zum Beispiel per SSH auf dem Rechner an, wird man nach dem Passwort mit der Nummer 498 gefragt:

# ssh beat@<Rechner>
otp-md5 498 abc123 ext
Password:FRAU NAIR COCO DRAG SLOB RAFT

Es lassen sich auch mehrere Passwörter gleichzeitig generieren. Die Anzahl der Passwörter, welche ausgegeben werden sollen, kann mit der -n Option angegeben werden. Auch muss die Nummer des ersten Passworts, welches generiert werden soll, angegeben werden:

# opiekey -n 5 497 abc123
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <Passphrase>
493: ITEM RUG WORN OLDY FOAL UNIT
494: NINE IVAN DEAD NERO BLUE TAP
495: WEE WADE LOG LAID DANA LAYS
496: FLUB BABE IVAN BURL VAIN HOYT
497: KNOW JOKE ALMA HUED TAIL BIT

Nun können die Passwörter notiert werden. Die Passwortnummern werden bis Null heruntergezählt. Spätestens wenn man bei Null angelangt ist, muss man OPIE neu initialisieren.

Mit Hilfe von opieinfo kann herausgefunden werden, welches Passwort als nächstes verwendet und welcher Seed gebraucht wird.

# opieinfo
497 abc123

Mehr Informationen zu OPIE findet man in der Manpage opiepasswd(1), opiekey(1) und opieinfo(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

patch-Dateien bearbeiten

Mit Hilfe von diff(1) können Änderungen zwischen zwei Versionen einer Textdatei angezeigt werden:

# diff -u datei.orig datei
--- datei.orig 2008-07-05 10:26:27.000000000 +0200
+++ datei 2008-07-05 10:26:18.000000000 +0200
@@ -1 +1 @@
-Inhalt original
+Inhalt neu

Leitet man die Ausgabe von diff in eine Datei um, kann die Änderung danach mit Hilfe von patch(1) zum Beispiel auf eine identische Datei auf einem anderen Rechner angewendet werden:

# diff -u datei.orig datei > datei.patch
# patch < datei.patch
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- datei.orig 2008-07-05 10:26:27.000000000 +0200
|+++ datei 2008-07-05 10:26:18.000000000 +0200
--------------------------
Patching file datei using Plan A...
Hunk #1 succeeded at 1.
done

In den FreeBSD Ports unter misc/patchutils findet man patchutils, welches mehrere Programme enthält, mit denen man patch-Dateien bearbeiten kann.

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

Besitzt man zum Beispiel zwei Versionen eines Patches, so können mit Hilfe von interdiff(1) die Änderungen zwischen den beiden Versionen angezeigt werden. Die Ausgabe von interdiff kann ebenfalls wieder in eine Datei umgeleitet werden, welche danach wieder mit patch(1) angewendet werden kann:

# interdiff pkg_updating_main_c-1.patch pkg_updating_main_c-2.patch > pkg_updating_main_c-diff_1-2.patch

Eine Patch-Datei kann auch die Änderungen von mehreren Datein beinhalten. Möchte man nur Änderungen von bestimmten Dateien aus einem Patch auslesen, kann filterdiff(1) verwendet werden. Mit der -i Option werden nur Änderungen von Dateien angezeigt, welche auf das Filterkriterium passen. Mit der -x Option werden alle Änderungen von Datein angezeigt, welche nicht auf das Filterkriterium passen. Im folgenden Beispiel werden nur die Änderungen an Header-Dateien aus dem Patch angezeigt:

# filterdiff -i '*.h' pkg_updating.patch

Modifizert man einen Patch von Hand, kann es sein, dass Zeilennummern und der Offset im Patch nicht mehr stimmen. Nun kann dazu rediff(1) aufgerufen werden, welches diese an die neuen Änderungen anpasst:

# rediff <Originale Datei> <Modifizierter Patch>

Alternativ dazu kann der Patch direkt mit editdiff(1) bearbeitet werden. Dazu wird ein Editor geöffnet, in welchem der Patch bearbeitet werden kann. Speichert man die Änderungen und schliesst den Editor, werden die Änderungen am Patch direkt umgesetzt:

# editdiff <Patch>

Hat man zwei Patches auf die gleiche Datei erstellt, welche nacheinander angewendet werden sollen, können diese mit combinediff(1) zu einem Patch verbunden werden

# combinediff <Patch1> <Patch2>

Mit lsdiff(1) können alle Dateien angezeigt werden, welche durch den Patch modifiziert werden:

#  lsdiff pkg_updating.patch
src/usr.sbin/pkg_install/lib/lib.h
src/usr.sbin/pkg_install/updating/Makefile
src/usr.sbin/pkg_install/updating/main.c
src/usr.sbin/pkg_install/updating/pathnames.h
src/usr.sbin/pkg_install/version/version.h

Möchte man überprüfen, ob eine gewisse Datei mit dem Patch modifiziert wird, kann grepdiff(1) verwendet werden:

# grepdiff main pkg_updating.patch
src/usr.sbin/pkg_install/updating/main.c

Befindet sich ein Patch auf einer HTML Seite, kann der Quellcode der Seite heruntergeladen werden und danach der Patch aus dem HTML-Code mit Hilfe von dehtmldiff(1) extrahiert werden:

# dehtmldiff <HTML-Datei>
 Permalink
1-7/7