BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

jailscript Version 1.3.0-RC1 erschienen

Der erste Release Candidate des völlig überarbeiteten jailscriptes ist aber sofort hier erhältlich.

Mit dem jailscript können unter FreeBSD einfach Jails erstellt werden. Die neue Version ist nicht mehr von einer bestimmten FreeBSD Version abhängig.

Folgende Funktionen besitzt das jailscript:

  • Einfache Konfiguration durch dialog(1).
  • Die komplette Konfiguration kann vor dem Ausführen nochmals kontrolliert werden.
  • Jailname, Domain, Netzwerkschnittstelle, IP-Adresse und Nameserver werden nach Eingabe automatisch konfiguriert.
  • Der sshd kann optional auf einen anderen Port gebunden werden.
  • Ein make buildworld wird ausgeführt, falls dieses noch nicht erfolgt ist.
  • Optional kann die gesammte Jail in einer Datei erstellt werden, welche dann mit mdconfig(8) ins System eingebunden werden kann. Dies kann das verschieben von Jails vereinfachen und simuliert Quotas für ganze Jails.
  • Falls erwünscht, wird die Jail automatisch in der rc.conf eingetragen.
  • Die Ports können entweder per mount_nullfs in die Jail gemountet werden oder der Portbaum wird in die Jail kopiert. Wird der Portbaum mit mount_nullfs in die Jail eingebunden, wird die /etc/fstab aktualisiert.
  • Die Ports werden automatisch, falls erwünscht, mit cvsup, csup oder portsnap aktualisiert.
  • Falls erwünscht, wird portaudit, portsopt, portmaster, portupgrade und/oder pkg_cutleaves installiert.
  • Die /etc/periodic.conf, /etc/ssh/sshd_config und /etc/crontab werden automatisch für die Jail konfiguriert.

Bugs oder Anregungen zum jailscript können mir gerne zugesandt werden.

Comments (2)  Permalink

Vervollständigung in der tcsh

Eine der wirklich starken Funktionen der tcsh ist die Vervollständigung. Standardmässig werden unter FreeBSD nur Verzeichnisse und Dateien vervollständigt. Gibt man ein Kommando, zum Beispiel ls, in die Shell ein, und drückt danach Ctrl + d, werden einem die verfügbaren Dateien und Verzeichnisse angezeigt. Nun kann man den Anfang eines Dateinamens eingeben und versuchen mit der Tabulatortaste den Dateinamen zu vervollständigen. Dies klappt nur, wenn nur noch ein Dateiname zu der Eingabe passt, treffen mehrere zu, so passiert nichts und man muss noch einen weiteren Teil des Namens eingeben. Man kann jederzeit mit Ctrl + d die Dateinamen anzeigen lassen, mit der die eingegebenen Zeichen vervollständigt werden können.

Mit der tcsh kann jedoch noch viel mehr vervollständigt werden. Folgende Zeilen können in der ~/.cshrc oder in der /etc/csh.cshrc eingefügt werden. Die folgenden Beispiele basieren auf der .tcshrc von Justin Randall. Die Zeilen für die Vervollständigungen in der cshrc müssen zwischen folgenden Zeilen stehen, damit Wildcards nicht interpretiert werden:

set noglob
<... Regeln für die Vervollständigungen ...>
unset noglob

Möchte man zum Beispiel, bei ssh <Host> den Host vervollständigen, so fügt man folgende Regel, die die /etc/hosts und ~/.ssh/known_hosts ausliest und damit den Host vervollständigt, in die cshrc hinzu. Auch werden mirror.switch.ch und ftp.freebsd.ch manuell zur Host-Liste hinzugefügt:

   if ( -r /etc/hosts ) then
set hosts=(`awk '/^[1-9].*/ {print $2'} /etc/hosts`)
endif
if ( -r $HOME/.ssh/known_hosts ) then
set f=`cat $HOME/.ssh/known_hosts | cut -f 1 -d \ ` >& /dev/null
set hosts=($hosts $f)
unset f
endif
set hosts=($hosts mirror.switch.ch ftp.freebsd.ch)
complete ssh 'n/-l/u/' 'n/*/$hosts/'

Verwendet man mit dieser Regel die -l Option von ssh, um einen Benutzer anzugeben, so werden die Benutzer aus /etc/passwd zur Vervollständigung angeboten.

Ist die Variable $host gesetzt, so wie es in der obigen Regel gemacht wurde, so kann folgende Regel verwendet werden, um bei ping und traceroute den host zu vervollständigen:

   complete {ping,traceroute} p/1/\$hosts/

Zur Vervollständigung von kill verwendet man folgende Regel:

   complete kill    'c/-/S/' 'p/1/(-)//' 'c/%/j/' \
'n/*/`ps -U $LOGNAME | awk '"'"'{print $1}'"'"'`/'

Damit werden bei einem kill -<Signal> <PID> das Signal durch alle verfügbaren Signale und die PID durch alle PID's von Prozessen des aktuellen Benutzers vervollständigt.

Mit folgender Regel wird bei einem ifconfig die Schnittstelle durch alle verfügbaren Schnittstellen vervollständigt und auch ein paar öfters gebrauchte Optionen wie up, down und noch ein paar andere vervollständigt:

   complete ifconfig   'p@1@`ifconfig -l`@' 'n/*/(range phase link netmask \
mtu up metric mediaopt down delete \
broadcast arp debug)/'

Sollen bei einem bunzip2 nur noch Dateien mit der Endung bz2 vervollständigt werden, benutzt man diese Regel:

  complete bunzip2     'p/*/f:*.bz2/'
Sollen bei einem umount nur die gemounteten Partitionen zur Vervollständigung angeboten werden, so kann man folgende Regel verwenden:
  complete umount       c/-/"(a A f c)"/ \
n/*/'`mount | cut -d " " -f 3`'/

Möchte man selber Vervollständigungen erstellen, so findet man in der tcsh(1) eine detaillierte Anleitung.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink

Alten Quellcode von Ports mit portmaster löschen

Mit der Zeit sammeln sich alte Quellcodedateien von Ports in /usr/ports/distfiles, die zum Teil nicht mehr benötigt werden. Natürlich kann man regelmässig den Inhalt dieses Verzeichnisses löschen, aber es gibt auch bessere Möglichkeiten, indem man nur die Dateien löscht, die nicht mehr gebraucht werden.

Benutzer von portupgrade können dies mit portsclean machen.

Seit der heute veröffentlichten Version 1.13 von portmaster können nun auch damit veraltete Quellcodedateien gelöscht werden.

Möchte man, dass der Benutzer zuerst gefragt wird, ob eine Datei gelöscht werden soll, so benutzt man portmaster wie folgt:

# portmaster --clean-distfiles

Möchte man die veralteten Dateien automatisch ohne Nachfrage löschen, kann man portmaster wie folgt benutzen:

# portmaster --clean-distfiles-all
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

Manpage mittels F1 aufrufen

Hat man unter Umständen einen längeren Befehl in der tcsh eingegeben, möchte aber noch was zum Befehl in der Manpage nachlesen, so kann man zum Beispiel ein neues Terminal aufmachen und die Manpage zum Befehl lesen. Einen einfacheren Weg bekommt man, wenn man folgende Zeilen in die ~/.cshrc einfügt:

alias helpcommand man
bindkey ^[OP run-help # F1 xterm
bindkey ^[[M run-help # F1 cons25

Jetzt kann man während der Eingabe eines Befehls die F1 Taste drücken, wodurch die Manpage des eingegebenen Befehls geöffnet wird. Beendet man die Manpage wieder mit q, so ist der Befehl noch immer in der tcsh eingegeben und man kann sofort weiterarbeiten.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink

portsopt Version 1.3 erschienen

Die Version 1.3 von portsopt ist erschienen. Folgende Änderungen wurden seit der Version 1.1 vorgenommen:

  • Leerzeichen am Ende der Optionen wurden entfernt, dadurch wurden Optionen mehrfach angezeigt
  • Ausgaben wie if, else, DEPENDS_ARGS usw. werden nicht mehr angezeigt
  • Die Ausgabe von make showconfig wird nun zusätzlich auch noch angezeigt
  • Mit der neuen -c Option wird vor der Ausgabe make config aufgerufen

portsopt durchsucht FreeBSD-Port-Makefiles nach WITH- und WITHOUT-Optionen und gibt diese aus. Auch lassen sich die Optionen der Abhängigkeiten eines Ports anzeigen.

portsopt findet man nun auch in den FreeBSD-Ports unter ports-mgmt/portsopt:

# cd /usr/ports/ports-mgmt/portsopt && make install clean
 Permalink

Dateien schneller finden

Sucht man eine Datei auf der Festplatte, so kann man zum Beispiel find(1) dazu benutzen:

# find / -name "*<Teil des Names der gesuchten Datei>*"

Da dabei jedes mal die ganze Festplatte durchsucht wird, ist dies nicht der effektivste Weg, wenn man mehrere Dateien sucht. Dafür gibt es locate(1). Vor dem ersten Gebrauch von locate muss eine Datenbank erstellt werden, auf die locate später zurückgreift:

# /usr/libexec/locate.updatedb
>>> WARNING
>>> Executing updatedb as root. This WILL reveal all filenames
>>> on your machine to all login users, which is a security risk.

Erstellt man die Datenbank als root-Benutzer, so können alle Benutzer des Systems den Inhalt von Verzeichnissen herausfinden, von denen sie normalerweise nicht die Berechtigungen haben. Dies kann auf Mehrbernutzersystemen ein Problem sein. Dort sollte die Datenbank als unprevilegierter Benutzer erstellt werden:

# su -m nobody -c /usr/libexec/locate.updatedb

Ist die Datenbank erstellt, so kann sie mit locate durchsucht werden, wenn man eine Datei sucht:

# locate <Teil des Names der gesuchten Datei>

Möchte man, dass die Gross-/Kleinschreibung ignoriert wird, so kann man zusätzlich die -i Option verwenden.

Die locate-Datenbank wird wöchentlich automatisch auf FreeBSD durch das periodic weekly Skript /etc/periodic/weekly/310.locate und auf OpenBSD durch /etc/weekly aktualisiert.

Comments (2)  Permalink

Prozess-ID anhand des Prozessnamens finden

Mit pgrep(1) lässt sich die Prozess-ID eines Prozesses anhand seines Namens herausfinden:

# pgrep syslogd
22758

Mit der -l Option wird neben der Prozess-ID auch der Prozessname angezeigt:

# pgrep -l syslogd
22758 syslogd

Mit der -f Option werden nicht nur die Prozessnamen nach dem Suchbegriff durchsucht, sondern auch die Argumente, die den Prozessen übergeben worden sind:

# pgrep -lf SSL
37342 /usr/local/sbin/httpd -DSSL
37325 /usr/local/sbin/httpd -DSSL
37262 /usr/local/sbin/httpd -DSSL
36630 /usr/local/sbin/httpd -DSSL

So kann man nun die Prozess-ID eines zum Beispiel hängengebliebenen Prozesses herausfinden und dieser kann dann mit kill(1) terminiert werden. Wer ein bisschen mutiger ist, verwendet pkill(1), welcher wie pgrep funktioniert, nur dass nicht die Prozess-ID der gefunden Prozesse ausgegeben, sondern an alle gefundenen Prozesse ein Signal zur Terminierung gesendet wird.

# pgrep -lf vi 2008 vi /home/beat/chruetertee/ideen
# pkill -f vi
# pgrep -lf vi

pkill(1) und pgrep(1) sind sowohl auf FreeBSD als auch auf OpenBSD im Basissystem vorhanden.

Comments (1)  Permalink

Herausfinden, welcher Benutzer wieviel Speicherplatz verbraucht

Um herauszufinden, welcher Benutzer wieviel Speicherplatz verbraucht, kann man quot(8) verwenden. Möchte man dies von allen Partitionen sehen, so kann man die -a Option verwenden:

# quot -a

Die Ausgabe erfolgt in der Grösseneinheit, die in der System-Variable BLOCKSIZE definiert ist. Die standardmässig gesetzte Grösse ist KB. Möchte man z.B. die Benutzung von /usr anzeigen und die Ausgabe in MB darstellen, so setzt man BLOCKSIZE auf M :

# setenv BLOCKSIZE M
# echo $BLOCKSIZE
M
# quot /usr
/dev/ar0s1f:
27398 alain
11956 root
974 mysql
347 www
208 beat
4 nobody
...

Mit der Option -v können nun auch die Anzahl Dateien angezeigt werden, die in den letzten 30, 60 und 90 Tagen nicht benutzt wurden:

# quot -v /usr
/dev/ar0s1f:
27398 alain 27264 27264 27264
11956 root 9626 4020 2644
974 mysql 598 537 519
347 www 92 92 76
208 beat 16 16 16
4 nobody 0 0 0
...

Hat man auf einer Partition zu wenig Speicherplatz, so kann mit quot(8) herausgefunden werden, welcher Benutzer viel Speicherplatz braucht und seine abgelegten Daten nicht benutzt.

quot(8) ist sowohl auf FreeBSD als auch auf OpenBSD im Basissystem enthalten.

Comments (5)  Permalink

Binäre Aktualisierung des Basissystems

Werden im FreeBSD Basissystem Sicherheitslücken gefunden, so kann man diese auch binär mit freebsd-update stopfen. In FreeBSD 6.2 und 7-CURRENT befindet sich freebsd-update im Basissystem, alle älteren Versionen können freebsd-update aus den Ports installieren:

# cd /usr/ports/security/freebsd-update && make install clean

Nun können noch gebrauchte Patches heruntergeladen werden:

# freebsd-update fetch

Wurden Patches gefunden, die noch nicht eingespielt wurden, so können diese nun installiert werden:

# freebsd-update install

Auch der Kernel wird aktualisiert, allerdings nur wenn man den GENERIC Kernel verwendet. Hat man einen selber zusammengestellten Kernel, so muss man den Quellcode aktualisieren und den Kernel selber neu bauen. Aber auch wenn man den Kernel mit freebsd-update aktualisiert, muss das System neu gestartet werden, damit der neue Kernel in Betrieb genommen wird.

Man kann freebsd-update auch in einen cron-Job aufnehmen. So wird regelmässig nach Aktualisierungen gesucht, diese Heruntergeladen und per Mail eine Meldung verschickt, dass neue Patches eingespielt werden können. Verwendet man ein System mit freebsd-update im Basissystem, so kann folgende Zeile in /etc/crontab eingetragen werden:

 0 5 * * * root /usr/sbin/freebsd-update cron

Verwendet man freebsd-update aus den Ports, so lautet der Pfad /usr/local/sbin/freebsd-update.

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

Tunneln mit OpenSSH

Möchte man auf einen Port eines Rechners von einem anderen Rechner aus zugreifen, dies allerdings nicht erlaubt oder durch eine Firewall geblockt ist, mit SSH der Zugriff auf den Rechner aber möglich ist, so kann man den gewünschten Port tunneln.

# ssh -L <Lokaler Port>:<Zielrechner>:<Port auf Zielrechner> <Benutzer>@<Tunnelrechner>

Möchte man zum Beispiel von Rechner B den Port 3306 benutzen und es ist möglich, sich auf Rechner B per SSH einzuloggen, so kann man dies wie folgt tun:

# ssh -L 3306:localhost:3306 <Benutzer>@<Rechner B>

Möchte man zum Beispiel auf Port 3306 von Rechner C zugreifen, welcher von Rechner B aus erreichbar ist, aber nicht von unserem Rechner, man kann sich aber auf Rechner B per SSH einloggen, so kann man das folgendermassen machen:

# ssh -L 3306:<Rechner C>:3306 <Benutzer>@<Rechner B>

Nun kann man in beiden Fällen auf den localhost Port 3306 zugreifen, welcher dann von OpenSSH auf den Zielrechner getunnelt wird.

Ist auf dem SSH-Server die Option AllowTcpForwarding no gesetzt, so wird das Tunneln nicht funktionieren. Ob dies der Fall ist, kann auf FreeBSD und OpenBSD in der /etc/ssh/sshd_config nachgeschaut werden.

Comments (1)  Permalink
Prev Next381-390/521