スクリーンショットツール「Shutter」をAppImage化してみた

nogajun
nogajun

_

今年の4月ぐらいにスクリーンショットツール「Shutter」の代わりがない問題と書きましたが、Perlの更新とともにDebianのリポジトリから見事に消されました。 どうしようかと思いつつ代わりのツールを試したのですが、しっくりこないのでStretchにあるShutterパッケージをAppImage化して、もう少しだけ延命を図ることにしました。

AppImageの実行ファイルは置かないので、各自自分で作ってください。

参考

これ以外に参考になる文書は無いと思います。

AppImageファイルの作り方

AppImageのレシピがあるAppImagesリポジトリをクローンして中に入ります。

    $ git clone https://github.com/AppImage/AppImages.git appimages
    $ cd appimages/

以下のレシピをshutter.ymlなど適当な名前で保存して、recipes/ディレクトリ以下に保存します。gistにも同じものを置いてます。

  • https://gist.github.com/nogajun/6c93dfac9d5fe30e727a4e66ce847e1a

     app: shutter
     binpatch: true
    
     ingredients:
         dist: stretch
         packages:
             - libxml-sax-expat-perl
             - libimage-exiftool-perl
             - libnet-dbus-glib-perl
             - libgoo-canvas-perl
             - libgtk2-appindicator-perl
         sources:
             - deb http://deb.debian.org/debian/ stretch main
         pretend:
             - libdbus-1-3 1.10.26-0+deb9u1
             - libgtk2.0-0 2.24.31-2

debパッケージをAppImageに変換するシェルスクリプトpkg2appimageを実行して、パッケージをAppImage化します。

 $ ./pkg2appimage recipes/shutter.yml 2>&1 | tee shutter.log

しばらく待つとout/ディレクトリ以下にイメージが出来上がっているので実行します。

 $ ./out/Shutter-0.93.1.glibc2.17-x86_64.AppImage

まとめとか

実を言うと、そのままレシピを書いて作れるかと思いAppImage化に手を付けましたが、パッケージの依存関係が解決できずに止まってしまうので放置してました。

ある日、気になってドキュメントを読むと、pretendのところに「正確なバージョンが無いとパッケージのインストールが拒否されることがあります。それを回避するにはpretendにバージョン番号を指定します。」と書いてありました。

なんの事かと調べたら、AppImage化に不要なライブラリパッケージを除外するために存在しないバージョン番号を指定しているようで、これにひっかかると依存関係が芋づる式に解決できなくなってパッケージがインストールできなくなる、という事のようでした。

原因を探っているとき、パッケージのワークディレクトリにexcludedeblistというファイルがあったので改めて見ると引っかかったであろうdbusとgtk2のライブラリがあったのでpretendに指定してビルドすると…。

できた!

ということでAppImageパッケージができましたが、正直なところ、まだよくわかってないです。

パッケージのクオリティを上げたところで、この先、Shutterが使えなくなる事は目に見えているので一応使えればいいかということでメモを公開しました。

_ Shutterの代わりにKsnipがいいところまで来ているけど、まだもう少しな感じ

そう。いい感じなんだけど画像をためて編集ができないのが、ちょっとつらい。