You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LFS构建遇阻:chroot无法执行/bin/bash问题求助

LFS构建中chroot无法运行/bin/bash的问题解决

在LFS(Linux From Scratch)构建过程中,chroot无法正常工作,执行测试脚本尝试在chroot环境运行/bin/bash时,报错:
chroot: failed to run command ‘/bin/bash’: No such file or directory

原测试脚本如下:

#!/bin/bash


_place="$(pwd)/jail"

# Clear before do something
for _x in dev/shm run sys proc dev/pts dev; do
    sudo umount ${_place}/${_x} >& /dev/null
done
for _x in dev/pts dev run sys proc; do
    sudo rmdir ${_place}/${_x} >& /dev/null
done
sudo rm -rf ${_place}/bin >& /dev/null
sudo rmdir ${_place} >& /dev/null

# Run with "go" to mount actually
if (test "${1}" = "go"); then
    sudo mkdir -p ${_place}/{dev/pts,proc,sys,run} || exit 1
    sudo mount --bind /dev ${_place}/dev || exit 1
    sudo mount -t devpts devpts -o gid=5,mode=0620 ${_place}/dev/pts || exit 1
    sudo mount -t proc proc ${_place}/proc || exit 1
    sudo mount -t sysfs sysfs ${_place}/sys || exit 1
    sudo mount -t tmpfs tmpfs ${_place}/run || exit 1
    if (test -h ${_place}/dev/shm); then
        sudo install -v -d -m 1777 ${_place}$(realpath /dev/shm) || exit 1
    else
        sudo mount -t tmpfs -o nosuid,nodev tmpfs ${_place}/dev/shm || exit 1
    fi

    sudo mkdir -p ${_place}/bin || exit 1
    sudo cp -f /bin/bash ${_place}/bin/ || exit 1

    sudo chroot ${_place}
fi

问题原因

报错提示的“文件不存在”并非/bin/bash真的缺失,而是动态链接的bash依赖的系统库没有被复制到chroot环境中。现代Linux系统中的bash几乎都是动态链接版本,需要依赖libc、ld-linux等核心库才能启动。

修改后的脚本

#!/bin/bash

_place="$(pwd)/jail"

# 清理之前的环境
for _x in dev/shm run sys proc dev/pts dev; do
    sudo umount "${_place}/${_x}" >& /dev/null
done
for _x in dev/pts dev run sys proc; do
    sudo rmdir "${_place}/${_x}" >& /dev/null
done
sudo rm -rf "${_place}/bin" "${_place}/lib" "${_place}/lib64" >& /dev/null
sudo rmdir "${_place}" >& /dev/null

# 执行构建与chroot
if [ "${1}" = "go" ]; then
    # 创建必要的目录结构
    sudo mkdir -p "${_place}/{dev/pts,proc,sys,run,bin,lib,lib64}" || exit 1

    # 挂载虚拟文件系统
    sudo mount --bind /dev "${_place}/dev" || exit 1
    sudo mount -t devpts devpts -o gid=5,mode=0620 "${_place}/dev/pts" || exit 1
    sudo mount -t proc proc "${_place}/proc" || exit 1
    sudo mount -t sysfs sysfs "${_place}/sys" || exit 1
    sudo mount -t tmpfs tmpfs "${_place}/run" || exit 1
    if [ -h "${_place}/dev/shm" ]; then
        sudo install -v -d -m 1777 "${_place}$(realpath /dev/shm)" || exit 1
    else
        sudo mount -t tmpfs -o nosuid,nodev tmpfs "${_place}/dev/shm" || exit 1
    fi

    # 复制bash到chroot环境
    sudo cp -f /bin/bash "${_place}/bin/" || exit 1

    # 复制bash依赖的动态链接库
    # 用ldd获取依赖库列表,逐个复制到对应路径
    ldd /bin/bash | awk '/=>/ {print $3}' | while read -r lib; do
        sudo cp -f "$lib" "${_place}$(dirname "$lib")/" || exit 1
    done

    # 进入chroot环境
    sudo chroot "${_place}" /bin/bash
fi

关键修改点

  1. 添加lib/lib64目录:创建动态链接库需要的存放目录
  2. 复制依赖库:通过ldd命令解析bash的依赖库,自动复制到chroot环境的对应路径
  3. 显式指定bash路径:chroot时明确指定/bin/bash作为启动命令,避免依赖默认shell设置

内容的提问来源于stack exchange,提问作者user11140649

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:55:21