APP下载

基于公有云的操作系统实验平台建设方案

2020-07-10朱小军

计算机教育 2020年4期
关键词:内核账号服务器

朱小军

(南京航空航天大学 计算机科学与技术学院,江苏 南京 211106)

0 引言

操作系统课程一般分为原理课程和实践课程两部分,在笔者所在高校这两部分是同步开展的。但学生的反馈一般是“理论简单,实验难”。原因在于,实验涉及大量的软硬件交互,一方面需要用汇编语言管理硬件,同时要用高级语言给上层应用提供支撑。虽然“难”,但是学生在坚持完成后获得了收获和成长,因此,“难”是不可或缺的[1]。作为任课教师,我们希望尽力为学生减少不必要的、与核心知识点相关性较弱的负担。在教学实践中,“配置实验环境”给学生带来了不小的麻烦。如何在经费有限的前提下,搭建一个既方便学生修改调试内核,又能够为教师批改程序提供支撑的操作系统实验平台,十分必要。

1 操作系统实验平台的现状

操作系统实验,尤其是内核实验,需要特殊的运行环境。笔者提出了一套基于xv6 的内核实验[1]。由于编译工具链的原因,这套实验依赖Ubuntu 操作系统,并且编译完成的xv6 内核需要在QEMU(一个虚拟机)上运行。如果电脑是Windows 操作系统,则需要首先创建一个虚拟机,在虚拟机上安装Ubuntu 操作系统,整个运行环境如图 1 所示。

在教学中尝试多种实验教学平台搭建方案,遇到一些困难。

图1 教学实践中xv6 操作系统通常的运行环境

1.1 基于公共机房的方案

机房中的机器预装了Ubuntu 系统,事先配置了xv6 操作系统的编译、运行环境,学生开机即可使用。遗憾的是,自从开展xv6 内核实验以来,这种方案是学生采纳最少的方案。原因在于xv6 内核实验任务较重,需要长时间的思考与调试,而机房的位置以及开放时间存在极大局限性。当同时提供该方案和以下方案给学生时,几乎没有学生选择此方案完成实验任务。

1.2 基于虚拟机映像和学生电脑的方案

目前,大多数学生都配备有个人电脑,可以让学生在自己的电脑上配置如图 1 所示的运行环境。为了避免工具链上的差异,教师可以发布虚拟机映像给学生,要求学生安装、运行规定的虚拟机映像。清华大学向勇、陈渝老师的操作系统公开课采用了类似方案[2]。笔者在2016 年、2017年春季学期使用了这个方案,但在教学过程中遇到了以下问题:①部分学生的机器性能较弱,无法流畅运行虚拟机。尤其对于上网本,在其上安装虚拟机会有较高时延,影响学生做实验的积极性。有一部分学生最终选择了借用同学的笔记本做实验,一方面无法保证开展实验的时间,另一方面也对教师评定成绩造成了影响。②教师无法实时跟踪学生进展,即较难统计学生在各个实验中所花费的时间,而这点对于改进实验课程至关重要。

1.3 基于Cloud9 云服务器的方案

Cloud9 是一个免费的云服务提供商,用户可以创建虚拟主机(只支持Ubuntu 操作系统),然后通过网页浏览器访问虚拟主机。其方便之处在于用户可以在浏览器中直接编辑、调试、运行虚拟主机上的程序。虽然偶尔网速较慢、一些特殊时期网页无法打开,但最终学生均顺利完成了任务,反馈良好。遗憾的是,该平台已被亚马逊收购,自2019 年起无法使用。

在2018 年春季,经学生的推荐,采用Cloud9(https://c9.io)作为实验平台。在一个学期的使用过程中,笔者发现了使用云服务器的便捷之处,为本文的方案提供了基础。

1.4 国外高校的超级计算机方案

部分美国高校,如威廉玛丽学院、纽约州立大学宾汉姆顿大学,为学生提供了超级计算机账号,其操作方式类似于云服务器,相当于每个学生拥有一台位于学院/系的、可远程操作的计算机。当然,这个账号并非是针对某个课程而分配的。除了学习以外,学生完成科研任务也是用此账号。采用这种方案完成操作系统实验的主要优点包括:①学生可以使用低配置的设备登录超级计算机;②教师同样有超级计算机的账号,通过一定的权限设置,可以方便发布实验任务,同时收集学生的内核实验信息。

国内部分高校使用自有硬件搭建了用于教学的私有云平台[3],南京航空航天大学目前正在搭建类似平台,同时用于教学和科研。目前,这种平台的硬件、维护成本较高,距离大规模推广需要一定时间。

综合以上方案,搭建基于公有云的实验平台,并在2019 年春季学期进行试点,得到了学生的积极响应和大量正面反馈。

2 基于公有云的实验平台搭建方案

目前国内的公有云平台包括阿里云、腾讯云、京东云等。由于经费不足,可以选取腾讯云,使用2 核、2GB 内存、50G 硬盘、1Mbps 宽带、预装Ubuntu 的云服务器一台(价格为3 年¥3 060,2019 年11 月27 日查询)。学生和教师访问和修改同一台云服务器,通过适当的设置限制学生账号的权限。以下命令和脚本在Ubuntu 16.04.1 LTS 上测试成功,关于命令和脚本的详细介绍参见专业书籍[4]。

2.1 教师和学生账户的设置

教师为云服务器的管理员,是Ubuntu 系统的超级用户,可以访问系统中的所有资源,可以直接使用腾讯云提供的默认超级用户(用户名为:Ubuntu)。

教师需要配置实验环境,包括安装编译工具链和虚拟机QEMU。配置环境方法等同于配置单独一台机器的方法。这个实验环境由教师和学生共享,而且学生账号无法升级、更新工具链,可以避免出现学生的程序教师无法运行的情况。

教师需要创建学生账号,学生账号的权限需要特殊设计。

(1)学生账号可以有ssh 的权限。

(2)学生账号只可以在自己的用户目录下创建文件,不可以读写其他学生用户目录下的内容。

(3)学生账号的shell 为bash(默认为/bin/dash,不支持自动命令补全)。

在Ubuntu 系统下,创建满足以上条件的学生用户Alice 的步骤如下。

(1)修改/etc/skel/.profile 文件中的umask 为027,即,用户新创建的文件,同组用户不可写、其他用户不可读不可写不可执行。

(2)执行命令useradd -m -s/bin/bash -K UMASK=027 Alice。其含义是,创建用户Alice,同时创建其用户目录(-m 选项指明)、用户目录的权限减去027(-K UMASK=027 指明)、用户的shell 为/bin/bash(-s/bin/bash 指明)。经过测试,如果不加上-K UMASK=027,则创建的Alice 的用户目录权限为“drwxr-xr-x”,即A 学生可以进入B 学生的目录,虽然不可以创建文件或者读文件(由于步骤1 改了umask),但是A 学生依然可以看到B 学生添加了哪些文件。使用步骤2 的命令后,用户目录权限为“drwxr-x---”,A 学生无法读取或者进入B 学生的目录。创建的用户默认拥有ssh 权限。

(3)执行命令 echo -e “Alice Alice”|passwd Alice。其含义是,修改Alice 用户的默认密码为Alice。选项“-e”的含义是将字符串中的“ ”进行解释,即换行。之所以采用这种写法是为了便于编写脚本。

创建学生用户的shell 脚本如下:

其中学生用户名存放在同目录下的stulist 文件中,并且每行存储一个用户名。执行“sudo su”后(即在root 用户下)运行此脚本。

2.2 实验任务的发布方法

每个实验在发布时包括两部分,一部分是文字要求,一部分为基础要求。学生需要按照文字要求在基础代码上加以改进达到实验目的。文字要求可以通过网页发布。相对而言,如果基础代码通过网页发布,则学生需要下载代码到本地、上传代码到云服务器、解压代码,造成不必要的麻烦。

为此,将基础代码直接放置在云服务器上,设置为学生可读但不可写。例如,可以将基础代码目录命名为proj0-base,放置在/home 目录下,设置该目录的其他用户权限为“r-x”,即其他用户可读、不可写、可执行,对proj0-base 目录下的所有文件的其他用户权限设置为“r--”,即可读、不可写、不可执行。如此,学生在命令行执行命令cp -r/home/proj0-base .即可将基础代码复制到本地目录下。

2.3 支持截止日期的作业收集方法

学生在完成实验后,需要在截止日期前提交作业。通常的方法是搭建ftp 服务器让学生上传作业,在截止日期后关闭ftp 服务器;或者让学生发送邮件提交作业,利用邮件发送时间过滤超期的作业。这两种方法都有一个缺陷,即教师需要花费精力维护ftp 服务器,或者提取邮件的附件。

可以使用另外一种简单的方案,让学生将作业放在自己用户目录下的指定文件夹内,例如,每个学生将proj0 需要提交的代码和文件放置到用户目录的submit-proj0 文件夹下。教师设置一个定时任务,在截止日期时将此目录的拥有者改为root,这样,学生在截止日期后便不可以向该目录添加任何内容(因为文件在创建时的umask为027,即其他用户不可读不可写不可执行,当拥有者被修改后,原拥有者相对于文件而言变为其他用户)。将以下脚本保存在chown.sh 文件中:

然后,以root 身份执行命令

at -f chown.sh 23:59 032119

即可在2019 年3 月21 日23 点59 分执行脚本文件chown.sh。此后,教师可以通过脚本将所有学生提交的作业集中到某个文件夹下供批阅。

2.4 学生编写调试内核方法

学生拿到账号后,可以通过ssh 命令登录到服务器编写程序,但这样只能使用nano、vim 等命令行编辑器,对学生而言有困难。相对而言,学生更熟悉Sublime Text 以及VS Code 等工具。测试发现这些工具通过恰当的配置,均可以连接到课程的服务器。具体配置方式参见各工具的网站。

学生在调试和运行内核时,依然需要从命令行通过ssh 命令登录到课程服务器。笔者建议学生通过公钥的方式登录服务器,避免重复输入密码。具体如下:①在本地客户端(如git bash),执行命令 ssh-keygen 生成一对密钥;②在命令行执行 ssh-copy-id Alice@202.119.32.6 的方式将本地公钥添加到服务器端,这里假设用户名为Alice,课程服务器为202.119.32.6.

此后,用户登录服务器无需输入密码。

当服务器无域名或者域名不容易记忆时,可以通过设置ssh 的config 文件缩短服务器名称,具体操作方式如下:

打开ssh 客户端,进入到~/.ssh 目录下,创建一个名为config 的文件,输入以下内容:

其中,关键字Host 后的uos 即为别名,HostName 关键字指明、服务器地址,Port 关键字指明端口号,默认为22,User 关键字指明用户名,IdentityFile 关键字指明公钥文件。

设置完成后,学生只需在命令行输入 ssh uos,即可登录到课程服务器。

3 教学效果和经验

笔者在2019 年春季学期在南航计算机科学与技术学院软件培优班进行了试点,获得了学生的积极反馈。

学生对云服务器的使用充满了兴趣,一方面给教学方案提供了宝贵的意见,如2.4 节的方法是在学生提出意见后笔者改进的方案;另一方面,学生可以随时使用各种设备登录课程服务器,学生在课堂上使用小型平板电脑调试程序,验证理论课的概念。事实上,安卓与苹果手机均有ssh 客户端软件,可以远程访问服务器。笔者采用的方案做到了让学生能够随时随地访问课程服务器,随时随地做实验。课程结束后,部分学生自行采购了云服务器,从一定程度上推动了学生对云计算的了解。

教师可以顺利复现学生的结果,此外,发布实验和收集学生作业更方便。基于该方案,教师可以全面了解学生的实验进展。例如,可以统计实验从发布到截止期间学生的登录情况。图2 所示为某一次实验的登录状况。

图2 某次实验从发布到截止学生登录服务器的状况

可以看到,虽然留给学生2 周时间,但大部分学生从最后一周才开始登录服务器做实验(课程班共有20 位学生)。事后分析,应该是笔者强调每个实验至少需要一周的时间完成,所以学生恰好留了一周时间做实验。

应当指出,并不建议将学生的工作时间或者登录次数与最终成绩关联。掌握学生的编程时间或登录次数可以从一定程度反应实验的难度和工作量,从而可以动态调节截止日期或实验的难度,例如在课堂讲授中给与提示。

4 结语

在公有云上搭建操作系统实验平台的方案,具有快速部署、成本低的优点。云服务器的租赁价格约为每年1 000 元,可以流畅支持20 人的教学班。学生可以通过支持ssh 的任意智能终端(如笔记本、平板电脑、上网本等)随时随地登录课程服务器,编写、调试内核程序。教师可以通过简单的脚本统计学生工作时间以便动态调整实验难度和内容。笔者在2019 年春季学期在包含20人的班级试点了该方案,受到了学生的普遍欢迎和积极评价。

该方案还有一些欠缺之处。笔者并未在更大规模的班级做测试,不确定单台云服务器能够支持的学生数的极限。此外,目前学生提交的程序由教师和助教人工测试,如何进行自动化测试甚至实时反馈给学生成绩是一个很有价值且值得探索的方向。

猜你喜欢

内核账号服务器
玩游戏没账号租一个就行
强化『高新』内核 打造农业『硅谷』
施诈计骗走游戏账号
活化非遗文化 承启设计内核
微软发布新Edge浏览器预览版下载换装Chrome内核
2018年全球服务器市场将保持温和增长
Google Play游戏取消账号绑定没有Google账号也能玩
给骗子汇款
用独立服务器的站长注意了
定位中高端 惠普8路服务器重装上阵