mac 上用 docker 跑 linux-0.11

何和惬
2023-12-01

和使用晓泰实验云台提供的项目 https://github.com/tinyclub/cloud-lab 

首先需要将项目 git clone 到本地,并安装 docker for mac 桌面版

下面这段代码会将 docker 镜像拉到本地并在 ubuntu 镜像系统中安装必要的依赖

tools/docker/choose

下面这段代码会启动 docker 镜像,注意它同时会启动 cloud-ubuntu-web,杀掉它无需理会即可。如果是首次启动的话,会报错要求设置共享文件夹,按照提示设置即可

tools/docker/run

然后在 docker 桌面版中打开 linux-0.11-lab 镜像的命令行,如果是首次进入的话,是无法进行网络操作的,这是由于在上面安装时下面这段代码会将 docker 的虚拟网卡删除,解法也很简单,执行 killall Docker 然后重启应用即可,因为 docker 守护进程每次创建会自动创建网卡

// tools/docker/install


# Restart to make sure the above opts work
$SUDO ifconfig docker0 down
$SUDO brctl delbr docker0
$SUDO service docker restart

恢复完虚拟网卡后,在镜像里执行 sudo apt upgrade 即可安装其他依赖拉

然后便可按照 cloud-lab 的教程来调试 linux0.11 了

哼,哪有那么容易!!

linux0.11 支持的文件系统是 minix,但是 2021 年的 docker for mac 的 linuxkit 应该是不支持 minix 的,所以导致镜像系统无法 mount hdc-0.11.img,进而导致无法在上层系统编辑文件,关于 linuxkit 是什么请读者自行了解。并且项目里虽然有提供 4.9.125 版本的 linuxkit minix 文件系统包,但是 2021 年的 docker 自带 linuxkit 已经是 5.x 了,所以执行 insmod 时会报错!!

所以需要我们自己编译 linuxkit kernel !!!执行下面的代码,注意在 build 过程中会从 docker 服务器下载依赖,但是可能是服务器承载量不大,总是断开连接,几个依赖下了两天才下完!!!把编译出来的 kernel 文件替换掉 docker 桌面版包内的 resources/linuxkit 文件夹中的 kernel 文件,然后杀掉 docker,重启镜像,执行 uname -r,可以发现内核版本变为 4.9.125 了 !!!!

brew tap linuxkit/linuxkit


brew install --HEAD linuxkit


git clone git@github.com:linuxkit/linuxkit.git


cd linuxkit

// 修改 yml kernel 版本为 4.9.125

linuxkit build ./example/docker-for-mac.yml

然后便可以把 img 文件挂载到文件系统里了!!!

挂载方法如下,不能直接 mount 因为 img 文件是分区的

#!/bin/sh

losetup /dev/loop0 hdc-0.11.img

sudo kpartx -av /dev/loop0

sudo mount /dev/mapper/loop0p1 /mnt

 类似资料: