Как установить новый imagemagick с поддержкой webp в контейнере Travis CI?

Я хотел преобразовать изображения png в альтернативы webp в travis, но Travis CI использует довольно старую версию ubuntu 12.04, поэтому прилагаемый imagemagick не был действительно обновлен:

$ convert -version
Version: ImageMagick 6.6.9-7 2014-03-06 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

Я знаю, что могу использовать sudo: required, чтобы использовать travis на виртуальной машине и устанавливать и создавать там вещи. Вместо этого я хотел бы использовать контейнерную среду сборки с sudo: false, потому что это намного быстрее.

Если я попытаюсь скомпилировать libwepb или imagemagick, travis выдаст мне ошибку отказа в разрешении, потому что у меня нет разрешений на папку /usr/local/:

$ make install
...
 /bin/mkdir -p '/usr/local/include/webp'
/bin/mkdir: cannot create directory `/usr/local/include/webp': Permission denied
...
The command "make install" failed and exited with 2 during .

person onnimonni    schedule 14.12.2016    source источник
comment
Вы пытались указать dist: trusty в своей конфигурации? С некоторых пор доступен контейнер Trusty.   -  person joepd    schedule 15.12.2016


Ответы (1)


Travis позволяет пользователям изменять $PATH и устанавливать двоичные файлы в каталог $HOME.

Вот полный пример для рубина. Он компилирует двоичные файлы только один раз и кэширует их. Он устанавливает их снова только в том случае, если номера версий не совпадают.

language: ruby
sudo: false
dist: precise

cache:
  directories:
  - "$HOME/opt"

addons:
  apt:
    packages:
      - libjpeg-dev
      - libpng-dev
      - libgif-dev
env:
  global:
  - IMAGEMAGICK_VERSION: '7.0.3-10'
  - LIBWEBP_VERSION: '0.5.1'

# Install newer libwebp and imagemagick
before_install:
  # Update PATH so that travis can find newer imagemagick
  - export PATH=$HOME/opt/bin:$PATH

  # Checks if Imagemagick is already sufficient version
  # If not installs it from the sources
  - convert -version | grep $IMAGEMAGICK_VERSION || {
    export CORES=$(nproc) &&
    echo "Using $CORES cores for compiling..." &&
    cd /tmp &&
    curl -O https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-$LIBWEBP_VERSION.tar.gz &&
    tar xvzf libwebp-$LIBWEBP_VERSION.tar.gz &&
    cd libwebp-* &&
    ./configure --prefix=$HOME/opt &&
    make -j$CORES &&
    make install -j$CORES &&
    cd /tmp &&
    curl -O https://www.imagemagick.org/download/ImageMagick-$IMAGEMAGICK_VERSION.tar.gz &&
    tar xvzf ImageMagick-$IMAGEMAGICK_VERSION.tar.gz &&
    cd ImageMagick-* &&
    ./configure --prefix=$HOME/opt &&
    make -j$CORES &&
    make install -j$CORES &&
    $HOME/opt/bin/magick -version | grep $IMAGEMAGICK_VERSION &&
    cd $TRAVIS_BUILD_DIR; }

  # Update library paths for programs
  - export LD_FLAGS=-L$HOME/opt/lib
  - export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$HOME/opt/lib
  - export CPATH=$CPATH:$HOME/opt/include

Кредиты: я посмотрел, как эта библиотека ruby ​​устанавливает libwebp, и выяснить остальное было легко: https://github.com/le0pard/webp-ffi/blob/master/.travis.yml

person onnimonni    schedule 14.12.2016