さくらのクラウドに10秒でリモートデスクトップできる環境を作る

**注意**
あくまで一番簡単な手順の紹介です。
セキュリティ的にこれで問題があるのかもしれません。実際にこれを試される場合にはリモートデスクトップ用のユーザの作成や、XRDPのSSHポートフォワーディング、さくらのクラウドのパケットフィルタで自衛をお願いします。


#はじめに
先日さくらのクラウドのクラウドニュースで共有セグメントに接続した時にDHCPで自動払い出しされるという機能がリリースされたことを知りました。
[共有セグメントにてDHCPに対応しました｜さくらのクラウドニュース](http://cloud-news.sakura.ad.jp/2016/08/10/shared-network-dhcp/)

これまではNICのインターフェイスまではIPアドレスが割り当てられていましたが、サーバ側にはクラウドが自動登録するまたはWindowsのように手動で割当てる必要がありました。
これを使えばDHCPに対応しているDHCPを使うことでディスクレスのサーバが作成できるのではないかと考え、実際に試してみました。

## 今回作る環境
今回LiveCDとして作るものは
- XRDPを利用してWindowsからリモートデスクトップ接続ができる
- LXDEデスクトップ環境にChromiumがインストールされてすぐにブラウジングできる環境を手に入れる
こんなものを目指してみます。

もちろんわざわざISOを使わずにディスクイメージをアーカイブ化して複製するのでも同じことが出来ますがメリットとして
- ディスクの複製作業がない分サーバ作成時間が短縮できる
- ディスクが無い分、ディスクの費用がかからない（安くなる！）


※XRDPはWindowsで実装されているリモートデスクトップの接続される側のオープンソース実装です。リモートデスクトップクライアント自体はWindows/Mac/iOS/Android...など幅広い環境で利用できるので、XRDPサーバをインストールすることでそれら幅広い環境からリモートデスクトップ接続できるようになります。

# LiveCDのベースとなるUbuntuを作る
今回はさくらのクラウドが標準で提供しているUbuntu Server 14.04をベースに作成します。（16.04でも同様の手順で作成してみましたが途中で失敗してしまいました。）

## ディスクイメージの作成
![01.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/c557cf90-22d1-cdde-da3e-d6a2491a87d9.png)
この辺はいつもさくらのクラウドでサーバを作成する時と同じくUbuntu Server 14.04のサーバを作成します。
今回はこの時にパスワード認証を利用してみました。（パスワード認証+公開鍵でもOK）

作成したサーバにSSHで接続してまずは、XRDPのインストールおよびデスクトップ環境としてLXDEをインストールします。
こちらの手順は非常によくまとまっているものがありましたのでその手順そのままでOKでした。
[WindowsからUbuntuにリモートデスクトップでログインするための環境構築](http://qiita.com/oniipon/items/4fe3ba65d64d6eed231c#xrdp%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
XRDPのインストール作業には30分～40分くらい時間がかかりますので気長に待ちましょう。あと、途中で処理が止まったかのようにみえることがありますが、これも5分位待っていると再び動き出しますので慌てずに。

ただしこの状態では日本語フォントがインストールされていないため、日本語が文字化けしてしまいます。別途日本語フォントをインストールします。

```shell-session
sudo apt-get install fonts-takao-pgothic
sudo apt-get install fonts-takao-gothic
sudo apt-get install fonts-takao-mincho
```
ここで一旦再起動してみましょう。
そしてサーバのIPアドレスに対してリモートデスクトップを起動して一旦接続できるかを確認したほうが安全です。

![02.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/bb34bae2-0c4f-7e5a-bc65-8b11effc7473.png)
ログイン画面が表示されるのでその時に
- Session ：Sesman-X11rdp
- Username：ubuntu　（今回はデフォルトのユーザのまま進めています。）
- password：サーバ作成時に指定したもの
これでログインが出来ます。
ログインができることが確認できればこれまでの作業は問題ありません。デスクトップ上で行う作業はないのでリモートデスクトップは終了してもらって構いません。

※ちなみにChromiumはLXDEインストールした時に同時にインストールされるので、個別にインストールする必要ありません。仮にFirefoxを使いたいというのであればこの時にインストール済ませておきましょう。


## ISOイメージ化
ここからは作成したイメージをISOに固めて、さくらのクラウドにアップロードするところまでを行います。
ディスクイメージを作成するのにするのにRemastersysをインストールします。

Remastersys自体はすでに開発が終了しているソフトになります。Ubuntu 14.04では動作することを確認していますが、問題があった時や将来のバージョンには対応できないかもしれません。

インストールのためにsources.listに下記の2行を末尾に追加します。

```shell-session:/etc/apt/sources.list
deb http://ppa.launchpad.net/kranich/remastersys/ubuntu trusty main 
deb-src http://ppa.launchpad.net/kranich/remastersys/ubuntu trusty main 
```

その後更新し、Remastersysのインストールを行います。

```shell-session
sudo apt update
sudo apt install remastersys
```
インストール時に警告が出てきますが今回は継続で。
インストールが終了すれば準備完了です。

実際にISOイメージ化の作業はとても簡単。

```shell-session
sudo remastersys backup 
```

たったこれだけでバックアップ処理が始まり、現在のOSイメージが1.9GBほどのISO化されます。

## 作成したISOイメージのアップロード

`/home/remastersys/remastersys/custom-backup.iso`
このイメージをさくらのクラウドにアップロードする必要があります。
手動でやっていると面倒くさいので今回は[@yamamto_febc](https://twitter.com/yamamoto_febc)氏が最近作成された、[sacloud-upload-image](https://github.com/yamamoto-febc/sacloud-upload-image/blob/master/README.md)を使ってみました。

手引に書いている通り、リリースファイルをダウンロードし、さくらのクラウドコンパネからAPIキーを発行し作成したISOを指定するだけでアップロードができました。簡単!!

```shell-session
$ ./sacloud-upload-image -token HOGEHOGEHOGE -secret HOGEHOGEHO -zone tk1a  -file /home/remastersys/remastersys/custom-backup.iso desktopimage
```

これでRemastersysで作成したISOファイルをさくらのクラウドの東京第1ゾーンのISOイメージに**desktopimage**という名前で登録されました。

ここまでできれば元になるUbuntu serverは停止させても削除しても問題ありません。ソフトウェアを追加して再度Remastersysを実行すればISOを作成することができるのでアーカイブなどに保存しておくのがおすすめですね。

# 作成したLiveCDからサーバを作る
さくらのクラウドにISOイメージのアップロードが完了したので、早速サーバを作成します。

## サーバの作成
![05.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/099df74f-487f-0131-6ec0-06122e62cb12.png)
サーバを作成するときにはシンプルモードのチェックを外す必要があります。
サーバのCPU/メモリを選択しディスクの項目で**ディスクレス**を選びます。
この時にISOイメージを選択することができますので、その時に今回アップロードしたイメージを選びます。

そしてサーバの作成行うわけです。
ディスクの複製処理がない分、サーバの起動処理完了までに5秒程度です。圧倒的です。

## リモートデスクトップ接続

作成したサーバのIPアドレスを確認してリモートデスクトップ接続を行います。
この場面で一番最初のDHCPが効いてくるわけです。
旧来であればISOブートした後に一度クラウドのコントロールパネル上のコンソールからIPアドレスの設定を行わないとネットワークへ接続できなかったのですが、現状DHCPのおかげで個別のネットワーク設定不要でサーバにちゃんとIPアドレスが割り当てられるようになっています。

![07.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/5314b52e-af5e-5815-80ec-fcd8920e99a0.png)
すでに1回接続のテストを行っているので改めての説明は野暮かも知れませんが、XRDPでの接続の場合バージョン特定ができませんでしたという警告が表示されますが、ここは**はい**を押して継続します。

![08.PNG](https://qiita-image-store.s3.amazonaws.com/0/100935/ccddb315-ea12-3f1d-de7d-540e66e2b498.png)
↑Chromiumを起動して日本語サイトにアクセスしても文字化けしてない図

10秒程度でリモートデスクトップ接続が行えるサーバを起動することが出来ました。


# これを応用すると…

今回は日本語IMEを入れていないため日本語入力は出来ませんが、IMEを導入することで日本語もきちんと入力することができるようになります。
ブラウザやパケットフィルタの設定で業務システム以外へのアクセスを制限することや、業務アプリだけをインストールしてソリューション特化なVDI利用も実現すると考えます。
ISOブートでローカルディスクを一切持たないサーバなので、業務終了時にシャットダウン処理を行うことでクライアント上にデータを残さない運用を実現することが出来ます。

今回はVDI用途を例にしましたが、Remastersysを使うとOSイメージそのものをISO化できるので、例えばコンフィグ投入済みのNginxをさくらのクラウドのGSLBと組み合わせて負荷分散や、Serf / Consulで自己増殖的にクラスタを構築することなど夢が広がります。

完全なディスクレスでISOブートができるクラウドサービスって他にはあんまりなさそうなので、これを差別化の特徴として面白いことできればいいなぁって思います。