温馨提示×

怎么调试ubuntu fromscratch

小樊
53
2026-09-25 17:44:03
栏目: 智能运维

“Ubuntu From Scratch”(通常简称 UFS)指的是从零开始手动构建 Ubuntu 系统(类似 LFS,但面向 Ubuntu/Debian 体系)。调试 UFS 的核心难点在于:没有现成系统可依赖、出错后很难进入环境、日志缺失。

下面按常见阶段 + 调试方法系统说明。


一、总体调试思路(很重要)

UFS 调试遵循三条原则:

  1. 分阶段验证:每完成一步就测试一步
  2. 能 shell 就别重启:尽量在宿主系统 chroot 中调试
  3. 日志优先:所有命令加输出重定向

推荐基础命令习惯:

command 2>&1 | tee /tmp/log.txt

二、各阶段调试方法

1. 分区 & 挂载阶段

常见问题

  • 挂载点不对
  • 文件系统类型错误
  • chroot 后找不到设备

调试方法

lsblk
mount | grep ufs
df -h

确认:

  • /mnt/ufs 已挂载
  • /proc /sys /dev 已绑定
mount --bind /dev /mnt/ufs/dev
mount --bind /proc /mnt/ufs/proc
mount --bind /sys /mnt/ufs/sys

2. 工具链(binutils / gcc / glibc)

典型错误

  • cannot find crt1.o
  • gcc: error: unrecognized command-line option
  • libc.so.6: version GLIBC_2.x not found

调试技巧

echo 'int main(){return 0;}' > t.c
gcc t.c
./a.out
echo $?

查看工具链路径:

which gcc
gcc --version
ldd $(which gcc)

若失败:

  • 检查 PATH
  • 检查 --prefix
  • 检查 LD_LIBRARY_PATH

3. chroot 环境调试

问题

  • chroot: failed to run command '/bin/bash'
  • No such file or directory

原因

  • 动态链接器缺失
  • /lib64/ld-linux-x86-64.so.2 不存在

调试 在宿主系统:

file /mnt/ufs/bin/bash
ldd /mnt/ufs/bin/bash

修复示例:

cp /lib64/ld-linux-x86-64.so.2 /mnt/ufs/lib64/

4. 软件包构建(dpkg / apt 源码)

UFS 常手动编译 Debian/Ubuntu 包。

调试构建失败

dpkg-buildpackage -us -uc 2>&1 | tee build.log

查看依赖:

dpkg-checkbuilddeps

只配置不编译:

./configure --help

5. 启动阶段(GRUB / init)

最常见死法

  • 黑屏
  • kernel panic
  • init not found

GRUB 调试

grub-install --debug /dev/sdX

检查:

cat /boot/grub/grub.cfg

内核启动参数

临时加:

init=/bin/bash

若能进:

mount -o remount,rw /

init 调试

确认:

ls -l /sbin/init
file /sbin/init

若为 systemd:

systemd.log_level=debug
systemd.log_target=console

三、实用调试工具(强烈推荐)

在宿主系统准备:

  • strace
  • ltrace
  • gdb
  • busybox

示例:

strace chroot /mnt/ufs /bin/bash

四、最小可调试系统建议

先做一个“能 shell 的最小系统”:

  • bash
  • coreutils
  • glibc
  • busybox

再逐步加:

  • apt
  • dpkg
  • systemd

五、如果完全卡死

  1. 用 Live CD 挂载 UFS 分区
  2. chroot 进去
  3. 逐步注释启动项
  4. 对比 Ubuntu 官方最小镜像

六、你可以告诉我

为了更好地帮你,我可以具体定位问题:

  • 你卡在 哪一步?
  • 报错 原文 是什么?
  • 用的是 x86_64 / arm?
  • 是否有 GRUB / systemd?

我可以一步步帮你调。

0 踩