现在 LFS 已经构建完成,而且可以引导。那么,要在新的系统中做什么呢?首先要确定准备使用新的系统达成什么目的。通常来说,计算机系统可以分成两大类:工作站和服务器。当然,这两类系统并不是完全互斥的。用于这两类系统的应用程序完全可以安装在同一个系统上,但是我们首先分别考虑这两类系统。
服务器是较为简单的一类系统。通常它需要包含一个网页服务程序,例如 Apache HTTP 服务器,和一个数据库服务器,例如 MariaDB。当然,服务器也可能提供其他服务,嵌入式系统也可以视为服务器。
另一方面,工作站系统较为复杂。它通常需要一个图形用户环境,例如 LXDE,XFCE,KDE,或者 Gnome,这些用户环境又基于基本的图形环境和其他图形界面应用,例如 Firefox 浏览器,Thunderbird 邮件客户端,或 LibreOffice 办公套件。这些应用需要很多 (如果需要比较完备的功能,可能需要几百个) 额外的软件包中的应用和库的支持。
另外,一些应用提供系统管理功能,它们适用于所有系统。这些应用的安装方法都在 BLFS 手册中给出。其中,并非所有软件包在所有环境下都必须安装。例如,dhcpcd 对于服务器一般并不合适,wireless_tools 一般只用于笔记本电脑。
一旦启动 LFS 系统,就可以使用它提供的工具构建更多软件包。然而,基本 LFS 系统的交互环境十分简略,可以使用一些方法改善工作环境:
这种方法能够提供完整的图形环境,包括功能完整的网页浏览器,而且可以进行复制/粘贴操作。而且可以使用宿主系统的 wget 等应用程序下载软件包,并将其放入 chroot 环境能够访问的位置。
为了在 chroot 环境中正常构建软件包,如果虚拟文件系统尚未挂载,需要挂载它们。为此,可以在宿主系统中创建一个脚本:
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
install -v -d -m 1777 $LFS$(realpath /dev/shm)
else
mounttype dev/shm tmpfs tmpfs -o nosuid,nodev
fi
#mountbind usr/src
#mountbind boot
#mountbind home
EOF
注意脚本中的后三条命令被注释掉了。如果它们涉及的目录是宿主系统中的挂载点,而且在 LFS/BLFS 系统中也会同样挂载它们,可以使用这些命令。
可以用普通用户 (推荐) 或者 root
身份,执行
bash
~/mount-virt.sh 以运行该脚本。如果是以普通用户身份运行它,宿主系统需要安装
sudo。
另外,该脚本给出了一些可能用于存放下载的软件包文件的位置。存放位置可以是任意的。例如,可以存放在某个用户的主目录中,例如 ~/sources,或者使用一个所有用户可访问的位置,如 /usr/src。我们建议不要将 BLFS 使用的源代码包和 LFS 使用的源代码包混合存放在 /sources (chroot 环境中的路径) 中。无论如何,必须使用 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'
别名设定看上去比较复杂,这是由于引号和反斜线符号的嵌套使用。为了美观,上面给出的命令分成了两行,但实际输入该命令时必须将其写在一行内。
这种方法同样允许使用完整的图形环境,但首先需要在 LFS 系统上安装 sshd (通常可以在 chroot 中安装它)。另外,这种方法需要第二台计算机。这种方法相比于使用 chroot 环境更简单。而且,它在构建软件包时使用为 LFS 系统构建的内核,却仍然能够像使用 chroot 一样在一个完整的系统上工作。
可以使用 scp 命令将软件包源代码上传到 LFS 系统。如果希望直接在 LFS 系统上下载源代码,可以在 chroot 环境中安装 libtasn1,p11-kit,make-ca,以及 wget (或者在引导 LFS 系统后用 scp 上传它们的源代码)。
这种方法需要先使用 chroot 安装 libtasn1,p11-kit,make-ca,wget,gpm,以及 links (或者 lynx),然后重启计算机,进入新的 LFS 系统。 LFS 系统默认有六个虚拟控制台。可以使用 Alt+Fx 组合键切换控制台,其中 Fx 是 F1 到 F6 之间的键。Alt+← 和 Alt+→ 组合键也可以切换控制台。
此时,可以在两个不同的虚拟控制台登录,在其中一个运行 links 或 lynx 浏览器,另一个运行 bash。GPM 允许使用鼠标左键选择并复制浏览器中的命令,然后可以切换终端,将命令粘贴到另一个终端中运行。
顺带一提,从 X 窗口环境也可以用 Ctrl+Alt+Fx 组合键切换虚拟终端,但是不能在图形接口和虚拟终端之间进行复制操作。也可以用 Ctrl+Alt+Fx 组合键返回窗口环境,其中 Fx 一般是 F1,但也可能是 F7。