“Ubuntu From Scratch”(通常简称 UFS)指的是从零开始手动构建 Ubuntu 系统(类似 LFS,但面向 Ubuntu/Debian 体系)。调试 UFS 的核心难点在于:没有现成系统可依赖、出错后很难进入环境、日志缺失。
下面按常见阶段 + 调试方法系统说明。
UFS 调试遵循三条原则:
推荐基础命令习惯:
command 2>&1 | tee /tmp/log.txt
常见问题
调试方法
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
典型错误
cannot find crt1.ogcc: error: unrecognized command-line optionlibc.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--prefixLD_LIBRARY_PATH问题
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/
UFS 常手动编译 Debian/Ubuntu 包。
调试构建失败
dpkg-buildpackage -us -uc 2>&1 | tee build.log
查看依赖:
dpkg-checkbuilddeps
只配置不编译:
./configure --help
最常见死法
kernel panicinit not foundgrub-install --debug /dev/sdX
检查:
cat /boot/grub/grub.cfg
临时加:
init=/bin/bash
若能进:
mount -o remount,rw /
确认:
ls -l /sbin/init
file /sbin/init
若为 systemd:
systemd.log_level=debug
systemd.log_target=console
在宿主系统准备:
straceltracegdbbusybox示例:
strace chroot /mnt/ufs /bin/bash
先做一个“能 shell 的最小系统”:
再逐步加:
为了更好地帮你,我可以具体定位问题:
我可以一步步帮你调。