BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Pakete mit Abhängigkeiten herunterladen

Mit Hilfe von pkg_fetch können FreeBSD Pakete heruntergeladen werden, ohne dass die Pakete installiert werden. pkg_fetch wird als Teil von portupgrade installiert, welches man im Portsbaum unter ports-mgmt/portupgrade findet:

# cd /usr/ports/ports-mgmt/portupgrade make install clean

Nun kann das gewünschte Paket heruntergeladen werden:

# pkg_fetch newsbeuter
--->  Fetching newsbeuter-1.0
/var/tmp/portupgradehUUJ0aUL/newsbeuter-1.0.tb 100% of 2025 kB   10 MBps
--->  Downloaded as newsbeuter-1.0.tbz
--->  Identifying the package /var/tmp/portupgradehUUJ0aUL/newsbeuter-1.0.tbz
--->  Saved as /usr/ports/packages/All/newsbeuter-1.0.tbz

Sollen alle weiteren Pakete, von welchen das Paket abhängig ist, heruntergeladen werden, so kann die -R Option verwendet werden:

# pkg_fetch -R <Paket>

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

 Permalink

ZFS Dateisystemoptionen verwenden

Mit UFS können auf FreeBSD verschiedene Mount-Optionen angegeben werden, mit welchen eine Partition gemountet werden kann. So kann das Schreiben der Zugriffszeit mit noatime, das Ausführen von Programmen mit noexec und das Verwenden des setuid-Bit mit der nosuid Option verhindert werden:

# mount -o noatime,noexec,nosuid /dev/da0s1d /tmp

Diese Optionen können auch mit ZFS gesetzt werden. Dazu muss zuerst ein ZFS Dateisystem vorhanden sein:

# zfs create tank/beat
# zfs set mountpoint=/home/beat tank/beat

Bei jeder Datei wird die Zeit des letzten Zugriffs festgehalten. Werden diese Daten nicht benötigt, kann dies deaktiviert werden, was unter anderem auf Dateisystemen mit viel Dateizugriffen die Performance verbessern kann:

# cd /home/beat
# echo test > datei
# stat -f "access: %Sa" datei
access: Aug 26 19:44:07 2008
# cat datei
test
# stat -f "access: %Sa" datei
access: Aug 26 19:44:20 2008
# zfs set atime=off tank/beat
# cat datei
test
# stat -f "access: %Sa" datei
access: Aug 26 19:44:20 2008

Auch kann verhindert werden, dass innnerhalb eines ZFS Dateisystemes Programme ausgeführt werden:

# cp -p /sbin/ping /home/beat/
# ./ping -c 1 localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.080 ms

--- localhost ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.080/0.080/0.080/0.000 ms
# zfs set exec=off tank/beat
# ./ping -c 1 localhost
./ping: Permission denied.

Zusätzlich lässt sich auch das setuid-Bit innerhalb eines ZFS Dateisystemes deaktivieren:

# cp -p /usr/bin/passwd /home/beat
# su - beat
$ ./passwd
Changing local password for beat
Old Password:
New Password:
Retype New Password:
$ exit
# zfs set setuid=off tank/beat 
# su - beat
$ ./passwd
Old Password:
passwd: sorry

Mehr Informationen zu ZFS findet man in der Manpage zfs(8). Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Alle Änderungen eines ZFS-Pools anzeigen
Automatisch ZFS Snapshots erstellen
Comments (1)  Permalink

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
1-7/7