Я пытаюсь запустить обратную tcp ссылку на недавно установленный эмулятор Android в Linux через adb
(пытаюсь отладить сбойный вызов из react_native
сборки.):
adb -s emulator-5556 reverse --no-rebind tcp:0 tcp:8081
с версией adb:
Android Debug Bridge version 1.0.41
Version 28.0.3-5475833
Любопытно, что та же команда, что и для прямой связи, работает нормально.
Я получаю результат:
adb: error: cannot bind listener: Operation not permitted
Теперь похоже, что эмулятор выдает ошибку (кажется, что adb просто получает это сообщение об ошибке как чтение от процесса, с которым он связывается, после запуска через strace и через ADB_TRACE = all).
Кажется, что сбой после отправки записи в процесс adbd с:
write(3, "0027reverse:forward:norebind:tcp:0;tcp:8081", 43) = 43
Теперь это, очевидно, командный протокол, который отправляется в эмулятор. (Я не смог найти команду № 27, когда вокруг источника adb светился фонарь. Любые указатели?)
Чтобы попытаться точно выяснить, что происходит, я попытался запустить эмулятор через strace. (он пытается записать в файл, который вызывает ошибку разрешений? это вызывается при попытке открыть сокет?)
Вот ADBTRACE=all
журналы (ADB_TRACE=all adb reverse --no-rebind tcp:0 tcp:8081
):
adb D 05-29 00:16:29 16167 16167 adb_trace.cpp:192] Android Debug Bridge version 1.0.41
adb D 05-29 00:16:29 16167 16167 adb_trace.cpp:192] Version 28.0.3-5475833
adb D 05-29 00:16:29 16167 16167 adb_trace.cpp:192] Installed as /home/something/Android/Sdk/platform-tools/adb
adb D 05-29 00:16:29 16167 16167 adb_trace.cpp:192]
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:327] adb_connect: service: reverse:forward:norebind:tcp:0;tcp:8081
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:153] _adb_connect: host:version
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:107] writex: fd=3 len=16 30303063686f73743a76657273696f6e 000chost:version
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=4
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=4 got=4 4f4b4159 OKAY
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:187] _adb_connect: return fd 3
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=4
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=4 got=4 30303034 0004
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=4
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=4 got=4 30303239 0029
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:153] _adb_connect: reverse:forward:norebind:tcp:0;tcp:8081
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:107] writex: fd=3 len=18 30303065686f73743a74706f72743a61 000ehost:tport:a [truncated]
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:113] Switch transport in progress: host:tport:any
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=4
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=4 got=4 4f4b4159 OKAY
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=8
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=8 got=8 0d00000000000000 ........
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:127] Switch transport success
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:107] writex: fd=3 len=43 30303237726576657273653a666f7277 0027reverse:forw [truncated]
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=4
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=4 got=4 4f4b4159 OKAY
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:187] _adb_connect: return fd 3
adb D 05-29 00:16:29 16167 16167 adb_client.cpp:345] adb_connect: return fd 3
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=4
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=4 got=4 4641494c FAIL
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=4
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=4 got=4 30303264 002d
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:81] readx: fd=3 wanted=45
adb D 05-29 00:16:29 16167 16167 adb_io.cpp:97] readx: fd=3 wanted=45 got=45 63616e6e6f742062696e64206c697374 cannot bind list [truncated]
adb: error: cannot bind listener: Operation not permitted
При запуске эмулятора с:
strace -s 10000 -f emulator -avd Pixel_2_API_Q 2>&1 | grep -C100 reverse
Я получаю:
[pid 26748] recvfrom(79, "reverse:forward:norebind:tcp:0;tcp:8081\0", 40, 0, NULL, NULL) = 40
[pid 26748] ioctl(54, KVM_RUN, 0) = 0
[pid 26748] recvfrom(79, 0x7f7b49edec50, 24, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
[pid 26748] ioctl(54, KVM_RUN, 0) = 0
[pid 26748] write(31, "\1\0\0\0\0\0\0\0", 8) = 8
[pid 26729] <... ppoll resumed>) = 1 ([{fd=31, revents=POLLIN}], left {tv_sec=0, tv_nsec=9712500})
[pid 26748] write(28, "\1\0\0\0\0\0\0\0", 8 <unfinished ...>
[pid 26729] futex(0x2f80ce8, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
[pid 26748] <... write resumed>) = 8
[pid 26748] futex(0x2f80ce8, FUTEX_WAKE_PRIVATE, 1) = 1
[pid 26729] <... futex resumed>) = 0
[pid 26748] ioctl(54, KVM_RUN <unfinished ...>
[pid 26729] read(31, "\1\0\0\0\0\0\0\0", 16) = 8
[pid 26729] futex(0x2f80ce8, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 26748] <... ioctl resumed>, 0) = 0
[pid 26729] ppoll([{fd=31, events=POLLIN}, {fd=30, events=POLLIN}, {fd=26, events=POLLIN}, {fd=28, events=POLLIN}, {fd=52, events=POLLIN}, {fd=64, events=POLLIN}, {fd=65, events=POLLIN}, {fd=66, events=POLLIN}, {fd=67, events=POLLIN}, {fd=69, events=POLLIN}, {fd=71, events=POLLIN}, {fd=73, events=POLLIN}, {fd=75, events=POLLIN}, {fd=77, events=POLLIN}, {fd=50, events=POLLIN}, {fd=51, events=POLLIN}, {fd=34, events=POLLIN}, {fd=79, events=POLLIN}], 18, {tv_sec=0, tv_nsec=9404000}, NULL, 8 <unfinished ...>
[pid 26748] ioctl(54, KVM_RUN <unfinished ...>
[pid 26729] <... ppoll resumed>) = 1 ([{fd=28, revents=POLLIN}], left {tv_sec=0, tv_nsec=9399241})
[pid 26748] <... ioctl resumed>, 0) = 0
[pid 26729] read(31, <unfinished ...>
[pid 26748] futex(0x2f80ce8, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
[pid 26729] <... read resumed>0x7f7bb75925a0, 16) = -1 EAGAIN (Resource temporarily unavailable)
[pid 26729] read(28, "\1\0\0\0\0\0\0\0", 512) = 8
[pid 26729] futex(0x2f80ce8, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 26748] <... futex resumed>) = 0
[pid 26729] <... futex resumed>) = 1
[pid 26729] ppoll([{fd=31, events=POLLIN}, {fd=30, events=POLLIN}, {fd=26, events=POLLIN}, {fd=28, events=POLLIN}, {fd=52, events=POLLIN}, {fd=64, events=POLLIN}, {fd=65, events=POLLIN}, {fd=66, events=POLLIN}, {fd=67, events=POLLIN}, {fd=69, events=POLLIN}, {fd=71, events=POLLIN}, {fd=73, events=POLLIN}, {fd=75, events=POLLIN}, {fd=77, events=POLLIN}, {fd=50, events=POLLIN}, {fd=51, events=POLLIN}, {fd=34, events=POLLIN}, {fd=79, events=POLLIN}], 18, {tv_sec=0, tv_nsec=9246000}, NULL, 8 <unfinished ...>
[pid 26748] futex(0x2f80ce8, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 26748] ioctl(54, KVM_RUN, 0) = 0
[pid 26748] ioctl(54, KVM_RUN <unfinished ...>
[pid 26747] <... ioctl resumed>, 0) = 0
[pid 26747] ioctl(53, KVM_RUN <unfinished ...>
[pid 26748] <... ioctl resumed>, 0) = 0
[pid 26748] ioctl(54, KVM_RUN, 0) = 0
[pid 26747] <... ioctl resumed>, 0) = 0
[pid 26748] ioctl(54, KVM_RUN <unfinished ...>
[pid 26747] sendto(79, "OKAY\256\2\0\0X\1\0\0\0\0\0\0\0\0\0\0\260\264\276\246", 24, MSG_NOSIGNAL, NULL, 0 <unfinished ...>
[pid 26748] <... ioctl resumed>, 0) = 0
[pid 26747] <... sendto resumed>) = 24
[pid 26747] ioctl(53, KVM_RUN <unfinished ...>
[pid 26748] ioctl(54, KVM_RUN <unfinished ...>
[pid 26747] <... ioctl resumed>, 0) = 0
[pid 26748] <... ioctl resumed>, 0) = 0
[pid 26747] sendto(79, "WRTE\256\2\0\0X\1\0\0005\0\0\0\0\0\0\0\250\255\253\272", 24, MSG_NOSIGNAL, NULL, 0 <unfinished ...>
[pid 26748] futex(0x2f80ce8, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...>
[pid 26747] <... sendto resumed>) = 24
[pid 26747] futex(0x2f80ce8, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 26748] <... futex resumed>) = 0
[pid 26747] <... futex resumed>) = 1
[pid 26748] futex(0x2f80ce8, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid 26747] ioctl(53, KVM_RUN <unfinished ...>
[pid 26748] <... futex resumed>) = 0
[pid 26748] ioctl(54, KVM_RUN <unfinished ...>
[pid 26747] <... ioctl resumed>, 0) = 0
[pid 26748] <... ioctl resumed>, 0) = 0
[pid 26747] sendto(79, "FAIL002dcannot bind listener: Operation not permitted", 53, MSG_NOSIGNAL, NULL, 0 <unfinished ...>
Теперь это не имеет особого смысла, если только это не ошибка внутри kvm_run (я не супер , знакомый с kvm.)
Итак, я предполагаю, что это какая-то простая проблема с разрешениями, но мой беспорядок не позволяет мне выяснить , где проблема с разрешениями.
Кто-нибудь может помочь пролить свет на то, как бороться с этой ошибкой для adb? есть ли мастера strace / kvm, которые могут указать, как я могу узнать, где эта ошибка прав доступа?