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

      apt-file其他的使用方法

      在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

  • 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文件在这里是相同的,导致错误。

    • 解决办法

      1. 在Linux 0.11下的kernel->chr_drv下的Makefile中的keyboard.o 和 keyboard.s 改成keyboard1.o 和 keyboard1.s

      2. 在构建镜像的时候,直接将文件拷贝到镜像中一份,即在Dockerfile中添加一行。

        COPY ./hit-oslab-linux-20110823.tar /hit-oslab-linux-20110823.tar

        但之后修改文件只能在Docker容器中进行,且面临mount: /root/oslab/hdc: unknown filesystem type 'minix'. 问题。未解决。

      3. 使用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
posted @   zkx98  阅读(1169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示