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 

LFS-Install comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
This is free software, and you are welcome to redistribute it
under certain conditions; see COPYING for details.


Enter disk [/dev/hda]: /dev/hda

Enter partition [/dev/hda3]: /dev/hda4
mke2fs 1.35 (28-Feb-2004)
/dev/hda4 is mounted; will not make a filesystem here!

Enable test suites [y/n/D]: creating cache ./config.cache
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking build system type... i686-pc-linux-gnu
checking for a BSD compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for gcc... gcc
checking whether the C compiler (gcc  ) works... yes
checking whether the C compiler (gcc  ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for gnatbind... gnatbind
checking whether compiler driver understands Ada... yes
checking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2
checking for correct version of gmp.h... yes
checking for mpf_init in -lgmp... yes
checking for bison... bison
checking for bison... bison -y
checking for gm4... no
checking for gnum4... no
checking for m4... m4
checking for flex... flex
checking for flex... flex
checking for makeinfo... makeinfo
checking for i686-pc-linux-gnu-ar... no
checking for ar... ar
checking for i686-pc-linux-gnu-as... no
checking for as... as
checking for i686-pc-linux-gnu-dlltool... no
checking for dlltool... dlltool
checking for i686-pc-linux-gnu-ld... no
checking for ld... ld
checking for i686-pc-linux-gnu-nm... no
checking for nm... nm
checking for i686-pc-linux-gnu-ranlib... no
checking for ranlib... ranlib
(以下省略)

カーネルコンパイルの設定

カーネルコンパイルの設定画面 Linux Kernel Configuration が表示されたら、カーネルコンパイルの設定を行います。

kernel_conf.jpg

▼使用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.jpg

GRUBの画面でLFSを選択してEnterキーを押します。

lfs_login_20110127.jpg

▼ログイン
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_ping.jpg

ファイルシステム

ファイルシステムの設定をします。

▼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

top.jpg

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