转自:http://tinylab.org/cloud-lab/

可快速构建的计算机课程在线实验平台

由 Wu Zhangjin 创建于 2017/10/06

项目描述

泰晓实验云台 项目致力于创建一套计算机课程的在线实验平台。

  • 使用文档:README.md
  • 在线实验:泰晓实验云台
  • 注册帐号:泰晓开源小店
  • 代码仓库:https://github.com/tinyclub/cloud-lab.git
  • 基本特性:
    • 基于 Docker,一键安装,几分钟内就可构建,节约生命,生命,生命。
    • 通过 Docker CE 和 Docker Toolbox 支持所有 Linux,Windows,Mac OSX 平台
    • 可直接通过 Web 远程访问(支持ssh和vnc),非常便捷,便捷,便捷。
    • 支持即时录制,随时记录和分享学习过程。
    • 已内置多个示例 Lab:Linux Lab,Linux 0.11 Lab, CS630 Qemu Lab,Markdown Lab
    • 可轻松扩展更多 Lab,欢迎大家参与贡献
    • 支持多人协同实验,适合远程一对一教学指导或者协同开发
    • 支持广播教学模式,适合大学课程实验、企业培训以及讲座即时演示
  • 登陆界面

相关文章

安装 Docker

Docker 是 Cloud Lab 的基础,需要先安装好,可参考:

安装完 docker 后如果想免 sudo 使用 linux lab,请务必把用户加入到 docker 用户组并重启系统。

$ sudo usermod -aG docker $USER

由于 docker 镜像文件比较大,有 1G 左右,下载时请耐心等待。另外,为了提高下载速度,建议通过配置 docker 更换镜像库为本地区的,更换完记得重启 docker 服务。

$ grep registry-mirror /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=https://docker.mirrors.ustc.edu.cn"
$ service docker restart

如果 docker 默认的网络环境跟本地的局域网环境地址冲突,请通过如下方式更新 docker 网络环境,并重启 docker 服务。

$ grep bip /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --bip=10.66.0.10/16"
$ service docker restart

Linux 和 Mac 系统

在 Linux 和 Mac 系统上,安装完 Docker CE 后就会自动启动 docker 服务。

在 Mac 系统下,虽然也可以通过 Docker Toolbox 来安装 Docker,不过 Docker CE 已经支持原生 Docker,性能和体验会更好,Cloud Lab 也已经支持这种方式,所以 Mac 下也推荐用 Docker CE 安装。

Windows

Windows 虽然也支持通过 Docker CE 直接安装 Docker,但是如果要使用 Cloud Lab,需要一套兼容 Linux 和 Mac 的脚本环境,所以目前还是推荐 Windows 用户通过 Docker Toolbox 来安装 Docker。

由于没有可测试的 Windows 系统,下面以 Mac OSX 为例介绍如何通过 Docker Toolbox 安装 Docker。

以 Mac 系统为例,安装完 Docker Toolbox 以后,打开 kitematic 并运行,会在 Virtualbox 中创建一个名为 default 的 Linux 系统,该系统为 TinyCoreLinux,其中集成了 docker 服务。

该系统启动后,会挂载两个目录,可用于存放实验源码,它们是:

  • /Users:由 Mac OSX 的 /Users 挂载过来,方便在 Mac OSX 和该系统之间交换文件。
  • /mnt/sda1:在 Virtualbox 上外挂的一个虚拟磁盘镜像文件,默认有 17.9 G,足够存放常见的实验环境。

请务必注意,该 default 系统中默认的 /root 目录仅仅挂载在内存中,关闭系统后数据会丢失,请千万不要用它来保存实验数据。

另外,由于该系统未提供桌面,所以需要先获取该系统的外网地址,即 eth1 网口的 IP 地址,并通过 Windows 或者 Mac OSX 访问 Lab。

$ ifconfig eth1 | grep 'inet addr' | tr -s ' ' | tr ':' ' ' | cut -d' ' -f4
192.168.99.100

如果是自己通过 Virtualbox 安装的 Linux 系统,即使有桌面,也想在外部系统访问时,则可以通过设置 ‘Network -> Adapter2 -> Host-only Adapter’ 来添加一个 eth1 网口设备。

免 root 使用 Docker

安装完 docker 后如果想免 sudo 使用 Cloud Lab,请务必把用户加入到 docker 用户组并重启系统。

$ sudo usermod -aG docker $USER

免密运行 Lab

运行 Lab 过程中,部分操作需要 root 权限,如果想免密使用,可以配置下 sudo。如果配置过程中出错,可以用 pkexec visudo 补救。

$ sudo -s
$ echo "$SUDO_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$SUDO_USER

提升镜像下载速度

由于 docker 镜像文件比较大,有 1G 左右,下载时请耐心等待。另外,为了提高下载速度,建议通过配置 docker 更换镜像库为本地区的,更换完记得重启 docker 服务。

$ grep registry-mirror /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=https://docker.mirrors.ustc.edu.cn"
$ service docker restart

避免网络地址冲突

如果 docker 默认的网络环境跟本地的局域网环境地址冲突,请通过如下方式更新 docker 网络环境,并重启 docker 服务。

$ grep bip /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --bip=10.66.0.10/16"
$ service docker restart

如果上述改法不生效,请在类似 /lib/systemd/system/docker.service 这样的文件中修改后再重启 docker 服务。

$ grep dockerd /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --bip=10.66.0.10/16 --registry-mirror=https://docker.mirrors.ustc.edu.cn
$ service docker restart

实验目录

如果使用了 Docker Toolbox 安装 Docker,则启动 Virtualbox 上的 default 系统后,请使用 /mnt/sda1 目录。因为默认的 /root 目录仅仅挂载在内存中,该系统关闭后数据会丢失。

$ cd /mnt/sda1

在 Linux 或者 Mac 系统上,找一处当前用户可存储的目录即可,例如 ~/Documents

$ cd ~/Documents/

下载 Cloud Lab

$ git clone https://github.com/tinyclub/cloud-lab.git
$ cd cloud-lab

下载 Lab

可以列出来后再选择:

$ tools/docker/choose
LOG: Current Lab is linux-0.11-lab
LOG: Available Labs: 1 cs630-qemu-lab
2 linux-0.11-lab
3 linux-lab
4 markdown-lab
5 qing-lab
6 tinylab.org LOG: Choose the lab number: 2 LOG: Download the lab... Already on 'master'
Your branch is up-to-date with 'origin/master'. Already up-to-date.
LOG: Source code downloaded to cloud-lab/labs/linux-0.11-lab

也可直接指定并下载:

$ tools/docker/choose linux-0.11-lab

实验源码下载在 labs/ 目录下:

$ ls cloud-lab/labs/linux-0.11-lab
book COPYING examples Makefile Makefile.emu Makefile.help README.md src
callgraph doc images Makefile.cg Makefile.head Makefile.tags rootfs tools

运行 Lab

下述命令会直接拉取实验环境的 Docker 镜像并运行,运行完以后会打印出 VNC 的登陆链接。

$ tools/docker/run
LOG: VNC screen recorded in cloud-lab/recordings
LOG: User: ubuntu ,Password: n4sqtv ,VNC Password: 3m9k7h ,Viewonly Password: c9tt4h
Please login: * Normal: http://localhost:6080/?u=3699ab&p=3m9k7h
* Viewonly: http://localhost:6080/?r=3699abc9tt4h User: 3699ab
Password: 3m9k7h
Password: c9tt4h (Viewonly)

从 Log 中可以看出,其中实验会话录制的默认目录为 recordings/

正常的实验环境登陆地址为 Normal 所在行链接,而 Viewonly 所在行链接可用于广播教学,给学生观看。

该登陆链接可以通过现代浏览器打开,比如 Firefox, Chromium-browser 以及 Safari,Chromium-browser 为首选,其兼容性和性能最好。

登陆 Lab

Cloud Lab 提供了多种登陆方式:

  • tools/docker/bash:在本地直接登陆容器并运行 bash 命令行
  • tools/docker/ssh:通过 ssh 在本地或者远程登陆命令行
  • tools/docker/webssh:通过浏览器登陆 ssh 命令行
  • tools/docker/vnc:通过浏览器登陆桌面

tools/docker/run 运行的最后就是执行 tools/docker/vnc 自动登陆。tools/docker/vnc 会打开一个网页,本地执行会自动填入帐号和密码登陆,远程登陆的话,可复制链接或者根据提示手动输入帐号和密码。

开展实验

登陆以后就可以在桌面上点击 Lab 终端的快捷方式开展实验,在实验过程中,可以点击桌面的 Help 快捷页面查看帮助。

已添加 Lab 的详细用法,请参考:

  • CS630 Qemu Lab:X86 Linux 汇编语言实验环境
  • Linux 0.11 Lab: Linux 0.11 内核实验环境
  • Linux Lab:Linux 内核和嵌入式 Linux 实验环境
  • Markdown Lab:Markdown 文档编辑环境,包括文档、书籍、幻灯和简历模版

实验效果

这里有一份 Linux Lab 的实验效果图:

以及相应的演示视频,该视频由 Cloud Lab 自身录制:

更多实验演示效果请参考 桌面秀 – showdesk.io

多人协同

Cloud Lab 默认开启了多人共享模式,同一个 Normal 链接可以在多处登陆,登陆后,双方都可以操作,也可以看到对方的操作,当然,由于登陆的是同一个桌面,多人不能同时操作。

广播教学

该广播教学功能可用于大学实验室教学、企业培训、远程授课、甚至是课堂或者讲座时即时演示。

授课模式

Cloud Lab 提供的 Viewonly 链接可以用于学生,该链接可以多人同时登陆,但是只可以观看,不能操作,因此很适合授课时学生使用。

在课堂或者实验室教学中,老师使用 Normal 链接进行操作演示,学生们使用 Viewonly 链接观看老师的演示,就可以完成授课过程。

互动模式(集中式)

如果学生们在观看老师的演示时也要同步做实验,那么可以通过 tools/deploy/run 人手创建一个可以操作的帐号。

例如,为学生 johntom 分别创建一个 Linux 0.11 Lab:

$ tools/deploy/run linux-0.11-lab john
$ tools/deploy/run linux-0.11-lab tom

查看实验帐号:

$ tools/deploy/release
Lab: linux-0.11-lab-29979, User: tom
* VNC: http://localhost:6080/?u=1e6005&p=ktft7s
* VNC_VIEWONLY: http://localhost:6080/?r=1e6005w7lxxm
* Webssh: http://localhost:4433/?ssh=ssh://tom:n7p7fd@10.66.0.3:22
Lab: linux-0.11-lab-29965, User: john
* VNC: http://localhost:6080/?u=3699ab&p=7cn9wn
* VNC_VIEWONLY: http://localhost:6080/?r=3699ab3mvmmp
* Webssh: http://localhost:4433/?ssh=ssh://john:tk9lbf@10.66.0.2:22

默认地址是 localhost,如果有一个域名或者主机之外可访问的 IP 地址,可以填入 .host_name,例如:

$ echo tinylab.cloud > .host_name
$ tools/deploy/release
Lab: linux-0.11-lab-29979, User: tom
* VNC: http://tinylab.cloud:6080/?u=1e6005&p=ktft7s
* VNC_VIEWONLY: http://tinylab.cloud:6080/?r=1e6005w7lxxm
* Webssh: http://tinylab.cloud:4433/?ssh=ssh://tom:n7p7fd@10.66.0.3:22
Lab: linux-0.11-lab-29965, User: john
* VNC: http://tinylab.cloud:6080/?u=3699ab&p=7cn9wn
* VNC_VIEWONLY: http://tinylab.cloud:6080/?r=3699ab3mvmmp
* Webssh: http://tinylab.cloud:4433/?ssh=ssh://john:tk9lbf@10.66.0.2:22

对于 Mac 和 Windows 系统,则可以直接填入 eth1 的 IP 地址,例如咱们上面通过 ifconfig eth1 获取到的地址:

$ echo 192.168.99.100 > .host_name
$ tools/deploy/release
Lab: linux-0.11-lab-29965, User: john
* VNC: http://192.168.99.100:6080/?u=d41d8c&p=7cn9wn
* VNC_VIEWONLY: http://192.168.99.100:6080/?r=d41d8c3mvmmp
* Webssh: http://192.168.99.100:tk9lbf/?ssh=ssh://john:linux-0.11-lab-29965@4433:22
Lab: linux-0.11-lab-29979, User: tom
* VNC: http://192.168.99.100:6080/?u=d41d8c&p=ktft7s
* VNC_VIEWONLY: http://192.168.99.100:6080/?r=d41d8cw7lxxm
* Webssh: http://192.168.99.100:n7p7fd/?ssh=ssh://tom:linux-0.11-lab-29979@4433:22

之后即可在 Mac OSX 和 Windows 系统中,访问上述链接开展实验。

互动模式(分布式)

上面的互动模式采用的是集中式,在单台服务器上创建所有实验帐号,好处是学生无需创建帐号,可以直接使用,这样的效率更高,坏处是如果同时上课的学生比较多,这台集中式的服务器就需要配置更好的硬件资源,包括处理器、内存和磁盘空间都需要根据人数进行合理配置。

如果没有这样的服务器资源,也可以采用分布式的方式,即学生们自行参照上述步骤在实验室的电脑或者自己携带的笔记本电脑上搭建好实验环境。

上述集中式的方式适合课堂上即时互动,下述分布式的方式适合在实验室上传统的实验课。

远程授课

上面介绍的三种方式适合面对面授课,如果想利用 Cloud Lab 做远程授课,需要通过 YY、钉钉、QQ、微信之类软件增加语音功能。

添加 Lab

先尽量复用现有的 Lab,如果现有的 Lab 无法满足要求,也可以自行添加。

一个 Lab 主要包括两部分:实验环境和实验源码,下面介绍如何添加它们。

添加实验环境

linux-0.11-lab 为例。

实验环境的配置文件放在 configs/ 目录下,先看看目录结构:

$ tree configs/linux-0.11-lab/
configs/linux-0.11-lab/
├── docker
│   ├── caps
│   ├── devices
│   ├── limits
│   ├── name
│   └── volumemap
├── Dockerfile
└── system
└── home
└── ubuntu
└── Desktop
├── help.desktop
├── lab.desktop
├── showdesk.desktop
└── showterm.desktop

下面对这 3 部分做介绍:

  • Dockerfile

    先找一个基础 Docker 镜像,比如 ubuntu:14.04.5,又比如 tinylab/cloud-ubuntu-vm,然后在该基础上写 Dockerfile,添加新的工具。可通过 docker search tinylab 查看现有镜像:

      $ docker search tinylab
    tinylab/linux-0.11-lab ...
    tinylab/linux-lab ...
    tinylab/cs630-qemu-lab ...
    tinylab/cloud-ubuntu-dev ...

    如果添加 Docker 镜像很通用,也可以直接往 Cloud Ubuntu 提交源码。

  • docker/

    该目录用于设置镜像名、配置资源、或者添加需要用到的设备等。镜像名命名规则为 tinylab/<LAB_NAME>,例如:tinylab/linux-0.11-lab

  • system/

    该目录按照 Linux 标准目录结构存放,例如这里添加了几个桌面快捷方式。也可以类似添加其他文件,例如预先编译好的程序或者脚本文件。

除此之外,还有一个比较重要的目录:tools/,这里没用到,该目录下可以添加两个重要文件:

  • tools/host-run

    在启动实验环境之前在主机上运行,可用于做必要的准备,比如说针对 Linux Lab,就需要先插入 nfsd 内核模块。

  • tools/container-run

    在启动实验环境后在容器内运行,比如 Linux Lab 中用它来启动一些网络服务。

准备好之后,就可以构建 Docker 镜像:

$ tools/docker/build linux-0.11-lab

构建以后如果觉得该环境有通用性,也可以往 Cloud Lab 代码仓库 提交。

添加实验源码

实验用到的源代码、文档和工具等可以创建一个 Git 仓库存放起来,甚至上传到 Github,然后可作为 git submodule 导入到 labs/ 目录下。例如:

$ cd labs/
$ git submodule add https://github.com/tinyclub/linux-0.11-lab.git

录制视频

Cloud Lab 支持自动录制实验过程。登陆进去之前,进行如下设置并点击 Apply 后再登陆即可开启录制。要停止录制,退出实验环境即可。

录制完的视频可以回放,通过设置上面的播放页面进去,选择刚录制的内容播放即可。

该功能可以用于老师录制教学演示视频,也可以用于学生交作业,检查学生的实操练习情况。

获取帐号

如果想快速体验,欢迎通过 泰晓开源小店 购买已经创建好的在线实验帐号。

如果觉得该实验平台非常有用,欢迎扫下面的二维码赞助我们。


支付宝打赏
¥9.68元
  微信打赏
¥3.69元
 
原创路上,
有您认可,
更为精彩!

本作品由 Wu Zhangjin 创作,采用 CC BY-NC-ND 4.0 协议 进行许可。未经授权,谢绝商业使用!

Cloud Lab: 泰晓实验云台【转】的更多相关文章

  1. 对比网络模拟器软件——Cisco Packet Tracer、华为eNSP、H3C Cloud Lab

    1.软件介绍 1.1 Cisco Packet Tracer Cisco Packet Tracer(以下简称PT)是一款由思科公司开发的,为网络课程的初学者提供辅助教学的实验模拟器.使用者可以在该模 ...

  2. 泰晓科技 +兰大开源社区 +程序动态分析---LINUX内核网站

    http://www.tinylab.org/ http://linux-talents.tinylab.org/lzuoss/ http://www.tinylab.org/source-code- ...

  3. 《深入理解计算机系统》实验一 —Data Lab

    本文是CSAPP第二章的配套实验,通过使用有限的运算符来实现正数,负数,浮点数的位级表示.通过完成这13个函数,可以使我们更好的理解计算机中数据的编码方式. 准备工作   首先去官网Lab Assig ...

  4. 《CS:APP》二进制炸弹实验(phase_1-3)

    <深入理解计算机系统>第三章的bomb lab,拆弹实验:给出一个linux的可执行文件bomb,执行后文件要求分别进行6次输入,每一次输入错误都会导致炸弹爆炸,程序终止.需要通过反汇编来 ...

  5. RHCE实验记录总结-2-RHCE

    RHCSA实验总结-点击跳转 RHCE实验 RHCE这边我简单分了下类: ## 网络与安全 1. IPv6 设置(推荐使用GUI程序 nm-connection-editor来完成) 2. team ...

  6. RHCE实验记录总结-1-RHCSA

    不管是运维还是开发系统的了解下Linux或者系统的温习整理一下Linux知识点无疑是较好的,这篇文章是对RHCSA&RHCE实验进行一个汇总,是我为了做实验方便(并分享给朋友)的一篇文章. 前 ...

  7. 【SEED Labs】Public-Key Infrastructure (PKI) Lab

    Lab Overview 公钥加密是当今安全通信的基础,但当通信的一方向另一方发送其公钥时,它会受到中间人的攻击.根本的问题是,没有简单的方法来验证公钥的所有权,即,给定公钥及其声明的所有者信息,如何 ...

  8. BogoMips 和cpu主频无关 不等于cpu频率

    http://tinylab.org/explore-linux-bogomips/ 内核探索:Linux BogoMips 探秘 Tao HongLiang 创作于 2015/05/12 打赏 By ...

  9. 用callgraph生成的函数调用关系图

    Wu Zhangjin 创作于 2015/04/05 评论打赏 By Falcon of TinyLab.org 2015/04/03 1 故事缘由 源码分析是程序员离不开的话题.无论是研究开源项目, ...

随机推荐

  1. Spring Cloud与微服务构建:Spring Cloud简介

    Spring Cloud简介 微服务因该具备的功能 微服务可以拆分为"微"和"服务"二字."微"即小的意思,那到底多小才算"微&q ...

  2. [洛谷P4723]【模板】线性递推

    题目大意:求一个满足$k$阶齐次线性递推数列$a_i$的第$n$项. 即:$a_n=\sum\limits_{i=1}^{k}f_i \times a_{n-i}$ 题解:线性齐次递推,先见洛谷题解, ...

  3. loj Snakes 的 Naïve Graph 【数论】

    题目链接 loj 题解 感谢珂神的指导orz 观察式子\(i \times j \equiv 1 \pmod m\),显然\(i,j\)是模\(m\)意义下成对的逆元,只需统计模\(m\)意义下存在逆 ...

  4. android与H5互相调用

    市面上很多android软件都有内嵌H5的,主要是为了节约成本,提高开发效率,其实现原理主要是通过Java代码和JavaScript代码的互相调用来实现. Java调用Js 1,webview初始化: ...

  5. 【cdq分治】【P4390】[BOI2007]Mokia 摩基亚

    Description 给你一个 \(W~\times~W\) 的矩阵,每个点有权值,每次进行单点修改或者求某子矩阵内权值和,允许离线 Input 第一行是两个数字 \(0\) 和矩阵大小 \(W\) ...

  6. python图片云

    Python 小工具 把图片拼接成任意大小新图片 代码比较简单 看注释就好 # -*- coding:utf-8 -*- #图片拼接 import PIL.Image as Image import ...

  7. where EXISTS (子查询)多对多中通过中间表查对方列表

    用户表A,小组表B,小组和用户是多对多关系,中间有个中间表M 已知 小组 id 即teamId ,想知道这个小组中的用户列表信息,可以如下写sql: select * from A a where E ...

  8. 「转」图像算法---白平衡AWB

    本文大体讲解了白平衡的算法流程,适用于想了解和学习白平衡原理的筒子们. 一般情况下要实现AWB算法需要专业的图像和算法基础,本文力图通过多图的方式,深入浅出,降低初学者理解上的门槛,让大家都理解到白平 ...

  9. postgresql 数据库无法启动

    在数据库无法启动时,一般可以根据报错信息,采取对应措施即可,下面列出一些在数据库启动时报出错误比较严重而解决方式又不那么明显的处理方法. 模拟错误,查到pg_class系统表中一个索引在磁盘中的位置, ...

  10. HDU 6230

    Palindrome Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tota ...