Linux Mint 17 や Ubuntu 14.04 で Canon 製プリンタのドライバがインストールできない問題に関する解決方法やその時のメモなど。
某所で他の方とやりとりした内容だけど、どうにも掲示板には書きづらいので自分のブログに残しておく。
Linux Mint 17 や Ubuntu 14.04 に libtiff4 をインストールするには
Linux Mint 17 や Ubuntu 14.04 で Canon 製プリンタのドライバをインストールしようとすると libtiff4 の依存関係問題に遭遇するらしい。ドライバに付属の install.sh というスクリプトを用いてインストールを行うようだが、libtiff4 が無いためインストールに失敗するが、dpkg の時点で失敗してもすぐに止まらない仕様になっているせいかわかりづらい。
http://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=libtiff によれば libtiff4 パッケージは Ubuntu 13.10 Saucy までの提供になっており、Linux Mint 17 のベースになっている Ubuntu 14.04 Trusty では libtiff5 に変更されている。
libtiff はセルフビルドすることがあるので公式から CVS でリポジトリを複製しているのだけどまだ 4 までしか出てないような…と思って確認したら Ubuntu の libtiff4 パッケージでは libtiff 3.x.x 系、libtiff5 パッケージでは libtiff 4.x.x 系のソースを使っているようだ。libpng や libjpeg はバージョンを合わせてあるのに何故 libtiff だけ違うのだ…。
Linux Mint 17 や Ubuntu 14.04 で libtiff4 パッケージを導入する場合はパッケージを独自にダウンロードしてインストールすればいいらしい。ブラウザでのダウンロードは http://packages.ubuntu.com/saucy/libtiff4 から行える。ミラーはいっぱいあるので好きなところからダウンロードすべし。
64-bit
wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/t/tiff3/libtiff4_3.9.7-2ubuntu1_amd64.deb sudo gdebi libtiff4_3.9.7-2ubuntu1_amd64.deb
32-bit
wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/universe/t/tiff3/libtiff4_3.9.7-2ubuntu1_i386.deb sudo gdebi libtiff4_3.9.7-2ubuntu1_i386.deb
Reading package lists... Done Building dependency tree Reading state information... Done Building data structures... Done Building data structures... Done Tag Image File Format (TIFF) library (old version) libtiff is a library providing support for the Tag Image File Format (TIFF), a widely used format for storing image data. This package includes the shared library. Do you want to install the software package? [y/N]:y (Reading database ... 260656 files and directories currently installed.) Preparing to unpack libtiff4_3.9.7-2ubuntu1_i386.deb ... Unpacking libtiff4:i386 (3.9.7-2ubuntu1) over (3.9.7-2ubuntu1) ... Setting up libtiff4:i386 (3.9.7-2ubuntu1) ... Processing triggers for libc-bin (2.19-0ubuntu6.3) ...
libtiff4(32-bit) のファイルリスト
/. /usr /usr/lib /usr/lib/i386-linux-gnu /usr/lib/i386-linux-gnu/libtiff.so.4 /usr/lib/i386-linux-gnu/libtiff.so.4.3.6 /usr/share /usr/share/doc /usr/share/doc/libtiff4 /usr/share/doc/libtiff4/README /usr/share/doc/libtiff4/README.Debian /usr/share/doc/libtiff4/TODO /usr/share/doc/libtiff4/changelog.Debian.gz /usr/share/doc/libtiff4/copyright /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/libtiff4
libtiff5(32-bit) のファイルリスト
/. /usr /usr/lib /usr/lib/i386-linux-gnu /usr/lib/i386-linux-gnu/libtiff.so.5 /usr/lib/i386-linux-gnu/libtiff.so.5.2.0 /usr/share /usr/share/doc /usr/share/doc/libtiff5 /usr/share/doc/libtiff5/README /usr/share/doc/libtiff5/README.Debian /usr/share/doc/libtiff5/TODO /usr/share/doc/libtiff5/changelog.Debian.gz /usr/share/doc/libtiff5/copyright /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/libtiff5
この後は Canon 製プリンタのドライバインストールマニュアル通りに進めれば OK なようだ。
ひとつ気になるのが、libtiff.so はどうなるのか?という点。libtiff5 がインストールされている場合、libtiff.so は libtiff.so.5.2.0 へのシンボリックリンクとして作成される。
-rw-r--r-- 1 root root 633066 May 6 04:40 /usr/lib/i386-linux-gnu/libtiff.a -rw-r--r-- 1 root root 950 May 6 04:39 /usr/lib/i386-linux-gnu/libtiff.la lrwxrwxrwx 1 root root 16 May 6 04:39 /usr/lib/i386-linux-gnu/libtiff.so -> libtiff.so.5.2.0 lrwxrwxrwx 1 root root 16 May 6 04:39 /usr/lib/i386-linux-gnu/libtiff.so.5 -> libtiff.so.5.2.0 -rw-r--r-- 1 root root 463820 May 6 04:40 /usr/lib/i386-linux-gnu/libtiff.so.5.2.0
libtiff4 を後からインストールすると libtiff.so が libtiff.so.4.3.6 へのシンボリックリンクに変更されるのではないか?と思い、確認してみたところ、libtiff.so のリンクは変更されないようだ。
-rw-r--r-- 1 root root 633066 May 6 04:40 /usr/lib/i386-linux-gnu/libtiff.a -rw-r--r-- 1 root root 950 May 6 04:39 /usr/lib/i386-linux-gnu/libtiff.la lrwxrwxrwx 1 root root 16 May 6 04:39 /usr/lib/i386-linux-gnu/libtiff.so -> libtiff.so.5.2.0 lrwxrwxrwx 1 root root 16 Sep 3 2013 /usr/lib/i386-linux-gnu/libtiff.so.4 -> libtiff.so.4.3.6 -rw-r--r-- 1 root root 403176 Sep 3 2013 /usr/lib/i386-linux-gnu/libtiff.so.4.3.6 lrwxrwxrwx 1 root root 16 May 6 04:39 /usr/lib/i386-linux-gnu/libtiff.so.5 -> libtiff.so.5.2.0 -rw-r--r-- 1 root root 463820 May 6 04:40 /usr/lib/i386-linux-gnu/libtiff.so.5.2.0
equivs による libtiff4 のダミーパッケージの作成
パッケージマネージャには依存関係を満たすだけのダミーパッケージというものがあり、equivs を使うことで簡単に作成できるらしいのでやってみた。
sudo aptitude install equivs
適当なディレクトリに移動してベースになるファイルを作成する。
cd /tmp
equivs-control libtiff4
equivs-control の引数に与えた名前のファイルが作成されるのでこれを編集する。このうち必ず書き換えが必要になるのが Package: の行。
### Commented entries have reasonable defaults. ### Uncomment to edit them. # Source: <source package name; defaults to package name> Section: misc Priority: optional # Homepage: <enter URL here; no default> Standards-Version: 3.9.2 Package: <package name; defaults to equivs-dummy> # Version: <enter version here; defaults to 1.0> # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> # Depends: <comma-separated list of packages> # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> # Files: <pair of space-separated paths; First is file to include, second is destination> # <more pairs, if there's more than one file to include. Notice the starting space> Description: <short description; defaults to some wise words> long description and info . second paragraph
Package: 行だけさくっと書き換え。
sed -i '/^Package:/s/<.*/libtiff4/' libtiff4
deb パッケージを作成する。
equivs-build libtiff4
dh_testdir dh_testroot dh_prep dh_testdir dh_testroot dh_install dh_installdocs dh_installchangelogs dh_compress dh_fixperms dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package `libtiff4' in `../libtiff4_1.0_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above!
出来上がった deb ファイルをインストールする。
sudo gdebi libtiff4_1.0_all.deb
次にシンボリックリンクでダミーのライブラリを作成する。確認してみたところ cifmg6330 というファイルが libtiff.so.4 を参照していた。アーキテクチャ毎のツリーは汚したくないので /usr/lib に作成。libtiff 4.x.x って上位互換…だよね?
64-bit
sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/libtiff.so.4
32-bit
sudo ln -s /usr/lib/i386-linux-gnu/libtiff.so.5 /usr/lib/libtiff.so.4
Canon 製プリンタドライバのディレクトリに移動して install.sh を実行する。
今回は実機がなくプリンタの検出ができないためパッケージを手動でインストールすることにした。common パッケージをインストールしたあとにプリンタごとのパッケージをインストールする。尚、install.sh を使用する場合でもプリンタの選択は「Q」で省略ができる。
64-bit
sudo gdebi packages/cnijfilter-common_3.80-1_amd64.deb sudo gdebi packages/cnijfilter-mg6300series_3.80-1_amd64.deb
32-bit
sudo gdebi packages/cnijfilter-common_3.80-1_i386.deb sudo gdebi packages/cnijfilter-mg6300series_3.80-1_i386.deb
CUPS サーバを再起動し、lpadmin でプリンタを登録する。-m で指定するファイルは /usr/share/ppd に置いてあるものをパスではなく名前で指定する。LAN の場合はデバイス URI に MAC アドレスを指定する。
sudo service cups restart lpadmin -p MG6330USB -m canonmg6330.ppd -v cnijusb:/dev/usb/lp0 -E lpadmin -p MG6330LAN -m canonmg6330.ppd -v cnijusb:/00-00-00-00-00-00 -E
システム環境設定のプリンタに lpadmin で登録したプリンタが表示される。(このスクリーンショットを撮影したときは LAN 側を登録し忘れた)


という感じで色々やってみたけど実機がないので実際うまくいくものなのかどうかはわからない。
もし自分がキヤノンのプリンタを使うことになったときに役には立つかな〜と思ったり。ダミーパッケージの作成とか lpadmin のコマンドの勉強になった。