Как установить lua-resty-string в образ докера openresty?

Я хочу использовать sha256 в своем коде openresty, поэтому попытался установить lua-resty-string.

Мне явно не хватает некоторых других пакетов, но я понятия не имею, какие именно. домашняя страница lua-resty-string не дает никаких подсказок, которые я вижу.

$ docker run --rm -it openresty/openresty bash
# apt-get update && apt-get install luarocks
# luarocks install lua-resty-string
Installing https://luarocks.org/lua-resty-string-0.09-0.rockspec
lua-resty-string 0.09-0 is now installed in /usr/local (license: )
root@28fe64c51c5a:/# luajit
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
JIT: ON SSE2 SSE3 SSE4.1 fold cse dce fwd dse narrow loop abc sink fuse
> resty_sha256 = require "resty.sha256"
> sha256 = resty_sha256:new()
/usr/local/share/lua/5.1/resty/sha256.lua:41: luajit: undefined symbol: SHA256_Init
stack traceback:
    [C]: in function '__index'
    /usr/local/share/lua/5.1/resty/sha256.lua:41: in function 'new'
    stdin:1: in main chunk
    [C]: at 0x55cd1fdaf250

Я был бы более уверен, что luarocks будет правильно собирать или устанавливать программное обеспечение.

Чего мне не хватает (на этот раз)?


person Dave Cole    schedule 09.12.2019    source источник


Ответы (1)


Кажется, что пакет lua-resty-string работает только тогда, когда код выполняется сервером nginx.

root@62817b2fe1b2:/# ldd `which nginx`
    linux-vdso.so.1 (0x00007ffe3b1db000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa367a81000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa367a60000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fa367a26000)
    libluajit-5.1.so.2 => /usr/local/openresty/luajit/lib/libluajit-5.1.so.2 (0x00007fa3679a3000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa367820000)
    libpcre.so.1 => /usr/local/openresty/pcre/lib/libpcre.so.1 (0x00007fa3677ad000)
    libssl.so.1.1 => /usr/local/openresty/openssl/lib/libssl.so.1.1 (0x00007fa367739000)
    libcrypto.so.1.1 => /usr/local/openresty/openssl/lib/libcrypto.so.1.1 (0x00007fa3674ad000)
    libz.so.1 => /usr/local/openresty/zlib/lib/libz.so.1 (0x00007fa367490000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa3672cf000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fa367c97000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa3672b5000)
root@62817b2fe1b2:/# nm -D /usr/local/openresty/openssl/lib/libcrypto.so.1.1 | grep SHA256_Init
00000000001b12a0 T SHA256_Init

И эта библиотека поставляется с openresty:

root@62817b2fe1b2:/# dpkg -S /usr/local/openresty/openssl/lib/libcrypto.so.1.1
openresty-openssl: /usr/local/openresty/openssl/lib/libcrypto.so.1.1

Итак, реальный вопрос, я полагаю, заключается в том, как вы говорите luajit загрузить эту библиотеку, чтобы он мог разрешать SHA256_Init при импорте resty.sha256.

А это вроде можно сделать с ffi:

local ffi = require("ffi")
local crypto = ffi.load("/usr/local/openresty/openssl/lib/libcrypto.so.1.1", true)
person Dave Cole    schedule 09.12.2019