UbuntuにCTFdをインストールする

支社で使っている自作のCTFシステムは社内の全国CTF予選に出場するメンバーを選考するために，全国予選のシステムに準じた仕様にしている。

が，支社支店の従業員の教養目的という観点では，チーム機能と見栄え（支社長などの幹部が観戦する）が必要である。

よって，チーム機能とグラフ機能を備えた CTFd を Oracle VM VirtualBox にインストールして，テストしてみた。

# インストールした環境

## VMの設定
Oracle VM VirtualBox
Ubuntu 20.04.1 LTS 日本語 Remix
20GB ★これ重要（デフォルトの10GBでは足りない）
最小構成でインストール

## Ubuntuの設定

$ sudo apt update
$ sudo apt dist-upgrade

$ sudo apt install gcc make perl
Guest Additions CD イメージの挿入
$ sudo shutdown -r now

ここでスナップショットを作成しておく

# CTFdのインストール

まずは公式サイトのトップページ（README.md）を見る

https://github.com/CTFd/CTFd/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/a7ea52e8-daa7-22d0-348d-08ffc0af3ed1.png)

README.mdにあるInstallは，かなり乱暴な記述。これを見て適当にやるとドツボにはまる。
特に`pip install -r requirements.txt`を成功させるのは至難の業。

ここは，wikiを見るのが正解？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/456be520-b510-e7c8-c407-aa5429004bd7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/5c5f7195-c5a7-678f-2e65-7fabd2ef46c4.png)

しかし，ここのBasic Installationもダメ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/6af9b1e2-4e00-fcc3-1df3-8fe84d45f631.png)

Basic Deploymentのページ
`https://github.com/CTFd/CTFd/wiki/Basic-Deployment`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/ad1954c7-655d-360e-1248-7ea65c679321.png)

これにしたがってインストールしていく

## 1. Install Docker

リンク先

https://docs.docker.com/engine/install/ubuntu/

に書かれているとおり，

```
$ sudo apt-get remove docker docker-engine docker.io containerd runc

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

$ echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
```

を行う。

## 2. Install Docker Compose

マニュアルと違うが，aptでokと思う。 

```
$ sudo apt install docker-compose
```

## 3. Clone the CTFd repository with git clone https://github.com/CTFd/CTFd.git

```
$ git clone https://github.com/CTFd/CTFd.git
$ cd CTFd
```
## 4. Modify the docker-compose.yml file from the repository to specify a SECRET_KEY environment for the CTFd service.

python -c "import os; f=open('.ctfd_secret_key', 'a+'); f.write(os.urandom(64)); f.close()"
失敗，python3に
python3 -c "import os; f=open('.ctfd_secret_key', 'a+'); f.write(os.urandom(64)); f.close()"
失敗

https://dark-lambda.com/2020/01/05/memo/ctfd/

に記載されているコマンド

```
$ python3 -c "import os; f=open('.ctfd_secret_key', 'a+b'); f.write(os.urandom(64)); f.close()"
```

が通った。
python2 と python3 の open() の modeの違いですね。

https://chappy88.hatenablog.com/entry/2019/08/27/230934


## 5. Run docker-compose up

```
$ sudo docker-compose up
```

ここで，NATネットワーク上の別のUbuntuから
`http://10.0.2.15/`にアクセスすると
`http://10.0.2.15/setup`にリダイレクトされたので，
インストールが成功したと思う。

# 感想
Google等の検索で「ctfd インストール」とか検索するより，本家のマニュアルを見るほうが近道だが，トップページREADME.mdやwikiのHomeにあるインストール説明が乱暴で困った。