2010-09-17 11 views
0

En alternance avec ma vraie question: est-ce que quelqu'un connaît un outil de ligne de commande simple pour faire une prison chroot? Je pense à quelque chose qui exécutera une commande et copiera tout ce dont il a besoin pour fonctionner dans un répertoire donné. J'ai vu quelques directions pour un outil mais il avait des fichiers de configuration et semblait m'attendre à ce que je le lance depuis X et aucun de ces travaux ne fonctionne pour mon cas.Pourquoi le chroot ne fonctionne-t-il pas?


Et pour la vraie question:

Je suis en train de construire une prison chroot et il ne fonctionne pas. Voilà ce que je reçois quand je STRACE la commande:

[email protected]:~/dmd$ sudo strace sudo chroot /home/bcs/dmd/ /usr/bin/make -C src linux.mak 
... 
chroot("/home/bcs/dmd/")    = 0 
chdir("/")        = 0 
execve("/usr/bin/make", ["/usr/bin/make", "-C", "src", "-f", "linux.mak"], [/* 13 vars */]) = -1 ENOENT (No such file or directory) 
write(2, "chroot: ", 8chroot:)     = 8 
write(2, "cannot run command `/usr/bin/mak"..., 34cannot run command `/usr/bin/make') = 34 
write(2, ": No such file or directory", 27: No such file or directory) = 27 
write(2, "\n", 1 
)      = 1 
close(1)        = 0 
close(2)        = 0 
exit_group(127)       = ? 
[email protected]:~/dmd$ ll /home/bcs/dmd/usr/bin/make 
-rwxr-xr-x 1 bcs bcs 166112 Sep 17 00:41 /home/bcs/dmd/usr/bin/make* 

il semble que le chroot ne peut pas trouver make même si elle devrait être là. Des idées de ce qui me manque?

BTW: C'est sur une boîte Ubuntu récente.

+0

J'ai ajouté la balise linux car vous semblez essayer de construire avec un makefile linux (linux.mak). Corrigez-le s'il est incorrect et ajoutez l'étiquette du système d'exploitation appropriée. – camh

+0

@camh: bingo ... – BCS

Répondre

3

Vous n'avez probablement pas le chargeur et/ou les bibliothèques partagées à disposition. Par exemple, sur mon système (Debian sid 64 bits), a besoin de ce faire:

$ ldd /usr/bin/make 
    linux-vdso.so.1 => (0x00007fff95fff000) 
    librt.so.1 => /lib/librt.so.1 (0x00007fc97d557000) 
    libc.so.6 => /lib/libc.so.6 (0x00007fc97d1f6000) 
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007fc97cfd9000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007fc97d761000) 

Vous devez avoir tous ces fichiers (ou l'équivalent pour votre marque) dans votre chroot.

+0

Je reçois plus ou moins la même liste, 3 j'avais, 1 n'existait nulle part et un manquait. Maintenant, comment strace pas montrer celui-là? .. – BCS

+0

Après avoir mis des choses dans le bon répertoire, cela fonctionne. – BCS

+0

Vous n'avez pas besoin de 'linux-vdso.so.1', ce n'est pas vraiment un vrai fichier. – caf

1

Probablement un peu en retard, mais ce que vous demandez est a script like this. Par exemple, vous pouvez le tester avec:

mkchroot subdir /bin/sh /bin/ls 
sudo chroot subdir /bin/sh 

Et vous aurez un environnement minimal avec sh et ls. Bien sûr, vous pouvez ajouter plus d'exécutables pour avoir un rootfs plus complet.

Cela fonctionne principalement, mais je le teste avec mksquashfs et il semble être aveugle à libgcc_s.so.1. Il n'est lié dynamiquement par aucune autre bibliothèque, donc le script ne le voit pas et j'obtiens cette erreur.

libgcc_s.so.1 must be installed for pthread_cancel to work