今回は手元にあったUbuntuベースのLinuxBean 12のマシンを使ってUSBメモリにTiny Core Linuxをインストールした時のメモです。
Tiny Core Linuxのインストーラー(tc-install.sh
)を使わない、手動でのインストール方法になりますので、ちょい面倒な内容となっています。
USBメモリのフォーマット
まずUSBメモリにパーティションを作成します。Tiny Core Linuxの場合、Linux用のパーティションを1つ作るだけでも起動できますので、とりあえず1つ作成します。起動できるようにBootable(起動可能)にしておきます。
既にフォーマット済みのUSBメモリを使う場合、自動的にマウントされている可能性がありますのでsudo umount /dev/sdb1
とかしてマウントを解除した状態で作業を行う必要があります。
$ sudo cfdisk /dev/sdb
cfdisk (util-linux 2.20.1)
Disk Drive: /dev/sdb
Size: 2004877312 bytes, 2004 MB
Heads: 42 Sectors per Track: 42 Cylinders: 2219
Name Flags Part Type FS Type [Label] Size (MB)
------------------------------------------------------------------------------
Pri/Log Free Space 0.04*
sdb1 Boot Primary Linux 2004.85*
[ Help ] [ New ] [ Print ] [ Quit ] [ Units ]
[ Write ]
Create new partition from free space
パーティションをいじった際はsudo partprobe
か再起動してパーティションを変更したことを正しくOSに認識してもらいます。
OSが認識してくれたらフォーマットしラベルをつけマウントします。今回は「tinycore」という名前でつけました。
$ sudo mkfs.ext3 /dev/sdb1
$ sudo e2label /dev/sdb1 tinycore
$ sudo mount /dev/sdb1 /mnt
必要なファイルのコピー
展開するための作業用ディレクトリを作成します。
$ mkdir -p tinycore/iso
$ cd tinycore
「Tiny Core Linuxのダウンロードページ」からCoreをダウンロードします。パスが分かっていればwget -N http://tinycorelinux.net/7.x/x86/release/Core-current.iso
のような感じでダウンロードすることもできます。
ダウンロードしたISOファイルをマウントし必要なファイルをコピーします。
$ sudo mount -o loop Core-current.iso iso
$ sudo mkdir /mnt/boot
$ sudo cp iso/boot/vmlinuz /mnt/boot
$ sudo cp iso/boot/core.gz /mnt/boot
$ sudo mkdir /mnt/tce
$ sudo touch /mnt/tce/mydata.tgz
$ sudo chmod -R 755 /mnt/tce
$ sudo chown -R 1001:50 /mnt/tce
GRUBの登録
Tiny Core Linuxのgrubのパッケージをダウンロードし解凍します。解凍したものから必要なファイルをコピーします。
$ wget -N http://tinycorelinux.net/7.x/x86/tcz/grub-0.97-splash.tcz
$ unsquashfs grub-0.97-splash.tcz
$ sudo mkdir /mnt/boot/grub
$ sudo cp squashfs-root/usr/lib/grub/i386-pc/* /mnt/boot/grub
grubのメニューを登録します。
$ sudo vi /mnt/boot/grub/menu.lst
default 0
timeout 3
title tinycore
kernel /boot/vmlinuz quiet waitusb=5 consoleblank=0 blacklist=pcspkr tz=JST-9 notuc
initrd /boot/core.gz
今回指定したカーネルパラメーターの意味は以下のような感じです。
- 「consoleblank=0」10分経っても画面がブラックアウトしないように
- 「blacklist=pcspkr」モジュールを無効にしてビープ音が鳴らないように
- 「tz=JST-9 notuc」タイムゾーンを日本に
grubを起動しroot と setup コマンドを使ってブートローダーを登録します。バッチモードで一気に実行してしまいます。
$ /bin/echo -e "root (hd1,0)\nsetup (hd1)" | sudo squashfs-root/usr/sbin/grub --batch
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub> root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 16 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
これで完了です。シャットダウン又はリブートしてUSBメモリからブートします。
アプリのインストール
インターネットが使えない環境やネットワークデバイスが認識されないPCもあるので、事前に必要なアプリをUbuntu上でダウンロード&インストールする方法です。
まずは簡単&適当なダウンローダーを作ります。
#!/bin/sh
tcz=$1
[ ! "$(echo $tcz|grep tcz)" ] && tcz=$1.tcz
[ -e tce/optional ] && mkdir -p tce/optional
[ -e tce/optional/$tcz ] && exit 0
wget -NP tce/optional http://tinycorelinux.net/7.x/x86/tcz/$tcz
wget -NP tce/optional http://tinycorelinux.net/7.x/x86/tcz/$tcz.dep
wget -NP tce/optional http://tinycorelinux.net/7.x/x86/tcz/$tcz.md5.txt
[ $# -eq 1 ] && echo $tcz >> tce/onboot.lst
[ ! -e tce/optional/$tcz.dep ] && exit 0
for f in $(cat tce/optional/$tcz.dep);do
$0 $f noonboot
done
先ほど作成したダウンローダーを使って欲しいアプリをダウンロードします。
$ ./tce-dl.sh coreutils #shredを使うため
$ ./tce-dl.sh smartmontools #smartctlを使うため
$ ./tce-dl.sh hdparm #Secure Eraseを使うため
$ ./tce-dl.sh e2fsprogs #badblocksを使うため
起動時に読み込まれるアプリの一覧が作成されたかを確認します。
$ cat tce/onboot.lst
coreutils.tcz
smartmontools.tcz
hdparm.tcz
e2fsprogs.tcz
USBメモリにコピーして完了です。
$ sudo mkdir /mnt/tce/optional
$ sudo cp tce/optional/* /mnt/tce/optional
$ sudo cp tce/onboot.lst* /mnt/tce
$ sudo chmod -R 755 /mnt/tce
$ sudo chown -R 1001:50 /mnt/tce
ホームディレクトリにファイルを設置
ホームディレクトリに自前で作成したスクリプトやファイルを設置する方法です。今回はサンプルとして以前作成した消去スクリプト(erase.sh)をホームディレクトリに設置してみます。
まずは作業用ディレクトリを作成します。
$ mkdir -p home/tc
作成した作業用ディレクトリに設置したいファイルを作成します。
$ vi home/tc/erase.sh
#!/bin/sh
sudo sh -c "echo mem > /sys/power/state"
sudo hdparm -I /dev/sda >> log.txt 2>&1
if [ "$(sudo hdparm -I /dev/sda | grep 'for ENHANCED')" ]; then
echo "Run Enhanced Erase" >> log.txt
sudo hdparm --security-set-pass pass /dev/sda
time sudo hdparm --security-erase-enhanced pass /dev/sda >> log.txt 2>&1
sudo hdparm --security-unlock pass /dev/sda
elif [ "$(sudo hdparm -I /dev/sda | grep 'for SECURITY')" ]; then
echo "Run Secure Erase" >> log.txt
sudo hdparm --security-set-pass pass /dev/sda
time sudo hdparm --security-erase pass /dev/sda >> log.txt 2>&1
sudo hdparm --security-unlock pass /dev/sda
else
echo "Run shred" >> log.txt
time shred -n 1 /dev/sda >> log.txt 2>&1
fi
dd if=/dev/sda bs=32 count=1 | hexdump -C >> log.txt
dd if=/dev/sda bs=128M count=1 | cmp /dev/zero >> log.txt 2>&1
badblocks -v /dev/sda 2>> log.txt
echo "ID# ATTRIBUTE_NAME VALUE WORST THRESH TYPE RAW_VALUE" >> log.txt
sudo smartctl -A /dev/sda |egrep "^( 1| 5|19[6-8])" |sed -r "s/(0x[0-9a-f]+|Always|Offline|\-) +//g" >> log.txt
date >> log.txt
if [ ! "$(cat .profile | grep log.txt)" ]; then
echo "cat log.txt" >> .profile
fi
filetool.sh -b
sudo reboot
作成したらパーミッションを設定して圧縮します。
$ chmod 755 home/tc/erase.sh
$ tar --owner=1001 --group=50 -czv home > tce/mydata.tgz
USBメモリーにコピーして完了です。
$ sudo cp tce/mydata.tgz /mnt/tce/
$ sudo chown 1001:50 /mnt/tce/mydata.tgz