前回紹介したように、
インストール作業が不要なLiveDVDは便利なツールですが、
もちろん、
そこで既存の環境を流用しながら、
幸い、
P-Plamo DVDの中身
通常、
DVDをマウントして中身を見てみると、
% ls -lRh /cdrom /cdrom: 合計 6.1M -r--r--r-- 1 root root 5.3K 3月 29日 15:19 ChangeLog -r--r--r-- 1 root root 6.0M 3月 28日 01:47 initrd dr-xr-xr-x 2 root root 2.0K 3月 29日 10:19 isolinux/ /cdrom/isolinux: 合計 1.6G -r--r--r-- 1 root root 2.0K 3月 29日 15:21 boot.cat -r--r--r-- 1 root root 2.3M 3月 29日 15:21 initrd.gz -r--r--r-- 1 root root 14K 3月 29日 10:57 isolinux.bin -r--r--r-- 1 root root 658 3月 29日 15:20 isolinux.cfg -r--r--r-- 1 root root 120K 2月 6日 21:00 plamo41.lss -r--r--r-- 1 root root 4.1K 2月 14日 14:28 pplamo.lss -r-xr-xr-x 1 root root 1.6G 3月 28日 02:46 rootimg.squash* -r--r--r-- 1 root root 464 3月 28日 11:16 sample.msg -r--r--r-- 1 root root 738 3月 29日 15:20 syslinux.cfg -r--r--r-- 2 root root 2.2M 3月 29日 10:19 vmlinuz -r--r--r-- 2 root root 2.2M 3月 29日 10:19 vmlinuz-2.6.32.10-plamoSMP
これらのファイルのうち、
また、
- boot.
cat - CD/
DVDからPCを起動するために提案されたEl Torito規格が使う起動イメージのカタログファイルです。El Torito規格では、 1枚のCD/ DVDから複数のOSを起動することが想定されており、 それぞれのOSのブート用の領域がどこにあたるかを記録するためにこのファイルが利用されます。 - initrd.
gz - 圧縮した起動用ramdiskファイル。カーネルとともにメモリ上に読み込まれ、
起動用のルートファイルシステムとして利用されます (詳細は後述)。 - isolinux.
bin - isolinuxと呼ばれるCD/
DVD起動用のブートローダです。次のisolinux. cfgの設定に従って、 カーネルや起動用ramdiskをメモリに読み込みます。 - isolinux.
cfg - isolinux.
binが参照する設定ファイルで、 読み込むべきカーネルや起動用ramdisk、 カーネルに与えるオプションパラメータ等を設定します。 - plamo41.
lss - DVD起動時の背景に表示される画像データファイルです。syslinux/
isolinux専用の、 lssと呼ばれるシンプルだけどやや特殊な画像形式になっています。 - rootimg.
squash - squashfs化したPlamo-4.
72のファイルシステムをLZMA形式で圧縮したファイルです。このファイルがP-Plamoのルートファイルシステムになります。 - sample.
msg - 起動時に表示されるメッセージを記述したファイルで、
指定可能なラベルやログイン用の情報などを記しています。 - vmlinuz、
vmlinuz-2. 6.32. 10-plamoSMP - linuxカーネル。vmlinuz-2.
6.32. が本来の名称ですが、10-plamoSMP El Torito規格を用いてCD/ DVDから起動する際には、 長いファイル名を格納するロックリッジ拡張機能が利用できないため、 vmlinuz-2. 6.32. 10-plamoSMPからvmlinuzという名前にリンク (ハードリンク) を張って、 短いファイル名で参照できるようにしています。
これらのファイルのうち、
P-Plamo用initrd
initrdは起動用ramdisk(INITial RamDisk)の謂で、
initrdはカーネルのモジュール化が始まったlinux-2.
Plamo Linuxでは、
先ほどは
また、
P-Plamoで使っているinitrdは、
# mount -o loop /cdrom/initrd /loop # ls -l /loop 合計 32,768 drwxr-xr-x 2 root root 1,024 3月 29日 00:07 bin/ drwxr-xr-x 2 root root 1,024 2月 3日 2009年 cdrom/ drwxr-xr-x 6 root root 3,072 2月 21日 21:58 dev/ drwxr-xr-x 2 root root 1,024 3月 29日 13:40 etc/ -rwxr-xr-x 1 root root 5,380 3月 29日 15:15 init* drwxr-xr-x 4 root root 1,024 3月 5日 23:48 lib/ drwxr-xr-x 2 root root 1,024 2月 3日 2009年 loop/ drwx------ 2 root root 12,288 2月 3日 2009年 lost+found/ drwxr-xr-x 2 root root 1,024 2月 4日 2009年 new_root/ drwxr-xr-x 2 root root 1,024 2月 3日 2009年 proc/ drwxr-xr-x 2 root root 1,024 2月 3日 2009年 put_old/ drwxr-xr-x 2 root root 1,024 3月 6日 2009年 sbin/ -rwxr-xr-x 1 root root 620 3月 5日 23:40 shutdown* drwxr-xr-x 2 root root 1,024 2月 27日 2009年 sys/
P-Plamoのinitrdではbusyboxを使ってモジュールの組み込みやスクリプト処理を行っています。busyboxは組み込み環境向けに開発されている
% /loop/bin/busybox BusyBox v1.13.2 (2009-02-03 20:32:13 JST) multi-call binary Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko and others. Licensed under GPLv2. See source distribution for full notice. Usage: busybox [function] [arguments]... or: function [arguments]... BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as! Currently defined functions: [, [[, addgroup, adduser, adjtimex, ar, ash, awk, basename, blkid, bunzip2, bzcat, bzip2, cal, cat, catv, chattr, chgrp, chmod, chown, chpasswd, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, cryptpw, cut, date, dd, deallocvt, delgroup, deluser, devmem, df, diff, dirname, dmesg, dos2unix, du, dumpkmap, echo, ed, egrep, eject, env, expand, expr, false, fbset, fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs, fold, free, freeramdisk, fsck, fsck.minix, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, hwclock, id, ifconfig, init, insmod, install, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, ls, lsattr, lsmod, lzmacat, makedevs, md5sum, mdev, mesg, mkdir, mkfifo, mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount, mountpoint, mv, netstat, nice, nohup, nslookup, od, openvt, passwd, patch, pidof, ping, pipe_progress, pivot_root, pkill, poweroff, printenv, printf, ps, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot, reset, resize, rm, rmdir, rmmod, route, rtcwake, run-parts, runlevel, script, sed, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setsid, sh, sha1sum, showkey, sleep, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, swapoff, swapon, switch_root, sync, syslogd, tac, tail, tar, tee, telnet, test, time, top, touch, tr, true, tty, ttysize, udhcpc, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma, unzip, uptime, usleep, uudecode, uuencode, vi, vlock, wc, wget, which, who, whoami, xargs, yes, zcat
この例に見られるように、
% ls -lh /loop/bin 合計 1.2M -rwxr-xr-x 2 root root 1.2M 2月 4日 2009年 busybox* lrwxrwxrwx 1 root root 7 3月 28日 01:49 cat -> busybox* lrwxrwxrwx 1 root root 7 3月 29日 00:07 chmod -> busybox* lrwxrwxrwx 1 root root 7 3月 28日 01:49 chroot -> busybox* lrwxrwxrwx 1 root root 7 3月 28日 01:49 cp -> busybox* lrwxrwxrwx 1 root root 7 3月 28日 01:49 cpio -> busybox* ...
このシンボリックリンクの設定により、
busyboxはこのように便利なツールではありますが、
Plamo Linux標準のcatコマンドは、
% /bin/cat --help 使用法: /bin/cat [オプション]... [ファイル]... Concatenate FILE(s), or standard input, to standard output. -A, --show-all equivalent to -vET -b, --number-nonblank number nonempty output lines -e equivalent to -vE -E, --show-ends display $ at end of each line -n, --number number all output lines ..
一方、 busyboxのストイックな設計は、 P-Plamoのinitrdは、 initrdは、 上述のように/initコマンドはsh互換のシェルスクリプトになっていますので、 まずPATHをbusyboxを収めている/binに設定し、 これらはカーネルに各種モジュールドライバを組み込む作業です。P-PlamoではPlamo-4. これらのモジュールはinitrd上の/lib/ 最近のP-PlamoはUSBメモリからブートしても使えるようにしており、 USBメモリはSCSIデバイスとして認識されるので、 マウントしたUSBメモリ上にisolinux/ USBメモリ上にisolinux/ 最近のPlamo Linuxでは、 53行目にあるように、 USBメモリやDVD上にisolinux/ 実のところ、 この後、% /loop/
initrdの初期化処理
1 #!/bin/sh
2 export PATH=/bin:.
3
4 mount -t proc proc /proc
5 mount -t sysfs sys /sys
6
7 for i in exportfs.ko aufs.ko squashfs.ko ; do
8 insmod /lib/modules/$i
9 done
10
11 # nls_euc-jp.ko needs vfat.ko
12 for i in isofs.ko nls_iso8859-1.ko nls_ascii.ko nls_cp932.ko cdrom.ko loop.ko sr_mod.ko sg.ko fat.ko vfat.ko nls_euc-jp.ko ; do
13 insmod /lib/modules/$i
14 done
15
16 # for keyboard operation
17 for i in libps2.ko atkbd.ko hid.ko usbhid.ko ; do
18 insmod /lib/modules/$i
19 done
20
21 mount_ok=0
22
23 # check USB device first
24 if [ $mount_ok -eq 0 ]; then
25 sleep 5
26 echo -n "trying USB device:"
27 for i in sda sdb sdc sdd sde sdf sdg sdh ; do
28 if [ -d /sys/block/$i ]; then
29 removable=`cat /sys/block/$i/removable`
30 if [ $removable -eq 1 ]; then
31 echo -n "$i "
32 partition="$i"1
33 mount /dev/$partition /cdrom 2> /dev/null
34 if [ $? = "0" ]; then
35 if [ -f /cdrom/isolinux/rootimg.squash ]; then
36 echo "found P-Plamo image on /dev/$partition"
37 CD_DEV="/dev/$partition"
38 mount_ok=1
39 break
40 else
41 umount /cdrom
42 fi
43 fi
44 fi
45 fi
46 done
47 fi
48
49 # check CD device
50 if [ $mount_ok -eq 0 ]; then
51 sleep 10
52 echo -n "trying CD device:"
53 for i in sr0 sr1 sr2 ; do
54 if [ -d /sys/block/$i ]; then
55 echo -n "$i "
56 mount -t iso9660 /dev/$i /cdrom -o ro 2> /dev/null
57 sleep 3
58 if [ $? = "0" ]; then
59 if [ -f /cdrom/isolinux/rootimg.squash ]; then
60 echo "found P-Plamo image on /dev/$i"
61 CD_DEV="/dev/$i"
62 mount_ok=1
63 break
64 else
65 umount /cdrom
66 fi
67 fi
68 fi
69 done
70 fi
71
72 # cannot find any CD device
73 if [ $mount_ok -eq 0 ]; then
74 echo "cannot find partition include squashfs. cannot continue booting. exit"
75 exec /bin/sh
76 fi