【Ubuntu】.debパッケージの依存関係を編集して無理矢理インストール。

現行の Ubuntu 16.04LTS に、ちょっと昔のプリンタドライバをインストールしようとしたら「依存関係が満たされないのでインストールできない。libtiff4 が必要です」と言われてしまった。

ちなみにインストールしたいドライバは CANON の MG6230 用。
CANON公式サイトのソフトウェアダウンロードページからリンクを辿っていくと入手できます。

16.04 では libtiff4 パッケージは既に無くて、その代わりに新しい libtiff5 が用意されています。

別にこっちでも大丈夫なんじゃないの? debパッケージのファイル依存関係を編集すれば、とりあえずインストールはできるのではないか、と(根拠もなしに)考えて、さて、シンプルな方法はないものか、と情報収集。

すると、なんとも素敵なシェルスクリプトを発見。

ちょっと使いづらかったので、自家用に改変したものが以下。

#!/bin/bash

# edit_dependency.sh
# May 27, 2017
# original : https://ubuntuforums.org/showthread.php?t=636724 by motin
# mod : tyz@freefielder.jp

if [[ -z "$1" ]]; then
  echo "Syntax: $0 debfile"
  exit 1
fi

DEBFILE="$1"
TMPDIR=`mktemp -d /tmp/deb.XXXXXXXXXX` || exit 1
OUTPUT="${DEBFILE%.deb}".mod.deb

if [[ -e "$OUTPUT" ]]; then
  echo "$OUTPUT exists."
  rm -r "$TMPDIR"
  exit 1
fi

dpkg-deb -x "$DEBFILE" "$TMPDIR"
dpkg-deb --control "$DEBFILE" "$TMPDIR"/DEBIAN

if [[ ! -e "$TMPDIR"/DEBIAN/control ]]; then
  echo DEBIAN/control not found.

  rm -r "$TMPDIR"
  exit 1
fi

CONTROL="$TMPDIR"/DEBIAN/control

MOD=`stat -c "%y" "$CONTROL"`
nano "$CONTROL"

if [[ "$MOD" == `stat -c "%y" "$CONTROL"` ]]; then
  echo Not modfied.
else
  echo Building new deb...
  dpkg -b "$TMPDIR" "$OUTPUT"
fi

rm -r "$TMPDIR"
改変した部分は…
  • 修正後の .deb ファイルの出力先を、オリジナルと同じ場所に変更。
  • 編集に用いるテキストエディタを vi から nano に変更。

使いかたは以下のとおり。

  1. 適当な場所に、上記の内容で edit_dependency.sh を作成。またはこちらからダウンロードして展開。
  2. ターミナルを開いて、edit_dependency.sh に実行権限を付加。
    chmod +x edit_dependency.sh
  3. 編集したい deb ファイルを引数にして実行。
    ./edit_dependency.sh path_to_deb_file/example.deb
  4. テキストエディタ(nano)が開くので、適宜変更して終了(Ctrl + x)・保存( y -> Enter )。
  5. example.deb と同じディレクトリに example.mod.deb が作成される。

という感じで、プリンタドライバの .deb パッケージファイルを編集して依存関係を改変してみます。

Depends セクションの libtiff4 の記述を削除、または libtiff5 に書き換えて保存。

で、依存情報を書き換えたパッケージを手動でインストール。無事成功。

更に、インストールしたドライバが libtiff4 のライブラリを参照したときに libtiff5 を読みにゆくようにシンボリックリンクを作成。

sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/x86_64-linux-gnu/libtiff.so.4

…と、これで 動いてくれるのではないかな…。

テスト印刷してみると、見事、Canon 純正のドライバでプリントアウトできました。

一件落着。

ま、こんな面倒な作業をしなくても、Ubuntu の汎用プリンタドライバで普通に印刷できるのだけれど。

カテゴリ: