温馨提示×

CentOS fromscratch安装步骤解析

小樊
32
2025-12-13 19:46:19
栏目: 智能运维

目标与总体思路

  • CentOS 宿主机上,按 Linux From Scratch(LFS) 的方法从零构建一套可用的 CentOS 根文件系统:先准备宿主环境,再构建临时工具链与目标工具链,编译核心组件(Glibc、GCC、Coreutils 等),安装 GRUB 并制作可启动介质(U 盘/磁盘),最后完成首次启动与收尾配置。
  • 关键约定:工作目录 $LFS=/mnt/lfs;源码与补丁放在 $LFS/sources;临时工具链放在 $LFS/tools;目标架构三元组 $LFS_TGT=$(uname -m)-lfs-linux-gnu;编译时优先使用 $LFS/tools/bin 下的工具,避免污染宿主环境。

一 准备宿主环境与源码

  • 安装宿主依赖(以 CentOS 7 为例,按官方 LFS 要求与常见实践补齐):
    • 包组与工具:binutils、bison、coreutils、diffutils、findutils、gawk、gcc、gcc-c++、grep、gzip、m4、make、patch、perl、python3、sed、tar、texinfo、xz 等。
    • 若检查脚本提示缺少 yacc,可用 GNU Bison 兼容:ln -sv /usr/bin/bison /usr/bin/yacc。
  • 创建目录与权限:
    • mkdir -v $LFS/{sources,tools,usr};chmod -v a+wt $LFS/sources。
  • 下载 LFS 源码包与补丁:
    • 方式一:按手册的 wget-list 逐个下载并校验(MD5/SHA256)。
    • 方式二:下载打包的 lfs-packages-<版本>.tar,解压到 $LFS/sources;必要时校验完整性(如 md5sum)。
  • 创建专用用户与纯净环境:
    • groupadd lfs;useradd -s /bin/bash -g lfs -m -k /dev/null lfs;passwd lfs;chown -v lfs $LFS/{tools,sources,download};su - lfs。
    • 设置环境(~/.bash_profile 与 ~/.bashrc):关闭 hash、设置 umask、导出 LFS、LC_ALL=POSIX、LFS_TGT、PATH=$LFS/tools/bin:$PATH,必要时设置 CONFIG_SITE=$LFS/usr/share/config.site
  • 建议:全程使用普通用户 lfs 编译,减少误操作风险;编译初期可用 time 记录各包耗时,以首个包(如 Binutils)耗时为 1 SBU 作为后续估算基准。

二 构建临时工具链与目标系统

  • 构建顺序遵循“自举”原则:先构建临时 BinutilsGCC(pass 1)C 库(临时)核心工具(Coreutils、File、Findutils、Gawk、Grep、Make、Patch、Sed、Tar、XZ 等),再构建临时 Glibc,随后进入“目标系统”阶段重建并安装最终 Binutils/GCC/Glibc 等,最后安装基础系统软件与引导。
  • 关键要点:
    • 每个软件包编译前进入解压目录,遵循“configure → make → make install”的通用流程;必要时使用补丁与测试(make check),但测试失败在不影响正确性的前提下可酌情忽略。
    • 临时阶段工具链路径统一使用 $LFS/tools,避免链接到宿主 /usr;环境变量与 --prefix 要严格对应阶段目标。
    • 进入目标系统阶段前,清理或重设环境变量,确保后续使用新工具链与库;重建 GCC 时注意依赖 GMP/MPFR/MPC 等库的正确寻址与版本匹配。
    • 安装基础系统软件(如 IPRoute2、Util-linux、E2fsprogs、Coreutils、Bash、Bison、Flex、Gawk、Grep、Sed、Tar、XZ、Kmod、Procps-ng、Eudev、Shadow、Sysvinit/Systemd 等)时,遵循 LFS 手册的推荐顺序与注意事项(例如 Shadow 的权限与登录安全配置、设备节点与 udev 规则、系统初始化选择等)。

三 安装引导与制作可启动介质

  • 分区与文件系统:在目标介质(如 /dev/sdb)上创建分区(如 /dev/sdb1),格式化为 ext4;挂载到 /mnt/target
  • 安装 GRUB 到介质:
    • grub-install --root-directory=/mnt/target /dev/sdb
    • 说明:–root-directory 指向挂载点(不含分区号),设备为整块盘(如 /dev/sdb)。
  • 配置 GRUB(/mnt/target/boot/grub/grub.cfg)示例:
    • set root=(hd0,1)
    • linux /boot/vmlinuz-<版本> root=/dev/sda1 rootdelay=8
    • initrd /boot/initramfs-<版本>.img
    • 提示:以 U 盘 启动时,U 盘在目标系统里常映射为 /dev/sdarootdelay=8 常用于等待设备就绪,避免 VFS 挂载根分区失败。
  • 生成 initramfs(在 chroot 或目标系统中):
    • dracut -f /boot/initramfs-<版本>.img <内核版本>
  • fstab 示例(按实际分区调整):
    • /dev/sda1 / ext4 defaults 0 1
  • 首次启动排障要点:
    • 若仅进入 grub> 命令行,可手工引导:
      • root (hd0,0)
      • kernel /boot/vmlinuz-<版本> root=/dev/sda1 rootdelay=8
      • boot
    • 注意 GRUB 的括号索引与分区号差异:set root 使用 (hd0,1)(从 1 开始),而命令行 root 使用 (hd0,0)(从 0 开始)。

四 首次启动与收尾配置

  • 首次进入系统后执行基础收尾:
    • 设置 root 密码、创建普通用户、配置 /etc/hostname/etc/resolv.conf、设置时区与 NTP、配置 sudo
    • 检查并完善 /etc/fstab(根分区、boot 分区、swap 等),确保与 GRUB 配置一致。
    • 安装与启用网络(如 NetworkManager、systemd-networkd)、SSH 服务;按需配置防火墙与 SELinux(或先宽松验证再收紧)。
    • 更新动态链接库缓存:ldconfig;检查关键命令与库文件路径是否正确(which、ldd)。
  • 验证与回退:
    • 重启验证引导、网络、用户登录、包管理与服务自启是否正常;如异常,回看 GRUB 参数、fstab、initramfs 与设备映射。
  • 可选:在目标系统上建立本地 YUM/DNF 仓库(拷贝 CentOS 基础包或使用 ISO 作为本地源),便于后续软件安装与维护。

0