ConoHaのスタートアップスクリプトを使ってエターナルフォースリブートする


ConoHa Advent Calender 16日目担当のakihirok2k2です。
15日目は WabisabiAppさんによる ConoHaのVPS契約したよ でした。

この記事はConoHaちゃんで無駄にrebootしまくろうというものです。有用性はかなり低いものだと自負しております。

スタートアップスクリプトはVMを作成した際に「SSHログインの自動化」、「必要なパッケージのインストール」などなどVPSへログインしなくても構築が終わるので大変便利です。是非使って欲しいところです。

!! Caution !!

以下の行為はConoHaちゃんのリソースを無駄に利用するものであるため、一時的に行う分には問題ございませんが、利用後のVMはOS再インストールなどしてください。

スタートアップスクリプト?

https://www.conoha.jp/vps/function/startupscript/
スタートアップスクリプトは、サーバー追加時に自動でスクリプトを実行できる機能です。
あらかじめ作成したスタートアップスクリプトを利用することでVPS作成時に以下のような操作を自動的に実行することが可能となります。
・パッケージの更新や必要なアプリケーションのインストール
・ユーザー登録やログイン設定
・その他サーバー内の各設定
これらの操作を自動化することで、サーバー作成時の設定はより簡単になり、作業量を削減して作業効率をアップできます。

// 某S社とか某G社のクラウドとかで見たことある機能ですよね。
// 今回はこの機能を利用して、エターナルフォースリブート(VPSは死ぬ)を試します。

利用手順

コンパネのサイドメニューから「サーバ追加」を選択

利用OSを選択し、画面下部の「オプションを見る」をクリック

利用できるオプションが表示されるので、「スタートアップスクリプト」-[テキスト]を選択

以下のスクリプトを入力

#!/bin/bash
echo "========================================"
echo "   清楚可愛いConoHAちゃん!     "
echo "========================================"
reboot

[追加]を選択

作成されたVMを選択し

コンソールを開きます。

あれれ おかしいぞー? 普通にログインできちゃう?

VMにログインして/var/log/messagesを確認します。

ログを見てもらうと分かるとおり、ConoHaちゃんでは cloud-initを利用してスタートアップスクリプト機能を実装しているようです。
恐らくpre-onceとかにスクリプトを登録して、実行後に削除する処理とか入ってるんじゃないでしょうか。cloud-initに詳しくないので、ただの勘です。

せっかくなのでこの機能を利用して エターナルフォースリブート を実行しましょう。
※ rc.localにrebootって書けば良いじゃん。って気持ちは横に置いておきます。

cloud-init

cloud-initは /var/lib/cloud/scripts 内にあるスクリプトを、cloud-init起動時(≒VPS起動時)に実行します。この中には3つのディレクトリがありますが、今回利用するのは「per-boot」です。

per-boot

cloud-initにおいてper-bootは、VPSの起動の度に実行されるスクリプトを置いておきます。もう、何をするか分かりますね?

エターナルフォースリブートの実行

cloud-initを利用していることが確認できたので、エターナルフォースリブートを実行します。

この画面で以下のテキストを入れます。

#!/bin/bash
set -x
cat << EOF > /var/lib/cloud/scripts/per-boot/reboot.sh
#!/bin/bash
reboot
EOF

chmod +x /var/lib/cloud/scripts/per-boot/reboot.sh

コンソールを開くと...そこは...

永遠にrebootし続けるだけの CentOSが...!!!

最後に

rebootし続けるだけのVMとか管理者からしたら邪魔なだけですので、サーバの削除をしておきしょう
(四日くらい放置したけど何も言われなかったけど、まぁ rebootしてるだけなので負荷が少ないとは思います。)

まとめ

・スタートアップスクリプトは便利。コンパネから登録できるようになってより便利に
・エターナルフォースリブート(VPSは止まらない) だった
・cloud-init を勉しようと思いました