BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Speicherplatz der Benutzer mit Quotas einschränken

Mit Hilfe von Quotas kann der Speicherplatz, welchen die Benutzer zur Verfügung haben, eingeschränkt werden. Dazu muss die Quota Option in der Kernelkonfiguration vorhanden sein:

options		QUOTA

Ist die Option noch nicht vorhanden, muss der Kernel neu gebaut werden:

# cd /usr/src && make kernel KERNCONF=<Name der Kernelkonfiguration>

Nun können die Quotas in der /etc/rc.conf aktiviert werden. Normalerweise werden die Quotas beim Systemstart überprüft. Da die Überprüfung unter Umständen einige Zeit in Anspruch nehmen kann, kann sie mit check_quotas="NO" in der rc.conf deaktiviert werden:

# echo 'enable_quotas="YES"' >> /etc/rc.conf
# echo 'check_quotas="NO"' >> /etc/rc.conf

In der /etc/fstab kann nun festgelegt werden, auf welchen Dateisystemen Quotas eingerichtet werden sollen. Möchte man die Quotas pro Benutzer aktivieren, benutzt man die Option userquotas, für Gruppen groupquota:

# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad0s1b             none            swap    sw              0       0
/dev/ad0s1a             /               ufs     rw              1       1
/dev/ad0s1e             /tmp            ufs     rw              2       2
/dev/ad0s1f             /usr            ufs     rw              2       2
/dev/ad0s1g             /usr/home       ufs     rw,userquota    2       2
/dev/ad0s1d             /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0

Nun muss die Maschine neu gestartet werden, um den neuen Kernel zu laden und die Quotas zu aktvieren:

# shutdown -r now

Ist die Maschine neu gestartet, können die Quotas für die Benutzer festgelegt werden. Dazu verwendet man die -u Option von edquota. Sollen die Quotas pro Gruppe festgelegt werden, verwendet man die -g Option:

# edquota -u test
edquota: creating quota file /usr/home/quota.user

Nun wird ein Texteditor geöffnet. Damit können die Limits für den verwendeten Speicherplatz und/oder die belegten Inodes gesetzt werden. Das Soft-Limit kann vom Benutzer für eine gewisse Zeit (normalerweise 7 Tage) überschritten werden, das Hard-Limit kann nicht überschritten werden:

Quotas for user test:
/usr/home: kbytes in use: 0, limits (soft = 1024000, hard = 2048000)
        inodes in use: 0, limits (soft = 1024, hard = 2048)

Nach dem Speichern der Datei kann die aktuelle Quota-Konfiguration abgerufen werden:

# quota -v test
Disk quotas for user test (uid 1001):
     Filesystem   usage   quota   limit   grace   files   quota   limit   grace
      /usr/home      20  1024000 2048000              10    1024    2048

Überschreitet der Benutzer das Soft-Limit, wird die Zeit, wie lange das Soft-Limit noch überschritten werden kann, angezeigt:

# quota -v test
Disk quotas for user test (uid 1001):
     Filesystem   usage   quota   limit   grace   files   quota   limit   grace
      /usr/home 1152644* 1024000 2048000   7days      13    1024    2048

Das Hard-Limit kann nicht überschritten werden:

# quota -v test
Disk quotas for user test (uid 1001):
     Filesystem   usage   quota   limit   grace   files   quota   limit   grace
      /usr/home 2047974* 1024000 2048000   7days      15    1024    2048
# cp /tmp/ports.tar.gz ~
/usr/home: warning, user disk quota exceeded
/usr/home: write failed, user disk limit reached
cp: ports.tar.gz: Disc quota exceede

Mehr Informationen zu Quotas findet man in den Manpages quota(1) und edquota(8).

 Permalink

Lokale Kopie der FreeBSD Dokumentation

Möchte man eine aktuelle lokale Kopie der offiziellen FreeBSD Dokumentation, welche unter anderem das Handbuch beinhaltet, zur Verfügung haben, so muss zuerst der textproc/docproj-nojadetex Port installiert werden:

# cd /usr/ports/textproc/docproj-nojadetex && make install clean

Danach kann eine neue Sup-Datei für die Dokumentation erstellt werden. Dazu muss der gewünschte CVSup Server eingetragen werden:

*default host=cvsup.<mirror>.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
doc-all

Nun können die Quelldateien der Dokumentation mit csup heruntergeladen werden:

# csup -L 2 <Pfad zur Doc-Sup-Datei>

Die Quelldateien werden nach /usr/doc heruntergeladen. Die einzelnen Dokumente der Dokumentation sind je nach Sprache und Dokumentationsart in verschiedene Unterverzeichnisse aufgeteilt. Das FreeBSD Handbuch in deutsch befindet sich unter /usr/doc/de_DE.ISO8859-1/books/handbook, die englische Version unter /usr/doc/en_US.ISO8859-1/books/handbook. Sollen nun die dazugehörigen HTML-Seiten generiert werden, kann make im entsprechenden Verzeichnis aufgerufen werden:

# cd /usr/doc/en_US.ISO8859-1/books/handbook && make

Möchte man die lokale Kopie lesen, kann im entsprechenden Verzeichnis die Datei index.html mit einem Browser aufgerufen werden.

 Permalink

/etc/group auf Syntaxfehler überprüfen

Editiert man die Gruppendatei /etc/group von Hand, so kann diese danach mit Hilfe von chkgrp auf Syntaxfehler überprüft werden:

# chkgrp
chkgrp: /etc/group: line 17: missing field(s)
chkgrp: /etc/group: line 39: GID is not numeric
chkgrp: /etc/group: line 42: ' ' invalid character
chkgrp: /etc/group: line 42: field 1 contains whitespace

Auch kann der Pfad zu einer alternativen Datei angegeben werden, welche überprüft werden soll:

# chkgrp /tmp/group.new 
/tmp/group.new is fine

Auf FreeBSD ist chkgrp schon im Basissystem vorhanden. Mehr Informationen zu chkgrp findet man in der Manpage chkgrp(8).

 Permalink

Name einer Netzwerkschnittstelle ändern

Auf FreeBSD kann der Name einer Netzwerkschnittstelle mit Hilfe von ifconfig umbenannt werden.Im folgenden Beispiel wird die Schnittstelle bge1 in backup umbenannt. Ist der Name der Schnittstelle geändert, so kann die Schnittstelle nicht mehr unter dem ursprünglichen Namen bge1 angesprochen werden:

# ifconfig bge1
bge1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0f:20:aa:bb:cc
        inet6 fe80::20f:20ff:feaa:bbcc%bge1 prefixlen 64 scopeid 0x2
        inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active
# ifconfig bge1 name backup
# ifconfig bge1
ifconfig: interface bge1 does not exist
# ifconfig backup
backup: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0f:20:aa:bb:cc
        inet6 fe80::20f:20ff:feaa:bbcc%backup prefixlen 64 scopeid 0x2
        inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active

Soll der Name der Schnittstelle auch nach einem Neustart des Systems erhalten bleiben, so kann folgender Eintrag in der /etc/rc.conf gemacht werden:

ifconfig_bge1_name="backup"
ifconfig_backup="inet 10.0.0.2 netmask 255.255.255.0"

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

 Permalink

Alle Änderungen eines ZFS-Pools anzeigen

Mit Hilfe von zpool history können alle Befehle, die auf einen ZFS-Pool angewandt wurden, angezeigt werden:

# zpool history
History for 'tank':
2008-09-05.21:11:04 zpool create tank /dev/ad0s2
2008-09-05.21:12:33 zfs create tank/src
2008-09-05.21:12:36 zfs create tank/obj
2008-09-05.21:12:40 zfs create tank/ports
2008-09-05.21:12:55 zfs set mountpoint=/usr/src tank/src
2008-09-05.21:13:02 zfs set mountpoint=/usr/obj tank/obj
2008-09-05.21:13:12 zfs set mountpoint=/usr/ports tank/ports
2008-09-07.23:40:01 zfs set compression=gzip tank/src
2008-09-06.19:20:01 zfs snapshot tank/ports@upgrade
2008-09-10.21:22:05 zfs destroy tank/ports@upgrade
2008-09-29.18:30:44 zfs create tank/doc
2008-09-29.18:30:58 zfs set mountpoint=/usr/doc tank/doc
2008-09-29.18:32:45 zfs set compression=lzjb tank/doc

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
Automatisch ZFS Snapshots erstellen
ZFS Dateisystemoptionen verwenden
Comments (1)  Permalink

Coredump analysieren

Benutzer der kommenden FreeBSD Versionen 6.4 und 7.1 können mit Hilfe von crashinfo automatisch einen Coredump nach einem Absturz analysieren. Dazu muss ein coredump in /var/crash vorhanden sein:

# ls /var/crash/
bounds          info.0          minfree         vmcore.0

Sind mehrere Coredumps vorhanden wird der aktuellste Coredump analysiert. Wird crashinfo aufgerufen, werden automatisch Debuggerinformationen und Systeminformationen zur Zeit des Absturzes mit Hilfe von ps, vmstat, pstat, iostat, ipcs, nfsstat, netstat, fstat und dmesg aus dem Coredump ausgelesen und in einer Textdatei gespeichert:

# crashinfo
Writing crash summary to /var/crash/core.txt.0.

Eine Beispielausgabe von crashinfo findet man hier: core.txt.0. Mehr Informationen zu crashinfo findet man in der Manpage crashinfo(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

FreeBSD Portbaum durchsuchen

Mit Hilfe von psearch kann der FreeBSD Portbaum nach einem gesuchten Wort durchsucht werden. Standardmässig wird dabei der Portname und die "Short description" durchsucht. Im Portbaum findet man psearch unter ports-mgmt/psearch:

# cd /usr/ports/ports-mgmt/psearch/ && make install clean

Bei der Suche mit psearch wird die Gross-/Kleinschreibung ignoriert, es kann einfach das gewünschte Wort angegeben werden nach dem der Portsbaum durchsucht werden soll:

# psearch KNOBS
ports-mgmt/lsknobs        Simple script to help configure ports knobs and options
ports-mgmt/portconf       A universal tool to set specific port knobs
ports-mgmt/portsopt       Shows WITH(OUT)-knobs of a port makefile

Verwendet man die -l Option wird zusätzlich noch die Beschreibung der gefundenen Ports angezeigt:

# psearch -l KNOBS
ports-mgmt/lsknobs        Simple script to help configure ports knobs and options
    lsknobs is a simple sh(1) script designed to help configure
    ports knobs and options by listing them together with their
    status (either enabled or not). It uses portconf for knobs.
    
ports-mgmt/portconf       A universal tool to set specific port knobs
    Portconf is a simple framework to set ports options in an
    universal way. Knobs set to specific ports are honoured
    by portmaster, portupgrade, portmanager and 'make install'.
    
    - Alex Dupre
    ale@FreeBSD.org
    
ports-mgmt/portsopt       Shows WITH(OUT)-knobs of a port makefile
    Shows WITH(OUT)-knobs of a port makefile and if you want also the knobs of
    all port dependencies.
    
    WWW: http://www.chruetertee.ch/portsopt/

Möchte man zusätzlich die ausführlichen Beschreibungen aus pkg-descr durchsuchen, so kann die -s Option verwendet werden. Mit der -c Option kann die zu durchsuchende Kategorie eingeschränkt werden:

# psearch -s -c www linkchecker
www/linkchecker           Check HTML documents for broken links
www/p5-HTTP-SimpleLinkChecker Check the HTTP response code for a link
www/p5-W3C-LinkChecker    Checks the validity of links in an HTML or XHTML document
www/p5-chklinks           A non-threaded Perl link checker

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

 Permalink

Automatisch ZFS Snapshots erstellen

Verwendet man das ZFS Dateisystem, können mit zfs-snapshot-mgmt regelmässig automatisch ZFS Snapshots erstellt werden. Im FreeBSD Portbaum findet man zfs-snapdhot-mgmt unter sysutils/zfs-snapshot-mgmt:

# cd /usr/ports/sysutils/zfs-snapshot-mgmt && make install clean

Nun kann unter /usr/local/etc/zfs-snapshot-mgmt.conf eine Konfiguration erstellt werden, in der festgelegt wird, wann Snapshots erstellt werden sollen, wie lange die verschiedenen Snapshots erhalten bleiben sollen und wann sie dementsprechend automatisch wieder gelöscht werden:

# Automatic ZFS snapshot management configuration file
#
# This is a YAML file (see http://www.yaml.org)
# Use exactly 2 spaces for each indentation level
#
snapshot_prefix: auto-
filesystems:
  tank/home:
    # Create snapshots every 10 minutes, starting at midnight
    creation_rule:
      at_multiple: 10
      offset: 0
    # Keep all snapshots for the first 90 minutes,
    # then only those that were created at 30 minute intervals for 12 hours
    # (after snapshot creation),
    # then only those that were created at 3 hour intervals, counting at 2:00
    # (i.e. 2:00, 5:00, 8:00, 11:00, 14:00, 17:00, 20:00, 23:00)
    # for 7 days
    preservation_rules:
      - { for_minutes:    90, at_multiple:    0, offset:    0 }
      - { for_minutes:   720, at_multiple:   30, offset:    0 }
      - { for_minutes: 10080, at_multiple:  180, offset:  120 }
  tank/ports:
    # Create snapshots every 24 hours, starting at 20:00.
    creation_rule:
      at_multiple: 1440
      offset: 1200
    # Keep daily snapshots created at 20:00 (in this case all).
    preservation_rules:
      - { for_minutes: 5760, at_multiple: 1440, offset: 1200 }

Ist die Konfiguration erstellt, kann der benötigte crontab-Eintrag gemacht werden, so dass die Snapshots automatisch erstellt und gelöscht werden:

# echo "*/5 * * * *       root   /usr/local/bin/zfs-snapshot-mgmt" >> /etc/crontab

Die aktuell vorhandenen Snapshots können mit zfs list angezeigt werden:

# zfs list
NAME                               USED  AVAIL  REFER  MOUNTPOINT
tank                              3,06G  11,6G    18K  /tank
tank/home                          982M  11,6G   770M  /usr/home
tank/home@auto-2008-09-06_10.00   65,3M      -   682M  -
tank/home@auto-2008-09-07_11.00   54,4M      -   682M  -
tank/home@auto-2008-09-07_16.00       0      -   682M  -
tank/home@auto-2008-09-07_21.00       0      -   682M  -
tank/home@auto-2008-09-08_22.00       0      -   682M  -
tank/home@auto-2008-09-09_13.00       0      -   682M  -
tank/home@auto-2008-09-09_18.00       0      -   682M  -
tank/home@auto-2008-09-09_23.00       0      -   682M  -
tank/home@auto-2008-09-10_09.00       0      -   682M  -
tank/home@auto-2008-09-10_14.00       0      -   682M  -
tank/home@auto-2008-09-11_00.00       0      -   682M  -
tank/home@auto-2008-09-11_10.00       0      -   682M  -
tank/home@auto-2008-09-11_15.00     36K      -   682M  -
tank/home@auto-2008-09-12_09.00    286K      -   746M  -
tank/home@auto-2008-09-12_09.30    247K      -   746M  -
tank/home@auto-2008-09-12_10.00     49K      -   763M  -
tank/home@auto-2008-09-12_10.30       0      -   763M  -
tank/home@auto-2008-09-12_11.00       0      -   763M  -
tank/home@auto-2008-09-12_11.30       0      -   763M  -
tank/home@auto-2008-09-12_12.00       0      -   763M  -
tank/home@auto-2008-09-12_12.30       0      -   763M  -
tank/home@auto-2008-09-12_13.00       0      -   763M  -
tank/home@auto-2008-09-12_13.30     29K      -   770M  -
tank/home@auto-2008-09-12_14.00       0      -   770M  -
tank/home@auto-2008-09-12_14.30       0      -   770M  -
tank/home@auto-2008-09-12_14.50       0      -   770M  -
tank/home@auto-2008-09-12_15.00       0      -   770M  -
tank/home@auto-2008-09-12_15.10       0      -   770M  -
tank/home@auto-2008-09-12_15.20       0      -   770M  -
tank/home@auto-2008-09-12_15.30       0      -   770M  -
tank/home@auto-2008-09-12_15.40       0      -   770M  -
tank/home@auto-2008-09-12_15.50       0      -   770M  -
tank/home@auto-2008-09-12_16.00       0      -   770M  -
tank/home@auto-2008-09-12_16.10       0      -   770M  -
tank/obj                          1,62G  11,6G  1,62G  /usr/obj
tank/ports                         800M  11,6G   800M  /usr/ports
tank/ports@auto-2008-09-09_10.00    36K      -   493M  -
tank/src                           493M  11,6G   493M  /usr/src

Mehr Informationen findet man in der Manpage zfs-snapshot-mgmt(8). Eine Einführung in das Arbeiten mit ZFS und ZFS Snapshots 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
ZFS Dateisystemoptionen verwenden
Comments (2)  Permalink

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
Prev Next111-120/305