Ubuntu 20.04にMongoDBをインストールする


#GPG公開鍵の追加
<dl><font color = "#999999">
GPGとは、GNU Privacy Guardの略で、OS上で暗号化・復号を行うことができるソフトウェアです。<br>
aptにパッケージを登録するときに、そのパッケージがパッケージ製作者以外の人間から悪意のある変更を加えられた偽物でないかを確かめるため、パッケージがあるリポジトリだけが持つ秘密鍵で暗号化された証明書を受信し、それがパッケージ製作者の公開鍵で復号できるかを確かめる必要があります。
</font></dl>

それでは、mongoDB公式が発行している公開鍵を入手します。

```
USER:~$ sudo wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
```

成功したら、

```
OK
```
と表示されるはずです。

###使用したパッケージの解説

|コマンド名       |説明|
|:-----------------|:------------------|
|wget|インターネット上に公開された内容を取得するパッケージ|
|apt-key|aptのGPGキーを管理するパッケージ|

###参考

####wgetの引数・オプション

`USER:~$ wget <オプション> <URL>`

|オプション（GNU拡張）|短縮形（POSIX標準）|説明|
|:-----------------|:-----------------------|:--|
|--quiet|-q|ログにwgetの出力が表示されないようにする|
|--output-document=file|-O <ファイル名 or - (標準出力)>|<URL>から取得したコンテンツを一つのファイルに保存するか、標準出力に書き出す|

####apt-keyの引数・オプション

`USER:~$ apt-key <コマンド>`

|コマンド       |説明|
|:-----------------|:------------------|
|add <ファイル名 or - (標準入力)>|aptのGPGキーに、指定したファイルの内容を加える|
|delete <キーID>|GPGキーを削除する|
|list|登録されているGPGキーを一覧表示する|

####apt-keyのGPGキーの管理について
GPGキーは、`/etc/apt/trusted.gpg.d/`というディレクトリで管理されています。


#aptへのリポジトリの登録
<dl><font color = "#999999">
aptがソフトウェアをダウンロードする時は、登録されたリポジトリだけを参照します。デフォルトでUbuntuに登録されているリポジトリはUbuntu公式のもののみで、mongoDBはUbuntu公式のパッケージではないため、自分でmongoDBのパッケージが存在するリポジトリを登録する必要があります。
</font></dl>

```
USER:~$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
```
###使用したコマンドの解説

|パッケージ名       |説明|
|:-----------------|:------------------|
|echo <文字列>|文字列・変数の出力をするコマンド|
|tee <ファイル名>|標準入力されたものをファイルに出力したり、標準出力したりするコマンド|

このコマンドは、`deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse`という内容の`mongodb-org-4.2.list`というファイルを作成していることになります。

#パッケージ一覧のアップデート
<dl><font color = "#999999">
aptでダウンロード可能なパッケージは、一覧形式で保存されています。この一覧は更新の命令が出されると、登録されている全てのレポジトリにあるパッケージの情報を取得します。現時点ではmongoDBのパッケージがあるレポジトリを登録しただけで、まだこの一覧にそのパッケージの情報が記載されていないため、パッケージ一覧を更新する必要があります。
</font></dl>

```
USER:~$ sudo apt update
```

###コマンド解説
|コマンド名       |説明|
|:-----------------|:------------------|
|apt update|登録されたリポジトリを巡り、パッケージ一覧を更新する|

###参考
|コマンド名       |説明|
|:-----------------|:------------------|
|apt list|登録されたパッケージ一覧を見る|
|dpkg -l|インストール済みのパッケージの一覧を見る|


※ここで、上記のGPGキーが登録されていないと、証明書の復号に必要な公開鍵を持っていないため、

```
W: GPG error: https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 4B7C549A058F8B6B
E: The repository 'https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
```

というエラーが発生します。

#mongoDBパッケージのインストール
実際にmongoDBパッケージをUbuntuにインストールします。

```
USER:~$ apt-get install mongodb-org -y
```

#mongoDBを起動してみる

```
mongod
```
で起動することができます（多分）

```
2020-07-23T18:08:10.297+0900 I  STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the 'storage.dbPath' option in the configuration file., terminating
```
というエラーが出て起動が失敗したら、エラーメッセージの言うとおりに/data/dbというディレクトリを作りましょう。

```
USER:~$ sudo mkdir /data
USER:~$ sudo mkdir /data/db
```
または

```
USER:~$ sudo mkdir -p /data/db
```
そうしたら、このディレクトリをmongoDBが読み書きできるように、このフォルダの所有者を自分のuser名()に変更します。

```
USER:~$ sudo chown <USER名>:<USER名> /data/db
```

これで再度`mongod`と入力すれば、mongoDBが起動するはずです！

##参考文献
GNU Wget マニュアル https://www.gnu.org/software/wget/manual/wget.html#Overview
Debian の apt-key のマニュアル https://manpages.debian.org/unstable/apt/apt-key.8.ja.html