LFSスクリプトを使ってLinuxを構築する
LFS(Linux Rrom Scratch)スクリプトを使ってLinuxを構築します。インストール用スクリプトとパッケージファイルとして、『自分で作るLinux OS 2006版』の付録を使用します。
Fedora Core 2のインストール
VMware Workstation 6.5で仮想マシンを作成し、Fedora Core 2をインストールします。
▼仮想マシンの作成と.vmxファイルの変更
・仮想マシンを作成
- 40GBのディスク領域設定
- メモリ 512MB
- ゲストOS バージョン Red Hat Enterprise Linux 4
・.vmxファイルの変更
ethernet0.virtualDev = "e1000" の1行を追加し、NICをIntel EtherExpress1000とします。
(LFSのドライバにVMware標準NIC PCnet32が見つかりませんでした。)
▼ダウンロードサイト
Fedora Core 2はこちらからダウンロードできます。
Index of /Linux/fedora/core/2/i386/iso
http://ftp.riken.go.jp/Linux/fedora/core/2/i386/iso/FC2-i386-DVD.iso
▼ディスクパーティションの設定
40GBのディスク領域を使用します。
/dev/hda1 /boot 128MB
/dev/hda2 / 20GB
/dev/hda3 Swap 1024MB
残りを空き領域としておきます。
▼インストールパッケージ
ベースシステムの他、追加パッケージとして開発ツールのみをインストールします。
Fedora Core 2の初期設定
▼ユーザアカウントの設定
ユーザアカウントを追加し、パスワードを設定します。
# adduser ono
# passwd ono
▼yum.confの設定
/etc/yum.confの[base] [updates-released]を変更し、yumが使えるようにします。
# nano /etc/yum.conf
[base] [updates-released] を以下のように変更します。
[base]
name=Fedora Core $releasever - $basearch - Base
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/
baseurl=ftp://ftp.riken.go.jp/pub/Linux/fedora/core/$releasever/$basearch/os
[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch/
baseurl=ftp://ftp.riken.go.jp/pub/Linux/fedora/core/updates/$releasever/$basearch
設定変更後、インストール済みとリポジトリに存在するパッケージ一覧を表示してみます。
# yum list
▼openssh-serverのインストール
SSH経由でログインできるように openssh-server をインストールします。
# yum -y install openssh-server
/etc/modprobe.confファイルの調査
/etc/modprobe.confファイルの内容を表示し、使用しているネットワークカードを調べます。
# cat /etc/modprobe.conf
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptscsih
alias snd-card-0 snd-ens1371
install snd-ens1371 /sbin/modprobe --ignore-install snd-ens1371
&& /usr/sbin/alsactl restore >/dev/null 2>&1 || :
remove snd-ens1371 { /usr/sbin/alsactl store >/dev/null 2>&1 || : ; };
/sbin/modprobe -r --ignore-remove snd-ens1371
alias usb-controller ehci-hcd
alias usb-controller1 uhci-hcd
alias eth0 e1000
#
alias eth0 e1000 から ネットワークカードとして e1000 が使用されていることがわかります。
ディスクパーティションの追加
使用していない領域に、LFS用のパーティションを追加します。
▼LFS用のパーティションの追加
# fdisk /dev/hda
このディスクのシリンダ数は 88768 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
コマンド (m でヘルプ): p
Disk /dev/hda: 42.9 GB, 42949672960 bytes
15 heads, 63 sectors/track, 88768 cylinders
Units = シリンダ数 of 945 * 512 = 483840 bytes
デバイス Boot Start End Blocks Id System
/dev/hda1 * 1 277 130851 83 Linux
/dev/hda2 278 43621 20480040 83 Linux
/dev/hda3 43622 45840 1048477+ 82 Linux スワップ
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
Selected partition 4
最初 シリンダ (45841-88768, default 45841):
Using default value 45841
終点 シリンダ または +サイズ または +サイズM または +サイズK (45841-88768, default 88768):
Using default value 88768
コマンド (m でヘルプ): p
Disk /dev/hda: 42.9 GB, 42949672960 bytes
15 heads, 63 sectors/track, 88768 cylinders
Units = シリンダ数 of 945 * 512 = 483840 bytes
デバイス Boot Start End Blocks Id System
/dev/hda1 * 1 277 130851 83 Linux
/dev/hda2 278 43621 20480040 83 Linux
/dev/hda3 43622 45840 1048477+ 82 Linux スワップ
/dev/hda4 45841 88768 20283480 83 Linux
コマンド (m でヘルプ): w
領域テーブルは交換されました!
ioctl() を呼び出して領域テーブルを再読込みします。
警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。
ディスクを同期させます。
#
▼システムの再起動
fdiskのwコマンドで警告がだされましたので、システムのリブートを行います。
# reboot
▼ext3タイプファイルシステムの作成
追加した /dev/hda4 にext3タイプのファイルシステムを作成します。
# mkfs -t ext3 /dev/hda4
# mkfs -t ext3 /dev/hda4
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2539520 inodes, 5070870 blocks
253543 blocks (5.00%) reserved for the super user
First data block=0
155 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
#
LFS関連ファイルの展開
LFS関連ファイル格納用ディレクトリを作成します。
# mkdir /SOFT
LFS関連ファイルが入ったCDをマウントします。
# mount /dev/cdrom /mnt/cdrom
LFS関連ファイルをコピーします。
# cd /mnt/cdrom/dai2bu/4syou/part1
# ls -l
合計 136304
-r--r--r-- 1 root root 23913 7月 4 2006 lfs-install-6.0-20050102.tar.bz2
-r--r--r-- 1 root root 30990 7月 4 2006 lfs-install-6.0-akamatsu.tar.gz
-r--r--r-- 1 root root 139520000 7月 4 2006 lfs-packages-6.0.tar
インストールスクリプトをコピーします。
# cp lfs-install-6.0-akamatsu.tar.gz /SOFT/
パッケージファイルをコピーします。
# cp lfs-packages-6.0.tar /SOFT/
インストールスクリプトを展開します。
# cd /SOFT
# tar zxvf lfs-install-6.0-akamatsu.tar.gz
パッケージを保存するディレクトリ /mnt/lfs を作成し、 /dev/hda4 をマウントします。
# mkdir /mnt/lfs
# mount /dev/hda4 /mnt/lfs
/mnt/lfs を LFS で参照できるようにします。
# export LFS=/mnt/lfs
/mnt/lfs ディレクトリに tools と sources というディレクトリを作成します。
(これらのディレクトリはスクリプト実行時に利用し、実行後に削除されます。)
# mkdir /mnt/lfs/tools
# mkdir /mnt/lfs/sources
/mnt/lfs/tools を /tools の名前でリンクを張ります。
# ln -s /mnt/lfs/tools /tools
/mnt/lfs/sources ディレクトリにパッケージファイル lfs-packages-6.0.tar を展開します。
# cd /mnt/lfs/sources
# tar xvf /SOFT/lfs-packages-6.0.tar
<lfs-packages-6.0の内容>
# ls /mnt/lfs/sources/
MD5SUMS lfs-bootscripts-2.2.2.tar.bz2
autoconf-2.59.tar.bz2 libtool-1.5.8.tar.bz2
automake-1.9.1.tar.bz2 linux-2.6.8.1.tar.bz2
bash-3.0-display_wrap-1.patch linux-libc-headers-2.6.8.1.tar.bz2
bash-3.0.tar.bz2 m4-1.4.2.tar.bz2
binutils-2.15.91.0.2.tar.bz2 make-3.80.tar.bz2
bison-1.875a.tar.bz2 man-1.5o-80cols-1.patch
bzip2-1.0.2.tar.bz2 man-1.5o.tar.bz2
coreutils-5.2.1-suppress_uptime_kill_su-1.patch man-pages-1.67.tar.bz2
coreutils-5.2.1-uname-2.patch mktemp-1.5-add_tempfile-1.patch
coreutils-5.2.1.tar.bz2 mktemp-1.5.tar.bz2
dejagnu-1.4.4.tar.bz2 module-init-tools-3.0.tar.bz2
diffutils-2.8.1.tar.bz2 ncurses-5.4.tar.bz2
e2fsprogs-1.35.tar.bz2 patch-2.5.4.tar.bz2
expect-5.42.1-spawn-1.patch perl-5.8.5-libc-1.patch
expect-5.42.1.tar.bz2 perl-5.8.5.tar.bz2
file-4.10.tar.bz2 procps-3.2.3.tar.bz2
findutils-4.1.20.tar.bz2 psmisc-21.5.tar.bz2
flex-2.5.31-debian_fixes-2.patch readline-5.0-display_wrap-1.patch
flex-2.5.31.tar.bz2 readline-5.0.tar.bz2
gawk-3.1.4.tar.bz2 sed-4.1.2.tar.bz2
gcc-3.4.1-linkonce-1.patch shadow-4.0.4.1.tar.bz2
gcc-3.4.1-no_fixincludes-1.patch sysklogd-1.4.1-kernel_headers-1.patch
gcc-3.4.1-specs-1.patch sysklogd-1.4.1-signal-1.patch
gcc-core-3.4.1.tar.bz2 sysklogd-1.4.1.tar.bz2
gcc-g++-3.4.1.tar.bz2 sysvinit-2.85-proclen-1.patch
gcc-testsuite-3.4.1.tar.bz2 sysvinit-2.85.tar.bz2
gettext-0.14.1.tar.bz2 tar-1.14.tar.bz2
glibc-2.3.4-20040701.tar.bz2 tcl8.4.7-src.tar.bz2
grep-2.5.1.tar.bz2 texinfo-4.7-segfault-1.patch
groff-1.19.1.tar.bz2 texinfo-4.7.tar.bz2
grub-0.95.tar.bz2 udev-030.tar.bz2
gzip-1.3.5.tar.bz2 udev-config-1.rules
iana-etc-1.01.tar.bz2 udev-config-2.permissions
inetutils-1.4.2-kernel_headers-1.patch util-linux-2.12b-sfdisk-2.patch
inetutils-1.4.2-no_server_man_pages-1.patch util-linux-2.12b.tar.bz2
inetutils-1.4.2.tar.bz2 vim-6.3-lang.tar.bz2
iproute2-2.6.8-040823.tar.bz2 vim-6.3.tar.bz2
iproute2-2.6.8_040823-remove_db-1.patch zlib-1.2.1-security-1.patch
kbd-1.12.tar.bz2 zlib-1.2.1.tar.bz2
less-382.tar.bz2
インストールスクリプトの起動
インストールスクリプトを起動し、コンパイルを実行します。
# cd /SOFT/lfs-install-6.0-akamatsu
# ./lfs-install.sh
# ./lfs-install.sh
EEXISTING: '/mnt/lfs' is already existing.
Hint: use 'scripts/reset.sh' to remove an (unfinished) installation
LFS-Install - An Automated Linux From Scratch-Installer
Copyright (C) 2002-2005 Daniel Baumann
カーネルコンパイルの設定
カーネルコンパイルの設定画面 Linux Kernel Configuration が表示されたら、カーネルコンパイルの設定を行います。
▼使用CPUの指定
使用CPUを 386 にします。
Processor type and features --->
Subarchitecture Type (PC-compatible) --->
(X) PC-compatible
Processor family (586/K5/5x86/6x86/6x86MX) --->
(X) 586/K5/5x86/6x86/6x86MX
▼マルチプロセッサ指定の確認
マルチプロセッサの指定箇所を[空欄]にします。
Processor type and features --->
[ ] Symmetric multi-processing support
▼ネットワークカードの指定
ネットワークカードとして、Intel PRO/1000 を指定します。
Device Drivers --->
Networking support --->
Ethernet (1000 Mbit) --->
<M> Intel(R) PRO/1000 Gigabit Ethernet support
▼カーネルコンパイル設定の保存とコンパイル開始
カーネルコンパイルの設定が終了したら、保存して終了します。
Do you wish to save your new kernel configuration?
< Yes > < No >
<Yes> を選択して Enterキーを押します。
カーネルのコンパイルが開始します。
(省略)
CC lib/libcrc32c.mod.o
LD [M] lib/libcrc32c.ko
CC net/ipv4/netfilter/ipt_NOTRACK.mod.o
LD [M] net/ipv4/netfilter/ipt_NOTRACK.ko
CC net/ipv4/netfilter/iptable_raw.mod.o
LD [M] net/ipv4/netfilter/iptable_raw.ko
INSTALL drivers/base/firmware_class.ko
INSTALL drivers/char/agp/intel-mch-agp.ko
INSTALL drivers/net/dummy.ko
INSTALL drivers/net/e1000/e1000.ko
INSTALL drivers/net/s2io.ko
INSTALL drivers/scsi/dpt_i2o.ko
INSTALL drivers/scsi/ipr.ko
INSTALL drivers/scsi/sata_sis.ko
INSTALL drivers/scsi/sata_sx4.ko
INSTALL drivers/usb/input/touchkitusb.ko
INSTALL drivers/usb/misc/cytherm.ko
INSTALL drivers/usb/misc/phidgetservo.ko
INSTALL lib/libcrc32c.ko
INSTALL net/ipv4/netfilter/ipt_NOTRACK.ko
INSTALL net/ipv4/netfilter/iptable_raw.ko
if [ -r System.map ]; then /sbin/depmod -ae -F System.map 2.6.8.1; fi
You have new mail in /var/spool/mail/root
#
デュアルブートの設定
Fedora Core 2 と新たに構築されたLinux(LFS Linux)のデュアルブートができるように設定を行います。
Fedora Core 2の/boot/grub/grub.confに下記の内容を追加します。
<Fedora Core 2の/boot/grub/grub.conf>
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Fedora Core (2.6.5-1.358)
root (hd0,0)
kernel /vmlinuz-2.6.5-1.358 ro root=LABEL=/
initrd /initrd-2.6.5-1.358.img
# nano /boot/grub/grub.conf
<追加内容>
title LFS
root (hd0,3)
kernel /boot/lfskernel-2.6.8.1 ro root=/dev/hda4
LFS Linuxの実行
システムを再起動します。
GRUBの画面でLFSを選択してEnterキーを押します。
▼ログイン
root でログインします。パスワードは無しです。
▼パスワードの設定
rootのパスワードを設定します。
# passwd
▼シャットダウン
シャットダウンします。
# shutdown -h now
LFS Linuxの基本設定
▼キーボード設定
USキーボードになっているのを日本語キーボードに変更します。
# vi /etc/sysconfig/console
KEYMAP="jp106" の1行を追加します。
<USキーボードと日本語キーボードの対応関係>
= ^
" *
: +
再起動して設定を反映させます。
# reboot
▼コマンドへのalias設定
コマンドへのalias設定をします。
#vi /etc/profile
alias ll='ls -al'
▼ヒストリ機能の設定
ヒストリ機能が使えるようにします。
# touch /root/.bash_history
ネットワーク設定
▼LFS Linux用パーティションのマウント
Fedora Core 2にLFS Linux用パーティションをマウントし、Fedora Core 2からLFS linuxの設定ファイルを操作するようにします。
Fedora Core 2を起動します。
LFS Linux用パーティション /dev/hda4 を /mnt/lfs ディレクトリにマウントします。
# mount /dev/hda4 /mnt/lfs
▼ネットワークカードの設定
ネットワークカードのドライバを調べます。
# ls -l /mnt/lfs/lib/modules/2.6.8.1/kernel/drivers/net/
合計 52
-rw-r--r-- 1 root root 3696 1月 27 09:40 dummy.ko
drwxr-xr-x 2 root root 4096 1月 27 09:40 e1000
-rw-r--r-- 1 root root 42623 1月 27 09:40 s2io.ko
#
/mnt/lfs/etc/sysconfig/modules ファイルにネットワークカード e1000 を設定します。
# nano /mnt/lfs/etc/sysconfig/modules
e1000 を追加します。
▼ネットワーク情報の設定
ネットワーク情報を設定します。
<設定前/mnt/lfs/etc/sysconfig/network-devices/ifconfig.eth0/ipv4ファイル>
# cat /mnt/lfs/etc/sysconfig/network-devices/ifconfig.eth0/ipv4
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.1
GATEWAY=192.168.1.2
PREFIX=24
BROADCAST=192.168.1.255
[root@localhost root]#
/mnt/lfs/etc/sysconfig/network-devices/ifconfig.eth0/ipv4ファイルを下記のように設定します。
# nano /mnt/lfs/etc/sysconfig/network-devices/ifconfig.eth0/ipv4
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.110
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.255
▼リゾルバの設定
名前解決用のリゾルバを設定します。
# nano /mnt/lfs/etc/resolv.conf
nameserver 192.168.1.1
▼システムの再起動
システムを再起動します。
# reboot
▼ネットワーク動作確認
ネットワークの動作確認を行います。
IPアドレスを表示します。
# ip address show
pingテストを行います。
# ping 192.168.1.1
# ping google.com
ファイルシステム
ファイルシステムの設定をします。
▼LFS Linux用パーティションのマウント
Fedora Core 2にLFS Linux用パーティションをマウントし、Fedora Core 2からLFS linuxの設定ファイルを操作するようにします。
Fedora Core 2を起動します。
LFS Linux用パーティション /dev/hda4 を /mnt/lfs ディレクトリにマウントします。
# mount /dev/hda4 /mnt/lfs
▼/etc/fstab の設定
/etc/fstabを編集します。
編集前の/etc/fstabの内容です。
# cat /mnt/lfs/etc/fstab
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
/dev/PARTITION / [fff] defaults 1 1
#/dev/ swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
#usbfs /proc/bus/usb usbfs devgid=14,devmode=0660 0 0
# End /etc/fstab
#
/etc/fstab に、
/dev/hda4 ルートファイルシステム(/)
/dev/hda3 スワップ(swap)
を設定します。
# nano /mnt/lfs/etc/fstab
編集後の/etc/fstabです。
# cat /mnt/lfs/etc/fstab
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
/dev/hda4 / ext3 defaults 1 1
/dev/hda3 swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
#usbfs /proc/bus/usb usbfs devgid=14,devmode=0660 0 0
# End /etc/fstab
#
▼動作確認
LFS Linuxを起動し、topコマンドを実行してswapにメモリが割り付けられていることを確認します。
# top
CD-ROMとFedora Coreデスクのマウント
CD-ROMとFedora Core 2のファイルが見えるようにします。
/mnt/cdrom と /mnt/Fedora のディレクトリを作成します。
# mkdir /mnt/cdrom
# mkdir /mnt/Fedora
Fedora Core 2 のルートファイルシステム /dev/hda2 をマウントします。
# mount /dev/hda2 /mnt/Fedora
Cd-ROM をマウントします。
# mount /dev/cdrom /mnt/cdrom
2011.02.01