BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

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

Flux CMS nun in den FreeBSD Ports

Seit heute ist das Flux CMS in den FreeBSD Ports:

http://www.freshports.org/www/fluxcms/

Für die Installation muss zuerst der Portbaum auf den aktuellen Stand gebracht und danach kann das Flux CMS wie folgt installiert werden:

# cd /usr/ports/www/fluxcms && make install clean
Related Entries:
Flux CMS Port für FreeBSD auf 1.4.0 aktualisiert
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
Comments (1)  Permalink

Aktualität des OpenBSD-Portbaumes überprüfen

Auf OpenBSD kann man den Portbaum mit einem Perl-Skript auf Aktualität prüfen:

# /usr/ports/infrastructure/build/out-of-date

Der Portbaum (oder Teile davon) kann danach mit CVS auf den aktuellen Stand gebracht werden. Einfach die CVSROOT Variable mit dem CVS-Server seines Vertrauens setzen und danach CVS mit dem passenden CVS-Tag ausführen:

# CVSROOT=anoncvs@anoncvs2.de.openbsd.org:/cvs
# cd /usr/port/<Verzeichnis das man aktualisieren möchte>
# cvs -d$CVSROOT up -P -rOPENBSD_3_9
Related Entries:
OpenBSD Packages aktualisieren
Zeit synchronisieren mit ntpd
OpenOffice.org 2.0 auf OpenBSD
OpenBSD von 3.7 auf 3.8 aktualisieren
Dateien unter Free- und OpenBSD mit Flags schützen
 Permalink
1-8/8