Estoy tratando de ejecutar ADB en un servidor Linux con múltiples usuarios donde no soy root (para jugar con mi emulador de Android). El demonio adb escribe sus registros en el archivo /tmp/adb.log
que desafortunadamente parece estar codificado en ADB y esta situación no va a cambiar.
Por lo tanto, adb no se ejecuta y genera el error obvio:cannot open '/tmp/adb.log': Permission denied
. Este archivo es creado por otro usuario y /tmp
tiene pegajoso. Si inicio adb con adb nodaemon server
haciéndolo escribir en la salida estándar, no se producen errores (también configuré su puerto en un valor único para evitar conflictos).
Mi pregunta es:¿hay alguna forma de hacer que ADB escriba en otro archivo que no sea /tmp/adb.log
? ? De manera más general, ¿hay alguna forma de crear una especie de enlace simbólico específico del proceso? Quiero redirigir todos los accesos a archivos a /tmp/adb.log
a, diciendo, un archivo ~/tmp/adb.log
.
De nuevo, no soy root en el servidor, así que chroot
, mount -o rbind
y chmod
no son opciones válidas. Si es posible, me gustaría no modificar las fuentes ADB, pero seguramente si no hay otras soluciones, lo haré.
PD Para el caso específico de ADB, puedo recurrir a ejecutar adb nodaemon server
con nohup
y redirección de salida, pero la pregunta general sigue siendo relevante.
Respuesta aceptada:
Aquí hay un ejemplo muy simple del uso de util-linux
's unshare
para poner un proceso en un espacio de nombres de montaje privado y darle una vista diferente del mismo sistema de archivos que tiene actualmente su padre:
{ cd /tmp #usually a safe place for this stuff
echo hey >file #some
echo there >file2 #evidence
sudo unshare -m sh -c ' #unshare requires root by default
mount -B file2 file #bind mount there over hey
cat file #show it
kill -TSTP "$$" #suspend root shell and switch back to parent
umount file #unbind there
cat file' #show it
cat file #root shell just suspended
fg #bring it back
cat file2 #round it off
}
there #root shell
hey #root shell suspended
hey #root shell restored
there #rounded
Puede dar a un proceso una vista privada de su sistema de archivos con unshare
utilidad en los sistemas Linux actualizados, aunque la instalación del espacio de nombres de montaje en sí misma ha sido bastante madura para toda la serie del kernel 3.x. Puede ingresar espacios de nombres preexistentes de todo tipo con nsenter
utilidad del mismo paquete, y puede obtener más información con man
.