その時々

その時々で違うんです。特に決まっていないんです。

configure と GnuPG について

今まで、webに記載されているインストール手順を参考にして、そのままOSSソフトウェアをインストールしてきていました。
ところが、行き詰まってしまうことも多々あり、いよいよ configureとかmakeとかをキチンと理解したほうがいいと思える状況になってきました。


というわけで、勉強がてらメモしていきます。


テスト環境はMac OSX Sierraです。

GNU Helloのtarballを手に入れる

https://www.gnu.org/software/hello/
こちらのサイトから hello-2.10.tar.gz と hello-2.10.tar.gz.sig をダウンロードします。

このtarballが不正なものでないかチェックします。

$ gpg --verify hello-2.10.tar.gz.sig 
gpg: 署名されたデータが'hello-2.10.tar.gz'にあると想定します
gpg: 日 11/16 21:08:37 2014 JSTに施された署名
gpg:                RSA鍵A9553245FDE9B739を使用
gpg: 鍵A9553245FDE9B739をhkpsからサーバhkps.pool.sks-keyservers.netに要求
gpg: 鍵A9553245FDE9B739: 公開鍵"Sami Kerola <kerolasa@iki.fi>"をインポートしました
gpg: 究極的に信用する鍵が見つかりません
gpg:           処理数の合計: 1
gpg:             インポート: 1
gpg: "Sami Kerola <kerolasa@iki.fi>"からの正しい署名 [不明の]
gpg:                 別名"Sami Kerola (http://www.iki.fi/kerolasa/) <kerolasa@iki.fi>" [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
 主鍵フィンガープリント: 8ED3 96E3 7E38 D471 A005  30D3 A955 3245 FDE9 B739

日本語なのでわかりにくいですが、正しい署名とでていますので、問題ないはず。

と、ここで2つ問題が発生。

  • この署名は本当に正しいのかどうやって確認するの?
  • gpgの秘密鍵パスフレーズを忘れてしまった。

2つ目の問題は深刻です。

gpgの秘密鍵パスフレーズを忘れてしまったら?

失効証明書すらないようで、しょうがないので作り直すことにしました。
GnuPGをもう少し勉強します。

次のコマンドでプライマリーキーとサブキーを作成します。

$ gpg --gen-key

プライマリーキーとサブキーを作ったら直ちに失効証明書を作る必要があるようです。
これやってなかったかも。。。

$ gpg --output revoke.asc --gen-revoke hoge@hogehoge.com

作成した公開鍵を確認してみます。

$ gpg -k
gpg: 信用データベースの検査
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
gpg: 次回の信用データベース検査は、2020-02-06です
/Users/hoge/.gnupg/pubring.kbx
----------------------------------
pub   rsa2048 2018-02-06 [SC] [有効期限: 2020-02-06]
      *****************************
uid           [  究極  ] hoge <hoge@hogehoge.com>
sub   rsa2048 2018-02-06 [E] [有効期限: 2020-02-06]

秘密鍵も確認してみます。引数のKを大文字にすると秘密鍵が見れます。

$ gpg -K
/Users/hoge/.gnupg/pubring.kbx
----------------------------------
sec   rsa2048 2018-02-06 [SC] [有効期限: 2020-02-06]
      ***************************
uid           [  究極  ] hoge <hoge@hogehoge.com>
ssb   rsa2048 2018-02-06 [E] [有効期限: 2020-02-06]

あとは、このプライマリーキーと失効証明書をどこかに保存しておく必要があります。

せっかくなので、GitHubにも登録しておきます。

gpg --list-secret-key --keyid-format LONG
/Users/hoge/.gnupg/pubring.kbx
----------------------------------
sec   rsa2048/401F174HONYARARA 2018-02-06 [SC] [有効期限: 2020-02-06]
      ************************************
uid                 [  究極  ] hoge <hoge@hogehoge.com>
ssb   rsa2048/A311314HONYARARA 2018-02-06 [E] [有効期限: 2020-02-06]

$ gpg --armor --export 401F174HONYARARA
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFp5EEUBCADTmrJp+ywE1C9Qxva8oJZSj5cM01lOB1krWhYxtNObOt4K+mDp
nAsOApt1NCYnctV7H4DTe+f+aDCWRqX+216NztPwr4ldc0jWWUZMc/ZDWcFGB1Uq
5QND99QkYIPuynygkUUaxr+fYyNUzXWdW2Iz+/lXCadvh/AdFwmAlw+sr1P/qSEa
orr/lyc/6xNO0AgMOLFZ1JofOr+HKBygSNZ6ipOFC

(省略)

zkx8EO9ZxP6L9QP47YZoW/cAWXu9ppowXC+A08WBT/QxlnTJ
=Q4Ot
-----END PGP PUBLIC KEY BLOCK-----

githubのsettingより

ここに登録しておきます。

再度、GNU helloのシグネチャを検証

もう一度検証します。

$ gpg --verify hello-2.10.tar.gz.sig 
gpg: 署名されたデータが'hello-2.10.tar.gz'にあると想定します
gpg: 日 11/16 21:08:37 2014 JSTに施された署名
gpg:                RSA鍵A9553245FDE9B739を使用
gpg: "Sami Kerola <kerolasa@iki.fi>"からの正しい署名 [不明の]
gpg:                 別名"Sami Kerola (http://www.iki.fi/kerolasa/) <kerolasa@iki.fi>" [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
 主鍵フィンガープリント: 8ED3 96E3 7E38 D471 A005  30D3 A955 3245 FDE9 B739

$ gpg --recv-key A9553245FDE9B739
gpg: 鍵A9553245FDE9B739:"Sami Kerola <kerolasa@iki.fi>"変更なし
gpg:           処理数の合計: 1
gpg:               変更なし: 1

これで特に問題ないと確認できました。

helloのファイル構成からconfigureとかを理解する

$ ls -p
ABOUT-NLS	INSTALL		README-release	configure	m4/
AUTHORS		Makefile.am	THANKS		configure.ac	maint.mk
COPYING		Makefile.in	TODO		contrib/	man/
ChangeLog	NEWS		aclocal.m4	doc/		po/
ChangeLog.O	README		build-aux/	hello.1		src/
GNUmakefile	README-dev	config.in	lib/		tests/

ファイル名が大文字のものはほとんどがドキュメントのようです。
とりあえず最初にREADME、ChangeLog、CHANGES、INSTALL、COPYING、LICENSEあたりを見ておくと良いようです。

READMEを見ると

Briefly, the shell command `./configure && make && make install'
should configure, build, and install this package.  The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.

./configureして、makeして、make installしなさいよとのことです。
まずはmakefileもないので、./configureしてmakefileを作るのですね。

それから./configure のヘルプは次の2つで確認できます。

./configure --help
./configure --help=short

下ののヘルプだとソフトウェア固有のものが表示されます。
通常はshortの方でいいとのこと。

$ ./configure --help=short
Configuration of GNU Hello 2.10:

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --enable-silent-rules   less verbose build output (undo: "make V=1")
  --disable-silent-rules  verbose build output (undo: "make V=0")
  --enable-dependency-tracking
                          do not reject slow dependency extractors
  --disable-dependency-tracking
                          speeds up one-time build
  --disable-nls           do not use Native Language Support
  --disable-rpath         do not hardcode runtime library paths

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
  --without-libintl-prefix     don't search for libintl in includedir and libdir

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to <bug-hello@gnu.org>.
GNU Hello home page: <http://www.gnu.org/software/hello/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.

このうち、Optional Featuresのほうはソフトウェアの機能や動作を
Optional Packagesのほうは外部のソフトウェアやライブラリを組み込む時に使います。
withoutを使うと組み込まないように指示できますが、withoutがないものもあります。
必要な外部のソフトウェアやライブラリがない場合は、./configure でエラーとなります。


参考URL

GnuGPG関連
http://www.atmarkit.co.jp/ait/articles/1106/17/news138.html#utm_term=view_sp
https://qiita.com/moutend/items/5c22d6e57a74845578f6#gpg%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
http://kuenishi.hatenadiary.jp/entry/2016/07/12/013041