BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

/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

TODO-Listen über die Kommandozeile verwalten

Mit Hilfe von devtodo lassen sich auf der Kommandozeile pro Verzeichnis eine TODO-Liste führen. Im FreeBSD Portbaum findet man devtodo unter devel/devtodo:

# cd /usr/ports/devel/devtodo && make install clean

Nun kann ein neuer Eintrag der TODO-Liste hinzugefügt werden. Dabei muss ein Text und die Priorität angegeben werden:

# tda
text> task1
1. veryhigh   2. high   3. medium   4. low   5. verylow
Enter a priority from those listed above.
priority> medium
Index of new item is 1

Ist noch keine TODO-Liste im Verzeichnis vorhanden, wird automatisch eine neue angelegt:

# ls -l .todo
-rw-r--r--  1 beat  users  235 26 Sep 14:48 .todo

Vorhanden Einträge können mit todo angeschaut werden:

# todo
  1.task1

Auch kann der Text und/oder die Priorität eines neuen Eintrags direkt dem tda Befehl mitgegeben werden:

# tda "task2 und freunde"
1. veryhigh   2. high   3. medium   4. low   5. verylow
Enter a priority from those listed above.
priority> medium
Index of new item is 2
todo: warning, created database (.todo) has group or world permissions

# tda -p high "task3 und so weiter"
Index of new item is 1

Einträge mit höherer Priorität werden automatisch am Anfang der Liste einsortiert:

# todo
  1.task3 und so weiter
  2.task1
  3.task2 und freunde

Einträge können mit Hilfe des tdr Befehls aus der Liste entfernt werden:

# tdr 2
# todo
  1.task3 und so weiter
  2.task2 und freunde

Auch können Einträge der Liste auf erledigt gesetzt werden:

# tdd 1
comment> alles tiptop
# todo
  2.task2 und freunde

Mit Hilfe der all Option können erledigte Einträge weiterhin angezeigt werden. Mit Hilfe von --purge werden alle erledigten Einträge aus der Liste entfernt:

# todo all
- 1.task3 und so weiter
  2.task2 und freunde
# todo --purge
0 < 1222433003
# todo all
  1.task2 und freunde

Auch können einem Eintrag weitere Subtasks hinzugefügt werden. Diese lassen sich mit --all anzeigen:

# tda -p medium -g 1 "Subtask 1 Task 2"
Index of new item is 1.1
# todo
+ 1.task2 und freunde
# todo --all
  1.task2 und freunde
      1.Subtask 1 Task 2

Die TODO-Listen aus verschiedenen Verzeichnissen lassen sich nun mit Hilfe der -l Option miteinander verlinken und gemeinsam anzeigen:

# tda -p medium "Task 1 Hauptordner"
Index of new item is 1
# mkdir Ordner1 Ordner2
# cd Ordner1/
Ordner1# tda -p medium "Task 1 Ordner 1"
Index of new item is 1
Ordner1# tda -p medium "Task 2 Ordner 1"
Index of new item is 2
Ordner1# cd ../Ordner2/
Ordner2# tda -p medium "Task 1 Ordner 2"
Index of new item is 1
Ordner2# cd ..
# todo -l Ordner1/.todo 
1. veryhigh   2. high   3. medium   4. low   5. verylow   
priority> medium
# todo -l Ordner2/.todo
1. veryhigh   2. high   3. medium   4. low   5. verylow   
priority> medium
# todo 
+ 1.Ordner1
+ 2.Ordner2
  3.Task 1 Hauptordner
# todo all
  1.Ordner1
      1.Task 1 Ordner 1
      2.Task 2 Ordner 1
  2.Ordner2
      1.Task 1 Ordner 2
  3.Task 1 Hauptordner

Mit Hilfe der Datei ~/.todorc können Optionen und das Verhalten von devtodo festgelegt werden. Ein Beispiel einer solchen Konfigurationsdatei findet man unter /usr/local/etc/todorc.sample:

# cp /usr/local/etc/todorc.sample ~/.todorc

Mehr Informationen zu devtodo findet man in der Manpage devtodo(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

SSH Schlüssel mit ssh-agent verwalten

Mit Hilfe eines Public Keys kann man sich ohne eine Passworteingabe an einem Rechner anmelden. Trotzdem sollte der Schlüssel selbst mit einem Passwort versehen werden, so dass bei jeder SSH Verbindung ein Passwort eingegeben werden muss. Mit Hilfe von ssh-agent kann der Schlüssel gespeichert werden, so dass das Passwort nur einmal eingegeben werden muss. Dazu muss zuerst eine Shell mit ssh-agent gestartet werden, in welcher die Schlüssel ohne Passwort verwendet werden können:

# ssh-agent tcsh

Danach können die Schlüssel mit Hilfe von ssh-add hinzugefügt werden. ssh-add sucht dabei nach vorhandenen Schlüsseln und fragt nach den Schlüsselpasswort:

#  ssh-add 
Enter passphrase for /home/beat/.ssh/id_rsa: 
Identity added: /home/beat/.ssh/id_rsa (/home/beat/.ssh/id_rsa)

Nun kann man sich ohne weitere Passworteingabe an einem Rechner anmelden:

# ssh <Benutzer>@<Rechner>

Mit Hilfe der -l Option können alle gespeicherten Schlüssel angezeigt werden:

# ssh-add -l
2048 4d:3a:53:64:46:69:51:61:4b:62:93:66:77:ff:42:88 /home/beat/.ssh/id_rsa (RSA)

Ruft man ssh-add mit der -x Option auf, wird man nach einem Passwort gefragt und der ssh-agent wird gesperrt:

# ssh-add -x
Enter lock password: 
Again: 
Agent locked.

Ist der Agent gesperrt und man versucht sich wieder mit SSH zu verbinden, wird man wieder nach dem Passwort gefragt:

# ssh <Benutzer>@<Rechner>
Enter passphrase for key '/home/beat/.ssh/id_rsa':

Mit Hilfe der -X Option kann der Agent wieder entsperrt werden:

# ssh-add -X
Enter lock password: 
Agent unlocked.

Verwendet man den Schlüssel nicht mehr, so kann der ssh-agent mit Hilfe der -k Option beendet werden:

# ssh-agent -k
unsetenv SSH_AUTH_SOCK;
unsetenv SSH_AGENT_PID;
echo Agent pid 7747 killed;

Sowohl auf FreeBSD als auch auf OpenBSD ist ssh-agent und ssh-add im Basissystem vorhanden. Mehr Informationen findet man in den Manpages ssh-agent(1) und ssh-add(1).

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 Next21-30/84