Hi,
derzeit bastle ich an einem HTTP-Server geschreiben in PHP und ausgeführt über Shell durch das CLI-Binär.
Ah, ja gut, dann brauchst Du eine Shell.
Ich würde mir aber eine abgespeckte Magerversion besorgen oder sogar besser eben selber schreiben. Du brauchst mit Sicherheit nicht alle Feinheiten und Buildins einer Bash, oder? ;-)
Im ersten Versuch geht es nun darum, von einem lauernden "sockets"-Prozess im Requestfall einen Kindprozes abzuspalten, der das Aufsuchen der angeforderten Resource übernimmt, diese gegebenenfalls ausliest, die Ausgabe verfertigt, absendet und stirbt.
Erstmal fork(), gut. Hat aber jetzt nix mit dem Problem zu tun ;-)
Soweit das Vorhaben - aber bevor ich beim Testen mir das System gleich mal nebenbei ins Nirvana schicke, will ich dies in einer gechrooteten Umgebung tun.
Ganz schützt Dich chroot() nicht davor, das würde nur das weiter unten angeführte UML können.
Aber ich glaube das bei Deinem Vorhaben chroot() durchaus ausreichen würde. Man müßte schon sehr viel Mist bauen, das da noch etwas passieren könnte.
Ich hätte nur gerne keine zusammenkopierte Umgebung, sondern mir dabei sehr gerne auch die Grundlagen erarbeitet,
Es ist aber wirklich nichts weiter als eine "zusammenkopierte Umgebung", wie Du das so abfällig beschreibst. Da gibt es keine linken Tricks, fiesen Kniffe oder sonstiges Gedöns, dsa ist schlicht kopiert.
wie ich in einer solchen Umgebung, und eben (da mein Punkt, über den ich nicht hinwegkomme) für diese auch Programme innerhalb der Umgebung selbst kompiliere.
Wenn Du Diene Quellpakete in der chroot-Umgebung auspackst kannst Du ganz normal bauen. "chroot" ist ja die Abkürzung für "change rootdirectory". Statt "/" ist halt "/usr/local/chroot/" das Wurzelverzeichnis für alle, die sich in "/usr/local/chroot/" befinden. Ein 'pwd' in der Bash in einem ge-chroot'd "/usr/local/chroot/" würde ganz einfach "/" ausgeben. Somit kannst Du auch jedes Quellpaket da drinen auspacken und dann mit "configure && make && make check && make install" bauen. Keine "--prefix" Änderung, nix.
Das ganze Problem hat zwar einen konkreten Hintergrund mit meinem Vorhaben, soll mich aber in der Weise auch im Wissen um Linux selbst weiterbringen, um später auch eigene C-Programme austesten zu können, oder Progamme anderer (beta-Versionen) zu testen. User-Mode hatte ich mir in diesem Zusammenhang auch schon angesehen, scheint mir aber völlig überdimensioniert.
Nun, ich hielt die 30 GiB Platte in meinem neuem Rechner auch für total überdimensioniert, habe sie aber trotzdem vollbekommen ;-)
Nein, für komplexere Tests, insbesondere im Netzwerkbereich ist UML wirklich sehr nützlich. Ich finde es sogar einfacher als den chroot-Kram, aber das mag Geschmacksache sein.
Für ein, zwei Progrämmchen mag dagegen chroot() einfacher sein.
so short
Christoph Zurnieden