Я пытаюсь настроить слой Lambda, чтобы добавить водяной знак к изображениям с помощью Graphicsmagick. Однако я немного застрял в том, чтобы заставить двоичный файл работать с библиотеками, так как мне установить ссылку на библиотеки в дочернем процессе?
Пока что я создал двоичный файл Graphicsmagick со следующими параметрами:
./configure --prefix=/opt/graphicsmagick --enable-shared=no --enable-static=yes --disable-shared --disable-installed
Практически следовал инструкциям этого ответа и идеям этого Суть . Однако ни один из них не касается запуска двоичных файлов как слоя. Так интересно, может быть, есть некоторые особенности того, что я здесь упускаю?
Вот код моего обработчика:
module.exports.run = async (event, context, callback) => {
process.env['IM_PATH'] = '/opt/graphicsmagick/bin/'
process.env['LD_LIBRARY_PATH'] = '/opt/graphicsmagick/lib'
process.env['DYLD_LIBRARY_PATH'] = '/opt/graphicsmagick/lib'
process.env['MAGICK_HOME'] = '/opt/graphicsmagick/'
...
const graphicsmagick = '/opt/graphicsmagick/bin/gm'
const graphicsmagickArgs = [
'-dissolve', '15',
'-tile',
watermark,
inputImage,
output,
]
spawn(graphicsmagick, graphicsmagickArgs, { stdio: 'inherit' })
.on('close', () => console.log('success'))
.on('error', error => console.log('error', error))
...
}
Я также пытался запустить exec с переменными окружения, например, так:
exec('/opt/graphicsmagick/bin/gm', { env:
{
'IM_PATH': `/opt/graphicsmagick/bin/`,
'LD_LIBRARY_PATH': '/opt/graphicsmagick/lib',
'DYLD_LIBRARY_PATH': '/opt/graphicsmagick/lib',
'MAGICK_HOME': `/opt/graphicsmagick/`,
}}, (err, stdout, stderr) => {
console.log('error', err)
console.log('stdout', stdout)
console.log('stderr', stderr)
})
Слой запускает Graphicsmagick, но не находит папку с библиотеками. Я получаю следующую ошибку в консоли:
/opt/graphicsmagick/bin/gm: error while loading shared libraries:libpng15.so.15: cannot open shared object file: No such file or directory