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

Linux Chroot Jail环境下Git仓库配置及依赖排查求助

在chroot Jail中搭建Git仓库的问题解决

核心问题分析

你遇到的unable to get random bytes for temporary file错误,本质是chroot环境缺少Git运行必需的系统设备文件和临时目录,同时locale配置也存在缺失。

分步解决方案

1. 补充随机数设备文件

Git生成临时文件名需要读取/dev/urandom或/dev/random,chroot环境默认没有这些设备,手动创建:

# 在宿主机上执行
mkdir -p /home/git/dev
mknod -m 666 /home/git/dev/urandom c 1 9
mknod -m 666 /home/git/dev/random c 1 8

2. 创建并配置临时目录

Git需要写入临时文件到/tmp,在chroot内创建该目录并设置正确权限:

mkdir -p /home/git/tmp
chmod 1777 /home/git/tmp  # 确保所有用户可写,且仅能删除自身文件
chown git:jailgroup /home/git/tmp

3. 修复locale警告

两种方式任选其一:

  • 方式一:复制locale文件
    mkdir -p /home/git/usr/lib/locale
    cp -r /usr/lib/locale/en_US.UTF-8 /home/git/usr/lib/locale/
    
  • 方式二:强制使用基础locale
    修改/etc/ssh/sshd_config,在Match User git段添加:
    SetEnv LC_ALL=C
    
    然后重启sshd服务:systemctl restart sshd

4. 验证Git仓库权限

确保chroot内的仓库目录存在且git用户有读写权限:

mkdir -p /home/git/GameDev/Test.git
chown -R git:jailgroup /home/git/GameDev/Test.git
# 初始化裸仓库(如果还没做)
chroot /home/git /bin/bash -c "cd /GameDev/Test.git && git init --bare"

5. 测试chroot环境完整性

手动进入chroot测试Git命令,排查潜在缺失:

chroot /home/git /bin/bash -c "git --version"
chroot /home/git /bin/bash -c "cd /GameDev/Test.git && git receive-pack ."

如果仍有报错,根据提示补充对应的文件或库(比如用ldd检查未找到的依赖)。

关于确定chroot所需文件的方法

  • 用ldd检查所有二进制文件的依赖库,确保全部复制到chroot对应路径
  • 手动执行命令并观察报错,逐步补充缺失的文件/目录(比如/tmp、/dev下的设备)
  • 对于Git这类工具,还需要确保模板文件(你已经复制)、配置文件(如果有)、以及运行时依赖的系统资源(随机数设备、临时目录)齐全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:13:12