Tiny Core Linux用の軽量日本語キーボードレイアウトパッケージを作る

Tiny Core Linux用の日本語キーボードレイアウトのパッケージを作った時のメモです。作業は「[UbuntuからTiny Core Linux 7をUSBメモリにインストール](42bc90c13e35d0f81467)」のようにUbuntu上でパッケージを作成してUSBのTiny Core Linuxにインストールするという方法で行いましたがTiny Core Linux上でもsquashfs-toolsパッケージをインストールすれば同じことが行えます。

Tiny Core Linuxで日本語キーボードを使うのはそれほど難しくはなく、kmapsパッケージをインストールしてブートオプションに`kmap=qwerty/jp106`を追加すれば使えます。

それ良いと言えば良いのですがkmapsの中には使わないキーボードレイアウトも含まれるので日本語キーボードレイアウトだけにしたら小さくなるんじゃないかと思って試してみました。

## kmapsパッケージのサイズは
kmapsのサイズを調べてみると140Kほどでした。思ったよりも小さいので作るのやめようかと思いたくなるようなサイズです。

```console:
$ du -hs kmaps.tcz
140K    kmaps.tcz
```

完成したパッケージは4Kです。「35分の1になったー！」と言えば聞こえはいいですが「136K小さくなった」と言ったらそれに意味はあるのかと突っ込まれそうな話です。

```console:
$ du -hs kmaps.tcz kmap-jp106.tcz
140K    kmaps.tcz
4.0K    kmap-jp106.tcz
```

## 作り方
### kmapsパッケージのダウンロード
wgetを使ってkmapsパッケージをダウンロードします。以下はv7の場合です。それ以外のバージョンの場合は7.xの部分を適当に書き換えて下さい。

```console:wgetを使ってパッケージをダウンロード
$ wget -O kmaps.tcz http://tinycorelinux.net/7.x/x86/tcz/kmaps.tcz
```

Tiny Core Linux上で作業している場合は`tce`コマンドや`tce-load`コマンドを使って取得することもできます。

```console:tce-loadを使ってパッケージをダウンロード
$ tce-load -w kmaps
$ mv /etc/sysconfig/tcedir/optional/kmaps.tcz* ./
```

### kmapsパッケージを解凍
`unsquashfs`コマンドを使ってkmapsパッケージを解凍します。Tiny Core LinuxのCoreのように`unsquashfs`コマンドが標準で含まれていない場合は`tce-load -wi squashfs-tools`でsquashfs-toolsパッケージをインストールすれば使えるようになります。

```console:
$ unsquashfs -d kmaps kmaps.tcz
Parallel unsquashfs: Using 2 processors
154 inodes (192 blocks) to write

[===============================================================|] 192/192 100%
created 154 files
created 11 directories
created 0 symlinks
created 0 devices
created 0 fifos
```

### 日本語レイアウトを取り出す
日本語レイアウトパッケージ用のディレクトリを作成し、解凍したファイルから日本語レイアウトファイルjp106.kmapをコピーします。

```console:日本語レイアウトを取り出す
$ mkdir -p kmap-jp106/usr/share/kmap/qwerty/
$ cp kmaps/usr/share/kmap/qwerty/jp106.kmap kmap-jp106/usr/share/kmap/qwerty/
```

### 日本語レイアウトパッケージを作成する
作成したディレクトリごと圧縮することで日本語レイアウトパッケージを作成します。パッケージ名はkmap-jp106としました。

```console:日本語レイアウトパッケージを作成
$ mksquashfs kmap-jp106 kmap-jp106.tcz
$ md5sum kmap-jp106.tcz > kmap-jp106.tcz.md5.txt
```

### 日本語レイアウトパッケージをインストール
Tiny Core LinuxのUSBメモリにファイルをコピーし起動時に読み込まれるようにします。以下の例はUbuntu上で作業している場合でUSBメモリが/mntにマウントされている事を想定しています。

```console:Ubuntu上で作業している場合
$ sudo cp kmap-jp106.tcz* /mnt/tce/optional/
$ sudo sh -c "echo kmap-jp106.tcz >> /mnt/tce/onboot.lst"
```

Tiny Core Linuxで作業している場合は以下のような感じになります。

```console:TinyCoreLinux上で作業している場合
$ cp kmap-jp106.tcz* /etc/sysconfig/tcedir/optional/
$ echo kmap-jp106.tcz >> /etc/sysconfig/tcedir/onboot.lst
```

### ブートオプションの変更
ブートオプションに`kmap=qwerty/jp106`を追加します。以下は私の環境の場合の例です。

```console:Ubuntu上で作業している場合
$ sudo vi /mnt/boot/grub/menu.lst

default 0
timeout 3
title tinycore
kernel /boot/vmlinuz kmap=qwerty/jp106 quiet waitusb=5 consoleblank=0 blacklist=pcspkr tz=JST-9 notuc
initrd /boot/core.gz
```

```console:TinyCoreLinux上で作業している場合
$ vi /etc/sysconfig/tcedir/../boot/grub/menu.lst

default 0
timeout 3
title tinycore
kernel /boot/vmlinuz kmap=qwerty/jp106 quiet waitusb=5 consoleblank=0 blacklist=pcspkr tz=JST-9 notuc
initrd /boot/core.gz
```

## 最終的なサイズの違い
以下のような感じになりました。大きな成果とはなりませんでしたが、がんばれば小さくできる可能性がある事が分かったように思います。

```console:パッケージサイズの違い
$ du -hs kmaps.tcz kmap-jp106.tcz
140K    kmaps.tcz
4.0K    kmap-jp106.tcz
```

```console:実際のファイルサイズの違い
$ du -hs kmaps kmap-jp106
812K    kmaps
24K     kmap-jp106
```