Пакет 'cairo', необходимый для 'virtual:world', не найден

Я использую Alpine Linux в своих контейнерах. Некоторое время назад у меня была та же ошибка, что и Пакет cairo не найден в пути поиска pkg-config. Проблема установки холста Node j.s. Я добавил следующий фрагмент в свой файл Docker:

    # Install cairo for one of our frontend dependencies
RUN apk add --update --no-cache cairo \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Это заставило ошибку уйти (по крайней мере, насколько я помню, прошло несколько месяцев).

Сегодня эта ошибка снова выскочила при запуске docker-compose exec web yarn watch. Вот полный вывод ошибки:

[4/4] Building fresh packages...
success Installed "[email protected]" with binaries:
[1/2] ⠠ canvas
warning Error running install script for optional dependency: "/var/www/html/node_modules/canvas: Command failed.
Exit code: 1
Command: node-gyp rebuild
Arguments: 
Directory: /var/www/html/node_modules/canvas
Output:
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | x64
gyp http GET https://nodejs.org/download/release/v8.14.0/node-v8.14.0-headers.tar.gz
gyp http 200 https://nodejs.org/download/release/v8.14.0/node-v8.14.0-headers.tar.gz
gyp http GET https://nodejs.org/download/release/v8.14.0/SHASUMS256.txt
gyp http 200 https://nodejs.org/download/release/v8.14.0/SHASUMS256.txt
gyp info spawn /usr/bin/python2
gyp info spawn args [ '/usr/local/share/.config/yarn/global/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/var/www/html/node_modules/canvas/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/local/share/.config/yarn/global/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/root/.node-gyp/8.14.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/root/.node-gyp/8.14.0',
gyp info spawn args   '-Dnode_gyp_dir=/usr/local/share/.config/yarn/global/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/root/.node-gyp/8.14.0/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/var/www/html/node_modules/canvas',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
Package cairo was not found in the pkg-config search path.
Perhaps you should add the directory containing `cairo.pc'
to the PKG_CONFIG_PATH environment variable
Package 'cairo', required by 'virtual:world', not found
gyp: Call to './util/has_lib.sh freetype' returned exit status 0 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/local/share/.config/yarn/global/node_modules/node-gyp/lib/configure.js:345:16)
gyp ERR! stack     at emitTwo (events.js:126:13)
gyp ERR! stack     at ChildProcess.emit (events.js:214:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
gyp ERR! System Linux 4.9.125-linuxkit
gyp ERR! command \"/usr/bin/node\" \"/usr/local/bin/node-gyp\" \"rebuild\"
gyp ERR! cwd /var/www/html/node_modules/canvas
gyp ERR! node -v v8.14.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok"
Done in 98.27s.

Я могу доказать, что Каир находится на контейнере:

WARNING: Ignoring APKINDEX.adfa7ceb.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.efaa1f73.tar.gz: No such file or directory
cairo-1.14.12-r2 description:
A vector graphics library

cairo-1.14.12-r2 webpage:
http://cairographics.org/

cairo-1.14.12-r2 installed size:
1097728

cairo-1.14.12-r2 depends on:
so:libX11.so.6
so:libXext.so.6
so:libXrender.so.1
so:libc.musl-x86_64.so.1
so:libfontconfig.so.1
so:libfreetype.so.6
so:libpixman-1.so.0
so:libpng16.so.16
so:libxcb-render.so.0
so:libxcb-shm.so.0
so:libxcb.so.1
so:libz.so.1

cairo-1.14.12-r2 provides:
so:libcairo-script-interpreter.so.2=2.11400.12
so:libcairo.so.2=2.11400.12

cairo-1.14.12-r2 is required by:

cairo-1.14.12-r2 contains:
usr/lib/libcairo.so.2.11400.12
usr/lib/libcairo-script-interpreter.so.2
usr/lib/libcairo-script-interpreter.so.2.11400.12
usr/lib/libcairo.so.2
usr/lib/cairo/cairo-sphinx.so.0
usr/lib/cairo/cairo-fdr.so.0
usr/lib/cairo/cairo-fdr.so
usr/lib/cairo/cairo-fdr.so.0.0.0
usr/lib/cairo/cairo-sphinx.so
usr/lib/cairo/cairo-sphinx.so.0.0.0

cairo-1.14.12-r2 triggers:

cairo-1.14.12-r2 has auto-install rule:

cairo-1.14.12-r2 affects auto-installation of:

cairo-1.14.12-r2 replaces:

cairo-1.14.12-r2 license:
LGPL-2.0-or-later MPL-1.1

Я не вижу ни одного файла cairo.pc после некоторого просмотра, так как я могу определить, какой шаг мне нужно предпринять, чтобы сообщить моему yarn install о местонахождении каира?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
5 168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это можно легко исправить, установив пакет cairo-dev.

Согласно поиску пакетов Alpine, он установит cairo.pc под /usr/lib/pkgconfig, который, скорее всего, будет обнаружен gyp:

https://pkgs.alpinelinux.org/contents?file=cairo.pc&path=&name=&branch=v3.8

Переключение на cairo-dev теперь требует make и все, что с этим связано. Я могу это сделать, но предпочитаю, чтобы это было легко. Есть ли альтернативы?

Webnet 30.01.2019 23:41

Излишне говорить, что это действительно работает, спасибо! Я не знал, что могу искать имя файла в репозитории пакетов alpine.

Webnet 31.01.2019 00:29

Конечно, @Webnet! Рад помочь. Чтобы сделать контейнер максимально легким, вы можете удалить ненужные файлы, но это потребует ручного труда. Один из вариантов — сохранить только файлы, установленные непосредственно cairo-dev (pkgs.alpinelinux.org/…), и вручную скопировать только их в контейнер, а затем попытаться выполнить сборку. Заголовки Cairo могут зависеть от заголовков других пакетов, поэтому вам, возможно, придется добавлять файлы постепенно, пока сборка не будет успешной. Можно пойти и другим путем — удалять файлы постепенно, пока работает сборка.

valiano 31.01.2019 07:45

Если есть опция apk для игнорирования зависимостей и установки только явно необходимого пакета, аналогичная флагу apt- (serverfault.com/a/663803/430884), она может пригодиться, но я не уверен, поддерживается ли она apk.

valiano 31.01.2019 07:48

Другие вопросы по теме