2018年9月19日水曜日

廃止されたパッケージをインストールする

廃止されたパッケージをインストールする

公式ドキュメントに沿った手順で、 Solaris 11.3 のパッケージリポジトリに含まれる GIMP を Solaris 11.4 にインストールしてみる。

  1. Solaris 11.4 では、GIMP は廃止。
    # pkg install -n -v gimp
    このイメージは更新の必要はありません。
    # pkg info -r gimp
                         名前: image/editor/gimp
                         状態: インストール済みでない (廃止)
          パブリッシャー: solaris
                バージョン: 2.6.10
                         分岐: 11.4.0.0.1.9.0
    パッケージ化の日付: June 18, 2018 at  5:27:30 PM
                      サイズ: 2.52 kB
                      FMRI: pkg://solaris/image/editor/gimp@2.6.10-11.4.0.0.1.9.0:20180618T172730Z
    
  2. Solaris 11.3 の GIMP のインストールを試みるが失敗。
    # pkg info -g /path/to/pkgrepos/Solaris11.3 gimp
                         名前: image/editor/gimp
                   サマリー: The Gimp image editor
                   カテゴリ: Applications/Graphics and Imaging
                         状態: インストール済みでない
          パブリッシャー: solaris
                バージョン: 2.6.10
                         分岐: 0.175.3.0.0.26.0
    パッケージ化の日付: July  5, 2015 at  8:28:45 PM
                      サイズ: 33.36 MB
                           FMRI: pkg://solaris/image/editor/gimp@2.6.10-0.175.3.0.0.26.0:20150705T202845Z
                  ソース URL: ftp://ftp.gimp.org/pub/gimp/v2.6/gimp-2.6.10.tar.bz2
                  http://nifelheim.dyndns.org/~cocidius/files/gimp-hdrtools-0.1.tar.bz2
    # pkg install -n -g /path/to/pkgrepos/Solaris11.3 gimp
    このイメージは更新の必要はありません。
    
  3. バージョンを明示してインストールを試みると、拒否される理由が明示される。
    # pkg install -n -v -g /path/to/pkgrepos/Solaris11.3 image/editor/gimp@2.6.10-0.175.3.0.0.26.0
    計画の作成中 (ソルバーのセットアップ): \
    pkg install: image/editor/gimp の一致するバージョンはインストールできません:
      拒否:  pkg://solaris/image/editor/gimp@2.6.10-0.175.3.0.0.26.0
      理由:  このバージョンはインストール済みの incorporation consolidation/userland/userland-incorporation@11.4-11.4.0.0.1.14.0 から除外されます
  4. 拒否される理由を解除するため、ファセットを変更する。
    # pkg facet facet.version-lock.image/editor/gimp
    ファセット                                                  値   ソース
    version-lock.image/editor/gimp                                   True  system
    # pkg contents -m userland-incorporation | grep image/editor/gimp@
    depend facet.version-lock.image/editor/gimp=true fmri=image/editor/gimp@2.6.10-11.4.0.0.1.9.0 type=incorporate
    # pkg change-facet --no-backup-be facet.version-lock.image/editor/gimp=false
                    変更するパッケージ:         1
    変更するバリアント/ファセット:         1
                       ブート環境の作成: いいえ
     バックアップブート環境の作成: いいえ
    
    フェーズ                                  項目
    古いアクションを削除しています         1/1
    パッケージ状態データベースを更新しています      完了 
    パッケージキャッシュを更新しています         0/0 
    イメージ状態を更新しています      完了 
    スピード検索データベースを作成しています      完了 
    パッケージキャッシュを更新しています         1/1 
    
  5. 再度、GIMP のインストールを試みるが、依存関係がインストールできない。
    # pkg install -n -v -g /path/to/pkgrepos/Solaris11.3 image/editor/gimp@2.6.10-0.175.3.0.0.26.0
    計画の作成中 (ソルバーのセットアップ): -
    pkg install: image/editor/gimp の一致するバージョンはインストールできません:
      拒否:  pkg://solaris/image/editor/gimp@2.6.10-0.175.3.0.0.26.0
      理由:  image/library/libart@2.3.21-0.175.2.0.0.24.0 で許容される 'require' 依存関係のすべてのバージョンが廃止されています
  6. 依存先 (image/library/libart) をインストールできるようにファセットを変更する。
    # pkg contents -m userland-incorporation | grep image/library/libart@
    depend facet.version-lock.image/library/libart=true fmri=image/library/libart@2.3.21-11.4.0.0.1.9.0 type=incorporate
    # pkg change-facet --no-backup-be facet.version-lock.image/library/libart=false
                    変更するパッケージ:         1
    変更するバリアント/ファセット:         1
                       ブート環境の作成: いいえ
     バックアップブート環境の作成: いいえ
    
    フェーズ                                  項目
    古いアクションを削除しています         1/1
    パッケージ状態データベースを更新しています      完了 
    パッケージキャッシュを更新しています         0/0 
    イメージ状態を更新しています      完了 
    スピード検索データベースを作成しています      完了 
    パッケージキャッシュを更新しています         1/1 
    
  7. 次の依存関係でまた失敗
    # pkg install -n -v -g /path/to/pkgrepos/Solaris11.3 image/editor/gimp@2.6.10-0.175.3.0.0.26.0
    計画の作成中 (ソルバーのセットアップ): -
    pkg install: image/editor/gimp の一致するバージョンはインストールできません:
      拒否:  pkg://solaris/image/editor/gimp@2.6.10-0.175.3.0.0.26.0
      理由:  image/library/babl@0.1.2-0.175.3.0.0.13.0 で許容される 'require' 依存関係のすべてのバージョンが廃止されています
    
  8. 依存先 (image/library/babl) をインストールできるようにファセットを変更する。
    # pkg contents -m userland-incorporation | grep image/library/babl@
    depend facet.version-lock.image/library/babl=true fmri=image/library/babl@0.1.2-11.4.0.0.1.9.0 type=incorporate
    # pkg change-facet --no-backup-be facet.version-lock.image/library/babl=false
                    変更するパッケージ:         1
    変更するバリアント/ファセット:         1
                       ブート環境の作成: いいえ
     バックアップブート環境の作成: いいえ
    
    フェーズ                                  項目
    古いアクションを削除しています         1/1
    パッケージ状態データベースを更新しています      完了 
    パッケージキャッシュを更新しています         0/0 
    イメージ状態を更新しています      完了 
    スピード検索データベースを作成しています      完了 
    パッケージキャッシュを更新しています         1/1
    
  9. 次の依存関係でまた失敗
    # pkg install -n -v -g /path/to/pkgrepos/Solaris11.3 image/editor/gimp@2.6.10-0.175.3.0.0.26.0
    計画の作成中 (ソルバーのセットアップ): -
    pkg install: image/editor/gimp の一致するバージョンはインストールできません:
      拒否:  pkg://solaris/image/editor/gimp@2.6.10-0.175.3.0.0.26.0
      理由:  image/library/gegl@0.1.2-0.175.3.0.0.26.0 で許容される 'require' 依存関係のすべてのバージョンが廃止されています
    
  10. 依存先 (image/library/gegl) をインストールできるようにファセットを変更する。
    # pkg contents -m userland-incorporation | grep image/library/gegl@
    depend facet.version-lock.image/library/gegl=true fmri=image/library/gegl@0.1.2-11.4.0.0.1.9.0 type=incorporate
    # pkg change-facet --no-backup-be facet.version-lock.image/library/gegl=false
                    変更するパッケージ:         1
    変更するバリアント/ファセット:         1
                       ブート環境の作成: いいえ
     バックアップブート環境の作成: いいえ
    
    フェーズ                                  項目
    古いアクションを削除しています         1/1
    パッケージ状態データベースを更新しています      完了 
    パッケージキャッシュを更新しています         0/0 
    イメージ状態を更新しています      完了 
    スピード検索データベースを作成しています      完了 
    パッケージキャッシュを更新しています         1/1 
    
  11. これでようやくインストールできる。
    # pkg install -n -v -g /path/to/pkgrepos/Solaris11.3 image/editor/gimp@2.6.10-0.175.3.0.0.26.0
       インストールするパッケージ:        13
                      変更するサービス:         2
                      推定使用可能容量:  18.43 GB
                            推定消費容量: 135.60 MB
                      ブート環境の作成: いいえ
    バックアップブート環境の作成: いいえ
          ブートアーカイブの再構築: いいえ
    
    変更されたパッケージ:
    solaris
      image/editor/gimp
        None -> 2.6.10-0.175.3.0.0.26.0
      image/library/babl
        None -> 0.1.2-0.175.3.0.0.13.0
      image/library/gegl
        None -> 0.1.2-0.175.3.0.0.26.0
      image/library/libart
        None -> 2.3.21-0.175.3.0.0.26.0
      image/library/libpng
        None -> 1.4.20-11.4.0.0.0.12.0
      image/library/libpng10
        None -> 1.0.67-11.4.0.0.1.14.0
      image/library/libpng12
        None -> 1.2.57-11.4.0.0.1.14.0
      library/gnome/gnome-libs
        None -> 2.30.0-11.4.0.0.1.9.0
      library/gnome/gnome-vfs
        None -> 2.24.4-11.4.0.0.1.9.0
      library/lcms
        None -> 1.19-11.4.0.0.1.14.0
      library/python/lcms-27
        None -> 1.19-11.4.0.0.1.14.0
      library/python/pygtk2-27
        None -> 2.24.0-11.4.0.0.1.14.0
      library/sdl
        None -> 1.2.15-11.4.0.0.1.14.0
    
    サービス:
      restart_fmri:
        svc:/application/desktop-cache/desktop-mime-cache:default
        svc:/application/desktop-cache/icon-cache:default
    # pkg install -g /path/to/pkgrepos/Solaris11.3 image/editor/gimp@2.6.10-0.175.3.0.0.26.0
       インストールするパッケージ:        13
                      変更するサービス:         2
                      ブート環境の作成: いいえ
    バックアップブート環境の作成: いいえ
    
    ダウンロード                 パッケージ  ファイル  転送 (MB)  速度
    完了                                 13/13     2912/2912    19.8/19.8  538k/s
    
    フェーズ                                  項目
    新しいアクションをインストールしています   3409/3409
    パッケージ状態データベースを更新しています      完了 
    パッケージキャッシュを更新しています         0/0 
    イメージ状態を更新しています      完了 
    スピード検索データベースを作成しています      完了 
    パッケージキャッシュを更新しています         1/1
    

なお、Sokaris 11.3 上の ATOK に関係するパッケージをこの手順で Solaris 11.4 にインストールする事は出来ない。 これは、ATOK が依存している pkg://solaris/library/medialib が Solaris 11.4 で廃止されているが、 facet.version-lock の機構を使用せずに incorporation 制約が付与されているから。

2018年9月16日日曜日

Openbox + tint2 + compton

Openbox + tint2 + compton

Solaris 11.4 の GNOME-shell が個人的な使用状況に適さない事が判明したので、 代替となるソフトウェアを試してみた。

openbox 軽量ウィンドウマネージャー。スタック型。非コンポジット型。
ソースコードの変更無しで構築可能。
obconf openbox 構成ツール。openbox 本体には含まれない。
ソースコードの変更無しで構築可能。
obamenu openbox メニュー項目自動生成。openbox 本体には含まれない。
変更する事が前提の Python スクリプトで、簡明に記述されている。
tint2 パネル・タスクバー。openbox にはこの機能は含まれない。
要ソースコードの変更。
compton コンポジタ。非コンポジット型である openbox にはこの機能は含まれない。
ソースコードの変更無しで構築可能。

openbox

機能的に必要充分。

初期設定で困ったのは Meta-d (Meta は「◇」の刻印があるキー。 Super としても認識されている模様。 openbox の設定ファイルでは W (Windows) として扱われている。) の扱い。 Emacs では kill-word に割り当てられているが、 openbox では ToggleShowDesktop に割り当てられている。 これは、openbox の設定の変更で対応。

Alt-F7 〜 Alt-F10 も設定されていないので、これらも追加設定。

メニューは、Solaris 用に新規作成。メニューの呼び出しもキーに割り当て。

obconf

GUI で openbox の設定を行えるが、キーの割り当ては対象外。

openbox の設定は XML ファイルの直接編集を主にして、obconf は参照用に使う程度か。

obamenu

/usr/share/applications/*.desktop から コマンド、名前、カテゴリ、アイコンなどの情報を抽出し、 openbox 用のメニューとして構成する仕組み。

.desktop ファイルの多くは日本語名称も含んでいるので、 そちらを抽出するように obamenu を書き換えれば、一応の日本語対応になる。

カテゴリ名にの日本語対応は、obamenu に直接埋め込み。

アイコンは、様々なディレクトリに分散して配置されているため、 それらを探すように obamenu を書き換え。

tint2

初期設定で必要としている機能をほぼ提供してくれる。 アプリケーションの起動機能を削除するくらいか。

tint2 のソースコードの変更内容
src/tint2conf/md4.c
src/util/timer.c
src/util/window.c
u_int8_t u_int32_t u_int64_t といった非標準な型が使用されているので、 これらを typedef、マクロ、直接変更等で修正する。
src/launcher/apps-common.c
src/launcher/icon-theme-common.c
/usr/share/applications に類するディレクトリを、 必要に応じて追加・削除する。
src/util/cache.c 非標準関数 flock() を使用しているので、 これを fcntl()lockf() 等で置き換える。

compton

コンポジタ。

openbox 単独で使用すると画面のちらつきが発生するので、それの対策として。

画面のちらつきは、以下の手順で簡単に再現できる。

  1. compton (またはその他のコンポジタ) が動いているのであれば、それを停止する。
  2. 端末ウィンドウを複数(例えば四枚)並べる。
  3. それぞれの端末ウィンドウを、文字が表示されている状態にする(ちらつきの視認性を上げるため)。
  4. 任意の端末ウィンドウのタイトルバーをポインティングデバイスで掴み、画面内を継続的に移動させる。

メディアプレイヤー使用時の CPU 負荷は、 GNOME-shell に比べれば少ない。

CPU% 値
いずれも 2 仮想CPU構成、mpv で動画再生、top で目視測定。
openbox の CPU% 値はいずれの場合でも 0.1% 未満。
 非再生時再生時
 Xorg CPU% 値自身の CPU% 値Xorg CPU% 値自身の CPU% 値
非使用時0.1% 未満-1% 未満-
compton0.1% 未満0.1% 未満3% 前後2% 前後
GNOME-shell0.1% 未満0.1% 未満8% 前後20% 前後

2018年9月13日木曜日

GNOME-shell とメディアプレイヤー

GNOME-shell とメディアプレイヤー

Solaris 11.4 上で動画を再生すると gnome-shellXorg の CPU 負荷が上がる件。

これは gnome-shell がコンポジット型であるためと理解。

非コンポジット型の場合、 基本的な描画処理はメディアプレイヤーと X サーバの間のみで行われる。 コンポジット型の場合、描画内容は X サーバからウィンドウマネージャーに送られ、 様々な処理を施された後に X サーバに送られ、実際の表示が行われる。

メディアプレイヤーで動画を再生する場合、例えば1秒間に30回の描画が行われる。 そして、そのたびに X サーバとウィンドウマネージャー間の通信が行われ、 ウィンドウマネージャー側の処理も行われ、 それらのためのコンテキストスイッチも発生する。 これが負荷の要因。

ちなみに、_NET_WM_BYPASS_COMPOSITOR を設定しても変化は見られず。

$ xprop -format _NET_WM_BYPASS_COMPOSITOR 32c -set _NET_WM_BYPASS_COMPOSITOR 1

また、mpv を全画面モードで実行すると CPU 負荷の問題は発生しない事を確認。 このとき、_NET_WM_BYPASS_COMPOSITOR は 1 に設定される。 これを外部的に 0 に変更したとしても、CPU 負荷の問題は発生しない。

Solaris 11.4 でスクリーンセーバーを無効にする

Solaris 11.4 でスクリーンセーバーを無効にする

ネットで見つけた解 [gnome3 disable screensaver]。 「設定」→「プライバシー」→「画面ロック」は無効。

$ gsettings set org.gnome.desktop.session idle-delay 0

dconf-editor でも設定できる。

2018年9月11日火曜日

Solairs 11.4 を軽くさわってみた

Solairs 11.4 を軽くさわってみた

Live CD が提供されなくなった

インストールはテキストインストーラで行う。 操作は直線的。

デスクトップ環境は後から追加

テキストインストーラにはデスクトップ環境が含まれていない。 同時に配布されている IPS パッケージリポジトリイメージから追加する。

GNOME-Shell が使いづらい

gnome-tweak-tool を使って設定する。 標準でいくつかの拡張機能がインストールされている。

https://extensions.gnome.org にある 拡張機能を試してみようとしたが、いずれもインストールに失敗。 理由は不明。

動画の再生で GNOME-shell の CPU 負荷が高い

firefox、ffplay、mpv 等で動画を再生すると、 gnome-shell プロセスと Xorg プロセスの CPU% 値が跳ね上がる。 コンテキストスイッチの数値も10倍以上になる(500前後→10000超)。 gnome-shell の代わりに twm を使用した場合は、この問題は起きない。

Firefox ESR 52.9.0 (32bit)

YouTube は視聴可能だが、ニコニコ、Twitter、Facebook 系の動画は不可。

Solaris 11.3 上で構築した ffmpeg 3.2.2 をインストールすれば、 後者も可能に。

ffmpeg と libvdpau.so

Solaris 11.3 で構築した ffmpeg 3.2.2 は libvdpau.so に依存している。 libvdpau.so は Solaris 11.3 では pkg:/driver/graphics/nvidia に含まれているが、 Solaris 11.4 では pkg:/library/graphics/libvdpau に含まれている。

mpv と liblua.so

Solaris 11.3 で構築した mpv 0.29.0 は liblua.so に依存している。 liblua.so (pkg:/runtime/lua) は Solaris 11.3 と 11.4 の間で互換性が無く、 Solaris 11.3 上で構築した mpv は Solaris 11.4 上で動作しない。

symbol lua_cpcall: referenced symbol not found

ライブラリそのものを Solaris 11.3 から持ってくれば動作する。 また、mpv のソースコードにこの非互換性を伴う変更への対応が含まれているので、 再構築でも動作すると思われる。

最大音量が小さい

audioctl で変更可能。永続的。

$ audioctl set-control line-out 100:100

IME が一切無い

ATOK だけではなく、anthy なども廃止されている。

Solaris 11.3 の IME がらみのパッケージは、インストール不可に設定されている。 ibus は入っている。

動くかどうか試してみた

以下のパッケージに含まれるファイルを Solaris 11.4 上に持っていくと、 ATOK が使えるようになった。(簡単な動作確認のみ)

  • system/input-method/iiim
  • system/input-method/iiim-xim
  • system/input-method/iiim/atok
  • library/medialib

自動起動

/etc/X11/xinit/xinitrc.d/0210.im を Solaris 11.3 から持ってくる。

XI18N_OBJS を編集

/usr/share/X11/locale/ja_JP.UTF-8/XI18N_OBJS を編集。 スクリプト的にはこう。

# gsed --in-place=~ -e '/common\/ximcp/i XIM\tcommon/xiiimp\t_IIIMP_OpenIM\t\t# XIM_open' \
 /usr/share/X11/locale/ja_JP.UTF-8/XI18N_OBJS

この変更を行わなくても日本語の入力は出来るが、 文字パレットなどは動作しない。 また、トリガーキーの変更にも支障が出る。

トリガーキーの変更

$ gconftool-2 --type string \
 --set /desktop/input_methods/trigger_keys "Control_L+grave"

iiim-properties を使うには

iiim-properties は以下のライブラリに依存している。 これらを Solaris 11.3 から持ってくれば、一応動作する模様。

  • /usr/lib/libORBit-2.so*
  • /usr/lib/libORBit-imodule-2.so*
  • /usr/lib/libORBitCosNaming-2.so*
  • /usr/lib/libart_lgpl_2.so*
  • /usr/lib/libbonobo-2.so*
  • /usr/lib/libbonobo-activation.so*
  • /usr/lib/libbonoboui-2.so*
  • /usr/lib/libgnome-2.so*
  • /usr/lib/libgnome-keyring.so*
  • /usr/lib/libgnomecanvas-2.so*
  • /usr/lib/libgnomeui-2.so*
  • /usr/lib/libgnomevfs-2.so*

インストールの流れ

今回は Solaris 11.3 上の VirtualBox 5.2.18 を使用。

  1. Solaris 11.3 上で IPS パッケージリポジトリを展開
  2. VirtualBox で Solaris 11.4 用に VM を作成・構成
    CPU数、ファイル共有(展開したパッケージリポジトリ)、ネットワーク設定など。
  3. Solaris 11.4 をインストール
  4. Solaris 11.4 上で、VirtualBox Guest Additions をインストール
    # pkgadd -d /media/VBOXADDITIONS_5.2.18_124319/VBoxSolarisAdditions.pkg
  5. Solaris 11.4 上で、IPS パッケージリポジトリをマウント
    # mount -o ro -F vboxfs IPSpkgrepos /path/to/IPSpkgrepos
  6. デスクトップ環境をインストール
    ドキュメント に従ってデスクトップ環境を追加。

    # beadm create be-name
    # beadm mount be-name /mnt
    # pkg -R /mnt install -g /path/to/IPSpkgrepos group/system/solaris-desktop
    # bootadm update-archive -R /mnt
    # beadm umount be-name
    # beadm activate be-name

    BE を作成せずに直接デスクトップ環境を追加すると、 コンソールでログインしている状態で GUI ログイン画面が表示されるという困った状況に。 というか、困った。

  7. Solaris 11.4 を再起動
  8. VirtualBox Guest Additions を一旦削除し、再インストール

    これを行わないと Shared Clipboard の機能が動作しない模様。

    # pkgrm SUNWvboxguest
    # pkgadd -d /media/VBOXADDITIONS_5.2.18_124319/VBoxSolarisAdditions.pkg
  9. /etc/vfstab に IPSpkgrepos を追加、マウント
  10. ローカルパッケージリポジトリを構成
    # pkg set-publisher -G '*' -M '*' -g /path/to/IPSpkgrepos solaris
    # pkg refresh --full solaris 
  11. 必要に応じてパッケージを追加
    # pkg install group/feature/developer-gnu

    こんな感じ。

2014年6月10日火曜日

gpg で pgp2.6.2i で作成した鍵を使う

きっかけは、Google が Chrome で OpenPGP をサポートするという話題。 pgp2.6.2i の時代に鍵を生成したことがあったので、それを GnuPG でも使用できるか気になった。

結論としては、Solaris 11.1 で提供される GnuPG 2.0.17 では不可。 以下のメッセージが表示される。

gpg: 保護アルゴリズム1 (IDEA)はサポートしていません

実際には GnuPG ではなく、 依存している libgcrypt 1.4.5 が特許の関係で IDEA をサポートしていない。 IDEA の特許は既に切れており、最新の libgcrypt は IDEA をサポートしている。

最新の GnuPG と依存パッケージ群をインストールしたところ、 gpg2.6.2i の時代に作成した鍵を使用できた。 使用したコンパイラは GCC 4.8.0。

PGP のソースコードは以下から入手。

GnuPG と依存パッケージ群のソースコードは以下から入手 。

PGP の構築

ソースコード展開後、ソースコードを修正し、make を実行。
  • getline() がシステム標準関数と衝突。機能が違うので、関数名を変更することで回避。
  • remove() がシステム標準関数と衝突。同じ機能なので、コードの削除で対応。
$ gmake sysv_386_gcc

libgpg-error の構築

$ ./configure --prefix=<prefix>
$ gmake
$ gmake check
$ gmake install

libgcryp の構築

AMD E-450 を使用しているので、未サポート機能を無効化。 無効化しない場合は次のエラーが発生。

libgcrypt.so.20 => <prefix>/lib/libgcrypt.so.20 - hardware capability (CA_SUNW_HW_1) unsupported: 0x18000000 [ XSAVE PCLMULQDQ ]

$ ./configure --prefix=<prefix> \
 --with-libgpg-error-prefix=<prefix> \
 --disable-pclmul-support \
 --disable-avx-support \
 --disable-avx2-support
$ gmake
$ gmake check
$ gmake install

libksba の構築

$ ./configure --prefix=<prefix> \
 --with-libgpg-error-prefix=<prefix>
$ gmake
$ gmake check
$ gmake install

libassuan の構築

$ ./configure --prefix=<prefix> \
 --with-libgpg-error-prefix=<prefix>
$ gmake
$ gmake check
$ gmake install

GnuPG の構築

$ ./configure --prefix=<prefix> \
 --with-pinentry-pgm=<prefix>/libexec/pinentry-gtk-2 \
 --with-libgpg-error-prefix=<prefix> \
 --with-libgcrypt-prefix=<prefix> \
 --with-libassuan-prefix=<prefix> \
 --with-ksba-prefix=<prefix>
$ gmake
$ gmake check
$ gmake install
$ sudo chown root <prefix>/bin/gpg2 
$ sudo chmod u+s <prefix>/bin/gpg2

ncurses の構築

Solaris 11.1 に含まれている pinentry には、 警告メッセージが表示されたり端末版で表示が乱れるなど、致命的ではない問題がある。 最新版の pinentry を普通に構築すると、 端末版でメッセージが表示されないなど、実用水準に達しないバイナリが生成される。 最新版の ncurses を構築し利用すると、 端末版の見栄えが比較的良好なバイナリが生成される。

--without-cxx-binding を指定しないと、構築に失敗する。

$ ./configure --prefix=<prefix> \
 --enable-widec \
 --with-shared \
 --with-terminfo-dirs=/usr/share/lib/terminfo \
 --with-default-terminfo-dir=/usr/share/lib/terminfo \
 --without-cxx-binding \
 --without-ada \
 --without-manpages \
 --without-progs 
$ gmake
$ gmake install.libs
$ gmake install.includes

pinentry の構築

$ ./configure --prefix=<prefix> \
 --bindir=<prefix>/libexec \
 --with-ncurses-include-dir=<prefix>/include/ncursesw
$ gmake INCLUDES=-I<prefix>/include/ncursesw
$ gmake install
$ sudo chown root <prefix>/libexec/pinentry-{gtk-2,curses}
$ sudo chmod u+s <prefix>/libexec/pinentry-{gtk-2,curses}

鍵の移行

GnuPG で新たに鍵を生成。

$ gpg2 --gen-key

PGP 2.6.2i で作成した鍵の署名状況を確認。 三つのIDが関係付けられており、そのうち一つが自分と二名の友人によって署名されていた。 他の二つのIDは未署名。

$ pgp -kv ~/.pgp/secring.pgp
...略...
鍵束: '<home>/.pgp/secring.pgp'
Type Bits/KeyID    Date       User ID
sec  1024/XXXXXXXX YYYY/MM/DD mypgpuid0
                              mypgpuid1
                              mypgpuid2
1つの対応した鍵を見つけました.
$ pgp -kvv 0xXXXXXXXX ~/.pgp/pubring.pgp
...略...
Type Bits/KeyID    Date       User ID
pub  1024/XXXXXXXX YYYY/MM/DD mypgpuid0
                              mypgpuid2
sig       XXXXXXXX             mypgpuid0
sig       YYYYYYYY             friend0uid
sig       ZZZZZZZZ             friend1uid
                              mypgpuid1
1つの対応した鍵を見つけました.

PGP 2.6.2i で作成した鍵を取り出す。自分の公開鍵に対しては、事前に自己署名を施す。 GnuPG の実装の関係で、主uidとしたい方を後で署名する必要がある。

$ cp ~/.pgp/pubring.pgp pubring.pgp
$ pgp -kx mypgpuid0 private.pgp ~/.pgp/secring.pgp
$ pgp -ks mypgpuid1 -u 0xXXXXXXXX pubring.pgp
$ pgp -ks mypgpuid0 -u 0xXXXXXXXX pubring.pgp
$ pgp -kvv 0xXXXXXXXX pubring.pgp
...略...
Type Bits/KeyID    Date       User ID
pub  1024/XXXXXXXX YYYY/MM/DD mypgpuid0
sig       XXXXXXXX             mypgpuid0
                              mypgpuid2
sig       XXXXXXXX             mypgpuid0
sig       YYYYYYYY             friend0uid
sig       ZZZZZZZZ             friend1uid
                              mypgpuid1
sig       XXXXXXXX             mypgpuid0
1つの対応した鍵を見つけました.
$ pgp -kx mypgpuid0 public.pgp pubring.pgp
$ pgp -kx friend0 public-friend.pgp
$ pgp -kx friend1 public-friend.pgp

GnuPG で、取り出した鍵を取り込む。

$ gpg2 --allow-weak-digest-algos --import private.pgp
gpg: 鍵XXXXXXXX: 秘密鍵をインポートしました
gpg: 鍵XXXXXXXX: 有効なユーザIDがありません
gpg: これはおそらく自己署名のないせいでしょう
gpg:         処理数の合計: 1
gpg:         ユーザIDなし: 1
gpg:     秘密鍵の読み込み: 1
gpg:   秘密鍵のインポート: 1
$ gpg2 --allow-weak-digest-algos --import public.pgp
gpg: 鍵XXXXXXXX: 公開鍵"<mypgpuid1>"をインポートしました
gpg:         処理数の合計: 1
gpg:           インポート: 1  (RSA: 1)
gpg: 「まぁまぁの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
$ gpg2 --allow-weak-digest-algos \
 --allow-non-selfsigned-uid \
 --import public-friend.pgp
gpg: 鍵YYYYYYYY: 受理した未自己署名のユーザID"<friend0uid1>"
gpg: 鍵YYYYYYYY: 受理した未自己署名のユーザID"<friend0uid2>"
gpg: 鍵YYYYYYYY: 受理した未自己署名のユーザID"<friend0uid3>"
gpg: 鍵YYYYYYYY: 公開鍵"<friend0uid0>"をインポートしました
gpg: 鍵ZZZZZZZZ: 公開鍵"<friend1uid0>"をインポートしました
gpg:         処理数の合計: 2
gpg:           インポート: 2  (RSA: 2)
gpg: 「まぁまぁの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u

信用度を変更。trust サブコマンドを使用し、5 を指定。

$ gpg2 --edit-key mypgpuid0

移行した鍵の確認

鍵を表示。

$ pgp -kv
$ pgp -kvc
$ gpg2 --list-secret-keys
$ gpg2 --list-keys
$ gpg2 --fingerprint

PGP で平文に署名、GnuPG で確認。

$ pgp -s <file> -o <file>-s.pgp
$ gpg2 --pgp2 <file>-s.pgp

PGP で平文に平文のまま署名、GnuPG で確認。

$ pgp -sta <file> -o <file>-sta.asc
$ gpg2 --pgp2 <file>-sta.asc

PGP で平文に署名、受信者(自分)の公開鍵で暗号化、GnuPG で復号、確認。

$ pgp -es <file> <myname> 
$ pgp -es <file> -o <file>-es.pgp <myname> 
$ gpg2 --pgp2 <file>-es.pgp

PGP で慣用暗号だけを使用して暗号化、GnuPG で復号。

$ pgp -c <file> -o <file>-c.pgp
$ gpg2 <file>-c.pgp

2012年2月1日水曜日

fi-6140Z の圧縮率と画質

fi-6140Z で圧縮率を決めるために画像(JPEG)を採取したので記録。

次の表は、fi-6140Z で輪郭強調を適用しなかった場合の画像(一部を切り出し)。

機種 解像度 圧縮率 輪郭強調 画像 レベル補正 サイズ
fi-6140Z300dpi4無効
367005
fi-6140Z300dpi5無効
495482
fi-6140Z300dpi6無効
927102
fi-6140Z300dpi7無効
1294695
fi-6140Z600dpi1無効
635112
fi-6140Z600dpi2無効
688801
fi-6140Z600dpi3無効
792883
fi-6140Z600dpi4無効
1023928
fi-6140Z600dpi5無効
1275038
fi-6140Z600dpi6無効
1866023
fi-6140Z600dpi7無効
2460278
ScanSnap S1500300dpi2無効
  414252
DR-2510C300dpi2中央
  507601
DR-2510C600dpi2中央
  1279042
GT S630300dpi  
  959709

次の表は、fi-6140Z で輪郭強調を適用した場合の画像。

機種 解像度 圧縮率 輪郭強調 画像 レベル補正 サイズ
fi-6140Z300dpi5無効
495482
fi-6140Z300dpi5
563933
fi-6140Z300dpi5
671347
fi-6140Z300dpi5
724185
fi-6140Z600dpi5無効
1275038
fi-6140Z600dpi5
1460641
fi-6140Z600dpi5
1695673
fi-6140Z600dpi5
1770682
  • 原稿の印刷は薄目
  • 各画像は、GIMP を使用して手動で切り出し
  • 300dpi の画像は、convert -scale 200% で拡大
  • 600dpi の画像は、拡大無し
  • レベル補正は、convert -level 20%,95%
  • サイズは、ページ全体のファイルサイズ(バイト)
  • fi-6140Z JPEG 保存の圧縮率は 1 から 7 で指定し、7 が低圧縮(高画質)
  • 追記:fi-6140Z PDF 保存の圧縮率は 1 から 5 で指定し、1 が低圧縮(高画質)
  • ScanSnap S1500 PDF 保存の圧縮率は 1 から 5 で指定し、1 が低圧縮(高画質)
  • DR-2510C JPEG 保存圧縮率は 1 から 5 で指定し、1 が低圧縮(高画質)
  • ScanSnap S1500 の輪郭強調は、読み取りモードオプションの「文字をくっきりします」
  • DR-2510C の輪郭強調は「エッジ強調」、無効に出来なかったので中央に設定

以下はこれらの画像を眺めて考えたこと。

  • ScanSnap S1500 や DR-2510C と同等のサイズにする場合、fi-6140Z では 300dpi 圧縮率 5となる
  • 輪郭強調を無効にしていると、DR-2510C に比べてぼやけている
  • レベル補正を行ったり、輪郭強調弱を適用すれば、ほぼ同等の画像になる。
  • DR-2510C は補正がかかっている?
  • 300dpi 圧縮率 5 と 6 の間で画質の差がかなりあるが、ファイルサイズを見ると、300dpi 圧縮率 6 は 600dpi 圧縮率 4 に近くなる
  • 300dpi 600dpi 共に、圧縮率 4 5 6 間で目に見える画質の差があるが、圧縮率 6 と 7 の差はさほど感じない