Discourseのセットアップではnetcatのインストールが前提とされています

無事に最初の Discourse インスタンスのセットアップができましたが、その過程でいくつかの困難に直面しました。私は Debian Stretch を使用しており、Docker インストールガイドに従って作業を進めていました。

セットアップ中に、スクリプトが確認を行い、入力したドメイン名が実際にそのマシンに到達するかどうかをチェックします。これは nc(netcat)を使用して行われます。私の問題の原因はこれだとわかりました。netcat がインストールされていなかったため、単純にインストールすることで解決しました。

しかし、これはインストーラースクリプトのバグだと考えます。nc がインストールされているかを確認する簡単な関数を追加すれば改善されるでしょう。あるいは、ユーザーがチェックをスキップできるオプションを提供することも、この問題を解決する一つの方法です。

以前も同様の話題が出ましたが、netcat discourse-setup はそれを見つけることができません。

このチェックは単に警告を発するだけで、無視することも可能です。そのため、私はこれをバグとは考えていません。

discourse-setupnc をインストールするようにする案も検討しましたが、必要になる可能性が低いものを discourse-setup でインストールするのは避けるべきだと考えます。

もし nc が存在しない場合は、テストをスキップし、テストを実行したい場合はユーザー自身で nc をインストールするよう提案するのが適切かもしれません。場合によっては apt install nc を提案することも考えられます。

申し訳ありませんが、ここではバグの兆候が見られると失礼ながら異議を唱えさせていただきます。確かに、無視できる警告メッセージを出力していることは事実ですが、Discourse を初めてインストールするユーザーにとって、できるだけスムーズに作業を進められるようにすべきです。つまり、ソースコードを掘り下げて、この処理をエラーなく実行するには netcat のインストールが必要だと気づく必要がないようにする必要があります。どんなエラーでもユーザーやシステム管理者を混乱させ、なぜ動かないのかを調べたり、そのコードを書いた人を git blame で特定したりする時間を浪費させることになります。:stuck_out_tongue:

これは、IP チェックを実行する前に簡単なチェックを追加することで容易に回避できます。以下のようにします:

  1. netcat がインストールされているか確認する
  2. インストールされていれば処理を継続する
  3. インストールされていない場合は警告メッセージを表示し、チェックなしで続行するか、netcat をインストールしてから再度試すかを選択できる yes/no オプションを提供する(あるいは、apt/yum/pacman を使って自動的にインストールするオプションを提供してもよい)。

もう一つの選択肢として、より多くのシステム(すべてではない)で動作する /dev/tcp スタックを使用する方法もあります。この方法の詳細は こちら で確認できます。これにより Debian での問題が解決し、Ubuntu でも動作します。他のディストリビューションでの動作は試していません。

@pfaffman 初回のアプローチとして、これに関するプルリクエストを作成しました。:tada: