chroot en un script

Imagen de ndante

Forums: 

Necesito hacer chroot en MEDIO de un script. Todo son problemas.
De entrada no me reconoce le comando chroot, me pone algo como:


scrip_con_chroot:line XX:chroot:Command not found

Si fuese un problema de chroot, supongo que fuera daría el mismo error, pero fuera (En el prompt) me dice algo como:


chroot: missing operand
Pruebe `chroot --help' para más información.

lo normal cuando no le dices que hacer, ni más información.

otra parte del problema es como decirle al script que continue, me explico...
al cambiar de "/" el script se detiene en el nuevo prompt hasta que se hace un
exit

Muchas gracias

Bueno nunca está demas un

Imagen de deathUser

Bueno nunca está demas un RTFM ...

Pero Bueno ...
Extracto del manual ...

SYNOPSIS
chroot [-u -user] [-g -group] [-G -group,group,...] newroot [command]
DESCRIPTION
The chroot command changes its root directory to the supplied directory
newroot and exec's command, if supplied, or an interactive copy of your
shell.

Si mi inglés no me falla si no se especifica un comando a ejecutar ([command]) chroot te entrega un shell interactivo, así que ejecuta chroot y pásale como parámetro el scrip a ejecutar, claro que dicho script deberá estar dentro del árbol del nuevo root ...

Y además, especifica todo el path a chroot en la llamada a chroot en el script.

Suerte ...
bye
:)

chroot "${CLFS}"

Imagen de ndante


chroot "${CLFS}" /tools/bin/env -i \
HOME=/root TERM="${TERM}" PS1='\u:$(pwd)> ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/tools/bin/bash --login +h

ese es el chroot que quiero incluir. Si os fijais, es del CLFS; pues no me rula dentro de un scrip. Lo he echo con el prompt, paso a paso, y me funciona pero dentro no. Y ya he comprobao todas las dependencias. Hasta ese momento todo va como la seda.
De toas formas, creo que una ves cargado el chroot el script se "para". Ese es mi mayor problema (el otro fijo que sera "alguna coma")

THX THX

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Pues creo que no entendiste

Imagen de deathUser

Pues creo que no entendiste muy bien que digamos el post anterior:

El chroot te cambia el root directory por el que especificas y te ejecuta un shell interactivo o el comando especificado, en tu caso ejecuta el env ... blah, blah ... bash ... y te deja una sesion de bash abierta, y obvio, ahí se queda, intenta creando un scrip con el resto del script que quieres ejecutar dentro del chroot (el nuevo root) y llámalo al momento del chroot, de esta manera creo que se ejecutará lo que quieres con el nuevo root, o si no, trata con algo como expect para el diálogo con comandos interactivos...

SUerte ...
bye
:)

a ver si no soy tan tonto como pienso

Imagen de ndante

deveria mas o menos:

dentro de script_principal

chroot script_continuacion

y script_continuacion devería empezar con:


"${CLFS}" /tools/bin/env -i \
HOME=/root TERM="${TERM}" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/tools/bin/bash --login +h

¿algo así?

[quote]Aprender implica, que hubo un momento en que no sabias.[/quote]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Semi-solucionado

Imagen de ndante

He hecho que el 'scrpit' copie antes de hacer chroot un .bash_profile y un .basrc especiales. Cuando hago .chroot señalo directamente a el primero, este a su vez carga el segundo, de esta manera logro que las variables del programa formen parte del nuevo entorno.
Las dos ultimas lineas del .bashrc son, un puntero a un 'script' que es la continuacion del primero y una orden de 'exit' para que de esta forma en cuanto acabe continue con el general fuera de chroot.

Y digo semisolucionado, porque aún no he dado con la formula exacta del chroot:


chroot /Directorio/nueva/raiz /Hubicacion/.bash_profile
(la hubicacion la especifico dentro de la nueva raiz)
Según vengo entendiendo, se hace así, pero sigo en las mismas por ahora. ¿Que hago mal?

P.D. He revisado que todos los PATH y direcciones de .bash_profile y .bashrc apunten a lugares dentro de la nueva raiz

THX THX

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograre]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Solucionado, ahora... ni idea realmente de como :D

Imagen de ndante

Hombre, alguna idea si tengo, pero como el metodo fue el prueba/error, pues me siento un poco como que no lo he solucionado, sino puesto un parche... de toas formas, funciona :D

La instruccion final a quedado así:

chroot "${CLFS}" /tools/bin/env -i \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
HOME=/root TERM="${TERM}" \
/tools/bin/bash --login +h /root/.bashrc

Al final sólo he añadido: /root/.bashrc. Pero siempre sin un .bash_profile. El bash_profile me colgaba la maquina. Creo que era por que el tambien hacia una llamada a bash, por lo que se creaba un loop. Te aseguro que la salida de
ps -a

era digna de verse, mientras se podia claro :D
De toas formas ahora estoy trabao con el

tzselect

ahora mismo iba a abrir otro tema :D

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograré]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]

Y por cierto, se me olvidava decir...

Imagen de ndante

Muchas Gracias por la atencion, me has sido de ayuda.
:D :D

For:.- AMD socket940 64x2
.- SIDUX64 + ncurses
To:.- AMD socket940 64x2
.- CLFS 86_64 Pure 64
[Lo lograré]

For:.- AMD socket940 64x2
.- CLFS x86_64 Pure 64
To:.- AMD socket940 64x2
.- PKT 64
[Lo lograre]