前回からの続き
6.63. Stripping Again
デバッグ情報を削除してハードディスクを節約する。
chroot環境から抜けて再び入る。動いてるプログラムがないか確認するため
1 2 3 4 5 6 |
# logout # chroot /mnt/lfs /tools/bin/env -i \ > HOME=/root TERM=$TERM PS1='\u:\w\$ ' \ > PATH=/bin:/usr/bin:/sbin:/usr/sbin \ > /tools/bin/bash --login root:/# |
stripする。
再びchrootから抜けて入りなおす。こんどはtools/bin/bashではなく、/bin/bashで起動する。
この時点で/toolsが必要なくなったので削除してもいい。
1 2 |
# chroot /mnt/lfs /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login root:/# |
リブートしたりして、仮想カーネルファイルシステムがアンマウントされたらまた手動でマウントしないとならない。chrootを抜けただけなのは関係ないはず。
Chapter 7. Setting Up System Bootscripts
一般的な設定やブートスクリプトの設定。initスクリプトはSystemV系でつくる。
7.2. General Network Configuration
ネットワークの設定。NICが一枚しかない場合は設定しなくてもいいらしいが、設定しても問題ないらしい。
まず、udevが同じNICにおなじ名前を割り当てるように設定、
1 2 3 |
# for NIC in /sys/class/net/* ; do > INTERFACE=${NIC##*/} udevadm test --action=add $NIC > done |
/sysはホストのにマウントされていて、それに対して何かするらしい。
1 2 3 |
# cat /etc/udev/rules.d/70-persistent-net.rules cat: /etc/udev/rules.d/70-persistent-net.rules: No such file or directory # |
これはNICがひとつしかないからか?よくわからん。
7.2.2. Creating Network Interface Configuration Files
/etc/sysconfigの設定。自分の環境に合わせて書く。
1 2 3 4 5 6 7 8 9 10 11 |
# cd /etc/sysconfig/ root:/etc/sysconfig# cat > ifconfig.eth0 << "EOF" > ONBOOT=yes > IFACE=eth0 > SERVICE=ipv4-static > IP=192.168.0.5 > GATEWAY=192.168.0.1 > PREFIX=24 > BROADCAST=192.168.0.255 > EOF root:/etc/sysconfig# |
7.2.3. Creating the /etc/resolv.conf File
1 2 3 4 |
# cat > /etc/resolv.conf << "EOF" > nameserver 192.168.0.1 > EOF root:/etc/sysconfig# |
Googleは8.8.8.8でDNSを公開しているらしい。
/etc/hostsの作成。いくつかのプログラムが利用する。
1 2 3 4 5 |
# cat > /etc/hosts << "EOF" > 127.0.0.1 localhost > 192.168.0.5 lfs.example.org > EOF # |
udevの説明が長くて難しいのでスルー。
7.6. LFS-Bootscripts-20120229
LFSようのブートスクリプトいろいろ
1 2 3 4 |
# cd /sources/ # tar xfvj lfs-bootscripts-20120229.tar.bz2 # cd lfs-bootscripts-20120229 # make install |
/etc/rc.d/以下にいろいろ入れる
7.7.1. Configuring Sysvinit
/etc/inittabの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
cat > /etc/inittab << "EOF" # Begin /etc/inittab id:3:initdefault: si::sysinit:/etc/rc.d/init.d/rc S l0:0:wait:/etc/rc.d/init.d/rc 0 l1:S1:wait:/etc/rc.d/init.d/rc 1 l2:2:wait:/etc/rc.d/init.d/rc 2 l3:3:wait:/etc/rc.d/init.d/rc 3 l4:4:wait:/etc/rc.d/init.d/rc 4 l5:5:wait:/etc/rc.d/init.d/rc 5 l6:6:wait:/etc/rc.d/init.d/rc 6 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now su:S016:once:/sbin/sulogin 1:2345:respawn:/sbin/agetty --noclear tty1 9600 2:2345:respawn:/sbin/agetty tty2 9600 3:2345:respawn:/sbin/agetty tty3 9600 4:2345:respawn:/sbin/agetty tty4 9600 5:2345:respawn:/sbin/agetty tty5 9600 6:2345:respawn:/sbin/agetty tty6 9600 # End /etc/inittab EOF |
7.8. Configuring the system hostname
1 |
# echo "HOSTNAME=lfs" > /etc/sysconfig/network |
これが/etc/hostsに書かれる。
7.9. Configuring the setclock Script
ハードウェアクロックがUTCかどうか調べる
1 2 3 |
# hwclock --localtime --show Mon Apr 16 01:39:43 2012 -0.136518 seconds # |
これがハードウェアクロックの時刻。これに9時間を足して日本の時刻ならUTCになっている。
1 2 3 4 5 |
# cat > /etc/sysconfig/clock << "EOF" > UTC=1 > CLOCKPARAMS= > EOF # |
UTCだったのでUTC=1にする。時刻が合っていたら0にする。ただしこのlubuntuは英語でやってるのでそれによる影響もあるかもしれないがスルー。
7.10. Configuring the Linux Console
キーボードやフォントを設定、化けるといやなのでキーボード以外は英語でやる。UTF-8も今はスルー
というかviが使えるのでcatでやる必要なかった。
1 2 3 4 |
# vi /etc/sysconfig/console KEYMAP="jp106" FONT="lat1-16 -m 8859-1" # |
1 2 3 |
# vi /etc/profile export LANG=C # |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# vi /etc/inputrc # Begin /etc/inputrc # Modified by Chris Lynn <roryo@roryo.dynup.net> # Allow the command prompt to wrap to the next line set horizontal-scroll-mode Off # Enable 8bit input set meta-flag On set input-meta On # Turns off 8th bit stripping set convert-meta Off # Keep the 8th bit for display set output-meta On # none, visible or audible set bell-style none # All of the following map the escape sequence of the value # contained in the 1st argument to the readline specific functions "\eOd": backward-word "\eOc": forward-word # for linux console "\e[1~": beginning-of-line "\e[4~": end-of-line "\e[5~": beginning-of-history "\e[6~": end-of-history "\e[3~": delete-char "\e[2~": quoted-insert # for xterm "\eOH": beginning-of-line "\eOF": end-of-line # for Konsole "\e[H": beginning-of-line "\e[F": end-of-line # End /etc/inputrc # |
Chapter 8. Making the LFS System Bootable
fstabを作って、GRUBもインストールする。
スワップパーティションを作ってなかったので512Mのスワップファイルを作る。
1 2 3 4 5 6 |
root:~# mkdir /swap root:~# dd if=/dev/zero of=/swap/swap0 bs=1024K count=512 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 71.4059 s, 7.5 MB/s root:~# |
1 2 3 4 5 6 7 8 9 10 11 12 |
# vi /etc/fstab # Begin /etc/fstab # file system mount-point type options dump fsck # order /dev/sdb0 / ext3 defaults 1 1 /swap/swap0 swap swap defaults 0 0 proc /proc proc nosuid,noexec,nodev 0 0 sysfs /sys sysfs nosuid,noexec,nodev 0 0 devpts /dev/pts devpts gid=4,mode=620 0 0 tmpfs /run tmpfs defaults 0 0 devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 # End /etc/fstab |
8.3. Linux-3.2.6
1 2 3 4 5 |
# cd /sources/ # rm -rf linux-3.2.6 # tar xfvJ linux-3.2.6.tar.xz # cd linux-3.2.6 # make mrproper |
1 |
# make LANG=en_US.UTF-8 LC_ALL= menuconfig |
以下を選択
Device Drivers —>
Generic Driver Options —>
Maintain a devtmpfs filesystem to mount at /dev
メイクする。
1 |
# make |
1 2 3 4 5 6 7 |
# make modules_install # cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.2.6-lfs-7.1 # cp -v System.map /boot/System.map-3.2.6 # cp -v .config /boot/config-3.2.6 # install -d /usr/share/doc/linux-3.2.6 # cp -r Documentation/* /usr/share/doc/linux-3.2.6 # install -v -m755 -d /etc/modprobe.d |
1 2 3 4 5 6 |
# vi /etc/modprobe.d/usb.conf # Begin /etc/modprobe.d/usb.conf install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true # End /etc/modprobe.d/usb.conf |
レスキューisoを作るため、xorrisoをインストールする。wgetするのでchroot外の別の端末でやる。
1 2 |
$ wget http://scdbackup.sourceforge.net/xorriso-1.1.0.pl01.tar.gz $ sudo cp xorriso-1.1.0.pl01.tar.gz /mnt/lfs/sources/ |
またchroot側へ戻る。
1 2 3 4 5 6 |
598 cd /sources/ 600 tar xfvz xorriso-1.1.0.pl01.tar.gz 601 cd xorriso-1.1.0 602 ./configure --prefix=/usr 603 make 604 make install |
isoを作る。
1 2 |
606 cd / 607 grub-mkrescue --output=grub-img.iso |
このファイルをchrootじゃない端末からとって、VMwareの外のホストに移しておく。
grubのデバイスマップを確認
1 2 3 4 5 |
# grub-mkdevicemap --device-map=device.map # cat device.map (fd0) /dev/fd0 (hd0) /dev/sda (hd1) /dev/sdb |
しかしsdbはホストから分離してそれ自体で起動する予定なので、これは意味がないと思われる。いまはsdbだが完成形ではsdaになるだろう。
grubをインストール
1 2 3 4 5 |
root:~# grub-install /dev/sdb /usr/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.. /usr/sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. /usr/sbin/grub-setup: error: will not proceed with blocklists. root:~# |
なんでパーティションがないんだろう。
mke2fsするときにsdb0と書かずにsdbと書いてしまったからか。どうしよう。今からできるのだろうか。
ここからLFSとは関係ない個人的な復旧作業
VMWareに新たに10Gのハードディスクを追加する。これは/dev/sdcとして見えるはず。
これにパーティションテーブルを作成しプライマリパーティションの1をディスク全体に作る。これはfdiskで行った。
次に/dev/sdbの全内容を/dev/sdc1にコピーする。/dev/sdb自体がパーティションなのでこれでうまくいくかも。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo dd if=/dev/sdb of=/dev/sdc1 16777216+0 records in 16777216+0 records out 8589934592 bytes (8.6 GB) copied, 1155.16 s, 7.4 MB/s $ $ sudo su - fsckしたほうがいい。 # mount -v -t ext3 /dev/sdc1 /mnt/lfs /dev/sdc1 on /mnt/lfs type ext3 (rw) # # ls /mnt/lfs/ bin dev home lost+found mnt proc run sources swap tmp usr boot etc lib media opt root sbin srv sys tools var # |
見えたのでホストをシャットダウンして、8Gの/dev/sdbはVMwareから切り離て再起動する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ sudo fdisk -l [sudo] password for ebisu: Disk /dev/sda: 12.9 GB, 12884901888 bytes 255 heads, 63 sectors/track, 1566 cylinders, total 25165824 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0003c197 Device Boot Start End Blocks Id System /dev/sda1 * 2048 23855103 11926528 83 Linux /dev/sda2 23857150 25163775 653313 5 Extended /dev/sda5 23857152 25163775 653312 82 Linux swap / Solaris Disk /dev/sdb: 10.7 GB, 10737418240 bytes 107 heads, 17 sectors/track, 11529 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xdc5c9cc7 Device Boot Start End Blocks Id System /dev/sdb1 2048 20971519 10484736 83 Linux $ |
/dev/sdcが今度は/dev/sdbとして見えるようになった。これで復旧できたはず。
マウントしなおして、chrootしなおす。
1 2 3 4 5 6 7 8 |
# mount -v -t ext3 /dev/sdb1 /mnt/lfs # export LFS=/mnt/lfs # mount -v --bind /dev $LFS/dev # mount -vt devpts devpts $LFS/dev/pts # mount -vt tmpfs shm $LFS/dev/shm # mount -vt proc proc $LFS/proc # mount -vt sysfs sysfs $LFS/sys # chroot /mnt/lfs /tools/bin/env -i HOME=/root TERM=$TERM PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login |
ここまでLFSと関係のない話
ここから本番の続き
grubのインストールをする。
# grub-install /dev/sdb
Installation finished. No error reported.
#
これは単独で起動させる予定なのでsdaになるはず
1 2 3 4 5 6 7 8 9 10 11 |
# vi /boot/grub/grub.cfg # Begin /boot/grub/grub.cfg set default=0 set timeout=5 insmod ext2 set root=(hd0,1) menuentry "GNU/Linux, Linux 3.2.6-lfs-7.1" { linux /boot/vmlinuz-3.2.6-lfs-7.1 root=/dev/sda1 ro } |
Chapter 9. The End
1 |
# echo 7.1 > /etc/lfs-release |
9.3. Rebooting the System
ついにリブートだか、ここではシャットダウンしてから、あたらしいVMwareゲストをつくり、このゲストは今の/dev/sdbだけをハードディスクに持つようにして起動する。
起動しませんなぁ
いろいろ調べた結果、まずSCSIディスクを使ったのが失敗だった。
SCSIからの起動はinitrdなどのラムディスクが必要でLFSでは取り扱っていなかった。
SCSIからIDEにddしたけどエラーがでたので今回はあきらめてはじめからやることにした。
最後につづく