wiki/docs/testbed.md
Dict Xiong ec119bdbf8 nasp.ob.ac.cn -> nasp.fit (#4)
Reviewed-on: #4
Co-authored-by: Dict Xiong <me@beardic.cn>
Co-committed-by: Dict Xiong <me@beardic.cn>
2024-06-21 10:48:07 +08:00

96 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 实验机使用说明
这里描述的是重装后的实验机的使用方法。已重装的机器:
- g7、g92023-11-22
- g42023-11-24
本文档默认你已经能够登录实验机,参考:[registry](registry.md)。
## sudo权限
只有部分命令能够通过sudo免密运行定义在文件[nasp](https://git.nasp.fit/NASP/registry/src/branch/main/scripts/nasp)中,列出如下:
- `docker`
- `reboot`
- `whoami`
- `nvidia-smi`
- `shutdown`
- `ufw`
- `ip`
如果你需要以root权限运行其它命令请联系管理员。
## 启动docker容器
实验机使用容器化管理。所有实验环境均在docker环境中裸机环境仅用于启动容器、配置防火墙等。
裸机环境均配置了`dnew`命令([源码](https://git.nasp.fit/NASP/configurations/src/branch/dev/testbed/scripts/dnew)),方便用户交互式地启动容器。
```
================== dnew ===================
=== contact: xd21@mails.tsinghua.edu.cn ===
Use GPU? [yN]: y # 按需选择,默认否
Use RDMA? [yN]: y # 按需选择,默认否
Image name (default: git.nasp.fit/nasp/nasp-ubuntu): # 如果没有特殊要求,直接回车
Start up command (default: /etc/startup.sh): # 如果没有特殊要求,直接回车
Will run:
=====
sudo docker run -d --net=host -v /home2:/home2 \
--cap-add=SYS_NICE --cap-add=IPC_LOCK \
--security-opt seccomp=unconfined --ulimit memlock=-1:-1 \
--restart=unless-stopped \
--name dictxiong_231124-165705 \
--runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all \
--device=/dev/infiniband/rdma_cm --device=/dev/infiniband/issm0 \
--device=/dev/infiniband/umad0 --device=/dev/infiniband/uverbs0 \
-it git.nasp.fit/nasp/nasp-ubuntu /etc/startup.sh
=====
Start the container? [yN]: # 检查上面的命令,选择是否执行
```
启动后,`dnew`会给出进入容器的方法,可以保存备用。
常用docker命令
- `sudo docker ps -a` 显示所有容器
- `sudo docker start <container>` 启动指定的容器
- `sudo docker exec -it <container> bash` 启动指定容器中的`bash`
- `sudo docker stop <container>` 停止指定的容器
- `sudo docker rm <container>` 删除指定的容器
## 使用docker容器
在容器内部用户拥有root权限可以做任何想做的事情。如果搞坏了docker内部环境直接删除重新创建一个容器即可。
容器默认配置为开机自动启动(`--restart=unless-stopped`),除非手动将其停止。容器在启动时会自动执行启动脚本(默认`/etc/startup.sh`),你可以在这里面添加你自己的服务。
### 文件管理
通过`dnew`脚本创建的容器会把物理机上`/home2`挂载到容器内的`/home2`,建议将所有的重要数据都放置在这里面。容器内除了`/home2`之外的文件,都可能会在容器销毁后丢失。
### 安装软件
默认的`git.nasp.fit/nasp/nasp-ubuntu`镜像是一个基于Ubuntu 20的、包含cuda和rdma支持的镜像。要安装软件使用`apt`,用法与物理机上无异。
```
sudo apt update
sudo apt install zsh
```
### 容器网络
容器在运行时默认指定了`--net=host`,这意味着容器内外的网络是完全共享的。在容器内监听一个端口,等价于在物理机上监听一个端口。`ifconfig`、`ip`、`netstat`等命令有与物理机上一致的效果。
用户可以很容易把容器内的服务暴露给机器外包括web、ssh等。
### 容器内启动ssh server
你可以在容器内启动一个独立的ssh服务端从而能够自跳板机直接访问到容器内方便vscode等应用远程连接。
- 配置`/etc/ssh/sshd_config`,取消掉`#Port 22`的注释,并把它改成一个未被占用的端口;
- 如果你使用公钥登录(推荐),把你的公钥放到`~/.ssh/authorized_keys`文件中;如果你使用密码登录(务必使用强密码),使用`passwd`命令设置密码,修改`/etc/ssh/sshd_config`允许root用户使用密码登录`PermitRootLogin yes`(不推荐)。
- 启动ssh服务端`/etc/init.d/ssh start`
- 检查容器的启动脚本确保里面包含了ssh`vim /etc/startup.sh`使得下次物理机开机自动启动容器后会启动ssh服务端
随后,你就能从跳板机直接访问容器内部了。如:
```bash
ssh -p <your_port> -o ProxyJump=ssh@nasp.fit:36022 root@g7
```
> 这里使用了`root`用户,即你在容器内的用户名。如果你在容器内改用了别的用户,请相应修改。
## 自动开关机
按照FIT楼的消防要求放置在4-103的服务器应当每晚关机。自动关机的流程是每晚的22:59启动一个[关机脚本](https://git.nasp.fit/NASP/configurations/src/branch/dev/testbed/scripts/schedule-poweroff.sh),该关机脚本的逻辑是:检查是否存在文件`/tmp/skip-poweroff`若存在则将其删除然后脚本直接退出若不存在则启动时长为一小时的自动关机。机器将在23:59自动关闭。
自动开机是通过Wake-on-lan实现的每天早上由g18分批向实验机发送唤醒包。相关配置文件可以在[这里](https://git.nasp.fit/NASP/configurations/src/branch/dev/g18/wakeonlan)找到。