Mac M1配置Docker Ubuntu哈工大操作系统实验环境(HITOSLAB)
配置环境
主要参考链接 https://blog.csdn.net/Dsky_A/article/details/121489721 感谢🙏大佬
拉取镜像
docker pull ubuntu:18.04
构建镜像
- 创建Dockerfile 文件
FROM ubuntu:18.04 RUN \ sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ && sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ && apt clean \ && apt-get update -y COPY ./gcc-3.4.tar /gcc-3.4.tar RUN tar -xvf gcc-3.4.tar \ && apt-get install -y binutils \ && cd ./gcc-3.4/gcc-3.4_amd64 \ && dpkg -i *.deb \ && apt-cache search as86 ld86 \ && apt install bin86 \ && apt install -y libc6-dev-i386 \ && apt-get install make \ && dpkg --add-architecture i386 \ && apt-get update \ && apt-get install -y libsm6:i386 \ && apt-get install -y libx11-6:i386 \ && apt-get install libxpm4:i386
os是镜像名称,v2是标签名称
docker build --platform linux/amd64 -t os:v2 .
构建容器
-v /.../oslab:/oslab 将/.../oslab挂载到docker根目录下oslab文件夹
-name 容器名
—privileged
docker run -it --privileged -v /tmp/.X11-unix:/tmp/.X11-unix -v /.../oslab:/oslab os:v2 -name=oslab2 /bin/bash
安装xquartz和socat
一般情况下docker的容器无法调用宿主机的显示装置,需要其他工具来实现图形显示。在macos上,需要安装xquartz以及socat。
brew install socat brew install xquartz
安装好xquartz之后,打开偏好配置,修改安全性中的允许从网络客户端连接,然后重启生效。
启动运行
接下来运行socat,必须在关闭xquartz的情况下启动,否则会提示端口占用,启动socat之后再启动xquartz
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
然后执行下列命令获取到mac的ip地址
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*'
启动容器
docker container start oslab2
运行容器 将ip放到display参数中,运行docker容器
docker container exec -it -e DISPLAY=192.168.0.145:0 oslab2 /bin/bash
然后进入容器,切换到oslab目录下,运行./run,就可以看到界面了
Stop容器
docker container stop oslab2
错误总结
搭建环境错误
-
libSM.so.6: cannot open shared object file: No such file or directory
-
寻找依赖库
我们在安装应用时,经常会碰到缺少各种文件、依赖等问题,例如缺少.so文件。Ubuntu中提供了一个强大的工具apt-file来查找依赖。最适合的场景是在Docker中使用,因为Docker Image的系统通常是Ubuntu。
apt-get install apt-file apt-file search libSM.so.6 在CentOS中,可以用
yum whatprovides
命令来查询命令所在的包。 -
解决办法
原文链接:https://blog.csdn.net/chouzhou9701/article/details/105407459
首先查看系统中的
libsm.so.6
ldconfig -p |grep -i libsm.so.6 输出:
libSM.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSM.so.6 说明系统中只有64位的
libsm.so.6
,所以需要安装32位的libsm.so.6
sudo apt-get install libsm6:i386 再次运行
ldconfig
命令查看:libSM.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libSM.so.6 libSM.so.6 (libc6) => /usr/lib/i386-linux-gnu/libSM.so.6 发现已经安装成功,这次再运行就不会报错了
-
-
E: Unable to locate package libsm6:i386
-
解决办法
原文链接:https://blog.csdn.net/Dsky_A/article/details/121489721
dpkg --add-architecture i386 apt-get update apt-get install -y libsm6:i386 apt-get install -y libx11-6:i386 apt-get install libxpm4:i386
-
-
mount failed: Operation not permitted.
运行容器的时候
docker run -it --privileged
添加--privileged
原因暂时不懂 Docker不熟悉
其他错误
-
mount: /root/oslab/hdc: unknown filesystem type 'minix'.
-
问题分析 原文链接
Mac上应该不能挂载Minix镜像文件,奇怪的时候这里ubuntu也不能挂载这个minix镜像文件,这导致我最后只能用另一台Linux机器挂载上去之后放代码进去,如实验二等等实验,需要放代码到Linux 0.11下面编译执行,内置的vi我是不报用好的希望了,所以只能用Linux挂载这个镜像放进去,应该有解决的方法,希望有人能给出解决方法,不过如果你是Linux就没这个问题了,经过测试在wsl2中商店ubuntu中的微软内核我也没有办法挂载Minix镜像。
-
未解决
暂时用Ubuntu虚拟机 挂载 后进行文件的添加
-
-
Makefile:22: recipe for target keyboard.o' failed
-
问题分析
Mac现在用的APFS文件系统默认是不开大小写敏感的,也就是说这个keyboard.S和编译之后文件夹下面的keyboard.s文件在这里是相同的,导致错误。
-
解决办法
-
在Linux 0.11下的kernel->chr_drv下的Makefile中的keyboard.o 和 keyboard.s 改成keyboard1.o 和 keyboard1.s
-
在构建镜像的时候,直接将文件拷贝到镜像中一份,即在Dockerfile中添加一行。
COPY ./hit-oslab-linux-20110823.tar /hit-oslab-linux-20110823.tar 但之后修改文件只能在Docker容器中进行,且面临
mount: /root/oslab/hdc: unknown filesystem type 'minix'.
问题。未解决。 -
使用
Disk Utility
创建一个区分大小写的宗卷关于 APFS 的介绍可以参考官方说明,其中“容器”指的就是磁盘。意思就是对于内置磁盘,我们可以添加 APFS 宗卷,新增的 APFS 宗卷共享内置磁盘的剩余空间,与 Windows 的磁盘分区是不一样的,同时新增的 APFS 宗卷能有自己的一些配置,包括“是否大小写敏感”配置。
-
-
换源
mv /etc/apt/sources.list /etc/apt/sources.list.bak sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list apt clean apt-get update -y
FROM ubuntu:20.04 ARG DEBIAN_FRONTEND=noninteractive USER root RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal main restricted " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal universe " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates universe " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal multiverse " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-updates multiverse " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security universe " >> /etc/apt/sources.list && \ echo "deb http://mirrors.ustc.edu.cn/ubuntu/ focal-security multiverse " >> /etc/apt/sources.list && \ echo "deb http://archive.canonical.com/ubuntu focal partner " >> /etc/apt/sources.list # Update ubuntu and install dev RUN apt-get update -y RUN apt-get install -y iputils-ping net-tools WORKDIR /home/wuliuqi CMD ifconfig
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具