[linux-l] POSIX und busybox

Mike Dornberger Mike.Dornberger at gmx.de
So Nov 11 09:21:50 CET 2007


Hi,

On Sat, Nov 10, 2007 at 08:14:00PM +0100, Steffen Dettmer wrote:
> * Mike Dornberger wrote on Thu, Nov 08, 2007 at 19:04 +0100:
> [POSIX konformes rm oder portables Dateilöschen]
> > > Na ja, Windows cmd.exe hat nichtmal "rm"...
> > 
> > Oder meinst du, die cmd.exe sei POSIX? Das wäre mir neu... :)
> 
> Nein, ich wollte damit nur zum Nachdenken anregen, wieviel 100% POSIX
> man braucht, wenn man ein Script für eine Anwendung X macht. Ausserdem

hm, ich weiß nicht ganz genau, was du nun ausdrücken wolltest damit. Die
Syntax der Windows cmd.exe ist so dermaßen nicht POSIX sh und meiner Meinung
nach enorm umständlich, daß sie mich einfach nicht interessiert.

Ich sage mir: Wenn ich ein Shell-Script schreibe, dann (weitestgehend)
POSIX-konform. Ich bin mir bewußt, daß es durchaus einige (kommerzielle, u.
a.) UNIX-Varianten gibt, auf denen das dann nicht richtig läuft, aber ich
denke, auf den meisten heute noch verwendeten Unices wird es schon laufen,
da wohl die meisten davon sich auf POSIX geeinigt haben.

Schade ist allerdings, daß mktemp(1) und Sachen wie --null (noch) nicht
POSIX sind. Wenn ich diese Sachen einsetze, bin ich mir dessen bewußt und
oft gibt es dann auch einen Kommentar im Script, oder (bei --null) "Augen zu
und durch" und darauf gehofft, daß es keinen Fall gibt, wo z. B. Dateinamen
ein \n enthalten, sodaß man wenigstens Zeilenweise arbeiten kann. Oftmals
läßt sich das Script aber umarbeiten, sodaß das Problem trotzdem nicht
besteht (evt. läuft das Script dann aber viel langsamer).

XSI-Erweiterungen wie [ TEST1 -a TEST2 ] kann man ja leicht mit test TEST1 &&
test TEST2 umgehen, was sogar manchmal schneller ist, da die Variante mit -a
immer beide Tests auswertet.

(Die Dokumentation auf opengroup.org finde ich immer sehr erhellend, was
Erweiterungen oder "Ist egal"-Sachen (-> shall) angeht, siehe z. B. -e -n
bei echo http://www.opengroup.org/onlinepubs/000095399/utilities/echo.html )

Von Sachen wie a{b,c} expandiert zu ab ac weiß ich, daß sie eine Erweiterung
der bash sind und habe soetwas noch nie wirklich in Scripten gebraucht. Im
Zweifelsfall hilft einem ja ein guter Editor solche Konstrukte umzubauen.
(Unschön ist an dieser Stelle, daß ich in den man pages manchmal vermisse,
was nun eine GNU-Erweiterung z. B. ist.)

Nungut, ich habe noch nicht wirklich öffentlich wirksam irgendwo
hinterlassen, aber schonmal üben kann ja nicht schaden.

Und natürlich verwende ich für Shell-Einzeiler auch all die schönen
Annehmlichkeiten, die mein System mir bietet. :)

> > Aber soweit ich mich erinnere, hatte ich mal ein busybox benutzt und
> > mich gewundert, daß irgendeine Option nicht ging. Wenn ich das noch
> > richtig in Erinnerung habe, hatten sie genau die Optionen
> > implementiert, die auf der entsprechenden Seite der OpenGroup.org
> > beschrieben waren.
> 
> Und die Moral von der Geschicht'? Dass POSIX-konform dann auch nichts
> nützt oder mehr was in der Art das busybox nichts für eine Workstation
> ist?

Die Moral? Daß man sich eher bewußt sein sollte, welche Option was für eine
Erweiterung ist, damit man nicht mal irgendwann "in Not" dann Dinge vermißt
und vielleicht gar nicht weiß, wie es anders geht? :)

Hm, ich hätte vielleicht noch dazuschreiben sollen, daß ich mit "irgendeine"
eine GNU-Erweiterung meinte (glaube ich, es könnte damals was mit sed zu tun
gehabt haben).

> > Die initrds der Debian-Kernel (mindestens ab Etch) benutzen übrigens
> > auch busybox 
> 
> interessant. Dachte immer, speicher wäre heute egal. Schön, wenn Debian
> das geschickt macht, finde ich Klasse. 
> 
> Wieviel MB RAM braucht man heute eigentlich für ne SuSE Installation?
> 512 MB RAM, kann das sein? Hammer, was, besonders, wenn man bloss ein
> Mini-System in eine virtuelle Maschine installieren will.

Wenn ich mich recht entsinne, legt der debian-installer ab 32MB RAM los und
kann glaube ich mit small-ram Bootoption (nee, die hieß glaube ich anders)
runter bis auf 8MB gehen.

> > -- init ist da übrigens ein Shell-Script (gut, wird nach dem Mounten
> > des eigentlichen rootfs mit dem entsprechenden init-Binary ersetzt) --
> > und da werden schon ganz interessante Sachen gemacht.
> 
> früher gabs mal überhaupt init-Binary. Wozu braucht man das überhaupt,
> Performance? Mit Shellscripting ist meist die Codesize auch kleiner,
> aber natürlich ist das für'n PC erstmal egal.

Ja, das gibt's ja heute auch noch, hab ich doch geschrieben. Das (das
SysV-init aus Sarge hier z. B.) macht dir dann (für root) auch schön die
Verbindung zum /dev/initctl auf, schreibt /var/run/utmp und /var/log/wtmp,
sendet Prozeßgruppen Signale beim Runlevel-Wechsel, kann mit SIGPWR (USV
schaltet auf Akku um und zurück) umgehen, /etc/inittab lesen, ... (siehe man
page) Das wäre schon ziemlich schwer bis vielleicht sogar gar nicht nur mit
busybox zu implementieren.

Gruß,
 Mike



Mehr Informationen über die Mailingliste linux-l