Linuxを日常的に使う実験ブログ

LFS 7.7を構築する [Part 2 一時環境の構築準備編]

 2015-09-25

 LFS

こんにちは。今回のテーマは『LFS 7.7を構築する [Part 2 一時環境の構築準備編]』です。本記事はLFS 7.7を構築する [Part 1 LFS概略とホストシステム選択編]の続きです。今回はパーティショニングから一時環境の構築一歩手前までを扱っています。公式のLFSbookでは2章から4章に相当すると思います。基本的にはLFSbookに沿って作業を進めていますが、一部前後している部分もあります。詳細は公式LFSbookをご覧ください [adsense02] 【目次】 パーティショニング ファイルシステムの作成 ホストシステムのインストールと準備 LFS用パーティションのマウント パッケージ群のダウンロード 準備作業の仕上げ おまけ:作業再開用のスクリプト

パーティショニング

パーティショニングはシステムの外枠を作る重要な作業です。どんな環境を構築したいのかイメージして作業すると良いと思います。筆者の場合はホストシステムとLFSのデュアルブートとしてホストシステムのブートローダーでLFSを起動する設計としました。よって、/bootとswap用のパーティションをホストシステムとLFSで共有することになります。以下に筆者のパーティショニング例を示します。

sda 8:0 0 13G 0 disk ├─sda1 8:1 0 1k 0 part ├─sda5 8:5 0 500K 0 part /boot #/bootは共用 ├─sda6 8:4 0 3G 0 part / #Slackwareのルート ├─sda7 8:5 0 11.5G 0 part /mnt/lfs #LFSのルート └─sda8 8:8 0 1G 0 part [SWAP]

この辺りはかなり好みが別れる部分だと思います。もしLFS構築後はホストシステムは削除する場合はLFSシステム側のブートローダーで起動することになりますので、LFS用のbootパーティションを用意したいと思う方も居るかも知れません。

ファイルシステムの作成

ホストとLFSのルートパーティションをはext4、/bootパーティションはext2としました。以下のコマンドでファイルシステムを作成していきます。

host# mkfs.ext2 /dev/sda5 host# mkfs.ext4 /dev/sda6 host# mkfs.ext4 /dev/sda7

スワップ領域も作成します。

host# mkswap /dev/sda8 host# swapon /dev/sda8

ホストシステムのインストールと準備

ホストシステムのインストール

今回はホストシステムとしてSlackwre14.1をインストールしました。Xorg等は入れずに、必要最低限のビルドが出来るCLI環境をインストールしました。Slackwareのインストールについてはコチラの記事を参考にしていただければと思います。 開発環境をインストールすることを忘れないで下さい。ビルドできなくなります。

ホストシステムの準備

インストールしたての状態ではGCC等のビルドの際にパッケージが足りずにエラーが出たので、以下に揚げたパッケージを追加でインストールしておきます。Slackpkgを使ってもWebからパッケージをダウンロードしてきてもOKです。

  1. glibc
  2. gmp
  3. libcroco
  4. libmpc
  5. libxml
  6. mpfr

LFS用パーティションのマウント

環境変数$LFSの設定

LFSbookでは頻繁に$LFSという環境変数を使用して設定を行います。以下のコマンドで設定をします。ホストシステムを起動する度に設定するのが面倒な場合は/root/.bashrcや/root/.bash_profileなどで設定してしまうと便利かも知れません。

host# export LFS=/mnt/lfs

パーティションのマウント

LFSのルートパーティションをマウントします。

host# mkdir -pv $LFS host# mount -v -t ext4 /dev/sda7 $LFS

もし、/usr/を別パーティションとするなどの場合は以下のようにします。

host# $ mkdir -pv $LFS host# $ mount -v -t ext4 /dev/sda7 $LFS host# $ mkdir -pv $LFS/usr host# $ mount -v -t ext4 /dev/ $LFS/usr

パッケージ群のダウンロード

ここではLFSで構築するためのパッケージのソースやパッチをダウンロードします。ソースは$LFS/sourceに置くことにします。

$LFS/sourceディレクトリの作成

まずはパッケージを保管するディレクトリを作成します。以下のコマンドを実行します。

host# mkdir -v $LFS/source host# chmod -v a+wt $LFS/sources

wget-listの入手

LFSではソースの一覧と入手先のURLが記されたwget-listファイルを提供しています。まずはこのファイルを入手します。(URLは2015年9月現在のものです)

host# cd $LFS/source host# wget http://www.linuxfromscratch.org/lfs/downloads/stable/wget-list host# wget http://www.linuxfromscratch.org/lfs/downloads/stable/md5sum

パッケージのダウンロード

LFSbook7.7日本語版には日本国内のサーバーからダウンロードできるようにwget-listに手を加える手法も記してありますが、今回はオリジナルのwget-listを用いて海外からダウンロードします。

root# cd $LFS/source root# wget —input-file=wget-list —continue —directory-prefix=$LFS/sources

ダウンロードしたパッケージのチェック

先ほどダウンロードしたパッケージのチェックを行います。

host# pushd $LFS/sources host# md5sum -c md5sums host# popd

準備作業の仕上げ

$LFS/toolsの作成

以下コマンドでディレクトリを作成します。

mkdir -v $LFS/tools ln -sv $LFS/tools /

lFSユーザーの追加

host# groupadd lfs host# useradd -s /bin/bash -g lfs -m -k /dev/null lfs host# passwd lfs

ディレクトリの所有権を付与します。

host# chown -v lfs $LFS/tools host# chown -v lfs $LFS/sources

lfsユーザーでログインします

host# su - lfs

.bash_profileと.bashrcファイルの作成

ホストシステムの影響を与えないように環境変数を設定します。 以下のコマンドで.bash_profileを作成します。

lfs# cat > ~/.bash_profile << “EOF” exec env -i HOME=$HOME TERM=$TERM PS1=‘\u:\w\$ ’ /bin/bash EOF

以下のコマンドで.bashrcを作成します。

lfs# cat > ~/.bashrc << “EOF” set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX LFS_TGT=$(uname -m)-lfs-linux-gnu PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL LFS_TGT PATH EOF

作成した.bash_profileを読み込みます。

lfs# source ~/.bash_profile

おまけ:作業再開用のスクリプト

LFS構築の作業は一日で終わらない場合も多く、数日に分けて行っていくことが多いと思います。作業を中断するとパーティションのマウントや環境変数の設定等、同じことを繰り返すこともあり、面倒に感じることもあります。自分なりにスクリプトにまとめておくとホストシステムからスクリプトを走らせるだけで作業が始められます。 作業再開用のスクリプトは特にLiveCDで作業をしている方に有効だと思います。今回はホストシステムをインストールしているのでスクリプトは短くて済んでいます。 参考までに筆者はLFSbook第5章までのスクリプトを載せておきます。ドライブ名等は適宜読み替えて下さい。 restart.sh [bash] #!/bin/sh export LFS=/mnt/lfs mount /dev/sda7 $LFS su - lfs [/bash]

最後に

さて、LFSの作業はようやくスタートしました。ここから先は第五章に入りダウンロードしたパッケージをビルドしていく作業に入っていきます。GUIが使用できるシステムからホストシステムにSSH接続しておくと作業がスムーズに進むと思います。 【関連記事】 LFS 7.7を構築する [Part 1 LFS概略とホストシステム選択編] [adsense]