大学のラボのサーバーにRancherOSを入れる

<img width="734" alt="スクリーンショット 2019-10-19 12.56.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403150/e91a7207-644d-9ce4-6ba5-05e332b99459.png">
https://rancher.com/rancher-os/ (c) Rancher Labs, Inc.
# RancherOS
**公式サイト:** https://rancher.com/rancher-os/
**GitHub:** https://github.com/rancher/os
> Tiny Linux distro that runs the entire OS as Docker containers 

さくっと訳すと、「OS全体がドッカーコンテナとして動く<ruby>"Linuxディストリビューション"<rt>OS</rt></ruby>」


## 特徴
* **Dockerが動く** : Dockerの実行に必要なソフトウェアが最初から入っている
* **軽い** : OS構成がミニマルだから、立ち上がりが早い
* **OS構成が簡単** : [cloud-init](https://cloudinit.readthedocs.io/en/latest/#)が入っているので、yamlで簡単に設定、自動化できる
* Rancher : RacherOSには[Rancher](https://rancher.com)が入っている

# 導入方法
## OSの入手先

[RancherOSのGitHub](https://github.com/rancher/os)のリリースからダウンロードができる。仮想マシンじゃないマシンそのものにインストールしたいならば、下図のisoをダウンロードする。<img width="768" alt="スクリーンショット 2019-10-19 13.15.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403150/6a02886c-dbee-3cf0-44b1-d50a71b71e34.png">

## ブートUSBメモリの作成

ダウンロードした<ruby>ディスクイメージ<rt>ISO</rt></ruby>からOSを起動できるようにするためのブートメディアを作る。<font color="#bbb">手元にDVD-Rも、それにisoを焼く環境も整っていたが、DVD-Rからの起動に失敗したのでUSBメモリで作ることにした。</font>

**USBメモリでブートメディアを作る**
``rancheros.iso`` をUSBメモリに書き込むやり方は色々あるが今回は[Etcher](https://www.balena.io/etcher/)を使用した。

``Etcher``は.isoなどのディスクイメージをSDカードやUSBメモリにサクッと書き込むことができるツールだ。

<img width="696" alt="スクリーンショット 2019-10-19 13.37.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403150/a7365860-9c92-225f-d8d6-efbf049632aa.png">
https://www.balena.io/etcher/ (c) Balena


Windowsやmacで動かすことができ、Linuxでも起動する方法がある。

**Etcherの使い方**
<img width="912" alt="スクリーンショット 2019-10-19 13.41.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403150/f73314d2-61a2-b78f-ee60-36a3757fdc9b.png">

1. この画面に、先ほどダウンロードしてきた``rancheros.iso``をドラッグアンドドロップしする。
2. 次に"Select target"で対象のUSBメモリを選択する
3. "Flash!"を押してしばらく待てば、ブートメディアが出来上がる。


## ブートUSBメモリからRancherOSを起動する

当該のUSBメモリを挿した状態で、OSを起動し、ブートメディアを選択する画面を出す。<font color="#bbb">大抵はF2かF12を連打すればブートメディアを選択できる</font>

そのまま起動すると、RancherOSという題の青い画面が出たり、黒い背景にたくさん白い文字が出た挙句、やがて、ウシのアスキーアートでRancherOSと表示がでてコマンドを受付するようになる。

なおログインユーザーはrancherである。

## SSH経由でRancher OSのセットアップを行う

この後、当該の環境でインストールを進めていくわけだが、Dockerが入っていることを除けば素のシェルなり、viなりで操作をすることになるので、GUIとか使い放題のリッチOSの端末からsshで入って操作することを試みよう。

**IPアドレスを確認する**
LANケーブルを繋いでUSBブートをしたタイミングで、すでにSSHが立ち上がっているので、まずはアドレスを確認する。

```:アドレスを確認する
ip a
```

大抵eth0のinetという項目がipアドレスなので、そこにsshする。

**sshで接続する用のパスワードを設定する**

SSH公開鍵とか使いたいが、あのやたら長い文字列をどうコピーするのかわからないので、パスワードでsshログインを試みる。

```:パスワードを設定する
sudo passwd rancher
```
二回パスワードを求められるので設定する。


**SSHで入る**
先ほど確認したIPアドレスにユーザーはrancher、パスワードは先ほど設定したパスワードでSSHして入る。

以後の作業は全てSSHやSFTPでファイル転送をしている。

**SFTPで設定ファイルを送る**

固定IPアドレスと大学のプロキシを設定したいので、SFTPで```/home/rancher```に以下のようなcloud-init用のconfigを送る。

```yaml:cloud-config.yml
#cloud-config
rancher:
  console: ubuntu
  network:
    interfaces:
      eth0:
        address: XXX.XX.XX.XX/XX
        gateway: XXX.XX.XX.XX
        dhcp: false
    http_proxy: http://xxxx.xxxx.xxxx.xx:8080
    https_proxy: http://xxxx.xxxx.xxxx.xx:8080
    no_proxy: localhost,127.0.0.1
  services:
    console:
      environment:
        TZ: JST-9
```

## Rancher OSをインストールする

**ドライブ一覧の確認**
まずはハードディスクやSSDの一覧を確認する。

```:ドライブの一覧を表示
sudo fdisk -l
```

大抵は``/dev/sda``がインストール先になるはず。

**インストール**

ディレクトリ```/home/rancher```にて

```
sudo ros install -c cloud-config.yml -d /dev/dsa -a rancher.password=<任意のパスワード>
```

## インストール後の再起動

インストール後は確実にsshがダメになるので、ローカルで

```
ssh-keygen -R <ホスト名>
```

してからアクセスする。

## 動作確認

再びssh接続して

```:
docker run hello-world
```

を行い、イメージがpullされて、実行されるのを確認する。

## インストール後の``cloud-config.yml``の編集

``/home/rancher``に ``cloud-config.yml``をsftpで送って

```terminal:書き換え
sudo mv cloud-config.yml
```