[FIX] todo qemu: the printed emulator command could not run as printed
Reported from a workstation: "emulator: command not found". The line the emulator step printed relied on PATH, and "ssh host 'command'" reads neither ~/.profile nor ~/.bashrc — Ubuntu even opens the latter with a return for non-interactive shells. So what install-android.sh writes there never applies to those commands. Both printed lines now carry absolute paths. Behind it, a second one: the emulator ships TWO qemu binaries and only the headless one does without PulseAudio. The windowed one — the ssh -X case — links libpulse.so.0, absent from cloud images, and stops on "cannot open shared object file" even with -no-audio. Measured: it is the only missing library, the Qt dependencies travel in the bundle. Checked after the fix: the windowed binary starts and reports its version. --- FR --- Remonté depuis un poste : « emulator: command not found ». La ligne affichée par l'étape émulateur comptait sur le PATH, or « ssh hôte 'commande' » ne lit ni ~/.profile ni ~/.bashrc — Ubuntu ouvre même le second par un return pour les shells non interactifs. Ce que install-android.sh y écrit ne s'applique donc jamais à ces commandes. Les deux lignes affichées portent maintenant des chemins absolus. Derrière, une seconde : l'émulateur livre DEUX binaires qemu et seul le headless se passe de PulseAudio. Celui qui ouvre une fenêtre — le cas du ssh -X — lie libpulse.so.0, absente des images cloud, et s'arrête sur « cannot open shared object file » même avec -no-audio. Mesuré : c'est la seule bibliothèque qui manque, les dépendances Qt voyagent dans le bundle. Vérifié après correction : le binaire fenêtré démarre et donne sa version. Assisted-by: Claude Opus 5
This commit is contained in:
parent
f3be40d74d
commit
9ad2048bbb
2 changed files with 31 additions and 3 deletions
|
|
@ -5781,6 +5781,13 @@ class TODO:
|
|||
f"'cd {el_dir} && ./script/manifest/update_manifest_local_mobile.sh; "
|
||||
"test -f mobile/erplibre_home_mobile/install-android.sh' && "
|
||||
f'mstep "{t("prerequisites of the upstream installer")}" '
|
||||
# libpulse0 : l'émulateur a DEUX binaires qemu, et seul le
|
||||
# « headless » se passe de PulseAudio. Celui qui ouvre une FENÊTRE —
|
||||
# le cas d'un « ssh -X » — lie libpulse.so.0, absente des images
|
||||
# cloud, et s'arrête sur « cannot open shared object file » même
|
||||
# avec « -no-audio ». Mesuré : c'est la SEULE bibliothèque qui
|
||||
# manque, tout le reste des dépendances Qt voyage dans le bundle.
|
||||
#
|
||||
# openjdk-21 EN PLUS du 17 que pose l'installateur amont : mesuré,
|
||||
# Gradle s'arrête sur « Cannot find a Java installation matching
|
||||
# {languageVersion=21} » — les modules de Capacitor 8 réclament 21.
|
||||
|
|
@ -5788,7 +5795,7 @@ class TODO:
|
|||
# unzip et xauth, eux, manquent des images cloud.
|
||||
"'sudo DEBIAN_FRONTEND=noninteractive apt-get "
|
||||
"-o DPkg::Lock::Timeout=600 install -y unzip wget xauth "
|
||||
"openjdk-21-jdk' && "
|
||||
"libpulse0 openjdk-21-jdk' && "
|
||||
# L'installateur amont n'est PAS idempotent : au second passage il
|
||||
# s'arrête sur « mv: cannot overwrite latest/cmdline-tools ». Mesuré.
|
||||
# On ne le rejoue donc que s'il reste quelque chose à poser — un
|
||||
|
|
@ -5932,10 +5939,16 @@ class TODO:
|
|||
# La commande à copier, avec l'adresse déjà remplie : un émulateur
|
||||
# dont on ignore comment l'ouvrir ne sert à personne.
|
||||
"ip=$(hostname -I 2>/dev/null | awk '{print $1}'); "
|
||||
# Chemins ABSOLUS, et c'est le point : « ssh hôte 'commande' »
|
||||
# ne lit NI ~/.profile NI ~/.bashrc — Ubuntu place même un
|
||||
# « return » en tête du second pour les shells non interactifs.
|
||||
# Le PATH que l'installateur y écrit ne s'applique donc jamais
|
||||
# à ces commandes, et « emulator » y répond « command not
|
||||
# found ». Vécu, sur la ligne que ce message affichait lui-même.
|
||||
f'echo " {t("open it from your workstation:")} '
|
||||
'ssh -X erplibre@$ip \\"emulator -avd erplibre -no-audio\\""; '
|
||||
'ssh -X erplibre@$ip \\"$HOME/android/emulator/emulator -avd erplibre -no-audio\\""; '
|
||||
f'echo " {t("then install the APK:")} '
|
||||
'ssh erplibre@$ip \\"adb install -r '
|
||||
'ssh erplibre@$ip \\"$HOME/android/platform-tools/adb install -r '
|
||||
f"{el_dir}/mobile/erplibre_home_mobile/android/app/build"
|
||||
'/outputs/apk/debug/app-debug.apk\\""'
|
||||
)
|
||||
|
|
|
|||
|
|
@ -413,6 +413,21 @@ class TestAndroidEmulator(unittest.TestCase):
|
|||
self.assertIn("ssh -X erplibre@$ip", self.cmd)
|
||||
self.assertIn("adb install -r", self.cmd)
|
||||
|
||||
def test_the_printed_commands_use_absolute_paths(self):
|
||||
"""« ssh hôte 'commande' » ne lit ni ~/.profile ni ~/.bashrc — Ubuntu y
|
||||
met même un « return » pour les shells non interactifs. Une commande
|
||||
affichée qui compte sur le PATH répond « command not found ». Vécu."""
|
||||
self.assertIn("$HOME/android/emulator/emulator", self.cmd)
|
||||
self.assertIn("$HOME/android/platform-tools/adb", self.cmd)
|
||||
self.assertNotIn('"emulator -avd', self.cmd)
|
||||
self.assertNotIn('"adb install', self.cmd)
|
||||
|
||||
def test_the_windowed_emulator_gets_its_audio_library(self):
|
||||
"""Deux binaires qemu : seul le « headless » se passe de PulseAudio.
|
||||
Celui qui ouvre une fenêtre lie libpulse.so.0, absente des images
|
||||
cloud, et échoue même avec « -no-audio »."""
|
||||
self.assertIn("libpulse0", self.cmd)
|
||||
|
||||
def test_one_prologue_and_one_sdk_for_both_options(self):
|
||||
"""Deux prologues, et le second tronquerait le journal du premier."""
|
||||
both = self.todo._qemu_after_remote_cmd(("mobile", "avd"))
|
||||
|
|
|
|||
Loading…
Reference in a new issue