以下题目任选其一完成。
第一题有问题联系 @李祖栋,第二题第三题联系 @黄凯升。
更多信息请拉到底看说明。
祖栋 giegie 十分重视服务器的安全,他想要一个跳板机。
设计一个跳板机的终端程序完成用户的登陆后台服务器的功能。
-
level-0: 完成基本的功能
用户登录到跳板机后可以继续 ssh 登陆后台主机IP并能够继续输入命令进行控制。
-
level-1: 容器化
编写 Dockerfile 将你的跳板机程序容器化,并编写 docker-compose.yml 部署配置
-
level-2
将跳板机用户密码信息与可访问的服务器等信息存入数据库中,并且实现关联。然后通过 SQL 语句来查询相关内容。
-
level-3
完成用户操作日志的记录(命令,参数,时间),存储在数据库中
-
level-4
学习配置使用公私钥的方式完成上述登陆
-
level-5
学习 FTP 的基本功能,模仿实现跳板机和后台主机的文件上传和下载功能
- 完成度到level1
- 要有基础的管理员登陆,注册用户等功能。
- 管理员支持每个用户应该可以被分配不同的访问权限。
Victor 日常被你邮不能固定 IP 的内网折磨。 他今天又连不上寝室的机了,他很难受,你快来帮帮他。
设计一个 DDNS 脚本,可以调用云服务商的 SDK,支持获取本机 IP 并定时更新域名解析记录。
-
level-0: 完成基本的功能
执行该脚本时能够自动根据预设信息获取到本机 IP 并更新解析记录。 况且没有人想自己写定时执行脚本,你快来加个定时器。 可以十分简单,只要写一个 systemd 的 timer 配置文件即可。当然你有其它想法也可以
-
level-1: 容器化
编写 Dockerfile 支持将 DDNS 脚本容器化,并编写 docker-compose.yml 部署配置。
-
level-2: 多种获取 IP 的方式
没有人知道你默认用什么方式获取 IP,但我们希望你有多种方式获取 IP,例如:
- 请求 IP 公开 API (例如 ip.sb) 来获取公网 IP
- 读取预设的网卡信息来获取本地内网 IP(可查阅资料考虑如何在容器内支持)
- 通过 socket 获取本机 IP
- 允许用户自行配置获取 IP 的命令,从命令中提取输出
- …… 办法有点多,都可以狠狠地写
-
level-3: 支持 IPv6
你邮都有 IPv6 了,怎么能不资瓷一下呢?
你问我资瓷不资瓷,我说资瓷,我就明确地告诉你 -
level-4: 不调用云厂商提供的 SDK,自行实现 API
造轮子是一种艺术。
- 必须支持配置文件而非写死的配置方式。
- 有基本的异常处理能力。例如更新时出现网络错误程序不直接崩溃而是输出错误信息后平和地退出等。
- 选取配置文件使用命令行参数解析或环境变量等方式。
Nginx 刷版本号刷的好快,Victor 是懒狗,他想偷懒。他的 nginx 魔改过,所以还是一键升级得好。
设计一个脚本实现一键以编译安装的方式升级 nginx
-
level-0: 实现基本功能
自动化下载指定版本 nginx 源码并根据用户提供的编译参数编译安装
-
level-1: 真·一键升级
从本机的 nginx 读取版本号信息,并和 nginx 官网上的最新版版本号比较,如果版本较低就下载安装否则就问问神奇海螺什么都不做。
-
level-2: 自动从当前已安装的 nginx 中提取编译参数
先前编译参数是用户提供的,Victor 有时候会犯蠢弄丢,建议支持从本地 nginx 中提取捏。
-
level-3: 安装完自动重启 nginx 并且支持回滚
升级就要看到效果,就要灵就要灵,但是如果炸了就好玩了,所以需要支持检测一下如果升级导致 nginx 起不来了得把原来的版本换回去。
- 必须能够无人值守运行,也就是说必须能够不通过终端读入配置。
- 需要能够自动获取下载链接,对于 level-1 必须能够自动获取到最新版版本号。
- 有基本的异常处理能力,例如编译错误时能够不执行接下来的步骤等。
- 若使用 shell 实现,必须能够直接通过 shellcheck。
你太强了。
如果你觉得上面的题目都小菜一碟,你可以自己选定题目,并于 2022 年 1 月 1 日之前联系 @李祖栋 或 @黄凯升。
- 截止时间:2022 年 2 月 25 日 23:59
- 提交方式:Fork 此项目,在对应题目的文件夹下放入你的工程文件夹,工程文件夹以你的学号命名,然后提出 Pull Request
- 基础要求:Level 0 ~ Level 1
- 尽量完成基础要求吧,给大家的时间足够长了。截止的时候即使没做出来,也要尽量交,做到多少算多少。
- 语言不限,鼓励在寒假自学语言。
- 非代码核心部分,允许调库。但严禁核心部分调库(例如 DDNS,禁止直接调用实现 ddns 的库)。
- 不要照抄代码,至少你得把变量名给我改一下吧?我说的是,提交的内容不要照抄网上的,学的时候,多抄几遍然后自己理思路了自己重写,就是学习了~
- 不要抄代码!!!不要抄代码!!!不要抄代码!!!后果自负~
- 不要拖不要拖,当鸽子要有能当的了鸽子的觉悟。尽最大努力去做,实在不会的知识线上来问我们,我们都比较乐意。
- 提交的时候应当带有一个
README.md
,详细地说明你的程序能够做哪些工作,有哪些功能还没有实现,有哪些 bug。
README.md
的编写和程序组织结构可以参考去年寒假考核中我们的做法。