BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

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

master.passwd mit vipw bearbeiten

Möchte man die /etc/master.passwd manuell bearbeiten, so empfiehlt es sich, dazu vipw zu verwenden. Startet man vipw, wird zuerst die /etc/master.passwd gesperrt. Wird nun vipw parallel nochmals gestartet, so wird ein Fehler ausgegeben:

# vipw 
vipw: the password db file is busy

Ist die master.passwd nicht gesperrt, wird ein Editor gestartet, womit die master.passwd bearbeitet werden kann. Beim Speichern der Datei wird sie auf syntaktische Fehler überprüft:

pwd_mkdb: corrupted entry
pwd_mkdb: at line #34
pwd_mkdb: /etc/pw.nK2GGB: Inappropriate file type or format
re-edit the password file? y

Werden keine Fehler gefunden, wird die Datei abgespeichert, die /etc/passwd generiert und die spwd.db und pwd.db mit Hilfe von pwd_mkdb automatisch erstellt.

Auf FreeBSD ist vipw bereits im Basissystem vorhanden. Mehr Informationen zu vipw findet man in der Manpage vipw(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

Gestartete Prozesse aufzeichnen

Auf FreeBSD können aus Sicherheitsgründen oder zur Kontrolle der Benutzer alle gestarteten Prozesse aufgezeichnet werden. Dazu muss zuerst die entsprechende Logdatei angelegt werden.

# touch /var/account/acct

Nun kann das Aufzeichnen mit Hilfe von accton gestartet werden:

# accton /var/account/acct

Soll das Aufzeichnen bei einem Neustart des Systems automatisch wieder gestartet werden, muss ein entsprechender Eintrag in der /etc/rc.conf gemacht werden:

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

Nun können die auf dem System ausgeführten Prozesse mit Hilfe von lastcomm ausgelesen werden. Dabei werden die gebrauchte CPU-Zeit und der Zeitpunkt, an dem der Prozess gestartet wurde, angezeigt:

# lastcomm | head
cron             -F      root             __        0.001 secs Sat Aug 16 14:03
sh               -       beat             __        0.004 secs Sat Aug 16 14:03
sh               -       beat             __        0.007 secs Sat Aug 16 14:03
fetch            -       beat             __        0.008 secs Sat Aug 16 14:03
sh               -       beat             __        0.005 secs Sat Aug 16 14:03
rm               -       beat             __        0.001 secs Sat Aug 16 14:03
sh               -F      beat             __        0.001 secs Sat Aug 16 14:03
awk              -       beat             __        0.002 secs Sat Aug 16 14:03
sh               -F      beat             __        0.000 secs Sat Aug 16 14:03
date             -       beat             __        0.002 secs Sat Aug 16 14:03

Nun kann mit lastcomm auch abgefragt werden, welcher Prozess wann gestartet wurde. Die -S Option zeigt die Startzeit des Prozesses an, die -E Option die Zeit, zu welcher der Prozess beendet wurde:

# lastcomm -SE mysqlcheck
mysqlcheck       -       root             __       Sat Aug 16 04:59 Sat Aug 16 05:03
mysqlcheck       -       root             __       Sat Aug 16 04:27 Sat Aug 16 04:59

Auch können die gestarteten Prozesse eines Benutzers ausgelesen werden:

#  lastcomm beat | head
sh               -       beat             __        0.004 secs Sat Aug 16 14:18
sh               -       beat             __        0.007 secs Sat Aug 16 14:18
fetch            -       beat             __        0.008 secs Sat Aug 16 14:18
sh               -       beat             __        0.005 secs Sat Aug 16 14:18
rm               -       beat             __        0.001 secs Sat Aug 16 14:18
sh               -F      beat             __        0.001 secs Sat Aug 16 14:18
awk              -       beat             __        0.002 secs Sat Aug 16 14:18
sh               -F      beat             __        0.000 secs Sat Aug 16 14:18
date             -       beat             __        0.002 secs Sat Aug 16 14:18
sh               -F      beat             __        0.001 secs Sat Aug 16 14:18

Möchte man in Echtzeit anschauen, welche Prozesse ausgeführt werden, so kann folgender Befehl verwendet werden:

#  tail -f -c 0 /var/account/acct | lastcomm -f -
pt_chown         -       root             __        0.002 secs Sat Aug 16 14:10
csh              -F      beat             ttyp2     0.001 secs Sat Aug 16 14:10
[                -       beat             ttyp2     0.002 secs Sat Aug 16 14:10
sleep            -       root             __        0.001 secs Sat Aug 16 14:08
id               -       root             __        0.002 secs Sat Aug 16 14:10
sh               -F      root             __        0.000 secs Sat Aug 16 14:10
sed              -       root             __        0.002 secs Sat Aug 16 14:10
sh               -F      root             __        0.001 secs Sat Aug 16 14:10
dirname          -       root             __        0.001 secs Sat Aug 16 14:10
realpath         -       root             __        0.002 secs Sat Aug 16 14:10
perl5.8.8        -       root             __        0.197 secs Sat Aug 16 14:10
sh               -       root             __        0.012 secs Sat Aug 16 14:10
sh               -F      root             __        0.001 secs Sat Aug 16 14:10
head             -       root             __        0.002 secs Sat Aug 16 14:10
[...]

Mit Hilfe von sa können nun Statistiken aus den gesammelten Daten erstellt werden. Mit Hilfe der -m Option kann eine Statistik pro Systembenutzer erstellt werden. In der ersten Spalte wird der Benutzername, in der zweiten die Anzahl aufgerufener Befehle, in der dritten Spalte die verbrauchte CPU Zeit in Minuten und in der vierten Spalte die Anzahl I/O Operationen angezeigt. Die letzte Spalte zeigt das "CPU storage Integral" an.

Die Informationen aus /var/account/acct werden regelmässig zusammengefasst und in zwei Dateien namens /var/account/savacct und /var/account/usracct geschrieben. Sollen diese Zusammenfassungen von sa nicht konsultiert werden, kann die -i Option verwendet werden:

# sa -m
root                355295 2469616839080897.00cpu 4680095707762672640tio4716451977516570624k*sec
operator              1320 2444245624632115.00cpu 4619567317775286272tio4673811998809535488k*sec
sshd                    24 2438677375134378.50cpu            0tio4657441095305658368k*sec
smmsp                   46 2433793290438792.50cpu 4621256167635550208tio4663265208397997056k*sec
beat                 55809 2457577981511816.50cpu 4624633867356078080tio4700035557291664384k*sec
guest                  195 2446241946682436.50cpu 4638496509959077888tio4669250949699600384k*sec
nobody                 384         1.32cpu       183408tio       23944k*sec
# sa -mi
root                 26203         8.28cpu       414130tio     1569806k*sec
operator               840         0.05cpu           10tio       53464k*sec
sshd                     6         0.00cpu            0tio         850k*sec
smmsp                   31         0.00cpu           61tio        9326k*sec
beat                 35755         2.30cpu          225tio     2961561k*sec
nobody                 384         1.32cpu       183408tio       23944k*sec

Ruft man sa ohne Optionen auf, werden die Statistiken pro Befehl angezeigt.:

#  sa | head
    6734      10.511re       10.46cp        0avio     6866k   cc1
    1992       7.495re        6.51cp        0avio     2122k   perl5.8.8
    1017       9.142re        4.22cp       16avio     1148k   bsdtar
   46443     484.530re        3.28cp        0avio    14967k   sh
     170      19.333re        3.10cp     3459avio       41k   find
  157832     176.759re        2.12cp        0avio    42037k   sh*
   48233      15.835re        2.03cp        0avio    26532k   sed
      26       2.005re        2.00cp        1avio       44k   perl
     608       2.390re        1.75cp       19avio      760k   mtree

Die erste Spalte zeigt an, wie oft der Befehl ausgeführt wurde, die zweite die Laufzeit in Minuten, die dritte Spalte die totale CPU Zeit in Minuten, die vierte Spalte die durchschnittliche Anzahl I/O Operationen. Möchte man die Liste nach der durchschnittlichen Anzahl I/O Operationen sortiert haben, kann die -d Option verwendet werden. Soll nach totalen CPU-Zeit sortiert werden, verwendet man die -k Option.

Mehr Informationen findet man in den Manpages accton(8), lastcomm(1) und sa(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

Textdateien zeilenweise verbinden

Möchte man mehrere Textdateien miteinander zeilenweise verbinden, kann man dazu paste verwenden. Im folgenden Beispiel werden zwei Dateien mit je drei Zeilen verbunden:

# cat datei1
Zeile 1.1
Zeile 1.2
Zeile 1.3
# cat datei2
Zeile 2.1
Zeile 2.2
Zeile 2.3
# paste datei1 datei2
Zeile 1.1 Zeile 2.1
Zeile 1.2 Zeile 2.2
Zeile 1.3 Zeile 2.3

Auch kann die Ausgabe eines Befehls mit paste spaltenweise dargestellt werden. Folgendes Beispiel zeigt die Ausgabe von ls in drei Spalten an:

# ls
datei0  datei1  datei2  datei3  datei4  datei5  datei6  datei7  datei8  datei9
# ls | paste - - -
datei0  datei1  datei2
datei3  datei4  datei5
datei6  datei7  datei8
datei9

Mit der -s Option können alle Zeilenumbrüche in einer Datei in Tabulatoren umgewandelt werden:

# cat datei1
Zeile 1.1
Zeile 1.2
Zeile 1.3
# paste -s datei1
Zeile 1.1  Zeile 1.2  Zeile 1.3

Verwendet man die -d Option, kann angegeben werden, wie die Zeilenumbrüche ersetzt werden sollen. Im folgenden Beispiel wird der erste Zeilenumbruch in einen Tabulator, der zweite in einen Zeilenumbruch umgewandelt:

# cat datei1
Zeile 1.1
Zeile 1.2
Zeile 1.3
Zeile 1.4
Zeile 1.5
Zeile 1.6
Zeile 1.7
Zeile 1.8
Zeile 1.9
Zeile 1.0
# paste -s -d '\t\n' datei1
Zeile 1.1       Zeile 1.2
Zeile 1.3       Zeile 1.4
Zeile 1.5       Zeile 1.6
Zeile 1.7       Zeile 1.8
Zeile 1.9       Zeile 1.0

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

 Permalink

Dateiinformationen auslesen

Mit Hilfe von finfo lassen sich Informationen zu einer Datei auslesen. Im FreeBSD Portbaum findet man finfo unter sysutils/finfo:

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

Nun können verschiedene Informationen über eine Datei angezeigt werden:

# finfo /usr/sbin/pkg_updating 
File  : /usr/sbin/pkg_updating
Type  : Regular File
Inode : 3697844
Modes : r-xr-xr-x 
Links : 1
Size  : 16104 Bytes (15.73K) (0.02M)
Blocks: 32
Mt Ma : 000
Mt Mi : 0x00000060
IO BS : 4096
User  : root (0)
Group : wheel (0)
Last Accessed  : Sat Aug  2 17:46:44 2008
Last Modifed   : Thu Jul 24 02:02:31 2008
Status Changed : Thu Jul 24 02:02:31 2008

Möchte man Informationen zu einem Symlink auslesen, kann die -l Option von finfo verwendet werden:

# finfo -l /sys
File  : /usr/src/sys
Type  : Symbolic Link
Inode : 8
Modes : rwxr-xr-x 
Links : 1
Size  : 11 Bytes (0.01K) (0.00M)
Blocks: 0
Mt Ma : 000
Mt Mi : 0x0000005b
IO BS : 4096
User  : root (0)
Group : wheel (0)
Last Accessed  : Thu Jul 24 01:57:03 2008
Last Modifed   : Thu Jul 24 01:57:03 2008
Status Changed : Thu Jul 24 01:57:03 2008

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

 Permalink

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
Prev Next31-40/84