BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Portabhängigkeiten graphisch darstellen

Die Abhängigkeiten eines Ports lassen sich mit einem make all-depends-list im Portverzeichnis anzeigen:

# cd /usr/ports/devel/porttools && make all-depends-list
/usr/ports/devel/portlint
/usr/ports/textproc/cdiff
/usr/ports/security/sudo
/usr/ports/devel/newfile
/usr/ports/lang/perl5.8
/usr/ports/lang/ruby18
/usr/ports/security/openssl

Möchte man jetzt wissen, wie diese Ports voneinander abhängen, so kann man dies mit pkg_tree(7) anzeigen lassen.

# pkg_tree [-v] <Portname>

Benutzt man pkg_tree ohne Optionen, werden nur die Abhängigkeiten eines Ports angezeigt. Zum Beispiel:

# pkg_tree porttools
porttools-0.77
|\__ sudo-1.6.8.12_1
|\__ ruby-1.8.4_4,1
|\__ perl-5.8.8
|\__ portlint-2.9.0
|\__ openssl-0.9.8a
|\__ newfile-1.0.14_1
\__ cdiff-1.4_1

Benutzt man die -v Option, werden auch die Abhängigkeiten der Abhängigkeiten dargestellt:

# pkg_tree -v porttools
porttools-0.77
|\__ sudo-1.6.8.12_1
|\__ ruby-1.8.4_4,1
|\__ perl-5.8.8
|\__ portlint-2.9.0
| \__ perl-5.8.8
|\__ openssl-0.9.8a
|\__ newfile-1.0.14_1
| |\__ openssl-0.9.8a
| \__ ruby-1.8.4_4,1
\__ cdiff-1.4_1
\__ perl-5.8.8

pkg_tree kann einfach über den Portbaum installiert werden:

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

UPDATE 05.02.2007:

pkg_tree wurde von sysutils in die neue Kategorie ports-mgmt verschoben. pkg_tree kann nun wie folgt installiert werden:

# cd /usr/ports/ports-mgmt/pkg_tree && make install clean
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

Mehrere WEP-verschlüsselte WLAN's mit DHCP nutzen

Arbeitet man mit einem Laptop nur in einem WEP-verschlüsselten WLAN, so kann man dieses einfach mit einer start_if Datei konfigurieren. Arbeitet man hingegen in mehreren WLAN's, so ist diese Variante nicht geeignet. Dies kann jedoch mit wpa_supplicant(8) gelöst werden. Zuerst muss die Datei /etc/wpa_supplicant.conf angelegt werden. Darin werden die verschiedenen WLAN's konfiguriert:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

network={
ssid="<SSID Netz 1>"
scan_ssid=1
key_mgmt=NONE
wep_tx_keyidx=0
wep_key0=<WEP Schlüssel Netz 1>
}

network={
ssid="<SSID Netz 2>"
scan_ssid=1
key_mgmt=NONE
wep_tx_keyidx=0
wep_key0=<WEP Schlüssel Netz 2>
}

Hier können nun beliebig viele WLAN Netze eingetragen werden und das jeweils verfügbare Netz wird dann genommen. Mit wpa_supplicant lassen sich auch WPA Netze konfigurieren. Alle Konfigurationsmöglichkeiten der wpa_supplicant.conf sind in der Manpage wpa_supplicant.conf(5) ausführlich beschrieben.

Danach muss die WLAN Karte nur noch in der /etc/rc.conf eingetragen werden:

ifconfig_<WLAN Karte>="DHCP wpa"

Um wpa_supplicant nutzen zu können, muss FreeBSD 6.0 oder neuer installiert sein.

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

Portspezifische Makevariablen setzen

Mit portconf ist es möglich, jedem Port gewisse Makevariablen zuzuweisen. portconf kann wie folgt installiert werden:

# cd /usr/ports/sysutils/portconf && make install

Dabei wird die /etc/make.conf um einige Zeilen erweitert, welche allerdings nicht editiert werden sollten. Danach können in /usr/local/etc/ports.conf die gewünschten Variablen gesetzt werden. Zum Beispiel:

editors/openoffice*: WITH_CCACHE|LOCALIZED_LANG=de
java/eclipse: WITH_MOZILLA=firefox
www/apache2*: WITH_SSL_MODULES=yes | WITH_DAV_MODULES=yes
www/firefox-i18n: WITHOUT_SWITCHER | FIREFOX_I18N=de en
x11/fakeport: CONFIGURE_ARGS=--with-modules="aaa bbb ccc"

Mehrere Optionen können mit Pipe getrennt werden. Die Konfigurationen, die mit portconf definiert werden, werden von portmaster, portupgrade, portmanager und make install berücksichtigt.

Da portconf erst seit dem 8 Juni 2006 in den Ports ist, muss evtl. vor dem Installieren der Portbaum auf den aktuellen Stand gebracht werden.

UPDATE 05.02.2007:

portconf wurde von sysutils in die neue Kategorie ports-mgmt verschoben. portconf kann nun wie folgt installiert werden:

# cd /usr/ports/ports-mgmt/portconf && make install clean
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

Rechnen auf der Kommandozeile

Auf der Kommandozeile kann man mit Hilfe von bc(1) auch Rechnen. Rechnet man mit Kommazahlen, sollte man die -l Option benutzen, so werden 20 Nachkommastellen angezeigt, ohne -l werden keine angezeigt. Ruft man bc auf, so kann man danach seine Rechnung eingeben und nach einem Enter wird das Ergebnis angezeigt. Danach kann eine weitere Rechnung eingebeben werden. bc kann mit quit, exit oder Ctrl + d beendet werden.

# bc -l
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
sqrt((3+2-1)*(9/3)-3)
3.00000000000000000000
9/4
2.25000000000000000000
10/3
3.33333333333333333333
exit

Die Operatoren + - * / sollten selbsterklärend sein, sqrt() ist die Quadratwurzel, ^ ist das Potenzzeichen, also 2^3 bedeutet 2 hoch 3:

# echo "2^3" | bc 
8

Hier sieht man, wie man eine Rechnung mittels Pipe an bc übergeben kann.

Auch Modulo-Operationen lassen sich mit % machen. Dabei sollte man allerdings auf die -l Option verzichten:

# echo "9%5" | bc 
4

Mit bc lässt sich noch viel mehr machen, dies ist ausführlich in bc(1) beschrieben.

 Permalink

FreeBSD automatisch herunterfahren, wenn Batterie leer ist

Nachdem mir zweimal der Laptop abgestellt ist, ohne sauber herunterzufahren, da die Batterie leer war, habe ich mich auf die Suchen nach einer Lösung gemacht, jedoch nur Lösungen mit Shellscripts/Cron gefunden, die ich nicht so schön fand. Also habe ich einen Patch für powerd(8) geschrieben. Es stellte sich aber heraus, dass dies mit devd(8) schon möglich ist. Also noch devd in die Googlesuche miteinbezogen und siehe da, das gibt es schon.

Einfach Folgendes mit root-Rechten ausführen:

#  fetch -o /etc/rc.d/battery http://www.lestinsky.de/michael/scripts/battery.sh && chmod +x /etc/rc.d/battery

Danach folgende Zeilen in der /etc/devd.conf einfügen:

# Warnings and emergency shutdown if battery is running low.
notify 10 {
match "system" "ACPI";
match "subsystem" "CMBAT";
action "/etc/rc.d/battery";
};

Falls dies noch nicht der Fall ist, muss devd noch in der /etc/rc.conf eingetragen werden:

devd_enable="YES"

Ist der Batteriestand niedrig, wird eine Warnung an die Benutzer mittels wall(1) gesendet und wenn man darauf nicht reagiert, bzw. den Laptop an den Strom hängt, wird das System automatisch heruntergefahren.

Da jedoch mein IBM T42 den ACPI Batteriestatus nicht korrekt zurückmeldet, habe ich oben genanntes Skript angepasst, dass es bei 5% Batteriestand eine Warnung ausgibt, 60 Sekunden wartet und falls dann der Akku nicht wieder geladen wird, das System herunterfährt. Das angepasste devd-Skript ist hier verfügbar.

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

Leere Verzeichnisse und alte Symlinks löschen

Mit der Zeit können sich auf einem System leere Verzeichnisse und symbolische Links, die auf nicht mehr existierende Dateien verweisen, ansammeln. Mit cleanlinks(1) können diese automatisch gelöscht werden. cleanlinks sucht im aktuellen Verzeichnis nach solchen Daten und durchsucht auch rekursiv alle Unterverzeichnisse und löscht sie.

Beispiel:

# mkdir /tmp/test
# cd /tmp/test/
# mkdir leer
# mkdir voll
# touch voll/datei
# ln -s a b
# ln -s voll/datei hallo
# pwd
/tmp/test
# ls -l
total 4
lrwxr-xr-x 1 beat wheel 1 27 Mai 09:59 b@ -> a
lrwxr-xr-x 1 beat wheel 10 27 Mai 09:59 hallo@ -> voll/datei
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 leer/
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 voll/

Im Verzeichnis /tmp/test existiert nun ein leeres Verzeichnis leer und ein Symlink b, der auf eine nicht existierende Datei a verweist.  Führen wir nun cleanlinks in diesem Verzeichnis test aus:

# cleanlinks 
./b is a dangling symlink, removing
Removing empty directories ...
./leer
# ls -l
total 2
lrwxr-xr-x 1 beat wheel 10 27 Mai 09:59 hallo@ -> voll/datei
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 voll/

cleanlinks ist Teil der XFree86 und X.Org Projekte. Auf FreeBSD befindet sich cleanlinks im imake Port.

 Permalink

make targets für den FreeBSD Portbaum

Für den FreeBSD Portbaum bestehen verschiedene make targets. Diese können im Verzeichnis eines Ports angewendet werden, zum Beispiel /usr/ports/www/fluxcms, oder wo sich der Portbaum auch immer befindet.

Die meist gebrauchten targets sind vermutlich make install und make deinstall, wobei bei einem make deinstall Vorsicht geboten ist, da es nicht auf Abhängigkeiten achtet. Es gibt aber noch viele andere targets, die zum Teil nicht so oft gebraucht werden, jedoch manchmal sehr nützlich sind.

Möchte man nur die Quelldateien des Ports herunterladen, kann man dies wie folgt tun:

# make fetch

Will man die Quelldateien des Ports und die seiner Abhängigkeiten herunterladen, nimmt man folgendes target:

# make fetch-recursive

Zum Herausfinden, welche Dateien heruntergeladen werden würden, sie jedoch noch nicht herunterladen will, kann man eine der folgenden targets nehmen, je nachdem ob man die Dateien der Abhängigkeiten auch anzeigen lassen will:

# make fetch-list
# make fetch-recursive-list

Die Abhängigkeiten eines Ports lassen sich mit folgendem target herausfinden:

# make all-depends-list

Will man nur die Abhängigkeiten sehen, die der Port zum Laufen braucht, das heisst ohne die Abhängigkeiten die es braucht um den Port zu bauen, so kann man dies wie folgt tun:

# make run-depends-list

Einige Ports lassen sich mit einem dialog(1) konfigurieren. Der Dialog lässt sich durch folgende targets für nur den einen Port oder auch für alle Abhängigkeiten aufrufen:

# make config
# make config-recursive

Um die aktuelle Konfiguration anzusehen, kann man folgende targets benutzen:

# make showconfig
# make showconfig-recursive

Um die Konfigurationen zu löschen, stehen diese targets zur Verfügung:

# make rmconfig
# make rmconfig-recursive

Ein Portverzeichnis lässt sich wie folgt von temporären Daten säubern, die zum Bauen eines Ports benötigt werden:

# make clean

Will man auch noch die Quelldateien löschen, kann man das wie folgt tun:

# make distclean

Zum Säubern des Portverzeichnisses sollte man sich auch portsclean(1) anschauen.

Sucht man nach einem Port, kann man entweder portsearch oder make search in /usr/ports benutzen.

# cd /usr/ports/ && make search
The search target requires a keyword parameter or name parameter,
e.g.: "make search key=somekeyword"
or "make search name=somekeyword"

Für mehr Informationen zum Portbaum empfiehlt sich das Kapitel 4 des FreeBSD Handbuches.

Alle make targes sind in ports(7) beschrieben.

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 (1)  Permalink

Auf der Kommandozeile ans Beenden der Arbeit erinnert werden

Arbeitet man auf der Kommandozeile und hat nur noch eine gewisse Zeit zur Verfügung, bevor man die Arbeit beenden sollte, kann man mit leave(1) sichergehen, dass man die Zeit nicht vergisst.

Wenn man weiss, man sollte zu einem bestimmten Zeitpunkt seine Arbeit beenden, so kann man leave mit der genauen Uhrzeit verwenden:

# leave [<hh>]<mm>

Für 11:00 wäre dies:

# leave 1100
Alarm set for Fr 12 Mai 2006 11:00:00 CEST. (pid 969)

Han man nur noch einen gewissen Zeitraum zur Verfügung, so kann man leave mit einem Plus verwenden:

# leave +[<hh>]<mm>

Für eine Viertelstunde wäre dies leave +15 für eine Stunde und eine Minute ist dies leave +101.

5 Minuten bevor die Zeit abläuft, wird eine Warnung ausgegeben:

You have to leave in 5 minutes.

Auch eine Minute vor Ablauf der Zeit wird man nochmals darauf hingewiesen, dass man die Arbeit langsam abschliessen sollte:

Just one more minute!

Ist die Zeit abgelaufen, wird man immer wieder mit folgender Nachricht daraufhingewiesen, dass man jetzt doch gehen sollte:

Time to leave!

Jetzt hat man zwei Möglichkeiten, entweder wirklich zu gehen oder den leave-Prozess z.B. mit kill(1) zu beenden. Für das erste Beispiel wäre dies:

kill 969
 Permalink

jailscript Version 1.2.3

Version 1.2.3 vom jailscript ist erschienen. Damit ist es nun auch auf FreeBSD 6.1-RELEASE möglich, einfach Jails zu erstellen.
 Permalink

Meldungen an eingeloggte Benutzer senden

Möchte man an andere eingeloggte Benutzer eine Nachricht senden, so kann man zuerst mit w(1) herausfinden, wer zur Zeit eingeloggt ist.

# w
6:08pm up 18 mins, 5 users, load averages: 0,02 0,15 0,15
USER TTY FROM LOGIN@ IDLE WHAT
test v0 - 6:07pm - -
beat p1 :0.0 5:51pm 1 ssh chruetertee.ch
beat p2 :0.0 6:07pm - w
beat p3 :0.0 5:59pm 6 -
beat p4 :0.0 6:04pm 3 csh

Möchte man nun eine Nachricht an einen Benutzer schicken, so kann man dies mit write(1) tun. Zum Starten gibt man

# write <Benutzer>

ein. Anschliessend kann man die Nachricht eingeben und diese mit Ctrl + D senden.

# write test
Dies ist ein Test
^D

Der Empfänger erhält nun die Nachricht:

Message from beat@daedalus.network.local on ttyp2 at 18:28 ...
Dies ist ein Test
EOF

Möchte man die Nachricht an ein bestimmtes Terminal senden, so kann man dies wie folgt tun:

# write <Benutzer> [<tty>]

Mit mesg(1) kann man einstellen, ob man Nachrichten von anderen Benutzern empfangen will oder nicht. Ein mesg n zeigt keine Nachrichten von anderen Benutzern an, ein mesg y lässt Meldungen zu.

Möchte man eine Meldung an alle Benutzer senden, so kann man dies mit wall(1) machen:

# echo 'Hallo zusammen' | wall

Die anderen Benutzer erhalten nun folgende Meldung:

Broadcast Message from beat@daedalus.network.local                             
(/dev/ttyp3) at 18:41 CEST...

Hallo zusammen
Comments (2)  Permalink
Prev Next441-450/521