読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

ImageMagickの最新版をソースからコンパイルしてインストールする

ansible ImageMagick linux vagrant github

yumだと古いバージョンしかインストールできないので、ソースコードをコンパイルして最新版をインストールしますよ。
f:id:treeapps:20160219001058p:plain

今回はImageMagicについて、ソースコードから最新版をコンパイルしてインストールしてみようと思います。

ImageMagic

ソースをDL

http://www.imagemagick.org/download/

ここからダウンロードできます。しかしここでちょっとした問題があります。

この中で常に最新版のアーカイブは例えば「ImageMagick.tar.gz」です。例えばこれを解凍すると、以下のようになります。

[vagrant@node1 ~]$ ll
total 12956
-rw-rw-r-- 1 vagrant vagrant 13266141 Feb 12 22:23 ImageMagick.tar.gz
[vagrant@node1 ~]$ tar zxf ./ImageMagick.tar.gz
[vagrant@node1 ~]$ ll
total 12960
drwxrwxr-x 15 vagrant vagrant     4096 Feb 12 22:23 ImageMagick-6.9.3-4
-rw-rw-r--  1 vagrant vagrant 13266141 Feb 12 22:23 ImageMagick.tar.gz

アーカイブ名が「ImageMagick.tar.gz」なのに解凍すると「ImageMagick-6.9.3-4」等とフォルダ名にバージョンが入ってしまうのです。これだと自動化しようとすると、バージョン番号が事前に解っていないといけないので、メンテが面倒になってしまいます。それに加えて、ImageMagickのソースコードは古いものはどんどん削除されて404になっていくのです。つまり、プロビジョニングする際にバージョン番号を指定してダウンロードしようとしても、時間が経つとそのバージョンはサイトから消えている、なんて事が起きます。

それを解決するため、tarで頑張って解凍後のフォルダ名を変更します。以下のようにすると「ImageMagick.tar.gz」というアーカイブを「ImageMagick-latest」というフォルダに解凍する事ができます。これでImageMagickのバージョンを知らなくても、常に最新のソースコードを扱うことができるようになります。

mkdir -p ImageMagick-latest && tar zxf ImageMagick.tar.gz -C ImageMagick-latest --strip-components 1

後はconfigure、make、make installです。

まとめ

cd /usr/local/src
# DL
sudo wget http://www.imagemagick.org/download/ImageMagick.tar.gz
# フォルダ名を固定化して解凍
sudo mkdir -p ImageMagick-latest && tar xzvf ImageMagick.tar.gz -C ImageMagick-latest --strip-components 1
# コンパイル・インストール
cd ImageMagick
sudo ./configure
sudo make
sudo make install

コンパイル時にエラー

makeした際に「autoconfのバージョンxxx以上をインストールしてからコンパイルし直せ」と言われる場合があります。その場合はImageMagickの時と同様に、以下のようにソースをコンパイルしてインストールします。

cd /usr/local/src
sudo wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
sudo mkdir -p autoconf-latest && tar xzvf autoconf-latest.tar.gz -C autoconf-latest --strip-components 1
cd autoconf-latest
sudo ./configure
sudo make
sudo make install

例によってautoconfもアーカイブ名が「autoconf-latest.tar.gz」なのに、解凍するとフォルダ名にバージョンが混入するので、フォルダ名を固定化しています。

バージョンの確認

2016/02/18時点の最新バージョンをインストールすると、以下のバージョンになりました。

[vagrant@node1 src]$ autoconf --version
autoconf (GNU Autoconf) 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David J. MacKenzie and Akim Demaille.
[vagrant@node1 src]$ convert --version
Version: ImageMagick 6.9.3-4 Q16 x86_64 2016-02-18 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC OpenMP
Delegates (built-in):

ImageMagickのPlaybook

ansibleのplaybookです。ansible v2.0.0.2 で実装していて、becomeやblock等の新機能を使っているため、旧バージョンでは動きません。

github.com

雑感

今回はvagrantを使っていますが、最近はローカルでdockerを使う機会が増えました。

ImageMagickはyumを使えばもっと簡単にインストールできますが、やはり最新版と比較するとインストールできるバージョンが古いのですよね。アップデートを考えるとyumの方が遥かに楽ですが、dockerの場合はパッケージの更新の考慮が不要になる(イメージ自体を更新)ので、最新バージョンのソースコードからコンパイルしてインストール機会が増えていくんじゃないかと思っています。

本当はrpmがあると楽てきて嬉しいのですが、ImageMagickのサイトで配布されているrpmを「sudo rpm -ivh xxx.rpm」とやっても、依存が付属していないのでエラーになるのですよね・・・あれはちょっと使い物にならないので、ソースからインストールした方が速いです。