适用于操作系统课程的 Docker 镜像 v0.0.4

离.nvme0n1p2
🔖︎ 1 订阅
👍︎ 16 点赞
🔝︎ 已置顶

简介

先上图: image.png

OS课程组提供了开箱即用的JumpServer供学习使用 ,但是依赖于网页端(我不知道,但是 SSH Client 选项在我本地不太工作),难以与本地的开发工具整合。

为了缓解这些问题 在发现Jumserver并不存在什么问题之前,我打包了一个 Docker 镜像,其中包含了OS课程所需(JumpServer也提供)的部分工具,以满足跨平台、本地化和自定义环境的需求。

前置条件

要应用Docker镜像,你当然需要安装Docker。Docker的安装方法请参考官方文档,请选择你的操作系统所对应的版本下载并安装Docker。

使用方法

  1. 创建一个空目录,并进入该目录

    1
    2
        mkdir OS-Docker
    cd OS-Docker
  2. 创建docker-compose.yml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       version: '0.0'
    services:
    os:
    image: izolito/os-docker:latest
    hostname: os
    tty: true
    volumes:
    - ./player:/home/player
    ports:
    - "4322:22"

    你可以将以上内容复制到docker-compose.yml文件中。

  3. 第一次运行

    1
       docker compose up

    请耐心等待,直到控制台出现如下信息

    1
    2
    3
       os-1  | Starting OpenBSD Secure Shell server: sshd.
    os-1 | Now you can connect to the container with the following command:
    os-1 | ssh -p 4322 player@localhost

    现在你可以使用Ctrl+C来退出容器。

  4. 以后的运行

    1
       docker compose up -d
  5. 连接到容器

    1
       ssh -p 4322 player@localhost

    输入密码player即可登录。

  6. 停止容器
    你可以使用docker compose down来停止容器。

    对容器中家目录/home/player的修改会被同步到主机的./player目录中。

注意事项

  1. 本镜像并非官方提供,与课程环境可能有些许差异。对于因环境差异引起的实验结果差异,请以课程官方环境的运行结果为准。

  2. 如果你使用 Microsoft® Windows™ 系统,请将文件置于NTFS分区下,否则可能出现莫名其妙的权限问题。

  3. 不小心干烂了家目录怎么办?你可以在备份重要信息后删除./player目录,然后重新运行docker compose up

  4. 记得修改默认的git用户信息。

  5. 本镜像的制作参考了CS162 Workspace

  6. 随着课程进度的推进,镜像可能会更新。欢迎在评论中提出镜像的不足之处和想添加的功能。

已安装的工具

镜像采用了 Debian 12 作为基础镜像。

  1. 开发工具
    • build-essential
    • cpp
    • gcc
    • gcc-12-multilib
    • g++
    • gdb
    • gcc-mips-linux-gnu
    • gdb-multiarch
    • make
    • binutils
    • autoconf
    • clang
    • clang-format
    • valgrind
    • ctags
    • python3-pyelftools
  2. 版本控制
    • git
  3. 文本编辑器
    • vim
    • nano
  4. Shell
    • zsh
    • tmux
  5. QEMU
    • qemu-system-mips
    • qemu-utils
    • qemu-user
  6. 其他

故障排除

  1. 首次运行时报错Could not create directory '/home/player/.ssh' (Permission denied).

    请删除./player目录,手动创建一个空的./player目录,然后重新运行docker compose up

  2. 更新后ssh产生如下错误

    image.png

    视平台而定,请找到~/.ssh/known_hostsC:\Users\your-username\.ssh\known_hosts文件,删除其中包含localhost:4322的行。

  3. fatal error: bits/libc-header-start.h: No such file or directory 见“更新日志”中的v0.0.3版本更新。

手动构建镜像

如果你想自己构建镜像,可以按以下步骤操作:

  1. 下载OS-Docker-v0.0.x.tar.gz到本地,并解压

    下载链接

    https://bhpan.buaa.edu.cn/link/AAB1F52516010E4FD783EDCEC1340480BB存档

    Folder Name: OS

    Expires: 2024/05/03 11:50

    Pickup Code: qDxT

    1
       tar -zxvf OS-Docker-v0.0.x.tar.gz
  2. 进入解压后的文件夹

    1
       cd OS-Docker
  3. (可选)对镜像作你想要的修改

  4. 构建镜像

    1
        docker build -t name-you-like .
  5. 运行容器

    1
        docker run -h os -p 4322:22 -v /path/to/home/player:/home/player name-you-like

    你也可以修改docker-compose.yml中的image字段,然后运行docker compose up

更新日志

  • 2024-04-07: v0.0.4
    • 新增了 python3-pyelftools包,修复了执行测试test3_2时报错的问题
    • 注意:你依旧可以手动运行sudo apt update && sudo apt install python3-pyelftools来安装缺少的包。
  • 2024-03-14: v0.0.3
    • 修复了编译tools/readelf/hello.c时报错的问题
    • 更换软件源为清华大学镜像站,这可能会加快镜像的构建速度
    • 注意:若你不希望重新下载镜像,可以手动运行sudo apt update && sudo apt install gcc-12-multilib来安装缺少的包。
  • 2024-03-03: v0.0.2
    • 增加了并在vim中配置了ctags工具
    • 设置了hostname为os,现在hostname不会随机生成了
    • 注意:若你从v0.0.1升级到此版本,你需要替换docker-compose.yml,你可能需要手动为vim配置ctags工具。
  • 2024-02-23: v0.0.1
    • 初次发布

关于SSH连接Jumpserver

你可以先在这里配置SSH密钥,然后通过以下命令SSH连接到JumpServer.

1
ssh <你的学号>@git@<跳板机ip>@lab.os.buaa.edu.cn -p 2222 -i <配置好的私钥路径>

你知道在哪里可以找到<你的学号>。
你可以在登入WebSSH后,在界面的第一行找到<跳板机ip>: image.png 你可以登录这里,然后在Profile->SSH Key Setting中下载私钥或上传公钥。若你选择后者,则你不需要在命令中加入-i <配置好的私钥路径>

0%