如果你在主机上不是root用户,那么使用官方的教程(./run-docker sh -- ./build --download-dependencies qemu-buildroot)很可能会遇到下面的问题:
git config --global --add safe.directory xxx这是因为构建的docker使用的root用户,而从主机映射过去的不是root用户(即你在服务器上的id不是0),这就出现了git抱怨当前文件夹的所有者和正在操作的用户不是一个人。
解决办法:
- 使用下面命令创建docker image
./run-docker create (构建的image名称为lkmc)
如果想要构建root用户的镜像,需要使用 ./run-docker --root create (构建的image名称为lkmc-root)
-
或者直接关闭这个检查
/run-docker --root sh -- git config --global --add safe.directory '*'我没有意识到通配符仅在 git v2.35.1 及更高版本中可用。Ubuntu 20.04 附带 v2.25.1。
sudo add-apt-repository ppa:git-core/ppa sudo apt update sudo apt install git
具体见build 553行,把写入的目的文件"/etc/apt/source.list",改到"test_apt.list",
然后调用sudo去执行这个操作(因为在构建镜像的时候已经赋予了dev sudo的权限)
sources_path = os.path.join('/etc', 'apt', 'sources.list')
with open(sources_path, 'r') as f:
sources_txt = f.read()
sources_txt = re.sub('^# deb-src ', 'deb-src ', sources_txt, flags=re.MULTILINE)
m = os.system('touch test_apt.list')
with open("test_apt.list", 'w') as f:
f.write(sources_txt)
p = os.system('sudo mv test_apt.list %s' % sources_path)这个还没找到解决办法
apt-get install software-properties-common
-
保证文件以py结尾(可以试试,也不一定需要,有点玄学)
-
如果不行,试试加入
import os, sys sys.path.append(os.path.dirname(os.path.realpath(__file__))) # why not include the PYTHONPATH?
-
构建镜像
./run-docker [--root] [--image_name xxx] build
- 如果不提供--root,则构建dev用户的镜像
- 如果不提供image_name,则默认为
test_image
-
创建容器
./run-docker [--root] --image_name xxx --container_name xxx --host_dir xxx --repo_name xxx create
- 如果不使用--root,则挂载镜像的时候,挂载到容器里面的/root/repo_name,否则挂载到/home/dev/repo_name
- repo_name 默认为test_dir
- image_name默认为test_image
- container_name 为test_container
- 脚本修改后从命令行读入http_proxy,直接传给容器。
-
运行容器
./run-docker --container_name xxx [--root] sh [shell command]
- 如果不适用--root,则使用dev登录到环境中
- 容器名字跟上面创建容器的名字相同
- 如果不给shell command,则直接进入到shell中,否则执行完命令退出。
-
给apt和pip换源
./run-docker --container_name xxx [--root] sh
- apt
- pip(pip config set global.index-url https://pypi.douban.com/simple)
-
构建gem5-buildroot
./run-docker --root --container_name xxx sh -- ./build --download-dependencies gem5-buildroot




