11.5. LFS の次に向けて

11.5.1. 次に何をやるのか

ここに LFS が完成して起動可能なシステムを手にしました。 ここから何をしますか? 次はこれをどう使うかを決めることです。 一般的には大きく2つの方法があります。 ワークステーションとするのかサーバーとするのかです。 実のところ、両者は別々とする必要はありません。 それぞれにとって必要となるアプリケーションは、同じシステム内に含めることができます。 もっとも以下では、それぞれを個別に見ていくことにします。

サーバーとすることは比較的簡単です。 一般には Apache HTTP Server のようなウェブサーバーと、MariaDB のようなデータベースサーバーから構成されます。 ただし他のサービスを含めても構いません。 使い捨てデバイスに埋め込まれているオペレーティングシステムは、ここに分類されます。

これに比べてワークステーションは、やや複雑です。 一般には LXDE, XFCE, KDE, Gnome といったグラフィカルユーザー環境が必要であり、これらは グラフィック環境 Firefox ウェブブラウザー, Thunderbird Email クライアント, LibreOffice office スイート といったグラフィックベースのアプリケーションによって成り立っています。 こういったアプリケーションは、実に多くのパッケージ(所定機能の実現のために何百もの依存パッケージ)によるアプリケーションやライブラリを必要としています。

上に加えて、全システム向けにシステムを管理するアプリケーション群があります。 そういったアプリケーションは BLFS ブックに掲載しています。 環境による話であって、そのアプリケーションをすべて必要とするものではありません。 例として dhcpcd は、サーバーにおいては普通は不要のものですし、wireless_tools は、ラップトップシステムにのみ必要となるのが通常です。

11.5.2. 基本的な LFS 環境での作業

LFS を初めて起動すると、追加するパッケージをビルドするための内部ツールはすべて含まれています。 ただしユーザー環境は十分なものではありません。 これを充足させていくには、いくつかの方法があります。

11.5.2.1. LFS ホストからの chroot による作業

この方法を使えば、完全なグラフィック環境を扱うことができ、充実したブラウザーを利用してコピー/ペースト機能が活用できます。 またホスト内にある wget のようなアプリケーションを使うことができるため、パッケージソースをダウンロードして、chroot 環境内で作業可能な場所に配置することができます。

chroot 環境内で適切にパッケージビルドを行うためには、仮想ファイルシステムのマウントを忘れずに行っておく必要があります。 これを実現する1つの方法として、以下のようなスクリプトを HOST システム内に生成して利用することです。

cat > ~/mount-virt.sh << "EOF"
#!/bin/bash

function mountbind
{
   if ! mountpoint $LFS/$1 >/dev/null; then
     $SUDO mount --bind /$1 $LFS/$1
     echo $LFS/$1 mounted
   else
     echo $LFS/$1 already mounted
   fi
}

function mounttype
{
   if ! mountpoint $LFS/$1 >/dev/null; then
     $SUDO mount -t $2 $3 $4 $5 $LFS/$1
     echo $LFS/$1 mounted
   else
     echo $LFS/$1 already mounted
   fi
}

if [ $EUID -ne 0 ]; then
  SUDO=sudo
else
  SUDO=""
fi

if [ x$LFS == x ]; then
  echo "LFS not set"
  exit 1
fi

mountbind dev
mounttype dev/pts devpts devpts -o gid=5,mode=620
mounttype proc    proc   proc
mounttype sys     sysfs  sysfs
mounttype run     tmpfs  run
if [ -h $LFS/dev/shm ]; then
  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
else
  mounttype dev/shm tmpfs tmpfs -o nosuid,nodev
fi

#mountbind usr/src
#mountbind boot
#mountbind home
EOF

なおこのスクリプト内の最後の3つのコマンドはコメントアウトしています。 こういったディレクトリがホストシステム上の個別パーティションにマウントされていて、LFS/BLFS システムの起動時にマウントする必要がある場合に利用します。

このスクリプトは、一般ユーザー(これを推奨)または root ユーザーにて bash ~/mount-virt.sh として実行します。 一般ユーザーとして実行する場合には、ホストシステム上に sudo が必要です。

もう一つ、このスクリプトにおいて指摘するポイントとして、ダウンロードしたパッケージファイルをどこに保存するのかという点があります。 その場所については任意です。 たとえば一般ユーザーのホームディレクトリ配下の ~/sources といった場所にすることができます。 あるいはグローバルな場所として /usr/src とすることもできます。 ここで推奨したいのは、(chroot 環境から見て)/sources といったディレクトリに、BLFS と LFS のソースを混ぜないようにすることです。 どのようにするにせよ、パッケージソースは chroot 環境内部からアクセスできるようにしなければなりません。

ここで紹介する機能の最後は、chroot 環境に入る手順を効率化することです。 これは、ホストシステム内のユーザー向け ~/.bashrc ファイルにエイリアスを設けることで実現します。

alias lfs='sudo /usr/sbin/chroot /mnt/lfs /usr/bin/env -i HOME=/root TERM="$TERM" PS1="\u:\w\\\\$ "
PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login'

このエイリアスは多少トリッキーなところがあります。 それはクォートと重複するバックスラッシュ文字があるところです。 これらは単一行にすべて記述しなければなりません。 上で示したコマンド記述は、見やすさを考慮して二行に分けているに過ぎません。

11.5.2.2. ssh 経由のリモート作業

この方法はグラフィック環境下においても利用できます。 まず何よりも sshd wget を LFS システムにインストールすることが必要です。 これは通常 chroot 環境にて行います。 また 2 つめのコンピューターも必要です。 この方法は、複雑な chroot 環境を必要としないことから、単純であるという利点があります。 追加導入するパッケージに対しても、LFS からビルドしたカーネルを用いていくことになるので、インストールパッケージに対しても完全なシステム構成を保証し続けることになります。

11.5.2.3. LFS コマンドラインからの作業

この方法を用いるには chroot 環境において libtasn1, p11-kit, make-ca, wget, gpm, links (または lynx) をインストールしておき、再起動して新たな LFS システムに入ることが必要です。 その時点において、システムにはデフォルトで 6 つの仮想コンソールが存在します。 コンソールの切り替えは簡単で、 Alt+Fx のキー組み合わせを利用します。 ここで FxF1 から F6 までのキーを表します。 別のキー組み合わせ Alt+Alt+ を使ってコンソールを切り替えることもできます。

この後に 2 つの異なる仮想コンソールにログインして、1 つのコンソール上では links または lynx ブラウザーを開き、もう 1 つのコンソールでは bash を起動します。 GPM があることで、ブラウザー上のコマンドを左マウスボタンによりコピーすることができます。 したがってコンソールを移って、そのコマンドをペーストすることができます。

[注記]

注記

注記にして示しておくと、X Windows インスタンスから仮想コンソールを切り替えるには、 Ctrl+Alt+Fx のキー組み合わせを用います。 ただしマウスによるコピー操作は、グラフィックインターフェースと仮想コンソール間では動作しません。 X Windows ディスプレイに戻るため Ctrl+Alt+Fx の組み合わせを用いてください。 ここで Fx は一般的には F1 ですが F7 の場合もあります。