chroot Sandbox erstellen - Wie?

Hallo Forum.

Ich suche nach einer Möglichkeit mir eine chroot Sandbox zu erstellen in der ich einige Pakete bauen / Ports testen kann ohne mein laufendes System zu beeinflussen. Über die Existenz der tinderbox bin ich mir im Klaren und ich habe sie auch schon verwendet, würde aber gerne auf den Ballast den die tinderbox benötigt verzichten. Auch eine Jail wäre in meinen Augen oversized für meinen Anwendungsfall.

Mein Ansatz war folgender:

Code:
SANDBOX=/usr/local/sandbox
( cd /usr/src && make DESTDIR=$SANDBOX installworld )
mkdir -p $SANDBOX/usr/ports
mount -t nullfs /usr/ports $SANDBOX/usr/ports
mount -t nullfs /dev $SANDBOX/dev
mount -r -t nullfs /etc $SANDBOX/etc

Wenn ich dann mit

Code:
chroot $SANDBOX /bin/tcsh

in die Sandbox wechsle und einen Port bauen will (z.B. lang/python25) bekomme ich folgenden Fehler:

Code:
checking how to run the C preprocessor... /lib/cpp
configure: error: C preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.
===>  Script "configure" failed unexpectedly.

Ausserhalb der Sandbox habe ich diese Probleme nicht. Wo ist mein Fehler?

Weitere Fragen:
  • Wie macht ihr so etwas?
  • Unter NetBSD gibt es soweit ich weiß ein mksandbox Skript. Gibt es so etwas auch für FreeBSD?

Gruß, Tobias
 
[GELÖST] chroot Sandbox erstellen - Wie?

Wenn die Sandbox wie folgt erstellt wird funktioniert sie auch wie erwartet:

Code:
SANDBOX=/usr/local/sandbox
( cd /usr/src && make DESTDIR=$SANDBOX installworld distribution )
mkdir -p $SANDBOX/usr/ports
mount -t nullfs /usr/ports $SANDBOX/usr/ports
mount -t nullfs /dev $SANDBOX/dev
mount -r -t nullfs /etc $SANDBOX/etc

Trotzdem würde mich interessieren wie ihr sowas macht (falls ihr sowas macht).

Tobias
 
Wie kommt es denn, dass es mit der o.g. Methode nicht funktioniert?
Der einzige Unterschied ist make distribution, welches /etc bevölkert, aber du hast ja das /etc Verzeichnis ja eigentlich reingemountet, also sollte es doch auch ohne make distribution klappen?
 
Ich weiss nicht warum es heute vormittag funktioniert hat... ich habe es eben nochmal getestet udn ich bekomme wieder den Fehler. Sch...

Laut Google tritt das Problem auf wenn autoconf den C Präprozessor nicht finden kann. Die Frage ist jetzt warum findet er den CPP nicht in einem vollständigen chroot? Er ist definitiv da und zwar unter /usr/bin - da wo er hingehört.

Auch wenn etc nicht reinmounte erhalte ich diesen Fehler.

Jemand eine Idee?
 
Oh mann, sorry for the noise. So langsam wird mir dieser Thread echt peinlich :ugly:

Wenn ich gleich gemacht hätte was mir in der Meldung ausgegeben wurde wäre das Problem sofort vom Tisch gewesen. In config.log steht nämlich drin das auf irgendein device nicht schreibend zugegriffen werden kann.

Die Lösung ist demnach folgendes finales Shellskript:

Code:
SANDBOX=/usr/local/sandbox
( cd /usr/src && make DESTDIR=$SANDBOX installworld )
mkdir -p $SANDBOX/usr/ports
mount -t nullfs /usr/ports $SANDBOX/usr/ports
mount -r -t nullfs /etc $SANDBOX/etc

In meiner /etc/fstab wird ja eh ein devfs /dev gemountet womit das einmounten von /dev auf $SANDBOX/dev natürlich nicht mehr notwendig ist.

Danke an alle die geduldig mitgelesen haben.

Tobias

PS: Der Inhalt dieses Posts wurde vor betätigen des Submit Buttons noch einmal gegengetestet.
 
Hatte den gleichen Problem am Sonntag, ich habe es gelöst in dem ich eine Vollinstalltion von NetBSD 4.0 gemacht habe der hat aber ein update in /etc gemacht oder fix glaub ich und nach dem hat es funktioniert versuchs mal mit etcupdate wenn FreeBSD sowas hat.


Gruss Menuhin
 
Zurück
Oben