Conoha vpsにkaliをインストールした話

# はじめに
こんにちは！高校生でプログラミング勉強中のCureSabaです。
今回はconohaにkaliをインストールしてみましたので参考になれば幸いです

# 手順
## 作業ディレクトリ作成
とりあえず作業ディレクトリを作る
```bash
mkdir conoha-kali
cd conoha-kali
```
## 適当にサーバーを作る
とりあえず適当にOSを選択してサーバーを立ててください
結局フォーマットするので軽そうなOS推奨？

VPS設定内のUUIDをコピーして置換
```bash
echo UUID > serverid.txt
```
## APIユーザー作成
Conohaのダッシュボード左側のAPIを選択して→ユーザー追加からパスワードを入力しユーザーを作成してください

## トークンの取得
上で取得した情報でIDとパスワードを置き換え
```bash
curl -i -X POST \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "auth": {
      "identity": {
        "methods": ["password"],
        "password": {
          "user": {
            "id": "ユーザーID",
            "password": "パスワード"
          }
        }
      },
      "scope": {
        "project": {
          "id": "テナントID"
        }
      }
    }
  }' \
  https://identity.c3j1.conoha.io/v3/auth/tokens | grep "x-subject-token:" | awk '{print $2}' | tr -d '\r' > token.txt
```
## サーバーの設定
### シャットダウン
これをしないと設定変更できない
別にパネルから切っても良い
```bash
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: $(cat token.txt)" -d '{"os-stop": {"force_shutdown": true}}' https://compute.c3j1.conoha.io/v2.1/servers/$(cat serverid.txt)/action
```
### ネットワークとストレージのVirtioを切る
これもパネルからで可
```bash
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: ト$(cat token.txt)" -d '{"hwVifModel":"e1000", "hwDiskBus":"ide"}' https://compute.c3j1.conoha.io/v2.1/servers/$(cat serverid.txt)/action
```

## isoイメージのアップロード
本来はconohaのイメージアップロードツールがあり、それを用いようと思ったのですがusernameが一致しないと言われ続け直接APIを叩くことにしました

### イメージ作成
イメージ名を好きなイメージ名に置き換えてください
```bash
curl -X POST \
  -H "Accept: application/json" \
  -H "X-Auth-Token: $(cat token.txt)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "イメージ名",
    "disk_format": "iso",
    "hw_rescue_bus": "ide",
    "hw_rescue_device": "cdrom",
    "container_format": "bare"
  }' \
  https://image-service.c3j1.conoha.io/v2/images | tee >(jq -r .id > imageid.txt)
```
### isoイメージのダウンロード
[kali公式サイト](https://www.kali.org/get-kali/#kali-installer-images)からイメージをダウンロードしておく
### イメージのアップロード
進捗等出ないので終わるまで暫し待つ
```bash
curl -# -X PUT \
  -H "Accept: application/json" \
  -H "Content-Type: application/octet-stream" \
  -H "X-Auth-Token: $(cat token.txt)" \
  -T "isoイメージのpath" \
  https://image-service.c3j1.conoha.io/v2/images/$(cat imageid.txt)/file
```

### イメージのアタッチ
```bash
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: $(cat token.txt)" -d '{"rescue": {"rescue_image_ref": "'"$(cat imageid.txt)"'"}}' https://compute.c3j1.conoha.io/v2.1/servers/$(cat serverid.txt)/action | tee >(jq -r .adminPass > adminpass.txt)
```


## kaliのインストール
### VNCで接続する
下のコマンドでVNCのURLを取得
別にパネルからでも良し
```bash
curl -X POST -H "Accept: application/json" -H "X-Auth-Token: $(cat token.txt)" -d '{"remote_console": {"protocol": "vnc","type": "novnc"}}' https://compute.c3j1.conoha.io/v2.1/servers/$(cat serverid.txt)/remote-consoles | jq -r '.remote_console.url'
```
### 起動
起動するとno audio device的な警告が出るので無視してenter
もし、GUIが表示されなかった場合は`Ctrl +Alt+Delete`を送信する

### 最初の選択
GUIが表示されたら`Advanced Install`を選択して、`Advanced Graphical Install`を選択しネットワーク設定が出るまで進める
### インターネット設定
インターネットは手動設定を選択して、サーバーパネルに書いてあるIP、サブネットマスク、DNSを使用する
ベースシステムのインストールが完了するまで進める
### cdromをアンマウントする
インストーラーメニュー内のシェルの実行から
aptがパッケージをcdromから取得しようとして失敗するのでcdromをアンマウントする
```bash
umount /cdrom
```
これであとはいつも通り進めて再起動します


## isoのデタッチ
再起動したらデタッチします

```bash
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: $(cat token.txt)" -d '{"unrescue": null}' https://compute.c3j1.conoha.io/v2.1/servers/$(cat serverid.txt)/action
```
これでインストールは完了です！

:::note warn
私はデタッチした後うまく起動できなかったらしくサーバーステータスがエラーになりました、こちら側の問題ではないのでその時はサポートに連絡して起動してもらいましょう
:::

# 終わりに
もし、この記事が役に立ったと思ったら、ぜひコメントやシェアをお願いします。また、質問や改善点などがあれば気軽にコメントしてください！

それでは、良いプログラミングライフを！