2. メンテナンス・トラブルシュート - SSL 無料の証明書を取得 - py27-certbot インストール

 
2.1 ports・pkg
2.2 ちょっとしたトラブル

2.1 ports・pkg

 [Let's Encrypt] で証明書を取得するには、それを使用するウェブサーバ自体に、取得用のクライアントプログラムをインストールする必要があるようです。  これは合理的な考えであると思います。取得者がウェブサーバを管理していること、また、ウェブサーバにそれをインストールする能力を持っていることが前提になるからです。  クライアントプログラムは、Linux の主要なディストリビューションや Mac OS そして FreeBSD 用もあります。  なぜか Windows 用がないのは、Windows をサーバとして利用するのは商用の、有料証明書を取得する財力があると考えているのかしらん。  で、FreeBSD は、ports も pkg もあり、ports は、下記のディレクトリになっています。
/usr/ports/security/py-certbot
 pkg 名は py27-certbot です。

2.2 ちょっとしたトラブル

 さて、クライアントプログラムの certbot をインストールしたところでちょっとしたトラブルが・・・。  説明サイトにならって、help を見ようとすると

> certbot --help
Traceback (most recent call last):
  File "/usr/local/bin/certbot", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3138, in <module>

	・・・

  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 867, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'acme==0.19.0' distribution was not found and is required by certbot
 あう、だめじゃん。  試しに、ports を削除して pkg でインストールしようとすると

> pkg install py27-certbot
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
pkg: ja-man has a missing dependency: ja-less+iso
The following 54 package(s) will be affected (of 0 checked):

Installed packages to be REMOVED:
        libxslt-1.1.29_1

        ・・・

        llvm40-4.0.1_3

New packages to be INSTALLED:
        py27-certbot: 0.18.2,1

Installed packages to be REINSTALLED:
        compat6x-i386-6.4.604000.200810_3
        libyaml-0.1.6_2 (ABI changed: 'freebsd:9:x86:32' -> 'freebsd:10:x86:32')

Number of packages to be removed: 51
Number of packages to be installed: 1
Number of packages to be reinstalled: 2

The operation will free 3 GiB.
3 MiB to be downloaded.

Proceed with this action? [y/N]:
 省略してありますが、現在インストールしていて、このサイトに使用しているプログラムを根こそぎ削除しないとインストールできない!?  困ったもんです。  まあ、こういうことがあるから、本サイトの存在意義もあるわけですが・・・。  試しに、別の試験環境で、pkg をインストールして help を見てみると

> certbot --help

-------------------------------------------------------------------------------

  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
    (default) run   Obtain & install a certificate in your current webserver
    certonly        Obtain or renew a certificate, but do not install it
    renew           Renew all previously obtained certificates that are near

	・・・

  -h, --help [TOPIC]    print this message, or detailed help on a topic;
                        the available TOPICS are:

   all, automation, commands, paths, security, testing, or any of the
   subcommands or plugins (certonly, renew, install, register, nginx,
   apache, standalone, webroot, etc.)
-------------------------------------------------------------------------------
 ははぁ、pkg だとできるわけね。pkg のバージョンを確認してみますと

pkg version -v | grep certbot
py27-certbot-0.18.2,1              <   needs updating (index has 0.19.0,1)
 うむぅ。ソースを見比べて、手動で書きかえたりもしたのですが、なかなかうまくいかない。  少し調べて(こういうとき、英語文盲は苦労しますなぁ)
FreshPorts -- security/py-certbot
 これで、試験環境では、py-certbot の他に
/usr/ports/security/py-acme
 を reinstall するとうまくいくことがわかりました。  本番環境で(出力は省略してあります)以下を実行後に

> /usr/ports/security/py-acme
> make clean
> make
> make reinstall
 help を見ると

> certbot --help
Traceback (most recent call last):
  File "/usr/local/bin/certbot", line 6, in <module>
    from pkg_resources import load_entry_point

	・・・

  File "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 867, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'ndg-httpsclient; extra == "security"' distribution was not found and is required by requests
 これは、さっきの応用だわな、ndg-httpsclient を探すのにちょっと手間取りましたが

> cd /usr/ports/net/py-ndg_httpsclient
> make
> make install
 で

> cd /usr/ports/net/py-ndg_httpsclient
> make
> make install
 して、再度

> certbot --help

-------------------------------------------------------------------------------

  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
    (default) run   Obtain & install a certificate in your current webserver
    certonly        Obtain or renew a certificate, but do not install it
    renew           Renew all previously obtained certificates that are near

	・・・

  -h, --help [TOPIC]    print this message, or detailed help on a topic;
                        the available TOPICS are:

   all, automation, commands, paths, security, testing, or any of the
   subcommands or plugins (certonly, renew, install, register, nginx,
   apache, standalone, webroot, etc.)
-------------------------------------------------------------------------------
 やっとうまくインストールできました。  依存関係がうまく ports に反映されていないんだなぁ。