Linux From Scratch(LFS11.0)进入 Chroot 构建临时工具 - 准备虚拟内核文件系统
Posted Lucifer三思而后行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux From Scratch(LFS11.0)进入 Chroot 构建临时工具 - 准备虚拟内核文件系统相关的知识,希望对你有一定的参考价值。
概述
首先,安装一些软件包的构建机制所必须的工具。这样就解决了所有的循环依赖问题,可以使用 chroot
环境进行构建,它与宿主系统除正在运行的内核外完全隔离。
为了隔离环境的正常工作,必须它与正在运行的内核之间建立一些通信机制。通过所谓的虚拟内核文件系统达成这一目的,它们必须在进入 chroot 环境时挂载。
从现在开始,所有命令必须以 root
用户身份执行,且 LFS 变量必须正确设定。 在进入 chroot 之后,仍然以 root 身份执行所有命令!
改变所有者
目前,$LFS 中整个目录树的所有者都是 lfs,这个用户只在宿主系统存在。
如果不改变 $LFS 中文件和目录的所有权,它们会被一个没有对应账户的用户 ID 所有。这是危险的,因为后续创建的新用户可能获得这个用户 ID,并成为 $LFS 中全部文件的所有者,从而产生恶意操作这些文件的可能。
为了避免这样的问题,执行以下命令,将 $LFS/* 目录的所有者改变为 root:
chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}
case $(uname -m) in
x86_64) chown -R root:root $LFS/lib64 ;;
esac
准备虚拟内核文件系统
内核对外提供了一些文件系统,以便自己和用户空间进行通信。它们是虚拟文件系统,并不占用磁盘空间,其内容保留在内存中。
首先创建这些文件系统的挂载点:
mkdir -pv $LFS/{dev,proc,sys,run}
创建初始设备节点
在内核引导系统时,它需要一些设备节点,特别是 console 和 null 两个设备。它们需要创建在硬盘上,这样在内核填充 /dev 前,或者 Linux 使用 init=/bin/bash 内核选项启动时,也能使用它们。
运行以下命令创建它们:
mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3
挂载和填充 /dev
用设备文件填充 /dev 目录的推荐方法是挂载一个虚拟文件系统 (例如 tmpfs) 到 /dev,然后在设备被发现或访问时动态地创建设备文件。
这个工作通常由 Udev 在系统引导时完成。然而,我们的新系统还没有 Udev,也没有被引导过,因此必须手工挂载和填充 /dev。这可以通过绑定挂载宿主系统的 /dev 目录就实现。绑定挂载是一种特殊挂载类型,它允许在另外的位置创建某个目录或挂载点的映像。
运行以下命令进行绑定挂载:
mount -v --bind /dev $LFS/dev
挂载虚拟内核文件系统
现在挂载其余的虚拟内核文件系统:
mount -v --bind /dev/pts $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run
在某些宿主系统上,/dev/shm 是一个指向 /run/shm 的符号链接。我们已经在 /run 下挂载了 tmpfs 文件系统,因此在这里只需要创建一个目录。
if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi
本次分享到此结束啦~
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。
❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️
以上是关于Linux From Scratch(LFS11.0)进入 Chroot 构建临时工具 - 准备虚拟内核文件系统的主要内容,如果未能解决你的问题,请参考以下文章
Linux From Scratch(LFS11.0)构建 LFS 系统 - 清理系统
Linux From Scratch(LFS11.0)构建 LFS 系统 - GCC-11.2.0
Linux From Scratch(LFS11.0)收尾工作
Linux From Scratch(LFS11.0)收尾工作