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つ問題が発生。
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