Tiny Core Linux 4.7.7をHDDにインストール＆日本語対応

　軽いで有名な[Tiny Core Linux](http://tinycorelinux.com/)ですが、現在[Tiny Core Linux日本語化プロジェクト](http://sourceforge.jp/projects/tinycore-jp/)の公開されているバージョンは4.5.2-jaで止まっているようです。4.5.2でも十分な気もするのですが、今回は5.xを想定して、4.5.2-jaから日本語部分を取り出し、4.7.7-jaみたいなものを作ってみちゃおうと思います。

## CorePlus-4.7.7のダウンロード＆ブートCDの作成
　Tiny Core Linux 3.xでは大変だったハードディスクへのインストールですが4.xではtc-installというツールを使って簡単にインストールできるようになりました。CorePlusならはじめからtc-installがインストールされていますので今回はCorePlusを使います。

### 1. CorePlus-4.7.7のダウンロード
　Tiny Core Linuxのサイトを見てみると5.xがリリースされた事によって最新版しかダウンロードできないように見えるのですが、Downloadsのページをよく見ると過去のバージョンもしっかりとダウンロードする事ができます。
　過去のバージョンのダウンロードは[Tiny Core Linuxの公式サイト](http://distro.ibiblio.org/tinycorelinux/) から [Downloads](http://distro.ibiblio.org/tinycorelinux/downloads.html) -> [Archive of past base releases: 4.x](http://distro.ibiblio.org/tinycorelinux/4.x/x86/archive) -> [4.7.7](http://distro.ibiblio.org/tinycorelinux/4.x/x86/archive/4.7.7/) から [CorePlus-4.7.7.iso](http://distro.ibiblio.org/tinycorelinux/4.x/x86/archive/4.7.7/CorePlus-4.7.7.iso) をダウンロードします。

### 2. CorePlus-4.7.7のライブCD作成
　ダウンロードしたCorePlus-4.7.7.isoをCD-Rに焼いてライブCDを作成します。

### 3. CorePlus-4.7.7のインストール
　ブートCDからCorePlus-4.7.7を起動し、tc-install 又は tc-install.sh を使ってHDDにインストールします。インストール途中の「Enter space separated boot options」のところでhome=sda1 opt=sda1 を追加します。このオプションを追加するとhomeとoptディレクトリをメモリ上ではなくHDDを使うようになります。

```text:
(省略)
Enter space separated boot options:
Example: vga=normal syslog showapps uaitusb=5
home=sda1 opt=sda1
(省略)
```
### 4. ハードディスクからブート
　ブートCDを取り出しハードディスクから起動します。私の場合、結構な割合でブートできない事がありました。その場合は再度インストールしてみると出来たりします。それでもできない場合はcfdiskコマンドとかを使ってがんばると出来る事もあります。その方法は[Tiny Core Linux3.2 日本語版のインストール](a2484f3ad12a0d8aec28)あたりが参考になるかもしれません。

### 5. homeディレクトリのバックアップ無効化
　Tiny Core LinuxはCDやUSBメモリから起動することを前提に設計されているせいか、インストールしてすぐの状態ではhomeやoptディレクトリがHDDであっても終了時にhomeとoptディレクトリを圧縮して保存するような動きをします。しかし今回はhomeとoptディレクトリはメモリ上ではなくHDD上になるため、バックアップしないようにします。

```console
$ echo > /opt/.filetool.lst
```

## 4.5.2-jaのダウンロードと解凍
　Tiny Core Linux 4.7.7のインストールが完了したら4.5.2-jaから日本語関係のモジュールを取り出すためにISOファイルをダウンロードして解凍します。

[Tiny Core Linux 日本語化プロジェクト]( http://sourceforge.jp/projects/tinycore-jp/) から TinyCore-4.5.2-ja.iso をダウンロードします。

```console
$ wget http://jaist.dl.sourceforge.jp/tinycore-jp/55908/TinyCore-4.5.2-ja.iso
```

ダウンロードしたTinyCore-4.5.2-ja.isoを解凍します。

```console
$ sudo mount -t iso9660 -o loop TinyCore-4.5.2-ja.iso /mnt/sr0
$ mkdir TinyCore-4.5.2-ja
$ sudo cp -rp /mnt/sr0/* TinyCore-4.5.2-ja
$ umount /mnt/sr0
```

## 日本語関係のパッケージのコピー
　ダウンロードしたisoファイルから日本語関係のパッケージを取り出します。unicode対応rxvt(rxvt-unicode)と日本語入力システム(scim, anthy)はそのまま使えそうなのでそのままコピーします。

unicode対応rxvtをインストール（4.5.2-jaのパッケージをそのまま使用）

```console
$ /bin/cp -f TinyCore-4.5.2-ja/cde/optional/rxvt-unicode.tcz* /mnt/sda1/tce/optional/
$ echo rxvt-unicode.tcz >> /mnt/sda1/tce/onboot.lst
```

日本語入力システムをインストール（4.5.2-jaのパッケージをそのまま使用）

```console
$ /bin/cp -f TinyCore-4.5.2-ja/cde/optional/scim-anthy.tcz* /mnt/sda1/tce/optional/
$ /bin/cp -f TinyCore-4.5.2-ja/cde/optional/scim.tcz* /mnt/sda1/tce/optional/
$ /bin/cp -f TinyCore-4.5.2-ja/cde/optional/anthy.tcz* /mnt/sda1/tce/optional/
$ echo scim-anthy.tcz >> /mnt/sda1/tce/onboot.lst
```

つづけて日本語入力システムを使うために必要となるパッケージをダウンロード＆インストールします。

```console
$ tce-load -wil libiconv.tcz
$ tce-load -wil gtk2.tcz
$ tce-load -wil libxcb.tcz
```

## パッケージ作成の準備
　unicode対応rxvtと日本語入力システムをインストールしただけでは日本語入力はできないみたいです。4.5.2-jaから更に必要なモジュールを取り出します。後々を考えると必要なファイルやプログラムはパッケージにしておくとインストール＆アンインストールがとても楽に行えますので可能な限りパッケージ化していきたいと思います。

　まずはパッケージの解凍と作成のために必要となるsquashfsをインストールします。

```console
$ tce-load -wi squashfs-tools-4.x
```

## M+フォントのパッケージ作成とインストール
日本語ビットマップフォントであるM+フォントをインストールするパッケージを作成します。

Xlibs-jaを解凍します（M+フォントはXlibs-jaに含まれているため）。

```console
$ unsquashfs -d Xlibs-ja TinyCore-4.5.2-ja/cde/optional/Xlibs-ja.tcz 
```

M+フォントをコピーします。

```console
$ mkdir -p mplus-fonts/usr/share/fonts/
$ cp Xlibs-ja/usr/lib/X11/fonts/misc/mplus_*.pcf mplus-fonts/usr/share/fonts/
$ gzip mplus-fonts/usr/share/fonts/mplus_b_12.pcf
$ gzip mplus-fonts/usr/share/fonts/mplus_r_12.pcf

$ mkdir -p mplus-fonts/usr/lib/X11/fonts/misc/
$ ln -sf /usr/share/fonts/mplus_b_12.pcf.gz mplus-fonts/usr/lib/X11/fonts/misc/
$ ln -sf /usr/share/fonts/mplus_r_12.pcf.gz mplus-fonts/usr/lib/X11/fonts/misc/

$ mkdir -p mplus-fonts/usr/local/tce.installed/
```

インストールスクリプトを作成します。

```console
$ vi mplus-fonts/usr/local/tce.installed/mplus-fonts
```
```text:mplus-fonts/usr/local/tce.installed/mplus-fonts
#!/bin/sh

FONTS_DIR_FILE="/usr/lib/X11/fonts/misc/fonts.dir"
FONT_NUM=`head -1 $FONTS_DIR_FILE`
FONT_NUM_NEW=`expr $FONT_NUM + 2`

/bin/cp -f $FONTS_DIR_FILE $FONTS_DIR_FILE

cat <<'EOF' >> $FONTS_DIR_FILE
mplus_b_12.pcf.gz -mplus-m+gothic-bold-r-normal--12-120-75-75-c-120-iso10646-1
mplus_r_12.pcf.gz -mplus-m+gothic-medium-r-normal--12-120-75-75-c-120-iso10646-1
EOF

sed -i "1 s/$FONT_NUM/$FONT_NUM_NEW/" $FONTS_DIR_FILE
```

パーミッションを設定して実行できるようにします。

```console
$ chmod 755 mplus-fonts/usr/local/tce.installed/mplus-fonts
```

パッケージを作成します。

```console
$ rm -f mplus-fonts.tcz
$ mksquashfs mplus-fonts mplus-fonts.tcz
$ md5sum mplus-fonts.tcz > mplus-fonts.tcz.md5.txt
$ echo Xlibs.tcz > mplus-fonts.tcz.dep
```

M+フォント作成したパッケージからインストールしてみます。

```console
$ /bin/cp -f mplus-fonts.tcz* /mnt/sda1/tce/optional/
$ echo mplus-fonts.tcz >> /mnt/sda1/tce/onboot.lst
```

## Xlocaleのパッケージ作成とインストール
　Xlocaleの役割は私自身よく分かっていないのですが、このファイルがないと日本語入力ができないようです。

Xlocaleのパッケージからファイルをコピーします。

```console
$ mkdir -p Xlocale-ja/usr/share/X11/locale/
$ /bin/cp -rf Xlibs-ja/usr/share/X11/locale/ja_JP.UTF-8 Xlocale-ja/usr/share/X11/locale/
```

パッケージを作成します。

```console
$ rm -f Xlocale-ja.tcz
$ mksquashfs Xlocale-ja Xlocale-ja.tcz
$ md5sum Xlocale-ja.tcz > Xlocale-ja.tcz.md5.txt
$ echo Xlibs.tcz > Xlocale-ja.tcz.dep
```

インストールします。

```console
$ /bin/cp -f Xlocale-ja.tcz* /mnt/sda1/tce/optional/
$ echo Xlocale-ja.tcz >> /mnt/sda1/tce/onboot.lst
```

## libpng12のパッケージ作成とインストール
　Tiny Core Linux 5.xではlibpngのバージョンが16に上がっているため今のバージョンのパッケージを作成しておきます。16と12で互換性があればシンボリックリンクを張って何とかなるかもしれませんが、何とかならなかった時のために作成しておきます。

libpng12からファイルを取り出してパッケージを作成します。

```console
$ mkdir -p libpng12/usr/lib
$ /bin/cp -fd Xlibs-ja/usr/lib/libpng12* libpng12/usr/lib
```
```console
$ rm -f libpng12.tcz
$ mksquashfs libpng12 libpng12.tcz
$ md5sum libpng12.tcz > libpng12.tcz.md5.txt
```

libpng12はTiny Core Linux 5.xでは必要になるかもしれませんが、4.7.7では必要ありませんので起動時には読み込まれないようにしておきます。

```console
$ /bin/cp -f libpng12.tcz* /mnt/sda1/tce/optional/
```

## 日本語キーボードレイアウトパッケージの作成とインストール
　kmapsをインストールすればキーボードレイアウトがインストールされますが日本語レイアウト以外は不要なので、軽量化のために日本語キーボード（jp106）のみのレイアウトファイルを作成します。

kmapsのインストール

```console
$ tce-load -wil kmaps
```

日本語キーボードレイアウトパッケージを作成するために必要なファイルをコピーします。

```console
$ mkdir -p kmap-jp106/usr/share/kmap/qwerty/
$ cp /tmp/tcloop/kmaps/usr/share/kmap/qwerty/jp106.kmap kmap-jp106/usr/share/kmap/qwerty/
$ mkdir -p kmap-jp106/usr/local/tce.installed/
```

インストールスクリプトを作成します。

```console
$ vi kmap-jp106/usr/local/tce.installed/kmap-jp106
```
```text:kmap-jp106/usr/local/tce.installed/kmap-jp106
#!/bin/sh
USER=`cat /etc/sysconfig/tcuser`
if [ -n "$USER" ]; then
install -o $USER -g staff -m 755 -d /home/$USER/.X.d
cat <<__EOF__ > /home/$USER/.X.d/kmap-jp106
setxkbmap -rules xorg -layout jp -model jp106
xmodmap -e "keycode 49 = Zenkaku_Hankaku"
__EOF__
fi
```

パーミッションを設定して実行できるようにします。

```console
$ chmod 755 kmap-jp106/usr/local/tce.installed/kmap-jp106
```

パッケージを作成します。

```console
$ rm -f kmap-jp106.tcz
$ mksquashfs kmap-jp106 kmap-jp106.tcz
$ md5sum kmap-jp106.tcz > kmap-jp106.tcz.md5.txt
```

日本語キーボードレイアウトをインストールします。

```console
$ /bin/cp -f kmap-jp106.tcz* /mnt/sda1/tce/optional/
$ echo kmap-jp106.tcz >> /mnt/sda1/tce/onboot.lst
```

## 日本語ロケールパッケージの作成とインストール
　ロケールファイルを作成するためにはlocaledefというコマンドを使うようです。localedefはgetlocaleパッケージに含まれるみたいですので、getlocaleをインストールします。

```console
$ tce-load -wil getlocale.tcz
```

必要なファイルをコピーします。

```console
$ sudo mkdir -p /usr/lib/locale/
$ sudo rm -f /usr/lib/locale/locale-archive
$ sudo localedef -i ja_JP -c -f UTF-8 ja_JP.UTF-8
$ sudo mkdir -p locale-ja/usr/lib/locale
$ sudo cp -a /usr/lib/locale/locale-archive locale-ja/usr/lib/locale
```

インストールスクリプトを作成します。

```console
$ sudo vi locale-ja/usr/local/tce.installed/locale-ja
```
```text:locale-ja/usr/local/tce.installed/locale-ja
#!/bin/sh
PROFDIR="/etc/profile.d"

if [ -d "$PROFDIR" ]; then
cat <<EOS > "$PROFDIR/locale-ja.sh"
export G_FILENAME_ENCODING=@locale
EOS
fi
```

パーミッションを設定して実行できるようにします。

```console
$ chmod 755 locale-ja/usr/local/tce.installed/locale-ja
```

依存関係を設定します。

```console
$ vi locale-ja.tcz.dep
```
```text:locale-ja.tcz.dep
libiconv.tcz
glibc_gconv.tcz
```

パッケージを作成します。

```console
$ rm -f locale-ja.tcz
$ mksquashfs locale-ja locale-ja.tcz
$ md5sum locale-ja.tcz > locale-ja.tcz.md5.txt
```

インストールします。

```console
$ /bin/cp -f locale-ja.tcz* /mnt/sda1/tce/optional/
$ echo locale-ja.tcz >> /mnt/sda1/tce/onboot.lst
```

## ブートオプションの設定
　タイムゾーン、ロケール、日本語キーボードレイアウトをカーネルオプションで指定します。「tz=JST-9 noutc lang=ja_JP.UTF-8 kmap=qwerty/jp106」を指定して再起動します。

```console
$ vi /mnt/sda1/tce/boot/extlinux/extlinux.conf
```
```diff:/mnt/sda1/tce/boot/extlinux/extlinux.conf
 DEFAULT core
 LABEL core
 KERNEL /tce/boot/vmlinuz
-APPEND initrd=/tce/boot/core.gz quiet home=sda1 opt=sda1 ...
+APPEND initrd=/tce/boot/core.gz quiet tz=JST-9 noutc lang=ja_JP.UTF-8 kmap=qwerty/jp106 home=sda1 opt=sda1 ...
```

## 動作チェック
ここまでできたら再起動します。再起動後、urxvtを起動して、[全角/半角]キーを押して日本語入力ができれば、まずは成功です。うまくいかない場合は、ブートオプションのquietをshowappsに変更してエラーが出ていないかチェックします。

## 実はまだ先が…
ここまでがんばっても日本語関係でまだおかしなところがありますので、さらに以下の変更も必要となります。日本語って本当大変なんですね。

* [Tiny Core Linux 4.7.7のbusyboxの日本語対応](bec5e44dd0f82a31bf94)
* [Tiny Core Linux 4.7.7のcp932対応](6b3a2b51d2ec0fd988b7)