超軽量 Linux: Tiny Core Linux の OVF テンプレートを作成する

# はじめに
<!-- 発端や概要を記載 -->
大量の仮想マシンをvSphere環境上で稼働させるテストをしたり、HCX vMotionで仮想マシンを距離が離れたvSphere環境に複数VM移行をする検証を行なったりする際に、軽量の仮想マシンを利用したいケースがあるかと思います。
今回はその要件を満たすTiny Core Linuxの現行版であるVersion 12.0を利用してOVFテンプレートの作成を行います。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [Tiny Core Linux](#tiny-core-linux)
1. [Tiny Core Linuxを仮想マシンとしてインストールする](#tiny-core-linuxを仮想マシンとしてインストールする)
1. [OVFテンプレートのエクスポート](#ovfテンプレートのエクスポート)
1. [まとめ](#まとめ)
1. [参考文献](#参考文献)

<!-- 各チャプター -->
# Tiny Core Linux
[Tiny Core Linux](http://tinycorelinux.net/welcome.html)は、Linuxディストリビューションの1つであり、大きな特徴は、そのサイズの小ささにあります。Tiny Core Linux 自身(Core)は11MBしかなく、デスクトップ向け Linux としてはもっとも小さい部類に入ります。
実行に必要なメモリも少なくて済む一方で例えばcurl、wget、など良く利用する機能を追加したり、OpenSSHサーバを起動したり、VMware Toolsをインストールする事もできます。
一つのESXi上に大量のVMを起動したいといったケースや軽量の仮想マシンを使ってvMotionをしたいといったケースに正に合致しますね。


# Tiny Core Linuxを仮想マシンとしてインストールする
この記事では、Tiny Core LinuxのOVFテンプレートを作成する手順をまとめます。
まず、Tiny Core ISOを[こちら](http://tinycorelinux.net/12.x/x86/release/CorePlus-current.iso)からダウンロードします。

仮想マシンに使用した設定は以下の通りです。

| 項目 | 設定値 |
| --- | --- | 
| VM ハードウェアバージョン | 11 — ESXi 6.0 以降との互換性 |
| ゲスト OS ファミリ | Linux | 
| ゲスト OS バージョン | その他の Linux 3.x 以降（32 ビット） |
| CPU | 1 |
| メモリ | 256MB |
| ハードディスク | 64MB <br> ※ 仮想デバイス ノードを IDE 0に変更し、 <br> 仮想デバイスノードを IDE 0:0に設定 |
| CD/DVD メディア | 仮想デバイスノードを IDE 1:0 に変更 |

CD/DVD ドライブにダウンロードしたISOファイルをマウントして仮想マシンを起動します。

WEBコンソールを開き、起動オプションはBoot Core Plus with default FLM topside.を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/02dbaece-908a-4752-e780-75fd7323a765.png)

Applications -> tc-installを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/800b1fd8-d2b6-a1d1-b90a-8fd19972d15e.png)


以下の通りの設定を選択して、Proceedをクリックします。（詳細なインストール手順については、[こちら](http://tinycorelinux.net/install.html)のガイドを参照して下さい。）
マウスが動作しなかったのでタブキーとスペースキー、カーソルキーを使ってこの画面まで辿り着きました。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/accc1f60-19bd-976f-3fe5-f26b84d3c167.png)

以下の通り、インストールが完了したので再起動（Crtl + Alt + Delete）をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/1aa318e8-7ac1-4307-7582-c74f6475a3ef.png)

OSがインストールされましたので、シェルに入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/49e08e6f-e0e0-705e-bd5f-4c7b0c9ecf9c.png)


以下の通りDHCPからIPアドレスが取得できています。

```bash
tc@box:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:56:BE:74:CE  
          inet addr:192.168.80.173  Bcast:192.168.80.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6815 errors:0 dropped:10 overruns:0 frame:0
          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:437482 (427.2 KiB)  TX bytes:11298 (11.0 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tc@box:~$ 
```


まずtcユーザーのパスワードの設定を行います。

```bash
tc@box:~$ passwd
Changing password for tc
...
tc@box:~$
```


次に、必要なパッケージと拡張機能をインストールします。（このタイミングではまだSSH接続できないのでWEBコンソールで手打ちする必要があります。。）

```bash
tc@box:~$ tce-load -wi pcre.tcz curl.tcz wget.tcz open-vm-tools.tcz openssh.tcz
```

onboot パッケージリストは以下のようになります。

```bash
tc@box:~$ cat /etc/sysconfig/tcedir/onboot.lst
pcre.tcz
curl.tcz
wget.tcz
open-vm-tools.tcz
openssh.tcz
tc@box:~$ 
```


SSH サーバーを設定して有効にします。

```bash
cd /usr/local/etc/ssh
sudo cp ssh_config.orig ssh_config
sudo cp sshd_config.orig sshd_config
sudo /usr/local/etc/init.d/openssh start
```

ここでようやくリモートからSSH接続できるようになり、WEBコンソールでの操作から解放されました！（今回はEC2から接続をしています）

```bash
[ec2-user@ip-XX-XX-XX-XX ~]$ ssh tc@192.168.80.173
The authenticity of host '192.168.80.173 (192.168.80.173)' can't be established.
ECDSA key fingerprint is SHA256:.................
ECDSA key fingerprint is MD5:9b:86:fe:76:06:b2:01:0b:30:76:52:05:9e:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.80.173' (ECDSA) to the list of known hosts.
tc@192.168.80.173's password: 
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

tc@box:~$ 
```


次に、すべての設定を保存し、再起動後も永続化する為に起動スクリプト (bootlocal.sh) に追加します。

```bash
sudo su
echo '/opt/interfaces.sh' >> /opt/.filetool.lst
echo '/usr/local/etc/ssh' >> /opt/.filetool.lst
echo '/etc/shadow' >> /opt/.filetool.lst
echo '/opt/interfaces.sh' >> /opt/bootlocal.sh
echo '/usr/local/etc/init.d/open-vm-tools start &> /dev/null'  >> /opt/bootlocal.sh
echo '/usr/local/etc/init.d/openssh start &> /dev/null' >> /opt/bootlocal.sh
```

最後にすべての設定をバックアップします

```bash
root@box:/home/tc# filetool.sh -b
Backing up files to /mnt/sda1/tce/mydata.tgz /
```

これで、仮想マシンを安全に再起動できます。
再起動後、vCenterからIPアドレスとVMware Toolsのバージョンが確認できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/a9604653-f367-6f8a-5c07-ae2e174ee38b.png)



# OVFテンプレートのエクスポート
最後に仮想マシンをシャットダウンして、OVFテンプレートにエクスポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441095/0093b9a6-f02c-baa3-c38b-2349ea91a6ef.png)



# まとめ
仮想マシンとしてインストールするには少しクセがありますが、一回インストールしてテンプレート化してしまえば、軽量で検証の際に非常に有効に利用する事ができます。
[i3en.metalの2ホストSDDCをデプロイしてみる（VMware Cloud on AWS）](https://qiita.com/mtoyoda/items/ee11d8346fd7adef094d)でもこのTiny Core Linuxのテンプレートを利用して大量の仮想マシンを短時間で作成を行いました。



# 参考文献
- [Welcome to The Core Project - Tiny Core Linux](http://tinycorelinux.net/)
- [Tiny Core Linux - Wikipedia](https://ja.wikipedia.org/wiki/Tiny_Core_Linux)