【Ubuntu】.debパッケージの依存関係を編集して無理矢理インストール。
現行の Ubuntu 16.04LTS に、ちょっと昔のプリンタドライバをインストールしようとしたら「依存関係が満たされないのでインストールできない。libtiff4 が必要です」と言われてしまった。
ちなみにインストールしたいドライバは CANON の MG6230 用。
CANON公式サイトのソフトウェアダウンロードページからリンクを辿っていくと入手できます。
CANON公式サイトのソフトウェアダウンロードページからリンクを辿っていくと入手できます。
16.04 では libtiff4 パッケージは既に無くて、その代わりに新しい libtiff5 が用意されています。
別にこっちでも大丈夫なんじゃないの? debパッケージのファイル依存関係を編集すれば、とりあえずインストールはできるのではないか、と(根拠もなしに)考えて、さて、シンプルな方法はないものか、と情報収集。
すると、なんとも素敵なシェルスクリプトを発見。
→ HOWTO: Easily modify dependencies of a .deb file - Ubuntu forums
ちょっと使いづらかったので、自家用に改変したものが以下。
#!/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 に変更。
使いかたは以下のとおり。
- 適当な場所に、上記の内容で edit_dependency.sh を作成。またはこちらからダウンロードして展開。
- ターミナルを開いて、edit_dependency.sh に実行権限を付加。
chmod +x edit_dependency.sh
- 編集したい deb ファイルを引数にして実行。
./edit_dependency.sh path_to_deb_file/example.deb
- テキストエディタ(nano)が開くので、適宜変更して終了(Ctrl + x)・保存( y -> Enter )。
- 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 の汎用プリンタドライバで普通に印刷できるのだけれど。

コメント