J'essaie d'exécuter ADB sur un serveur Linux avec plusieurs utilisateurs où je ne suis pas root (pour jouer avec mon émulateur Android). Le démon adb écrit ses journaux dans le fichier /tmp/adb.log
qui semble malheureusement être codé en dur dans ADB et cette situation ne va pas changer.
Ainsi, adb ne parvient pas à s'exécuter, donnant l'erreur évidente :cannot open '/tmp/adb.log': Permission denied
. Ce fichier est créé par un autre utilisateur et /tmp
a peu collant sur. Si je démarre adb avec adb nodaemon server
en le faisant écrire sur stdout, aucune erreur ne se produit (j'ai également configuré son port sur une valeur unique pour éviter les conflits).
Ma question est:existe-t-il un moyen de faire écrire ADB dans un autre fichier que /tmp/adb.log
? Plus généralement, existe-t-il un moyen de créer une sorte de lien symbolique spécifique à un processus ? Je souhaite rediriger tous les accès aux fichiers vers /tmp/adb.log
à, en disant, un fichier ~/tmp/adb.log
.
Encore une fois, je ne suis pas root sur le serveur, donc chroot
, mount -o rbind
et chmod
ne sont pas des options valides. Si possible, j'aimerais ne pas modifier les sources ADB, mais s'il n'y a pas d'autres solutions, je le ferai.
PS Pour le cas ADB spécifique, je peux recourir à l'exécution de adb nodaemon server
avec nohup
et la redirection de sortie, mais la question générale est toujours d'actualité.
Réponse acceptée :
Voici un exemple très simple d'utilisation de util-linux
est unshare
pour placer un processus dans un espace de noms de montage privé et lui donner une vue différente du même système de fichiers que son parent possède actuellement :
{ 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
Vous pouvez donner à un processus une vue privée de son système de fichiers avec le unshare
utilitaire sur les systèmes Linux à jour, bien que la fonction d'espace de noms de montage elle-même ait été assez mature pour toute la série de noyaux 3.x. Vous pouvez entrer des espaces de noms préexistants de toutes sortes avec nsenter
utilitaire du même package, et vous pouvez en savoir plus avec man
.