3 votos

"/dev/fd/63 No such file or directory"

He estado tratando de ejecutar un comando en chroot (bastante nuevo en esto), y obtengo la siguiente salida.

root@hostname:~ # bash <(wget -q0 https://raw.githubusercontent.com/ubports/unity8-desktop-install-tools/master/install.sh) 
bash: /dev/fd/63: No such file or directory root

2voto

fredericrous Puntos 111

Mensaje de error

/dev/fd/63 No such file or directory

Fuente del problema

En efecto, el directorio /dev/fd/ no existía en esa máquina.

Solución

La solución fue crear un enlace simbólico desde /proc/self/fd a /dev/fd así:

ln -s /proc/self/fd /dev/fd

Sustitución de procesos <(..) no funcionaría en QNAP sin esto.

1voto

Serg Puntos 17677

TL;DR: copiar el /root carpeta fuera de chroot en el directorio chroot

El <(...) se conoce como sustitución de procesos y es una forma de ejecutar un comando, cuya salida va a una tubería anónima. Eso es lo que es /dev/fd/63. La idea es permitir un comando externo ( aquí es bash ) para tratar la salida de otro comando como si fuera un archivo. Generalmente la forma sería utilizar < para redirigir ese objeto pseudo-archivo a bash de entrada.

bash < <(wget -q0 https://raw.githubusercontent.com/ubports/unity8-desktop-install-tools/master/install.sh)

Por lo general, esto no difiere de wget https://stuff.com/blah | bash . En ambos casos, generalmente no se recomienda utilizar estos comandos a menos que estés cien por ciento seguro de que el script que estás descargando no proviene de una fuente dudosa y no es un malware.

Sin embargo, ya que ha mencionado el comando de ejecución en chroot y el script produce No such file or directory root y porque bash permite ejecutar scripts como bash script.sh aquí su script se está ejecutando, pero no hay ningún directorio llamado root en su chroot. Puedes arreglarlo a través de sudo cp -R /root chrootdir . Para obtener mejores resultados yo sugeriría simplemente leer el script primero, ver lo que necesita, y copiar eso a la carpeta chroot, y sólo entonces ejecutar el script localmente dentro de la carpeta. No es necesario ejecutar wget varias veces

Así que el script funciona. Los errores en scripting generalmente en forma <shell>: <command user typed>: error message por lo que el script que se almacena temporalmente como /dev/fd/63 y se ejecuta, simplemente no encuentra lo que necesita.

Véase también,

1 votos

Parece que ha funcionado. Gracias. Además, el script es legítimo, y es sólo para probar algunas cosas en una VM, de todos modos, así que no hay riesgo de seguridad.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: