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から統一的に扱えるメリットは大きいと思われる。
関連資料・記事
参考サイト
Tiny Core Linux技術情報 (Qiita)
Vagrant技術情報 (Qiita)
VirtualBox技術情報 (Qiita)
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環境の整備、日本語化、各種サーバの構築など様々な拡張が可能である。
参考サイト
Tiny Core Linux技術情報 (Qiita)
TinyCoreに関するブログ記事 (Resilient Mind)