11.The End
11.1 The End
很好!现在新的 LFS 系统已经安装好了!我们祝愿您的全新的,自定义的 Linux 系统能够成功启动!
创建一个 /etc/lfs-release 文件似乎是一个好主意。通过使用它,您 (或者我们,如果您向我们寻求帮助的话) 能够容易地找出当前安装的 LFS 系统版本。运行以下命令创建该文件:
echo 11.3 > /etc/lfs-release
后续安装在系统上的软件包可能需要两个描述当前安装的系统的文件,这些软件包可能是二进制包,也可能是需要构建的源代码包。
第一个文件根据 Linux Standards Base (LSB) 的规则描述系统状态。运行命令创建该文件:
cat > /etc/lsb-release << "EOF"
DISTRIB_ID="Linux From Scratch"
DISTRIB_RELEASE="11.3"
DISTRIB_CODENAME="<your name here>"
DISTRIB_DESCRIPTION="Linux From Scratch"
EOF
第二个文件基本上包含相同的信息,systemd 和一些图形桌面环境会使用它。运行命令创建该文件:
cat > /etc/os-release << "EOF"
NAME="Linux From Scratch"
VERSION="11.3"
ID=lfs
PRETTY_NAME="Linux From Scratch 11.3"
VERSION_CODENAME="<your name here>"
EOF
您需要修改 ‘DISTRIB_CODENAME’ 和 ‘VERSION_CODENAME’ 域,体现您的系统的独特性。
11.2 Get Counted
现在您已经完成了本书中的构建过程,那么问题来了,您希望被计为一名 LFS 用户吗?前往 https://www.linuxfromscratch.org/cgi-bin/lfscounter.php 并输入您的姓名和第一次使用的 LFS 版本,即可注册成为 LFS 用户。
下面重启计算机进入 LFS。
11.3 Rebooting the System
现在所有软件包已经安装完成,可以重新启动计算机了。但是,还有一些需要检查的事项。下面是一些建议:
-
安装固件,如果您的设备的内核驱动程序需要一些固件文件才能正常工作的话。
-
此时可以再次检查一些配置文件。
-
/etc/bashrc
-
/etc/dircolors
-
/etc/fstab
-
/etc/hosts
-
/etc/inputrc
-
/etc/profile
-
/etc/resolv.conf
-
/etc/vimrc
-
/root/.bash_profile
-
/root/.bashrc
-
/etc/sysconfig/ifconfig.eth0
-
现在,正如我们之前保证的,您可以引导全新的 LFS 系统了!首先退出 chroot 环境:
logout
解除虚拟文件系统的挂载:
umount -v $LFS/dev/pts
mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
umount -v $LFS/dev
umount -v $LFS/run
umount -v $LFS/proc
umount -v $LFS/sys
如果为 LFS 创建了其他的分区,需要在解除挂载 LFS 分区之前,先解除挂载它们,例如:
umount -v $LFS/home
umount -v $LFS
解除 LFS 文件系统的挂载:
umount -v $LFS
现在重新启动系统。
如果 GRUB 引导加载器如同本书前文所述安装,并配置正确,GRUB 目录应该已经配置为自动引导 LFS 11.3 启动项。
重启完成后,LFS 系统就可以使用了,您可以安装更多软件包以满足自己的需求。
11.4 Additional Resources
感谢您阅读本书。我们希望您觉得本书对您有用,而且您能够从构建系统的过程中学到一些知识。
现在 LFS 系统已经安装好了,您可能想问“然后呢?”为了解答这个问题,我们为您汇集了一份有用资源的列表。
-
维护
所有软件都会定期发布 Bug 报告和安全注意事项。由于 LFS 系统是从源代码构建的,您必须自己留意它们。有一些跟踪它们的在线网站,下面列出一些:
这是 LFS 手册发布后发现的安全缺陷的列表。
该邮件列表用于讨论安全缺陷和相关概念,以及开源社区中与安全相关的实践。
-
LFS Hints
LFS Hints 是一组由 LFS 社区志愿者提交的帮助文档,它位于 https://www.linuxfromscratch.org/hints/downloads/files/。
-
邮件列表
如果您需要帮助,希望跟踪 LFS 开发进度,或者希望参与该项目,访问第 1 章 - 邮件列表了解一下 LFS 邮件列表。
-
Linux 文档计划 (The Linux Documentation Project)
Linux 文档计划 (The Linux Documentation Project, TLDP) 的目标是通过协作解决 Linux 文档的所有问题,它包含大量 HOWTO 文档、指南和 man 页面。它的网址是 https://tldp.org/。
11.5 Getting Started After LFS
11.5.1 决定在新系统中做什么
现在 LFS 已经构建完成,而且可以引导。那么,要在新的系统中做什么呢?首先要确定准备使用新的系统达成什么目的。通常来说,计算机系统可以分成两大类:工作站和服务器。当然,这两类系统并不是完全互斥的。用于这两类系统的应用程序完全可以安装在同一个系统上,但是我们首先分别考虑这两类系统。
服务器是较为简单的一类系统。通常它需要包含一个网页服务程序,例如 Apache HTTP 服务器,和一个数据库服务器,例如 MariaDB。当然,服务器也可能提供其他服务,嵌入式系统也可以视为服务器。
另一方面,工作站系统较为复杂。它通常需要一个图形用户环境,例如 LXDE,XFCE,KDE,或者 Gnome,这些用户环境又基于基本的图形环境和其他图形界面应用,例如 Firefox 浏览器,Thunderbird 邮件客户端,或LibreOffice 办公套件。这些应用需要很多 (如果需要比较完备的功能,可能需要几百个) 额外的软件包中的应用和库的支持。
另外,一些应用提供系统管理功能,它们适用于所有系统。这些应用的安装方法都在 BLFS 手册中给出。其中,并非所有软件包在所有环境下都必须安装。例如,dhcpcd 对于服务器一般并不合适,wireless_tools 一般只用于笔记本电脑。
11.5.2 在基本的 LFS 环境中工作
一旦启动 LFS 系统,就可以使用它提供的工具构建更多软件包。然而,基本 LFS 系统的交互环境十分简略,可以使用一些方法改善工作环境:
11.5.2.1 从 LFS 宿主系统中通过 chroot 进行操作
这种方法能够提供完整的图形环境,包括功能完整的网页浏览器,而且可以进行复制/粘贴操作。而且可以使用宿主系统的 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
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
注意脚本中的后三条命令被注释掉了。如果它们涉及的目录是宿主系统中的挂载点,而且在 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'
别名设定看上去比较复杂,这是由于引号和反斜线符号的嵌套使用。为了美观,上面给出的命令分成了两行,但实际输入该命令时必须将其写在一行内。
11.5.2.2 使用 ssh 远程工作
这种方法同样允许使用完整的图形环境,但首先需要在 LFS 系统上安装 sshd 和 wget (通常可以在 chroot 中安装它们)。另外,这种方法需要第二台计算机。这种方法相比于使用 chroot 环境更简单。而且,它在构建软件包时使用为 LFS 系统构建的内核,却仍然能够像使用 chroot 一样在一个完整的系统上工作。
11.5.2.3 使用 LFS 系统的命令行工作
这种方法需要先使用 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。