ふりぶろぐ
Web Engineer's Blog
GitHub

テストコード実行環境(ubuntu)にImageMagick 7をインストールする【GithubActions】

imagemagick

ubuntuにImageMagick(7系)をインストールする手順について解説します。

環境
  • GithubActions
  • ubuntu-20.04

GithubActionsでプルリクが作られたときに自動的にテストが実行されるようになっているのですが、ImageMagickのテストで失敗しているらしい。

テストを実行する環境(ubuntu-20.04)にはImageMagickをインストールしていなかったので、それは動かないよね…(すみません)

ということでこの問題を解決したいと思います。
GithubActionsで利用できる最終的な定義ファイルのコードはおまけに書いてあります。

まずはImageMagickをインストールしてみる

まずはインストールしてみましょう。
たったこれだけでインストールできちゃうみたい。

$ sudo apt-get -y install imagemagick

定義ファイルに組み込んでプルリクを作ってみると…

Run sudo apt-get -y install imagemagick
  sudo apt-get -y install imagemagick
  shell: /usr/bin/bash -e {0}
Reading package lists...
Building dependency tree...
Reading state information...
imagemagick is already the newest version (8:6.9.10.23+dfsg-2.1ubuntu11).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

すでにインストールされていたらしい。

原因:バージョンが違う or コーデックが入っていない

ローカルでは7系のImageMagickを使用していたので、もしかするとこれが原因で実行できてなかったのかも。
メジャーバージョンは合わせておくべきなので7系にします。

org.im4java.core.InfoException: org.im4java.core.CommandException: org.im4java.core.CommandException: identify-im6.q16: no decode delegate for this image format `HEIC'

こんなエラーが出てたのでコーデックが入っていないのが原因だったのかもしれない。
入れられるものは入れてみるスタイル。

解決:コーデックを入れつつ7系にする

6系の削除

まずは6系を削除します。

$ sudo apt remove imagemagick

コーデックの準備

その後、コーデックの準備をします。
sources.listを書き換えておかないと、build-depでエラーが出ることがあるらしい。
手動で書き換えることが多いみたいだけど、今回はGithubActionsなのでsedで書き換えてます。(やってることは同じです。)

$ sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
$ sudo apt update
$ sudo apt install build-essential
$ sudo apt build-dep imagemagick
$ sudo apt install libwebp-dev libopenjp2-7-dev librsvg2-dev libde265-dev

libheifの準備

libheifってやつを入れておく。(何かわかってないけど入れておく)

$ git clone https://github.com/strukturag/libheif.git
$ cd libheif
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

7系のインストール

最後にImageMagick 7系をインストールします。

$ wget https://www.imagemagick.org/download/ImageMagick.tar.gz
$ tar xf ImageMagick.tar.gz
$ cd ImageMagick-7*
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

確認

$ convert -version

おまけ

GithubActionsの定義ファイルにするとこんな感じになります。
必要な部分にコピペしてもらったら動くと思います。
私の環境はubuntu-20.04でした。

      - name: remove imagemagick 6
        run: sudo apt remove imagemagick

      - name: setup imagemagick 7
        run: |
          sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
          sudo apt update
          sudo apt install build-essential
          sudo apt build-dep imagemagick
          sudo apt install libwebp-dev libopenjp2-7-dev librsvg2-dev libde265-dev

      - name: install libheif
        run: |
          git clone https://github.com/strukturag/libheif.git
          cd libheif
          ./autogen.sh
          ./configure
          make
          sudo make install

      - name: install imagemagick 7
        run: |
          wget https://www.imagemagick.org/download/ImageMagick.tar.gz
          tar xf ImageMagick.tar.gz
          cd ImageMagick-7*
          ./configure
          make
          sudo make install
          sudo ldconfig

      - name: check imagemagick
        run: convert -version

あとがき

GithubActionsの定義ファイルって初めて触ったのですが、思っていたよりシンプルでした。結構楽しいかも。
インストールできて動くようになったのは良かったけど、インストール時間めちゃくちゃ長くてテスト実行するまでに10分くらいかかるようになっちゃいました。

ABOUT ME
りーふ
たまにブログを書いてるWebエンジニア。 サーバーサイドメインでインフラとフロントエンドもたまにやります。 Javaが得意。 Play Frameworkが好き。 本業は迷惑をかけない程度に手を抜くスタイル。 意識高い系は苦手。