92 lines
4.8 KiB
Markdown
92 lines
4.8 KiB
Markdown
# 实验机使用说明
|
||
这里描述的是重装后的实验机的使用方法。已重装的机器:
|
||
- g7、g9(2023-11-22)
|
||
- g4(2023-11-24)
|
||
|
||
本文档默认你已经能够登录实验机,参考:[registry](registry.md)。
|
||
|
||
## sudo权限
|
||
只有部分命令能够通过sudo免密运行,定义在文件[nasp](https://git.nasp.ob.ac.cn/NASP/registry/src/branch/main/scripts/nasp)中,列出如下:
|
||
- `docker`
|
||
- `reboot`
|
||
- `whoami`
|
||
- `nvidia-smi`
|
||
- `shutdown`
|
||
- `ufw`
|
||
- `ip`
|
||
|
||
如果你需要以root权限运行其它命令,请联系管理员。
|
||
|
||
## 启动docker容器
|
||
实验机使用容器化管理。所有实验环境均在docker环境中,裸机环境仅用于启动容器、配置防火墙等。
|
||
|
||
裸机环境均配置了`dnew`命令([源码](https://git.nasp.ob.ac.cn/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.ob.ac.cn/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.ob.ac.cn/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`),你可以在这里面添加你自己的服务。
|
||
|
||
### 安装软件
|
||
默认的`git.nasp.ob.ac.cn/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端口:`sudo ufw allow <your_port>`
|
||
|
||
随后,你就能从跳板机直接访问容器内部了。如:
|
||
|
||
```bash
|
||
ssh -p <your_port> -o ProxyJump=ssh@nasp.ob.ac.cn:36022 <your_user_name>@g7
|
||
```
|
||
|
||
## 自动开关机
|
||
按照FIT楼的消防要求,放置在4-103的服务器应当每晚关机。自动关机的流程是:每晚的22:59,启动一个[关机脚本](https://git.nasp.ob.ac.cn/NASP/configurations/src/branch/dev/testbed/scripts/schedule-poweroff.sh),该关机脚本的逻辑是:检查是否存在文件`/tmp/skip-poweroff`;若存在,则将其删除,然后脚本直接退出;若不存在,则启动时长为一小时的自动关机。机器将在23:59自动关闭。
|
||
|
||
自动开机是通过Wake-on-lan实现的,每天早上,由g18分批向实验机发送唤醒包。相关配置文件可以在[这里](https://git.nasp.ob.ac.cn/NASP/configurations/src/branch/dev/g18/wakeonlan)找到。 |