BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Fortschritt einer Pipe beobachten

Mit Hilfe von pv kann der Durchsatz und die Menge der gesendeten Daten durch eine Pipe beobachtet werden. pv findet man in den FreeBSD Ports unter sysutils/pv.

cd /usr/ports/sysutils/pv && make install clean

Nun kann pv vor der zu beobachtenden Pipe aufgerufen werden. Es wird angezeigt, wie viele Daten bereits durch die Pipe gesendet wurden, die verstrichene Bearbeitungszeit und der Durchsatz durch die Pipe:

# dd if=/dev/acd0 bs=2048 | pv | gzip > test.iso.gz
93.6MB 0:00:55 [1.92MB/s] [ <=> ]

Falls möglich, versucht pv die verbleibende Dauer zu errechnen. Ist das nicht möglich, kann bei pv mit der -s Option die Datenmenge angegeben werden, die durch die Pipe gesendet wird und nun kann pv die verbleibende Dauer berechnen.

# dd if=/dev/acd0 bs=2048 | pv -s 130m | gzip > test.iso.gz
11.5MB 0:00:22 [ 603kB/s] [====> ] 8% ETA 0:03:46

Sollen mehrere Pipes beobachtet werden, kann pv zusammen mit -cN und dem Namen des Programmes, zu welchem die Daten durch die Pipe gelenkt werden, verwendet werden:

# bzcat test.bz2 | grep NULL | pv -cN grep | awk '{print $1}' | pv -cN awk > test
grep: 56.9MB 0:00:08 [7.69MB/s] [ <=> ]
awk: 2.82MB 0:00:08 [ 361kB/s] [ <=> ]

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

 Permalink

Einzelnen Port im Portbaum wiederherstellen

Mit portsnap lässt sich der FreeBSD Portbaum aktualisieren. Möchte man nur einen einzelnen Port wiederherstellen, weil dieser gelöscht oder verändert wurde, so kann der Portname mit der Kategorie an ein portsnap extract übergeben werden. Danach wird nur dieser Port wiederhergestellt:

# portsnap extract ports-mgmt/portsopt
/usr/ports/ports-mgmt/portsopt/

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

 Permalink

Unsichtbare Zeichen einer Datei anzeigen

Befinden sich in einer Textdatei unsichtbare Zeichen, werden diese zum Beispiel von cat nicht angezeigt:

# cat testdatei 
RECURSIVE=no
CONFIG=no
   
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do
        case "${COMMAND_LINE_ARGUMENT}" in
                c)              CONFIG=yes ;;
                h)      usage 0 ;;
        r)      RECURSIVE=yes ;;
                *)      usage ;;
        esac
done

Benutzt man cat mit der -v Option werden alle Steuerzeichen angezeigt. Nun sieht man, dass sich ein Ctrl+X (^X) in der Datei befindet:

# cat -v testdatei
RECURSIVE=no
CONFIG=no
  
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do
        case "${COMMAND_LINE_ARGUMENT}" in
                c)              CONFIG=yes ;;
                h)      usage 0 ;;
        r)      RECURSIVE=yes ;;
^X              *)      usage ;;
        esac
done

cat mit der -t Option zeigt nun auch alle Tabulatoren als ^I an:

# cat -t testdatei
RECURSIVE=no
CONFIG=no
  
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do
^Icase "${COMMAND_LINE_ARGUMENT}" in
^I^Ic)^I^ICONFIG=yes ;;
^I^Ih)      usage 0 ;;
    ^Ir)      RECURSIVE=yes ;;
^X^I^I*)      usage ;;
^Iesac
done

Möchte man sich auch die Zeilenumbrüche anzeigen lassen, kann man dazu vis mit der -l Option verwenden, welches Zeilenumbrüche als \$ darstellt:

# vis -l testdatei
RECURSIVE=no\$
CONFIG=no\$
    \$
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do\$
        case "${COMMAND_LINE_ARGUMENT}" in\$
                c)              CONFIG=yes ;;\$
                h)      usage 0 ;;\$
        r)      RECURSIVE=yes ;;\$
\^X             *)      usage ;;\$
        esac\$
done\$

Sowohl cat als auch vis sind auf FreeBSD und OpenBSD im Basissystem vorhanden. Mehr Informationen zu cat und vis findet man in den Manpages cat(1) und vis(1).

 Permalink

Mit pkg_info herausfinden zu welchem Port eine Datei gehört

Möchte man herausfinden, zu welchem Port eine installierte Datei gehört, kann dazu pkg_info mit der -W Option benützt werden:

# pkg_info -W pod2latex
/usr/local/bin/pod2latex was installed by package perl-5.8.8_1

Wird die gesuchte Datei nicht in einem Verzeichnis der $PATH Variable gefunden, muss der komplette Pfad zur Datei angegeben werden:

# pkg_info -W xml2Conf.sh
pkg_info: xml2Conf.sh: file is not in PATH
# pkg_info -W /usr/local/etc/xml2Conf.sh
/usr/local/etc/xml2Conf.sh was installed by package libxml2-2.6.30

Benutzer welche portupgrade installiert haben können dazu auch pkg_which verwenden:

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

 Permalink

make buildworld Fortschritt beobachten

Möchte man bei einem make buildworld in /usr/src nur angezeigt bekommen, bei welchem Schritt man gerade ist und welches Modul zur Zeit gebaut wird, kann dazu worldtools verwendet werden. Die worldtools findet man im FreeBSD Portsbaum unter sysutils/worldtools:

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

Danach kann die Ausgabe von make buildworld mit einer Pipe an whereintheworld weitergeleitet werden. Im folgenden Beispiel wird eine tcsh verwendet und die komplette Ausgabe von make buildworld findet man in der Datei /tmp/build.log:

# cd /usr/src
# make buildworld |& tee /tmp/build.log | whereintheworld
--------------------------------------------------------------
>>> Rebuilding the temporary build tree
--------------------------------------------------------------
>>> stage 1.1: legacy release compatibility shims
--------------------------------------------------------------
>>> stage 1.2: bootstrap tools
--------------------------------------------------------------
>>> stage 2.1: cleaning up the object tree
--------------------------------------------------------------
>>> stage 2.2: rebuilding the object tree
--------------------------------------------------------------
>>> stage 2.3: build tools
--------------------------------------------------------------
>>> stage 3: cross tools
--------------------------------------------------------------
>>> stage 4.1: building includes
--------------------------------------------------------------
>>> stage 4.2: building libraries
--------------------------------------------------------------
=> kerberos5/lib/libasn1 (obj,depend,all,install)

In der untersten Zeile sieht man, was make buildworld gerade zur Zeit macht. Mehr Informationen zu whereintheworld aus den worldtools findet man in der Manpage whereintheworld(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
Comments (3)  Permalink

/etc/master.passwd wiederherstellen

Wurde die /etc/master.passwd gelöscht oder beschädigt, können zum Beispiel keine neue Benutzer mehr angelegt oder die Passwörter der bestehenden Benutzer verändert werden:

# passwd
Changing local password for root
New Password:
Retype New Password:
passwd: /etc/master.passwd: No such file or directory

Mit Hilfe von pwd_unmkdb kann nun die master.passwd aus der /etc/spwd.db generiert werden. pwd_unmkdb findet man im FreeBSD Portsbaum unter sysutils/pwd_unmkdb:

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

Nun kann ins /etc Verzeichnis gewechselt werden und die master.passwd wiederhergestellt werden:

# cd /etc && pwd_unmkdb
dbopen()'ing spwd.db...  Done
fopen()'ing master.passwd...  Done
Looping through the records in spwd.db...  Done

Mehr Informationen zu pwd_unmkdb findet man in der Manpage pwd_unmkdb(8), Informationen zur master.passwd in passwd(5).

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

ZFS in einer FreeBSD Jail verwenden

Auf FreeBSD gibt es die Möglichkeit, innerhalb einer Jail das ZFS Dateisystem zu administrieren. Dazu muss auf dem Hostsystem ZFS aktiviert werden:

# echo 'zfs_enable="YES"' >> /etc/rc.conf 
# /etc/rc.d/zfs start

Nachdem man eine FreeBSD Jail erstellt hat, muss sichergestellt werden, dass die Jail auch auf /dev/zfs zugreifen kann. Dazu kann in der /etc/devfs.rules folgender Eintrag eingefügt werden:

[zfs=10]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'zfs' unhide

Nun müssen bei den Jail-Einträgen der /etc/rc.conf folgende Einträge hinzugefügt werden:

jail_<Jailname>_devfs_enable="YES"
jail_<Jailname>_devfs_ruleset="zfs"

Damit innerhalb der Jail ZFS Dateisysteme gemountet werden können, muss die security.jail.mount_allowed auf 1 gesetzt werden. Durch das Setzen von security.jail.enforce_statfs auf 0 werden alle gemounteten Dateisysteme des Hostsystemes in der Jail sichtbar. Das Setzen beider Werte wird für das Verwenden von ZFS innerhalb einer Jail benötigt, können jedoch die Sicherheit des Systemes heruntersetzen.

# sysctl security.jail.mount_allowed=1
# sysctl security.jail.enforce_statfs=0
# echo security.jail.mount_allowed=1 >> /etc/sysctl.conf
# echo security.jail.enforce_statfs=0 >> /etc/sysctl.conf

Danach kann ein ZFS-Pool erstellt werden. In folgendem Beispiel wird der ZFS-Pool /tank aus /dev/ad0s1e erstellt:

# zpool create tank /dev/ad0s1e
WARNING: ZFS is considered to be an experimental feature in FreeBSD.
ZFS filesystem version 6
ZFS storage pool version 6

Nun wird das ZFS-Dateisystem erstellt, welches man danach der Jail zur Verfügung stellt.

# zfs create tank/jail
# zfs set jailed=on tank/jail

Damit das ZFS-Dateisystem der Jail zugewiesen werden kann, muss die Jail-ID der Jail mit jls(8) herausgefunden werden:

# jls
JID IP Address Hostname Path
1 <IP> <Jail-Name> <Pfad zur Jail>

Nun wird tank/jail der Jail mit der ID 1 zugewiesen:

# zfs jail 1 tank/jail

Danach kann das ZFS Dateisystem innerhalb der Jail administriert werden. Im folgenden Beispiel wird innerhalb der Jail das ZFS-Dateisystem tank/jail/beat erstellt und nach /home/beat gemountet:

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

Startet man das Hostsystem neu, wird im Moment das ZFS-Dateisystem nicht automatisch wieder der Jail zugewiesen. Dazu muss die Jail-ID der Jail wieder mit jls bestimmt werden:

# zfs jail <JID> tank/jail

Nun können die ZFS-Dateisysteme innerhalb der Jail gemountet werden.

jail# zfs mount -a

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

Dateien mit identischem Inhalt finden

Auf einem System entstehen mit der Zeit viele Dateien mit identischem Inhalt. Diese können mit samefile aufgespürt werden. samefile findet man im FreeBSD Portbaum unter sysutils/samefile:

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

samefile muss einfach eine Liste von Dateien übergeben werden, welche verglichen werden sollen. Dies kann am einfachsten mit find(1) gemacht werden:

# echo test > datei1
# cp datei1 datei2
# cp datei2 datei3
# echo test2 >> datei2
# ln datei1 datei4
# find . -type f | samefile
5 ./datei1 ./datei3 = 2 1

Die Ausgabe von samefile zeigt in der ersten Spalte die Grösse der Datei in Byte an, dann die Dateinamen der identischen Dateien. Liegen die Dateien auf der gleichen Partition, wird dies durch ein Gleichheitszeichen in der dritten Spalte angezeigt. Die letzten beiden Werte zeigen die Anzahl Hard-Links, die auf die beiden Dateien zeigen.

Mit der -v Option werden nach der Liste mit den identischen Dateien einige Werte zu samefile angezeigt:

# find /home/beat -type f | samefile -v
...
Ganz lange Liste
...
34102 files left after removing sizes that appear only once.
6135 groups of files with same size.
Largest group of one size is 979 files with size 53.
Memory consumption:
Largest equality table used 478731 bytes.
Binary tree built with 15174 nodes of size 24 = 364176 bytes.
Allocated 43141 nodes of size 16 = 690256 bytes for file lists.
You have a total of 819245964 bytes in identical files.

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

 Permalink

Apache-Anfragen in Echtzeit betrachten

Mit apachetop lassen sich Anfragen an einen Apache-Webserver ähnlich wie Prozesse mit top(1) betrachen. apachetop findet man in den FreeBSD Ports unter sysutlis/apachetop:

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

Beim Starten von apachetop kann mit der -f Option der Pfad zum Apache-Access-Log angegeben werden, aus dem apachetop die Informationen liest:

# apachetop -f /var/log/httpd-access.log

Im oberen Teil von apachetop wird nun eine kleine Statistik angezeigt über die Anzahl Anfragen, die übertragenen Daten und die zurückgegebenen Statuscodes seit apachetop läuft und der letzten 30 Sekunden. Im unteren Teil von apachetop werden die letzten Anfragen angezeigt. Mit der d-Taste kann die Ansicht zwischen aufgerufenen URLs, Refferrers und Client-IPs gewechselt werden.

last hit: 12:01:23         atop runtime:  0 days, 00:08:59             12:01:26
All: 47 reqs ( 0.1/sec) 145.2K ( 283.7B/sec) 3162.9B/req
2xx: 25 (53.2%) 3xx: 22 (46.8%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 30s): 15 reqs ( 0.6/sec) 9455.0B ( 350.2B/sec) 630.3B/req
2xx: 2 (13.3%) 3xx: 13 (86.7%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)

REQS REQ/S KB KB/S URL
3 0.19 0.0 0.0 /
1 0.17 8.5 1.4*/blog/archive/2007/05/26/zfs-auf-freebsd.html
1 0.20 0.8 0.2 /dynimages/gravatar/a71087548eea50769758d7ffbf288515
1 0.33 0.0 0.0 /themes/chrueterng/css/main_chrueter.css
1 0.33 0.0 0.0 /themes/chrueterng/css/mobile.css
1 0.33 0.0 0.0 /webinc/js/livesearch.js
1 0.33 0.0 0.0 /webinc/js/openId.js
1 0.33 0.0 0.0 //themes/chrueterng/buttons/freebsd.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/rss.png
1 0.33 0.0 0.0 /themes/chrueterng/buttons/comments.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/xhtml10.png
1 0.33 0.0 0.0 /files/images/logo.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/chruetertee.png

Mit der "Pfeil-nach-unten-" bzw. "Pfeil-nach-oben-Taste", kann ein Stern zwischen den Einträgen verschoben werden. Drückt man nun die "Pfeil-nach-Rechts-Taste", werden Details zu diesem Eintrag angezeigt.

last hit: 12:01:29         atop runtime:  0 days, 00:09:09             12:01:36
All: 50 reqs ( 0.1/sec) 176.9K ( 339.1B/sec) 3622.0B/req
2xx: 27 (54.0%) 3xx: 23 (46.0%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 27s): 18 reqs ( 0.7/sec) 40.9K ( 1551.9B/sec) 2327.9B/req
2xx: 4 (22.2%) 3xx: 14 (77.8%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)

REQS REQ/S KB KB/S
1 0.06 8.5 0.5 /blog/archive/2007/05/26/zfs-auf-freebsd.html
HOST
1 0.06 8.5 0.5 89.xxx.xxx.xxx [89.xxx.xxx.xxx]

REFERRER
1 0.06 8.5 0.5 www.google.ch/search?source=ig&hl=de&rlz=&q=chruetertee+zfs&btnG=Google-Suche&meta=

Mit der "Pfeil-nach-links-Taste" wird die Detailansicht wieder verlassen. apachetop beendet man mit der q-Taste.

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

 Permalink

Partition mit GELI verschlüsseln

Möchte man auf FreeBSD eine Partition verschlüsseln, kann man dazu GELI verwenden. Im folgenden Beispiel wird die Partition ad0s1f verschlüsselt und nach /home/beat gemountet.

Damit das GELI-Kernelmodul beim Starten des Systems geladen wird, muss folgender Eintrag in der /boot/loader.conf gemacht werden:

# echo 'geom_eli_load="YES"' >> /boot/loader.conf

Nun kann ein Schlüssel generiert werden, welcher zum Verschlüsseln der Partition benötigt wird. Der Schlüssel sollte dabei an einem Ort gespeichert werden, an welchem er nicht einfach überschrieben oder gelöscht werden kann. Gegebenenfalls kann der Schlüssel auch auf einem USB-Stick gespeichert werden, so dass man zum Einhängen der verschlüsselten Partition neben einem Passwort auch den USB-Stick besitzen muss. In diesem Fall kann die Partition allerdings nicht ohne Weiteres während des Bootens gemountet werden. Im folgenden Beispiel wird der Schlüssel unter /root gespeichert:

# dd if=/dev/random of=/root/ad0s1f.key bs=64 count=1

Danach wird die verschlüsselte Partition initiiert, dabei muss man ein Passwort festlegen:

# geli init -s 4096 -K /root/ad0s1f.key /dev/ad0s1f
Enter new passphrase:
Reenter new passphrase:

Nun wird die Partition ins System eingebunden, dabei muss man das vorher bestimmte Passwort eingeben:

# geli attach -k /root/ad0s1f.key /dev/ad0s1f
Enter passphrase:

Jetzt wird die neue Partition mit Zufallswerten überschrieben, das kann eine Zeit dauern:

# dd if=/dev/random of=/dev/ad0s1f.eli bs=1m

Danach wird ein neues Dateisystem auf der verschlüsselten Partition erstellt und diese das erste Mal ins System gemountet:

# newfs /dev/ad0s1f.eli
# mount /dev/ad0s1f.eli /home/beat

Die verschlüsselte Partition kann danach wie folgt geunmountet werden:

# umount /home/beat
# geli detach ad0s1f.eli

Soll die Partition automatisch beim Systemstart gemountet werden, müssen folgende Einträge in der /etc/rc.conf gemacht werden:

geli_devices="ad0s1f"
geli_ad0s1f_flags="-k /root/ad0s1f.key"

Jetzt noch den entsprechenden Eintrag in der /etc/fstab machen:

/dev/ad0s1f.eli         /home/beat              ufs             rw      0       0

Startet man nun das System neu, wird man automatisch nach dem Passwort gefragt und die verschlüsselte Partition wird gemountet.

Mehr Informationen zu verschlüsselten Partitionen mit GELI findet man in der Manpage geli(8). Wie man den Swap-Bereich mit GELI verschlüsselt, findet man in folgender Anleitung: http://www.chruetertee.ch/blog/archive/2007/06/30/swap-verschluesseln.html


Comments (1)  Permalink
Prev Next301-310/521