Server Management Notes

Server Management Notes.

Linux CUDA配置

nvidia-smi和驱动通信失败

  • 当我重启服务器后,输入nvidia-smi命令后,出现报错:

    NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

  • 这个时候查询nvcc会发现其实驱动相关的东西其实是还在的:

    1
    2
    3
    4
    5
    6
    7
    
    nvcc -V
    # 输入命令后,出现:
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Tue_May__3_18:49:52_PDT_2022
    Cuda compilation tools, release 11.7, V11.7.64
    Build cuda_11.7.r11.7/compiler.31294372_0
    
  • 接着查询当前的驱动版本:

    1
    2
    3
    
    ls /usr/src | grep nvidia
    # 输入和出现:
    nvidia-515.43.04
    
  • 记住上面的数字,自己是多少就是多少:

  • 输入:

    1
    2
    3
    
    sudo apt-get install dkms
    # then
    sudo dkms install -m nvidia -v 515.43.04
    
  • 等待安装完成即可

Linux网络配置

内网穿透

最近在实验室服务器上搭建了大模型在线体验服务,但仅限校园网用户可以访问,无法为校外用户提供服务,恰好我们有一台腾讯的云服务器,前期我们尝试在云服务器上配置校园网,但校园网的映射比较固定导致不仅没能成功,还停掉了外网的地址,不得不重启服务器。

之后我们发现了新的,更简单的免费方法,现记录如下:

  • 拥有外网ip的服务器,假设其公网ip为:x.x.x.x

  • 需要被映射的内网服务器,假设其内网ip为:y.y.y.y

  • 假设公网被访问的端口为8888,内网需要被映射的端口为9999,则:

    1
    2
    3
    
    # 内网服务器输入以下命令,让外网服务器的8888端口可访问内网的9999端口
    ssh -o ServerAliveInterval=60 -f -N -R 8888:y.y.y.y:9999 root@x.x.x.x
    # 回车后需要输入外网的账户密码,注意这里默认账户名是root,请根据实际情况进行修改
    
  • 在公网服务器上输入:

    1
    2
    
    curl http://127.0.0.1:8888
    # 一般会出现所映射到端口的信息,例如映射22,则出现SSH相关的信息
    
  • 之后,继续在公网服务器上输入:

    1
    2
    3
    4
    
    sysctl -w net.ipv4.conf.eth0.route_localnet=1
    # 允许127回环转发
    iptables -t nat -A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 127.0.0.1:8888
    # 表示让公网服务器允许将8888端口的请求转发到127回路上
    
  • 最后,按照请求内网服务器一样请求外网服务器即可,如:x.x.x.x:8888

端口防火墙

  • 打开某个端口的防火墙

    1
    2
    
    sudo firewall-cmd --zone=public --add-port=4399/tcp --permanent
    sudo firewall-cmd --reload
    
  • 查看所有打开的端口

    1
    2
    3
    
    sudo firewall-cmd --zone=public --list-ports
    # 或者限定端口的开放协议 如tcp
    sudo firewall-cmd --zone=public --list-ports tcp
    

配置ipv6:

参考: asimok’s blog

  • 检查是否已经启用ipv6支持

    1
    
    sudo cat /proc/net/if_inet6
    
  • 如果结果不为空,直接下一步,否则:

    1
    2
    3
    4
    5
    6
    7
    8
    
    sudo vim /etc/sysctl.conf
    # 添加以下内容:
    net.ipv6.conf.all.disable_ipv6 = 0 
    net.ipv6.conf.default.disable_ipv6 = 0
    # 之后,执行:
    sudo sysctl -p
    # 检查是否启用:
    sudo cat /proc/net/if_inet6
    
  • 先找一个比较快的ipv6的DNS,比如清华源等;

  • 修改配置文件,添加DNS:

    1
    2
    3
    
    sudo vim /etc/systemd/resolved.conf
    # 添加DNS,比如:
    DNS=2001:67c:2b0::6 2001:67c:2b0::4
    
  • 重启DNS服务:

    1
    2
    
    sudo systemctl restart systemd-resolved  
    sudo systemctl enable systemd-resolved
    
  • 启动配置文件:

    1
    2
    3
    
    sudo mv /etc/resolv.conf /etc/resolv.conf.bak
    # 先将原来的文件备份
    sudo ln -s /run/systemd/resolve/resolv.conf /etc/
    
  • 检查是否启用成功:

    1
    
    sudo cat /etc/resolv.conf
    

ipv4地址未出现

注意,以下操作仅在我遇到的问题中可做解决方案,若涉及生产等重要场景,请联系网络和系统管理员协助

因机房停电维护较长时间,因此再次开机时有两个服务器出现了不同的问题,其中一台输入ifconfig后只有ipv6地址

此时,输入:

1
sudo vim /etc/network/interfaces

发现只有lo的地址,也就是local地址,因此可能需要手动配一下ipv4的地址,但这里需要注意两点:

  1. 不一定网卡就叫eth0;
  2. 除非机器有申请的固定ip,否则不要直接按照网上给的address netmask gateway修改

因此,首先查看网卡设备名字:

1
2
3
4
5
6
7
8
9
ip link show
# 如果出现eno1,则:
##  还是上面的sudo vim /etc/network/interfaces
##  在这里新增:
auto eth0
iface eth0 inet dhcp

# 如果出现其他的名字,如enp129s0f0
##  类似上面的操作,进行dhcp分配即可

但有的人拥有自己固定的IP,不需要DHCP去分配,则:

1
2
3
4
5
6
7
sudo vim /etc/network/interfaces
# 进入后新增:
auto eth0
iface eth0 inet static
    address 你的固定ipv4地址
    netmask 255.255.255.0
    gateway 192.168.1.1

之后进行重启即可:

1
2
3
4
5
sudo systemctl restart networking.service
# 有时可能依旧会报错,则检查:
systemctl status networking.service
# 或者直接:
sudo systemctl restart NetworkManager.service

开机进入紧急模式

同上,另一台机器开机后,出现: welcome to emergency mode,这大概率是因为写入的自动挂载脚本问题导致的:

输入:

1
vim /etc/fstab

查看一下当初挂载了哪些磁盘,尤其是有的磁盘UUID可能会发生变化,从而导致自检不通过

个人做法

返回命令行,输入:

1
df -h

发现原本写在fstab中的有一项磁盘路径没出现在这里,我这里没出现的磁盘叫作data2,那么:

1
2
3
4
# 则最简单的办法是:注释或删除
vim /etc/fstab
## 将data2对应的UUID注释掉,返回再重启即可
# 其他办法是:利用lsblk 和 fdisk等命令,查看未挂载磁盘的UUID信息,重新修改,具体请自信检索

Linux账户配置

root

Ubuntu默认是没有root的,而是以sudo用户来代替,这种方式在绝大多数时候是安全可用的,但当sudo用户有操作不当时,会导致系统出现无法修复的问题,因此在有这种需要时,可以提前设置root用户。

  • 在具有sudo权限的用户下进行操作;

  • 设置root账户密码:

    1
    
    passwd root
    
  • 编辑配置文件:

    1
    2
    3
    4
    
    sudo vim /etc/ssh/sshd_config
    # 然后输入以下命令:
    PermitRootLogin yes
    PasswordAuthentication yes
    
  • 重启ssh服务:

    1
    
    systemctl restart ssh
    
  • 需要注意,root用户具有完全的权限,比一般的sudo用户更高,使用时务必小心。

sudo

在某个管理员账户下,给某个用户分配sudo权限,一种简单的方式是将其添加到sudo的组里面;

  • 查看sudo用户:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 查看sudo用户有哪些
    # 先安装一个包
    sudo apt-get install members
    # 再查看
    members sudo
    
    # 或者在某个用户的终端下输入groups
    groups # 以查看该用户当前所属的组
    
  • 将用户添加到sudo组:

    1
    2
    
    sudo usermod -aG sudo username
    # 将username替换为用户账户名
    
  • 将用户从sudo组移除:

    1
    
    sudo deluser username sudo
    
  • 禁止用户登录:

    1
    2
    3
    
    sudo passwd -l username
    # or
    sudo usermod -L username
    
  • 恢复用户登录:

    1
    2
    3
    
    sudo passwd -u username
    # or
    sudo usermod -U username
    

其他

利用Docker配置私人网盘

  • 首先拉取docker:

    1
    
    docker pull cloudreve/cloudreve
    
  • 接着创建必要的文件:

    1
    2
    3
    
    mkdir -vp cloudreve/{uploads,avatar} \
    && touch cloudreve/conf.ini \
    && touch cloudreve/cloudreve.db
    
  • 然后启动docker:

  • 先获取刚刚创建文件的路径:pwd,假设返回的路径是: /data0/driver

  • 然后配置文件,并启动:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    sudo docker run -d \
    --name docker-image-name \
    -p 5212:5212 \
    --mount type=bind,source=/data0/driver/cloudreve/conf.ini,target=/cloudreve/conf.ini \
    --mount type=bind,source=/data0/driver/cloudreve/cloudreve.db,target=/cloudreve/cloudreve.db \
    -v /data0/driver/cloudreve/uploads:/cloudreve/uploads \
    -v /data0/driver/cloudreve/avatar:/cloudreve/avatar \
    -e TZ="Asia/Shanghai" \
    cloudreve/cloudreve:latest
    
  • 在新版的cloudreve中,查看docker日志是没有初始管理员密码的,因此要进入docker里面重置:

    1
    
    docker exec -it docker-image-name ./cloudreve --database-script ResetAdminPassword
    
  • 即可查看到到新的初始密码,初始账户为: admin@cloudreve.org

  • 常用docker命令:

    1
    2
    3
    4
    
    docker ps # 查看运行中容器
    docker stop xxxx
    docker rm -f xxxx
    docker restart xxxx
    
个人博客,请勿转载。Personal blog, please do not repost.
Built with Hugo
Theme Stack designed by Jimmy