碎碎念
我在完成OS课程的Homework3时,本以为是很简单的配置,但不知是否因为本机环境太杂乱,还是遇到了一些小问题。由于立下了这个学期开始一定要坚持写一些东西、以免被AI支配的Flag,所以把这些不足为道的经验分享给大家,希望能帮助到遇到同样问题的同学。
STEP1 Docker下载及安装
如果你是Windows或Mac,可以直接从Docker官网下载适用于Windows或Mac的Docker Desktop安装包。按照向导完成安装即可。如果是Linux,相信你可以跳过此步。
建议参考网上的教程安装以及检验,不再赘述。之后的步骤记得保证Docker处于运行状态。
STEP2 插件安装
无论是VScode还是Cursor,都可以直接在扩展处搜索安装此插件。至此,准备工作就完成了。
STEP3 使用Dockerfile构建环境
这一步就容易出问题了。按照老师的步骤进行,你可能会遇到:
- "Docker not found" 错误
如果在执行reopen in container
时遇到类似于“Docker not found”的错误提示,首先检查Docker是否正确安装并运行。Windows或Mac可以直接查看任务栏Docker Desktop是否正常工作;Linux环境可以通过以下命令检查Docker状态:sudo systemctl status docker
如果Docker没有启动,请尝试启动它:
sudo systemctl start docker
如果还是无法找到Docker,检查VScode的插件是否正确安装,并确保VScode的设置中Docker路径配置正确,可以尝试重启。
- "无法连接到远程开发容器" 错误
此错误一般出现在输入"reopen in container"创建容器之后,同时控制台可能输出以下错误信息(节选):
type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root --include-configuration --include-merged-configuration
[2025-09-23T11:37:12.076Z] Exit code 1
遇到此错误时,可以尝试以下解决方案:
解决方法
- 进入
lmbench
文件夹下的.devcontainer
文件夹。 - 打开
Dockerfile
文件,并将内容替换为以下配置:
# 使用 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04
# 安装ca-certificates以解决证书验证问题
RUN apt-get update && apt-get install -y ca-certificates
# 如果BFSU镜像有问题,可以将镜像源替换为官方Ubuntu镜像
# COPY sources.list /etc/apt/sources.list
# 更新包列表并安装wget
RUN apt-get update && apt-get install -y wget
# 添加LLVM的GPG密钥
RUN wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
# 更新包列表
RUN apt-get update
# 安装必要的软件包和工具链
RUN apt-get update && apt-get install -y \
make \
git \
gcc \
clang \
clangd \
gdb && \
rm -rf /var/lib/apt/lists/*
# 设置默认的工作目录
WORKDIR /workspace/lmbench
此问题一般是证书验证问题或网络问题导致的,通常更换Dockerfile的内容后即可正常下载镜像创建容器了。如果仍有网络问题,可以尝试使用特殊方法,或是自行搜索教程,更换其它源。
STEP4 编译评测
经过前面的配置,现在的VScode已经处于Linux环境中,接下来是进行编译和评测的步骤。
编译 lmbench
-
在
lmbench
目录下,使用以下命令来编译lmbench
:make results
-
执行
make results
后,你会看到一系列提示,要求你设置一些测试选项。通常情况下,可以直接按回车键使用默认设置即可,无需更改。
注意
-
在编译过程中,你可能会遇到一些路径问题,错误信息类似如下:
../scripts/results: 30: cannot create ../../results//b36cd28369b4.1: Directory nonexistent Mailing results ../scripts/results: 37: mail: not found make[1]: Leaving directory '/workspaces/lmbench/src'
其中
mail: not found
是因为测试完成后,脚本试图自动发送邮件通知,但由于没有配置邮件系统,所以可以忽略这个错误。另外,
Directory nonexistent
表示结果目录不存在,这是因为在编译过程中,脚本期望将测试结果保存到特定的子目录中,但该目录没有正确创建。
解决方案
-
对于
Directory nonexistent
错误,可以通过创建软链接来解决:cd /workspaces ln -sf lmbench/results results
然后运行:
cd /workspaces/lmbench make rerun
这将会把缺失的目录链接到正确的位置,从而不优雅地解决路径问题。
- 编译完成后,你会在
results
文件夹下看到一个以标识符(如b36cd28369b4.1
)命名的文件。但实际上,它的正确路径应该在一个同名的文件夹下。由于之前的路径错误,这个文件没有存放在正确的文件夹中,导致getlist
脚本期望的结果文件路径不正确。
解决方法(选择一种,不可同时使用):
-
创建一个同名的文件夹,将文件放入该文件夹中。
-
在
results
文件夹下创建一个名为LIST
的文件,在其中输入该标识符(如b36cd28369b4.1
):echo "b36cd28369b4.1" > /path/to/results/LIST
然后,重新运行make see
命令:make see
此时,你应该能够看到正确的
summary.out
文件,文件内容会更加易读。
关于 percent.out
内容缺失的情况
percent.out
文件是统计百分比的。里面没有正确的内容,是因为 lmbench
的版本存在不兼容的问题。这个问题可以忽略,因为你只需要查看 summary.out
文件的内容即可。
总结
以上方法没有根本性的解决路径问题,但是也已经让这个评测可用了,所以我也懒得继续折腾 。默认情况下运行还是比较慢的,得等一会。
后记
以上记录的坑与解决方案,都是我在mac环境下完成OS课程Homework3时个人踩到的。它们带有很强的主观性,仅供遇到类似问题的同学参考,也希望能给你节省一些排查环境的时间。
这些小问题虽然看起来不算严重,但实际操作中却常常耗费一些时间。写下来既是给自己做个备忘,也希望能给后来者一点帮助。如有疏漏,欢迎讨论指正。
之后如果有时间,我也会继续更新一些零散的笔记或日常心得。