转自: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. Pentaho的Mondrian对Hive的支持

    需求描述 考虑直接在Hive或者Impala等Big Data方案,能够支持MDX查询,现调研一下Mondrian对hive的支持情况. 环境准备 hive环境,采用hive-0.10-cdh4.2. ...

  2. BZOJ 2738 子矩阵第k大 | 二维树状数组 整体二分 分治

    BZOJ 2738 "矩阵乘法"(子矩阵第k大) 题意 给出一个矩阵,多次询问子矩阵中第k大的数是多少. 题解 我做这道题之前先照着这道题出了一道题,是这道题的一维版本,在这里:h ...

  3. 洛谷 P1685 游览 解题报告

    P1685 游览 题目描述 顺利通过了黄药师的考验,下面就可以尽情游览桃花岛了! 你要从桃花岛的西头开始一直玩到东头,然后在东头的码头离开.可是当你游玩了一次后,发现桃花岛的景色实在是非常的美丽!!! ...

  4. NetApp常用巡检命令

    常用检查命令 environment status 查看环境信息 version 查看OS版本 sysconfig -v 查看系统信息(设备序列号 系统软.硬件信息等) sysconfig -a 查看 ...

  5. 解题:SCOI 2005 骑士精神

    题面 我把这个当做IDA*的模板题的说,说说我个人对IDA*的理解 IDA*是一个DFS,和A*一样,它也有一个乐观的估价函数.这里这个估价函数是用来限制状态的扩展的,如果当前代价加上乐观的估计都无法 ...

  6. Jenkins(二)---jenkins之Git+maven+jdk+tomcat

    git+maven+jdk+tomcat  这四个软件可以百度在linux下的安装,不再赘述. server A --->   jenkins主机ip:192.168.100.119 serve ...

  7. c语言条件编译和预编译

    转自http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html 一.C语言由源代码生成的各阶段如下: C源程序->编译预处理-> ...

  8. C++ public private protect 继承关系(链接)

    基础链接 总结:  public继承基类成员访问权限没有变化; protected继承基类public和protected权限变为protected,基类private不变. private继承基类p ...

  9. 阿里云上部署了zabbix,突然无法收到报警邮件的解决办法

    在阿里云上部署了zabbix,一直能正常接收到zbx发来的报警邮件(报警邮箱是163的),不知是什么原因,突然无法接收到报警邮件了. 但在服务器上手动执行echo "hello"| ...

  10. [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

    转载自:https://segmentfault.com/a/1190000006435886 解决办法:添加package.config.js配置文件中,添加本文章的红色部分代码 import vu ...