スタートアップスクリプトでこのはちゃんにしゃべってもらいたかった

こんにちは！みなさん ConoHa 使ってますか？

ConoHa Advent Calendar 2017 の 21 日目は、今年 ConoHa に追加された機能である `スタートアップスクリプト` についてです！

# その日事件は起こった

私：「今回は、新しく追加された `スタートアップスクリプト` を使って、シェルに接続したときにこのはちゃん AA に喋ってもらう内容にしよう！」

Qiita: 「12日のアドベントカレンダーの記事が上がりましたよ」

私：「お、今日の記事は何かな…」

![image](https://qiita-image-store.s3.amazonaws.com/0/92484/381b18bc-017c-d12f-46d6-bc3f1470a43d.png)

ドーン

![image](https://qiita-image-store.s3.amazonaws.com/0/92484/efb636f6-6cb0-48cd-87d9-f9536b6f4fbd.png)

**ドーン！！**


OK。かぶった上に向こうの方がレベルが高かった。
[素晴らしい記事「conohasayで楽しいターミナル生活を」へのリンクはこちら。](https://qiita.com/hironobu_s/items/e19de0a3a5e057c7064a)

とはいえ、もう新しいネタを考えるのは厳しかったこともあり、せっかくなのでこちらのコマンドを使わせてもらいながらスタートアップスクリプトについての解説をすることにしましょう。


# このはちゃんに喋ってもらう設定をするために必要なコト

今回、目指すところは

- このはちゃんに
- シェルログインのタイミングで
- サーバーの状態について教えてもらう設定をする

ことです。

これを実現するために、

- このはちゃんに -> conohasay
- シェルログインのタイミングで -> motd
- サーバーの状態について教えてもらう設定をする -> スタートアップスクリプト

を使用してみましょう。

## conohasay について

[conohasay](https://github.com/hironobu-s/conohasay) は [ひろのぶ](https://twitter.com/hironobu_s/)さんが作成されました、ターミナル上でこのはちゃんにお話ししてもらうためのコマンドです。

こちらについては [元記事](https://qiita.com/hironobu_s/items/e19de0a3a5e057c7064a) の方を参照していただくということで。

## motd について

motd とは、シェルログイン時にメッセージを表示する機能です。
他のサーバー系サービスさんを利用していると、ログイン時にロゴが表示されたりしますよね。
これらを設定しているのが、この motd という機能なのです。

実はこちら、設定自体はとても簡単です。
サーバー内の `/etc/motd` ファイルに書き込まれている内容を出力しているだけなので、何かしらの方法でこのファイルを好きな内容に書き換えるだけで OK なんですね。 (Ubuntu 系ではこの辺りを設定するスクリプトもあったりしますが。)

## スタートアップスクリプトのについて

今年から [ConoHa で使用できるようなったスタートアップスクリプト](https://www.conoha.jp/function/startupscript/) は、サーバー構築時に実行するスクリプトを指定する機能です。

サーバー追加時に自動的に設定を行うためのスクリプトを動かせることから、 API などでのサーバー複数追加ととても相性の良い機能ですね。

ConoHa ではスタートアップスクリプトの書き方として、

- cloud-config形式
- シェルスクリプト形式

の 2 パターンを提供しています。

シェルスクリプトは通常のシェルでの記述をそのまま書くだけですので、
今回は cloud-config 形式を使用してみましょう。

# 設定してみる

## まずは conohasay なしでやってみる

conohasay は後からコマンドとして差し込めば良いだけなので、motd を書き換える設定をスタートアップスクリプトで行ってみましょう。

単純に motd を書き換えてもいいのですが、今回は

- motd を書き換えるスクリプトをサーバー内に作成して
- cron で数分おきにスクリプトを実行させて内容を更新する

ようにしてみます。

そこで、書いてみたのがこちら。

```
#cloud-config

write_files:
  - path: /usr/bin/conoha-motd
    owner: root:root
    permissions: '0755'
    content: |
      #!/bin/sh
      cat <<EOF > /etc/motd

       ________  ________  ________   ________  ___  ___  ________      
      |\   ____\|\   __  \|\   ___  \|\   __  \|\  \|\  \|\   __  \     
      \ \  \___|\ \  \|\  \ \  \\ \  \ \  \|\  \ \  \\\  \ \  \|\  \    
       \ \  \    \ \  \\\  \ \  \\ \  \ \  \\\  \ \   __  \ \   __  \   
        \ \  \____\ \  \\\  \ \  \\ \  \ \  \\\  \ \  \ \  \ \  \ \  \  
         \ \_______\ \_______\ \__\\ \__\ \_______\ \__\ \__\ \__\ \__\ 
          \|_______|\|_______|\|__| \|__|\|_______|\|__|\|__|\|__|\|__| 

      ip address: $(hostname -i)
      Last update: $(date)
      EOF
      chmod 644 /etc/motd

runcmd:
  - echo "*/5 * * * * conoha-motd > /dev/null 2>&1" | crontab -
  - conoha-motd
```

`write_files` がファイル書き込みを行うためのセクションになるので、ここへ motd 更新スクリプトを書き込みます。
スクリプト自体にはきちんとパーミッションで実行を許可することを忘れずに！

`runcmd` は、書き込まれたコマンドを実行するためのセクションですね。
一行目で cron で 5 分ごとに先ほどの motd 書き換えスクリプトを実行するよう設定し、二行目でとりあえず一回目のスクリプト実行を行います。

とりあえずこちらのスクリプトは [gistへあげた](https://gist.github.com/ezaki/69cfa45d1341123538f354e14f1afbdf#file-cloud-config-yml) ので、 [gist の raw](https://gist.githubusercontent.com/ezaki/69cfa45d1341123538f354e14f1afbdf/raw/498161de1583eb4118a3ad7f4ffbed2862d5a852/cloud-config.yml) をスタートアップスクリプトの URL に設定して
![image](https://qiita-image-store.s3.amazonaws.com/0/92484/87efd286-c005-57e9-77f7-49e97f51bc1a.png)


サーバーを立ててみると…

![image](https://qiita-image-store.s3.amazonaws.com/0/92484/fe65dc2b-7de1-0df5-624d-7c3b12d35d69.png)

~~(なんかちょっとズレてね…？)~~ いい感じでログイン時に ConoHa の文字が表示されましたね。

## conohasay を使ってみる

ここまできたら後は conohasay を入れたら簡単にこのはちゃんに喋ってもらえますね！

```
#cloud-config

write_files:
  - path: /usr/bin/conoha-motd
    owner: root:root
    permissions: '0755'
    content: |
      #!/bin/sh
      echo -e "このホストは $(hostname) だよ！\nリソースの状態は\n$(vmstat)\nこんな感じ。\n更新日時は: $(date)だよー" \
      | conohasay -c $([ $(($RANDOM % 2)) -eq 0 ] && echo conoha || echo anzu) -s m > /etc/motd
      chmod 644 /etc/motd

runcmd:
  - curl -sL https://github.com/hironobu-s/conohasay/releases/download/current/conohasay-linux.amd64.gz | zcat > /usr/bin/conohasay 
  - chmod +x /usr/bin/conohasay
  - echo "*/5 * * * * conoha-motd > /dev/null 2>&1" | crontab -
  - conoha-motd
```

こんな感じで設定して( こちらも [gist にして](https://gist.github.com/ezaki/69cfa45d1341123538f354e14f1afbdf#file-cloud-config-conohasay-yml)あります！)サーバーを起動してみると…

![anzu](https://qiita-image-store.s3.amazonaws.com/0/92484/d280ac3e-4a29-51eb-7709-e7181955d7b4.png)

可愛いあんずちゃんが色々教えてくれるようになりました！

…

5 分に一度、1/2 の割合でこのはちゃん、あんずちゃんが出てくるように設定しました。
ここでこのはちゃんが一発で引いてもらえない辺りが、このはちゃんらしさな気もします。

~~一応載せておくと~~ このはちゃんバージョンはこちら。

![image](https://qiita-image-store.s3.amazonaws.com/0/92484/065757d2-756b-6c3f-1366-f86f703e6580.png)


# 目標は達成しましたが…

このはちゃんに喋ってもらいたいという目標は達成できました。
が、内容が `vmstat` を生で出力してる等見づらさも結構あるので、
是非ともみなさんにいい感じにカスタマイズしてもらって、 gist を公開してもらいたいものです。
（スクリプトをまとめる用レポジトリを ~~このはちゃん~~ **誰か** が作ってくれてもいいんですけどね！）

最後まで読んでいただきありがとうございました。
これからも ConoHa での開発を楽しんでいきましょう！