scripting chroot, como?

6

Estou vendo:

link

e tentando o seguinte dentro de um script bash:

sudo chroot chroot

mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts

A execução do script cai para um shell em sudo chroot chroot . Quando eu exit recebo os avisos esperados sobre o mount precisar de root. Existe uma maneira que eu possa manter tudo isso dentro de um script de shell?

Edit: Eu quero que este seja um processo repetitivo, e é por isso que quero fazer o script de tudo, em vez de digitá-lo de tempos em tempos.

    
por Dr.Avalanche 18.11.2014 / 23:33

5 respostas

11

Crie um segundo script (por exemplo, chroot.sh ) e coloque-o na sua pasta chroot/ .

Agora edite o comando em seu script original para isso:

chroot chroot/ ./chroot.sh

Agora, o script chroot.sh será executado dentro de seu chroot .

    
por starbroken 19.11.2014 / 12:12
6

Oi você deve ir com uma solução simples como o pipe:

cat << EOF | chroot chroot
rm -rf /
EOF

PS. brincando sobre rm -rf;), qualquer coisa que você executar dentro EOF - EOF é executado dentro do seu diretório chrooted, você também pode usar o sudo se você gosta

cat << EOF | sudo chroot chroot
ls /
EOF
    
por flipvarga 23.02.2016 / 21:12
2

A coisa sobre chroot s e /proc , /sys e /dev/pts é que esses três sistemas de arquivos são fornecidos pelo kernel, então eles permanecem os mesmos se você montar dentro do chroot ou de fora. De fato, você verá, anteriormente, nas instruções:

sudo mount --bind /dev chroot/dev

/dev é preenchido pelo kernel, mas não é um sistema de arquivos fornecido pelo kernel, então ele deve ser montado por bind. Portanto, na prática, você verá que montá-lo usando montagens de ligação (ou outras) antes de entrar no chroot funciona da mesma forma (suponha sudo ):

for i in dev proc sys dev/pts
do
    mount -o bind /$i chroot/$i
done
chroot chroot
for i in dev/pts proc sys dev
do
    umount -chroot/$i
done
# or
mount -o bind /dev chroot/dev
mount -t sysfs none chroot/sys
mount -t proc none chroot/proc
mount -t devpts none chroot/dev/pts
chroot chroot
for i in dev/pts proc sys dev
do
    umount -chroot/$i
done

Leitura relevante:

por muru 19.11.2014 / 11:49
1

Você pode criar um script .bashrc ou algo parecido, que é anexado ao /root/.bashrc do chroot env, que faz toda a montagem etc. Depois você restaura o .bashrc em / root e sai do chroot :

Roteiro principal:

#!/usr/bin/env bash
cp bashrcscript chroot/root/
if [ -a chroot/root/.bashrc ]; then
    cp chroot/root/.bashrc chroot/root/.bashrc.bak
fi
echo "./bashrcscript" >> chroot/root/.bashrc
chroot chroot/
rm chroot/root/.bashrc
rm chroot/root/bashrcscript
if [ -a chroot/root/.bashrc.bak ]; then
    mv chroot/root/.bashrc.bak chroot/root/.bashrc
fi

bashrcscript:

mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts 
# Anything else you like to do

O bashrcscript será executado quando o console raiz for iniciado. Certifique-se de que é executável.

Você pode até colocar a cópia do resolv.conf no script principal, etc.

    
por s3lph 18.11.2014 / 23:49
-1

Eu acho que não está dizendo que você deve colocar esses comandos em um script, mas que você deve digitá-los ; ou seja, digite os comandos mount no shell sudo .

    
por G-Man 18.11.2014 / 23:43

Tags