Tiny Core Linux7のCoreをHDDにインストール

Tiny Core Linux 7の最も小さいイメージであるCoreをHDDにインストールした時のメモです。[Tiny Core Linux](http://tinycorelinux.net/)は最新のv7.1でもCoreと言われる最小イメージなら11Mしかないという超軽量なLinuxです。

最も大きなイメージであるCorePlusでも106Mなので、一昔前のPCでも全く問題はないと思いますが、今回はCoreから始めてみたいと思います。

## USBメモリからTiny Core Linuxを起動
### 起動用USBメモリの作成
「[Tiny Core Linuxのサイト](http://tinycorelinux.net/)」にアクセスしDownloadsをクリックします。以下の3つのイメージが公開されていますが今回は最も小さいCoreをダウンロードします。

- Core (11 MB)
- TinyCore (16 MB)
- CorePlus (106 MB)

ダウンロードしたISOファイルをUSBメモリに書き込みます。これで起動用USBメモリは完成です。（追記2018/4/15）この方法では起動できないという場面に遭遇しました。「[Tiny Core Linux 9の起動用USBメモリを作る](https://qiita.com/hachisukansw/items/cd812773eb4425700f8b)」も参考にしてください。

```console
$ sudo dd if=Core-current.iso of=/dev/sdb
```

###起動
作成したUSBメモリをPCに接続し起動します。
![VirtualBox_TinyCoreLinux-Core_02_07_2016_16_28_38-2.png](https://qiita-image-store.s3.amazonaws.com/0/128670/f4c256ba-533f-e722-0bdb-ce9d382d90ea.png)

CorePlusではメニューが表示されたのですがCoreはないようです、こまま[Enter]キーを押すかしばらく待つと起動します。

![VirtualBox_TinyCoreLinux-Core_02_07_2016_16_32_29-2.png](https://qiita-image-store.s3.amazonaws.com/0/128670/f04d7c9f-9cbb-a7d5-1bc4-d01bc8773cc6.png)

しばらく待ってもこれ以上何も変わりません。…どうやらCoreにはウィンドウシステムは入っていないようです。

## HDDにインストール
HDDへのインストール方法は http://tinycorelinux.net/install_manual.html あたりでも書かれているのですがちょっとハードルが高いのでもっと簡単にインストールできそうな`tc-install`を使いたいと思います。

`tc-install`をインストールします。

```console
$ tce-load -wil tc-instal
```

CLI版の`tc-install.sh`を実行します。

```console
$ sudo tc-instal.sh
```

```text
Core Installation.

Install from [R]unning OS, from booted [C]drom, or from [I]so file. (r/c/i): 
```

ウィザード形式で質問に答えていけば良さそうなので「ｃ」を入力し[Enter]。

```test
Select install type for /mnt/sr0/boot/core.gz

Frugal
* Use for frugal hard drive installations.
Note: You will be prompted for disk/partion and formatting options.

HDD
* Use for pendrives. Your BIOS must support USB-HDD booting.
* A single FAT partition will be made.
Note: Requires dosfstools extension.
Warning: This is a whole drive installation!

Zip
* Use for pendrives. Drive will be formatted into two FAT partitions.
* One small one for USB_ZIP boot compatibility, and used to hold Tiny Core.
* The remaining partition will be used for backup & extensions.
Note: Requires dosfstools and perl extensions.
Warning: This is a whole drive installation!

Select Install type [F]rugal, [H]DD, [Z]ip. (f/h/z): 
```

HDDにインストールしますので「h」を入力し[Enter]。

```tex
Select disk for core

	 1. sda
	 2. sr0

Enter selection ( 1 - 2 ) or (q)uit: 
```

sdaにインストールしますので「1」を入力し[Enter]。

もしこの段階で、

```text
sda appears to have a partition already mounted!
Check if correct device, if so,  umount it.
Press Enter key.
```

のようなエラーが表示されて進めない時は、一度再起動し`boot: ` のところに`microcore base`又は`mc base`と入力しブートします。`base`オプションを指定する事でHDDがマウントされなくなりますのでインストールを進めることができます。

```text
Select Formatting Option for sda1

	 1. ext2
	 2. ext3
	 3. ext4
	 4. vfat

Enter selection ( 1 - 4 ) or (q)uit: 
```

フォーマットはext4でいいと思いますので「3」を入力し[Enter]。

```text
Enter space separated boot options: 
Example: vga=normal syslog showapps waitusb=5 
```

ブートオプションは後からでも指定できますので、このまま[Enter]。

```text
Last chance to exit before destroying all data on sda1
Continue (y/..)? 
```

最後の確認なので「y」を入力し[Enter]。「Installation has completed」を表示されれば完了です。

```text
Writing zero's to beginning of /dev/sda
Partitioning /dev/sda

/dev/sda:
Formatting /dev/sda1
mke2fs 1.42.13 (17-May-2015)
0+1 records in
0+1 records out
440 bytes (440B) copied, 0.026071 seconds, 16.5KB/s
UUID="e30b4801-9034-480c-9de0-8a08124a338e"
Applying extlinux.
/mnt/drive/boot/extlinux is device /dev/sda1
Setting up core image on /mnt/sda1
Installation has completed
```

USBメモリを抜いて再起動し起動できれば成功です。

`df`と`du`コマンドでどれくらい消費しているのかを見てみます。

```console
$ sudo df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                  222.2M     12.4M    209.8M   6% /
tmpfs                   123.4M         0    123.4M   0% /dev/shm
/dev/sda1               118.0G     69.8M    117.9G   0% 

$ sudo du -hs /
21.9M   /
```

## homeとoptディレクトリをHDDに変更
`tc-install.sh`を使ってOSはHDDにインストールできましたが実はこの状態ではhomeとoptディレクトリはメモリ上に展開されていますのでhomeとoptディレクトリもHDDに変更します。

HDDのhomeとoptディレクトリを使用するようにブートオプションに`home=sda1 opt=sda1`を追加します。

```console
$ sudo vi /mnt/sda1/boot/extlinux/extlinux.conf
DEFAULT core
LABEL core
KERNEL /tce/boot/vmlinuz
APPEND initrd=/tce/boot/core.gz quiet home=sda1 opt=sda1 ....
```

`sudo reboot`で再起動して完了です。

##アプリのインストール
HDDにインストールはできたものの、この状態では何もできませんのでとりあえず何かアプリをインストールしてみたいと思います。

Tiny Core Linuxには`tce-load`とうコマンド以外にも`tce`というコマンドがあります。tce-loadコマンドはインストールするアプリの名前が分かっていないと使えませんが、tceコマンドはキーワードで検索してインストールできますので、こちらの方が便利です。

試しに日付を調整する`ntpclient`をインストールしてみます。tceコマンドはパラメーターなしで`tce`と入力して使います。

```console
$ tce
```

```text
tce-ab - Tiny Core Extension: Application Browser

S)earch P)rovides K)eywords or Q)uit:
```
メニューが表示されますのでキーワード検索の「k」を入力します。

```text
Enter search term(s), e.g. browser:
```
「ntp」と入力して[Enter]。

```text
tce - Tiny Core Extension browser

	 1. chntpw.tcz
	 2. ntpclient.tcz

Enter selection ( 1 - 2 ) or (q)uit: 
```
検索結果が表示されます。ntpclientをインストールしてみますので、「2」と入力し[Enter]。

```text
Title:          ntpclient.tcz (TESTING)
Description:    ntpclient -- a small NTP client for unix-alike computers
Version:        2007_365
Author:         Larry Doolittle
Original-site:  http://doolittle.icarus.com/ntpclient/
Copying-policy: GNU General Public License Version 2
Size:           12.0K
Extension_by:   vitex
Tags:	    ntpclient -- small NTP client unix-alike computers
Comments:       From http://doolittle.icarus.com/ntpclient/:
                  ntpclient is an NTP (RFC-1305) client for unix-alike
                  computers. Its functionality is a small subset of
                  xntpd, but IMHO performs better (or at least has the
                  potential to function better) within that limited
                  scope. Since it is much smaller than xntpd, it is
                  also more relevant for embedded computers.
                See http://doolittle.icarus.com/ntpclient/README and
                http://doolittle.icarus.com/ntpclient/HOWTO for more
                informtion.
                -----------------------------------------------------
                This extension was built from
                  http://doolittle.icarus.com/ntpclient/ntpclient_2007_365.tar.g
```
情報が表示されますので「q」を入力します。

```text
A)bout I)nstall O)nDemand D)epends T)ree F)iles siZ)e L)ist S)earch P)rovides K)eywords or Q)uit: 
```
インストールの「i」を入力します。完了したら「q」を入力し終了します。

確認してみます。

```console
$  sudo ntpclient -s -h ntp.jst.mfeed.ad.jp
42551 43138.499   34062.0     26.4  2166694.7  63217.2         0
$ date
Sat Jul  2 11:59:04 UTC 2016
```

こんな感じで必要なアプリをインストールしていく事ができます。

## 関連リンク
- [UbuntuからTiny Core Linux 7をUSBメモリにインストール](42bc90c13e35d0f81467)
- [Tiny Core Linux 7でHDDのエラーチェック](bdeb60a8b671113e54d7)
- [Tiny Core Linux 7でSecure Eraseを使ったHDDデータ消去](c8cc9418c84d563bee29)
- [Tiny Core Linux 7でshredを使ったHDDデータ消去](d1c7ad58009f41e2d252)
- [Tiny Core Linux 7でddを使ったHDDデータ消去](28e15e54700dc9aadb44)
- [ターミナル上で動くアナログ時計tclock.cをシェルで書いてみた](22b77b9a3973144f5a87)
- [UbuntuとTiny Core Linuxの標準シェルで計算してみる](9910ef7cf831c1187293)
- [pingに日時（タイムスタンプ）をつける](727f7388b0f01ad1d631)
- [Tiny Core Linuxのリリース頻度を調べてみた](539c1ebfed85bf05a795)