Я пытаюсь запустить GeckoDriver v0.26.0 внутри док-контейнера Alpine 3.10, в частности python:3.6.6-alpine3.10
.
После того, как я кое-что понял, я ударил стену:
/ # geckodriver --version
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found
Чего мне не хватает?
Как я сюда попал
Сначала разверните док-контейнер:
docker run -it python:3.6.9-alpine3.10 /bin/sh
Затем попробуйте установить GeckoDriver
/ # wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
/ # tar -zxf geckodriver-v0.26.0-linux64.tar.gz -C /usr/bin
/ # geckodriver --version
/bin/sh: geckodriver: not found.
В самом деле? но я просто извлек это ... Хм ... ОК. Правильно ли он извлек? $PATH
правильно?
/ # ls -lah /usr/bin/geckodriver
-rwxr-xr-x 1 1000 1000 6.7M Oct 12 10:19 /usr/bin/geckodriver
/ # echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Да. Хорошо, давайте гуглим вещи. Ну, может, мне стоит проверить file
информацию . У Alpine этого нет по умолчанию.
/ # apk add file
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/2) Installing libmagic (5.37-r1)
(2/2) Installing file (5.37-r1)
Executing busybox-1.30.1-r2.trigger
OK: 24 MiB in 36 packages
/ # file /usr/bin/geckodriver
/usr/bin/geckodriver: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.26, BuildID[sha1]=32c4cfc2d9346336dc7c20e99a62df9be344d609, with debug_info, not stripped
ответ на тот же вопрос говорит, что нужно проверить /lib64/ld-linux-x86-64.so.2
:
/ # ls /lib64
ls: /lib64: No such file or directory
Отсутствует. ОК, как мы это получим? Репо пакета Alpine говорит, что это часть libc6-compat
. Крутая установка, и все будет работать ... верно?
/ # apk add libc6-compat
(1/1) Installing libc6-compat (1.1.22-r3)
OK: 24 MiB in 37 packages
/ # ls /lib64
ld-linux-x86-64.so.2
/ # geckodriver --version
Error loading shared library libgcc_s.so.1: No such file or directory (needed by /usr/bin/geckodriver)
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /usr/bin/geckodriver)
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: _Unwind_Resume: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found
Error relocating /usr/bin/geckodriver: _Unwind_GetIP: symbol not found
Error relocating /usr/bin/geckodriver: _Unwind_Backtrace: symbol not found
... Ну, по крайней мере, теперь он распознает его как исполняемый файл ... Хорошо, поэтому нам нужно libgcc_s.so.1
. Это в libgcc . Имеет смысл.
/ # apk add libgcc
(1/1) Installing libgcc (8.3.0-r0)
OK: 24 MiB in 38 packages
/ # geckodriver --version
Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /usr/bin/geckodriver)
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found
Что? У нас есть ld-linux-x86-64.so.2
в /lib64
, куда это смотрит? Я заметил, что пакет gcompat
как /lib/ld-linux-x86-64.so.2
, может, он там смотрит?
# / apk add gcompat
(1/2) Installing libucontext (0.1.3-r1)
(2/2) Installing gcompat (0.4.0-r0)
OK: 24 MiB in 40 packages
# / geckodriver --version
Error relocating /usr/bin/geckodriver: __register_atfork: symbol not found
Error relocating /usr/bin/geckodriver: __res_init: symbol not found
И вот где я нахожусь. Поиск в Google для __register_atfork
и __res_init
ничего полезного не даст.