Tiny Core Linux

2015/12/06更新

対応バージョン: 6.4.1

Tiny Core LinuxのVagrant用boxはhttp://www.vagrantbox.es/では配布されていないので手動で作成する手順を示す。

boxが作成されたら実際にVagrantでゲストOSが作成できるところまで行う。

VirtualBoxには以下の手順でTiny Core LinuxのCoreがゲストOSとして作成されているものとする。

またVirtualBoxとVagrantはそれぞれ以下のバージョンを使用する。

% vboxmanage --version
5.0.10r104061

% vagrant --version
Vagrant 1.7.4

Vagrant用設定

まずVagrantで必要な設定をゲストOS上で行う。

SSHはローカル(ホストOS)の2222番ポートをリモート(ゲストOS)の22番ポートにフォワードする設定にしている。

% ssh -p 2222 tc@localhost
tc@localhost's password: ********
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

tc@box:~$ 

vagrantユーザ&グループ追加

VagrantはゲストOSにログインする際にvagrantユーザを使用するのであらかじめゲストOS上に同ユーザを作成しておく。

なおTiny Core Linuxではadduserを実行すると同名のグループが一緒に作られるのでaddgroupを実行する必要はない。

tc@box:~$ sudo adduser vagrant

tc@box:~$ id vagrant
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)

sudo設定

vagrant up時に内部的にsudoを実行するのでvagrantユーザがsudoをパスワードなしで実行できるようにする。

tc@box:~$ sudo visudo
:
vagrant	ALL=NOPASSWD: ALL <--- 追加

vagrantユーザ用の公開鍵を配置

ホストOSからゲストOSにvagrant sshでログインする際に公開鍵による認証が行われるためホストOS上で公開鍵を作成し、それをゲストOSに配置する。

ホストOS上で公開鍵を作成(対となる秘密鍵はVagrant用の専用鍵)
tc@box:~$ exit
% ssh-keygen -yf ~/.vagrant.d/insecure_private_key > public_key
公開鍵をゲストOSに転送
% scp -P 2222 public_key vagrant@localhost:/tmp/authorized_keys
% rm public_key

(*) scpの-Pオプションは大文字であることに注意。小文字だとcpコマンドと同様、パーミッション維持の指定になる

ゲストOS上でvagrantユーザにスイッチして公開鍵を格納
% ssh -p 2222 tc@localhost
tc@box:~$ su - vagrant
vagrant@box:~$ mkdir -m 0700 ~/.ssh
vagrant@box:~$ mv /tmp/authorized_keys ~/.ssh
vagrant@box:~$ chmod 0600 ~/.ssh/authorized_keys
vagrant@box:~$ exit

変更ファイルを保全

今回変更したファイルが/opt/.filetool.lstに記載されているか確認し、記載されていなければ追記して保全する(保全しておかないと次回ゲストOS起動時に復元されない)。

tc@box:~$ cat /opt/.filetool.lst
:
home
:
etc/passwd
etc/shadow
etc/group
etc/sudoers
:

tc@box:~$ sudo filetool.sh -b

ゲストOS停止

ここまで終わったらゲストOSを停止する。

tc@box:~$ sudo poweroff

Vagrantのbox作成

ここからはホストOS上での作業となる。

VirtualBox上にあるゲストOSからVagrantのboxを作成する。

box作成

vagrant packageコマンドでboxを作成し、任意のディレクトリに格納する(ここでは~/vagrant/boxに格納する)。

% mkdir -p ~/vagrant/box
% vboxmanage list vms
:
"tc" {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
:
% vagrant package --base tc --output ~/vagrant/box/tclinux-core-6.4.1x64.box

boxをVagrantの管理下に入れる

% vagrant box add --name tclinux-core-6.4.1x64 ~/vagrant/box/tclinux-core-6.4.1x64.box
:
==> box: Successfully added box 'tclinux-core-6.4.1x64' (v0) for 'virtualbox'!

% vagrant box list
:
tclinux-core-6.4.1x64 (virtualbox, 0)

仮想サーバを作りゲストOSを起動する

boxがVagrantで扱えるようになったら実際にVagrantfileを作成してゲストOSを起動する。

Vagrantfile作成

% mkdir -p ~/vagrant/tc
% cd ~/vagrant/tc
% vagrant init tclinux-core-6.4.1x64

Vagrantfile修正

Vagrantのデフォルトの設定ではTiny Core Linuxがうまく動作しないので以下の2点を修正する。

SSH接続時のShell(bash)が使えない

Tiny Core Linuxにはbashが入っていないのでshを指定する(別途bashのtczを導入してもよい)。

共有フォルダが使えない

共有フォルダを使うためのvboxsfドライバが含まれるVirtualBox Guest AdditionsがTiny Core Linux向けに提供されていないため共有フォルダの機能を無効化する(共有フォルダが使えなくても従来のscpが使えるのでファイルのやり取りは可能)。

% vi Vagrantfile
:
Vagrant.configure(2) do |config|
  config.vm.box = "tclinux-core-6.4.1x64"
:
  config.ssh.shell = "/bin/sh" <--- 追加
  config.vm.synced_folder ".", "/vagrant", disabled: true <--- 追加
end

ゲストOS起動

ここまで設定すればゲストOSが起動できる。

% vagrant up
:

ログイン確認

vagrant sshコマンドと通常のsshコマンドでそれぞれゲストOSにログインできることを確認する。

vagrant ssh
% vagrant ssh
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

vagrant@box:~$ uname -a
Linux box 3.16.6-tinycore #777 SMP Thu Oct 16 09:42:42 UTC 2014 i686 GNU/Linux

vagrant@box:~$ exit
ssh
% ssh -p 2222 vagrant@localhost
vagrant@localhost's password: ********
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

vagrant@box:~$ 

以上でTiny Core LinuxのVagrant用boxを作成してVagrantによるゲストOSが起動できるところまで完了した。

Vagrantが想定しているコマンドやツールが使えない、共有フォルダが使えないなどの不便さはあるが他のゲストOS同様Vagrantから統一的に扱えるメリットは大きいと思われる。

関連資料・記事

参考サイト

2015/11/29更新

対応バージョン: 6.4.1

Tiny Core Linuxには以下の3種類があるが、ここでは一番最小のCoreをインストールする手順を示す。Coreであっても必要に応じてパッケージを追加していくことで機能追加が可能である。
Core(10MB)

Tiny Core Linuxのベースとなる最小構成のシステム。UIはコマンドラインのみで、必要なパッケージも自信でインストールする。

TinyCore(15MB)

Coreの上にGUI(デスクトップ環境)が追加されたもの。ネットワークは有線LANのみ。

CorePlus(86MB)

TinyCoreと同様、GUIを備えておりウィンドウマネージャを7種類から選択可能。無線LANやUS以外のキーボードマップも利用可能で各種ツールも備える。

インストールは物理マシンではなくVirtualBoxの仮想マシン上とする。

準備するもの

CoreのISOイメージ

以下のダウンロードページよりCoreのISOイメージ(Core-current.iso)を入手する。

仮想マシン

VirtualBoxに以下の要件で仮想マシンを作成する。見て分かるようにメモリ・HDDともに非常に少ない容量しか必要としない。

タイプ

Linux

バージョン

Other Linux (64-bit)

メモリ

128MB

HDD

2GB(VDI)

上記以外に外部ホストからのSSH接続用としてポートフォワーディングの設定を行っておく。

設定はVirtualBoxメニューの[設定] > [ネットワーク] > [アダプター 1] > [高度] > [ポートフォワーディング]にて行い、ここではローカルの2222ポートへの接続をゲストOSの22ポートに転送するものとする。

名前

(任意) (例: SSH)

プロトコル

TCP

ホストIP

(空欄のままでよい)

ホストポート

2222

ゲストIP

(空欄のままでよい)

ゲストポート

22

インストール

仮想マシンを起動すると起動ディスクを指定する画面が表示されるので先ほど入手したCore-current.isoを指定するとわずか数秒でOSが起動する。

コマンドプロンプトが表示されるのでまずインストーラを取得する。

tc@box:~$ tce-load -wil tc-install

次にインストーラを実行する。対話形式で進めていけば特に問題なくインストールが完了する。

tc@box:~$ sudo tc-install.sh

インストールイメージの指定

ここではISOイメージを利用するので「c」を指定する。

Core Installation.

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

インストール種別の指定

f(Frugal)は通常インストール、h(HDD)とz(Zip)はUSBメモリからそれぞれHDDモード/ZIPモードで起動する場合に指定する。ここでは内蔵HDD(*)にインストールするので「f」を指定する。

(*) 内蔵HDDは実際にはVirtualBox上の仮想HDDを指すが分かりやすくするため内蔵HDDと表記する。

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

Frugal
* Use for frugal hard drive installations.
Note: You will be prompted for disk/partition 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): <- f

使用するディスクの領域

1(全体)か2(指定したパーティション)かを選ぶことができる。ここではディスクの全領域を使うこととし「1」を指定する。

Select Target for Installation of core

    1. Whole Disk
    2. Partition

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

インストールするディスクの指定

sd1(内蔵HDD)とsr0(CD/DVD-ROM)が選択できるが内蔵HDDにインストールするので「1」を指定する。

Select disk for core

    1. sd1
    2. sr0

Enter selection ( 1 - 2 ) or (q)uit: <- 1 (HDDを使うので)

ブートローダのインストール指定

必要に応じてブートローダをインストールするか指定する。ここではとりあえずインストールすることにして「y」を指定する。

Would you like to install a bootloader?
Most people should answer yes unless they are trying to embed Core in to
a different Linux distribution with an existing bootloader.

Enter selection ( y, n ) or (q)uit: <- y

ディスクのフォーマット形式指定

ディスクをどの形式でフォーマットするか指定する。任意で構わないがここでは「3」(ext4)を指定する。

Select Formatting Opton for sda

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

Enter selection ( 1 - 4 ) or (q)uit: <- 3

ブートオプション指定

ブート時のオプションを指定する。この指定はインストール後に/etc/sysconfig/tcedir/boot/extlinux/extlinux.confを編集すれば変更できるのであまり深く考えなくてもよい。ここでは何も指定しない。

Enter space separated boot options:
Example: vga=normal syslog showapps waitusb=5
<- (Enter)

インストール最終確認

ここから先はディスクをフォーマットするので後戻りできない旨のメッセージが出力されるので、今までの指定で問題なければ「y」を入力する。「y」以外を入力すればインストールが中断するので最初からやり直せる。

Last chance to exit before destroying all data on sda
Continue (y/..)? <- y
:
Writing zero's to beginning of /dev/sda
Partitioning /dev/sda

/dev/sda:
Formatting /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
0+1 records in
0+1 records out
440 bytes (440B) copied, 0.000793 seconds, 541.8KB/s
UUID="*************************************"
Applying extlinux.
/mnt/drive/tce/boot/extlinux is device /dev/sda1
Setting up core image on /mnt/sda1
Installation has completed
Press Enter key to continue. <- Enter

これでOSをリブートすればインストールは完了となる。

tc@box:~$ sudo reboot

ちなみに従来から用意されているtc-installを実行すると以下のようなエラーが出るのでスクリプト版のtc-install.shを利用すること。

tc-install: error while loading shared libraries: libfltk.so.1.3:
cannot open shared object file: No such file or directory

インストール後の最小設定

Coreインストール後、コンソールとリモート接続でそれぞれ使う場合に最低限必要と思われる設定を行う。また時刻がUTCのままなのでJSTに変更する。

日本語キーボードマップ(jp106)インストール

CoreではUSのキーボードマップしかインストールされないので日本語キーボードマップを有効にする。

まずパッケージをインストールする。

tc@box:~$ tce-load -wi kmaps.tcz

onboot.lstにこのパッケージが追加されOSブート時にこの機能が有効になる。

tc@box:~$ cat /etc/sysconfig/tcedir/onboot.lst
kmaps.tcz

各種キーマップは/usr/share/kmap配下に格納されるのでブート時にこれを読み込むようbootlocal.shに以下を追加する。

tc@box:~$ sudo echo "loadkmap < /usr/share/kmap/qwerty/jp106.kmap" >> /opt/bootlocal.sh 

ここで/opt配下の保全(バックアップ)をする。Tiny Core Linuxはファイルシステム含めてオンメモリで動作するためOSブート時に復元したいファイルをあらかじめ/mnt/sda1/tce/mydata.tgzに保存しておくと次回OSブート時に復元される。

保存したい対象は/opt/.filetool.lstに記述しfiletool.sh -bコマンドでmydata.tgzに保全することができる。保存対象はデフォルトで/optと/homeが指定されているので他にも保存したいファイルがあれば追記する。

尚、パスは先頭の'/'を省くこと。

% cat /opt/.filetool.lst
opt
home

% filetool.sh -b
Backing up files to /mnt/sda1/tce/mydata.tgz/
Done.

SSHサーバ設定

リモートから接続するためにSSHサーバを設定する。

まずパッケージをインストールする。

tc@box:~$ tce-load -wi openssh.tcz

続いて設定ファイルを編集する。

tc@box:~$ cd /usr/local/etc/ssh
tc@box:~$ sudo vi sshd_config 

設定の詳細については以下を参照のこと。細かな制御やデフォルトでの挙動を変えなくてよい場合はいったんデフォルトのままでよい。

関連資料・記事

設定ファイルを編集した場合、リブートすると元に戻ってしまうので/opt/.filetool.lstに追記して保全されるようにする。あわせてサーバの鍵ペアが毎回作成し直されることを防ぐために鍵ファイルの保全も行う。両ファイルとも/usr/local/etc/ssh配下に格納されるのでこのディレクトリごと保全する。

tc@box:~$ echo "usr/local/etc/ssh" >> /opt/.filetool.lst
tc@box:~$ filetool.sh -b

リモートから接続するにあたり今のtcアカウントにパスワードを設定するか、リモート接続用のアカウントを用意する。ここでは前者の対応とする。

tc@box:~$ passwd tc

パスワードファイル(/etc/passwd,/etc/shadow,/etc/group)もOSをリブートすると元に戻ってしまうので/opt/.filetool.lstに追記して保全されるようにする。

tc@box:~$ echo "etc/passwd" >> /opt/.filetool.lst
tc@box:~$ echo "etc/shadow" >> /opt/.filetool.lst
tc@box:~$ echo "etc/group" >> /opt/.filetool.lst
tc@box:~$ filetool.sh -b

ここまで設定が終わったらサーバを起動する。

tc@box:~$ sudo /usr/local/etc/init.d/openssh start

まずローカルから接続できることを確認し、次にリモートホストから接続できればOKである。

tc@box:~$ ssh tc@localhost

remote% ssh tc@localhost -p 2222

次回OSブート時にSSHサーバが起動するようにbootlocal.shに以下を記述しておく。

tc@box:~$ sudo echo "/usr/local/etc/init.d/openssh start" >> /opt/bootlocal.sh 
tc@box:~$ filetool.sh -b

タイムゾーンの設定

Coreをインストールした状態ではタイムゾーンがUTCになっているのでJSTに変更する。

本来であればブートオプションのAPPEND行の最後に「tz=JST-9」を追加すればよいはずであるがうまく動作しない。

tc@box:~$ tce-load -wi tzdata.tcz
tc@box:~$ sudo vi /etc/sysconfig/tcedir/boot/extlinux/extlinux.conf
:
APPEND initrd=/tce/boot/core.gz quiet  waitusb=5:UUID="************************************" tce=UUID="************************************" tz=JST-9

そこで$HOME/.profileに以下の設定をすることで代用している。

tc@box:~$ echo "export TZ='JST-9'" >> ~/.profile
tc@box:~$ filetool.sh -b

ここまでで必要最低限と思われる設定を行ったのであとはGUI環境の整備、日本語化、各種サーバの構築など様々な拡張が可能である。

参考サイト