分类 教程 下的文章

教程 | Linux下VirtualGL+TurboVNC远程桌面使用显卡


背景

这里使用的是国产统信UOS操作系统的实体机,显卡是Nvidia Quadro P620,默认源里是没有VirtualGL和TurboVNC两个软件的,所以需要编译安装。还测试了EXSI8.0情况下使用Nvidia Tesla V100直通安装的银河麒麟SP10虚拟机,这里需要注意一下,开机启动方式必须是EFI或者UEFI,并且勾选安全启动,要不直接使用BIdOS的方式启动你的驱动时怎么也安装不上的。

安装显卡驱动

更新系统及查看相关信息

sudo apt update && sudo apt upgrade -y # 更新系统
sudo apt install dkms build-essential linux-headers-generic

sudo lsmod | grep nouveau #查看nouveau的开源驱动是否被使用
sudo lspci | grep VGA #查看集成显卡
sudo lspci | grep NVIDIA #查看英伟达显卡
sudo lshw –c video | grep configuration #查看显卡驱动

sudo systemctl stop lightdm # 暂停界面

禁用nouveau驱动

打开或创建黑名单配置文件:
通常,这个文件位于 /etc/modprobe.d/ 目录下。你可以创建一个新的配置文件专门用来禁用 nouveau,例如:

sudo touch /etc/modprobe.d/blacklist-nvidia-nouveau.conf
cat >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf << EOF
blacklist nouveau
options nouveau modeset=0
EOF

以上作用是将 nouveau 驱动添加到黑名单,并设置 nouveau 不使用任何模式设置。

如果时EXSI直通显卡的话需要启用对不支持的GPU的支持。

sudo touch /etc/modprobe.d/nvidia.conf
cat >> /etc/modprobe.d/nvidia.conf << EOF
options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
EOF

禁用驱动后,需要重新生成initramfs,以确保在下一次启动时不加载 nouveau 驱动。

sudo dracut --force # 重新生成初始化RAM磁盘Fedora、CentOS和RHEL的系统
sudo update-initramfs -u # 重新生成初始化RAM磁盘Debian或Ubuntu的系统

sudo apt --purge remove nvidia-* # 删除所有Nvidia的驱动

sudo reboot  #重启系统

官网解决此问题的大神回复1
官网解决此问题的大神回复2

安装Nvidia驱动

Nvidia官网查好版本下载指定驱动:NVIDIA-Linux-x86_64-535.183.06.run

wget https://us.download.nvidia.com/tesla/535.183.06/NVIDIA-Linux-x86_64-535.183.06.run
chmod +x NVIDIA-Linux-x86_64-535.183.06.run  # 给文件执行权限
sudo ./NVIDIA-Linux-x86_64-535.183.06.run  # 运行后一路回车确认就行

查看最终驱动安装结果:
CIOMP_2024-09-14_09-26-17.png

VirtualGL

编译环境安装

# 银河麒麟
yum install gcc gcc-c++ git cmake libstdc++-static
# 统信
sudo apt install gcc g++

依赖环境安装

# 银河麒麟
yum install opencl-headers ocl-icd ocl-icd-devel libX11-devel libXext-devel libXrender-dev libXtst-devel libXt-devel xcb-util-keysyms-devel
# 统信
sudo apt install opencl-headers ocl-icd-opencl-dev libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libxcb-keysyms-dev

下载源码编译安装

git clone https://github.com/VirtualGL/virtualgl.git  # 下载源码项目
cmake .  # 配置项目 或者加上-DCMKAE_INSTALL_PREFIX=/usr/opt参数设置安装目录 默认安装到/opt目录下
make -j9 && make install # 编译并且安装

配置

sudo nvidia-xconfig --query-gpu-info    # 查看busid
sudo nvidia-xconfig -a --allow-empty-initial-configuration --virtual=1920x1200 --busid PCI:0@3:0:0  # 填上一步中获取的busid 

sudo service lightdm stop   # 关闭显示服务
sudo /opt/VirtualGL/bin/vglserver_config    # 选1,其他都为Y,最后x退出
usermod -a -G vglusers <用户名> # 添加用户进用户组vglusers,使其具有相关权限,否则后面远程桌面的时候启用不了VirtualGL。<用户名> 改为你的用户名
sudo service lightdm start # 开启显示服务

sudo reboot

TurboVNC

依赖环境安装

# 银河麒麟
yum install libjpeg-turbo libjpeg-turbo-devel pam-devel java java-devel
# 统信
sudo apt install libturbojpeg0-dev libpam0g-dev java-dev

防止配置时出现Could no find PAM headers报错

主要是依赖安装完了,对应的头文件也有,说啥检查不到文件,应该是有些环境没配置才导致的这个错误。

注释掉unix/Xvnc/programs/Xserver/hw/vnc/CMakelists.txt的14行#message(FATAL_ERROR "Could no find PAM headers")
CIOMP_2024-09-10_20-01-30.png

下载源码编译安装

git clone https://github.com/TurboVNC/turbovnc.git
cmake .  # 配置项目 或者加上-DCMKAE_INSTALL_PREFIX=/usr/opt参数设置安装目录 默认安装到/opt目录下
make -j9 && make install # 编译并且安装

配置

/opt/TurboVNC/etc/turbovncserver.conf配置文件修改配置如下:

$useVGL=1; # 主要是让vnc使用VirtualGL
$wm="deepin"; # 正常找`/usr/share/xsession/`下的桌面配置,默认会找gnome.desktop或ubuntu.destop,统信用的lightdm,所以这里添加一个deepin。

运行vncserver

/opt/TurboVNC/bin/vncserver -geometry 1920x1080 :1 # 开启VNC

结合VirtualGL运行相关程序

/opt/VirtualGL/bin/vglrun glxinfo | grep OpenGL  # 将会输出使用显卡的情况输出

CIOMP_2024-09-14_11-28-57.png

最终连接效果

CIOMP_2024-09-13_10-32-35.png


教程 | Windows10 系统开启ssh Server服务


安装方法:

1、 下载最新的二进制安装版直接安装:
OpenSSH-Win64-v9.5.0.0.zip
也可以去开源项目里下载微软开源的openssh

2、打开防火墙,开启22端口 (也可使用控制面板中防火墙 高级 进行设置)

netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

3、 设置开机启动

Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

4 、 启动ssh服务

Start-Service sshd
Start-Service ssh-agent

教程 | Windows远程桌面多用户远程登录配置


RDP Wrapper

干嘛的?RDPWrap 是一 Windows 远程桌面登录增强工具,它可以让多个用户同时远程登录到同一台 Windows 计算机而不会互相干扰,这对于家庭用户和小型企业用户来说非常有用。

工具获取地址

  1. RDP Wrapper Github下载地址
  2. RDPWrap-v1.6.2.zip(上不了github的下这个)

使用方法

1.下载解压文件
2.右键install.bat文件以管理员方式运行,出现 successful installed 提示,就表示安装好了,按任意键关闭窗口即可。

运行完成后会在 C:Program FilesRDP Wrapper下面生成2个文件:rdpwrap.dll,rdpwrap.ini(配置文件).

CIOMP_2024-07-04_18-02-40.png
3.点击RDPConf.exe检查配置是否成功,成功如下图。
CIOMP_2024-07-04_17-57-51.png
CIOMP_2024-07-04_18-00-43.png

会出现的问题

1.RDPConf.exe中Service state后的ver.显示是 N/A。

解决办法:直接在cmd或运行里输入winver查看操作系统内部版本。

2.RDPConf.exe中出现红字的[not supported] 提示,此提示代表不能成功配置,主要原因是C:\Program Files\RDP Wrapper\rdpwrap.ini内没有当前系统对应版本的配置。

解决办法:在rdpwrap.ini项目中下载最新的rdpwrap.ini文件覆盖掉C:\Program Files\RDP Wrapper\rdpwrap.ini的。


教程 | vscode ssh远程linux开发c/c++界面程序


背景

最近又要处理统信的适配,现在的场景就是把代码放到实体机上进行编译,每次都得来回跑。。。
最近捣鼓了一下新方式进行处理,使用vscode作为代码编辑通过ssh链接linux机器,然后运行软件用x11的形式回显,这样就能在自己的机器上完美的远程编译与测试。x server在windows上的显示建议用VcXsrv,因为Xming这个东西对GLX支持的不怎么好,运行glxgears会黑屏。

环境

  1. 一台被远程的Linux机器,并且开启ssh服务
  2. 编辑器软件:vscode
  3. XServer服务: VcXsrv 或者是 Xming(还需要安装Xming-fronts才能运行)

本地vcxsrv-64.1.20.14.0.installer.zip

安装步骤

ssh免密登录

在windows中按下win+R快捷键进入cmd命令框中运行命令ssh-keygen
会在C:\Users\Administrator\.ssh文件夹下生成了两个文件

id_rsa.pub # 公钥
id_rsa # 私钥

登录服务器,在用户的.ssh目录下生成authorized_keys,该文件包含一系列允许登录该服务器的公钥,没有就新建该文件。将公钥内容追加到~/.ssh/authorized_keys

echo "公钥内容" >> ~/.ssh/authorized_keys

并在配置文件C:\Users\Administrator\.ssh\config中的对应主机下添加如下内容:

IdentityFile "C:\Users\Administrator\.ssh\id_rsa"//设置私钥路径

vscode 安装插件

本地安装【Remote - SSH】插件。
ssh连接服务器安装【Remote X11】和【Remote X11 (ssh)】两个插件。

配置

并在配置文件C:\Users\Administrator\.ssh\config中的对应主机下添加如下内容:

ForwardX11 yes
ForwardX11Trusted yes
ForwardAgent yes

本地安装X11服务

下载完VcXsrv直接安装就行,一路下一步。
安装完之后点击XLaunch.exe启动,会弹出一个配置界面。
选中Multiple windows后填写视窗ID,这里填的是0(根据自己的情况而定)下一步
CIOMP_2024-06-18_16-19-59.png
选择程序启动方式,默认就行,下一步。
CIOMP_2024-06-18_16-55-45.png
这里将禁用访问控制的配置项勾上,然后下一步,再就是完成,会在右下角留下X的图标,等待客户端的连接。
CIOMP_2024-06-18_16-58-25.png

putty的X11显示程序

配置在Connection->SSH->X11里,这里勾选Enable X11 forwaring,X display Location这个填localhost:11.0,默认转发到本地是localhost:0.0(啥也不填的情况)(会自动设置服务器的DISPLAY值),如果想修改其他端口也可以。
CIOMP_2024-06-20_20-16-10.png
配置好后连接远程linux服务器。

注:这里需要注意一下,linux的端口是putty自动设置的,会将linux设置的端口转发成本地设置端口,所以XServer的端口应与putty内设置的端口一致。

测试一下:

ciomp@ciomp-PC:~$ echo $DISPLAY
localhost:10.0
ciomp@ciomp-PC:~$ xclock
Warning: Missing charsets in String to FontSet conversion

显示效果如下:
CIOMP_2024-06-20_20-07-00.png

vscode的X11显示程序

remote x11插件配置display端口为11(根据本地XServer开启的端口一致),其他默认即可,如下:
CIOMP_2024-06-20_20-26-54.png

打开一个测试程序,配置好launch.json文件直接F5运行,效果如下
CIOMP_2024-06-20_20-31-43.png

直接在vscode终端执行测试如下:
CIOMP_2024-06-22_09-26-04.png

直接在vscode终端执行测试2如下:
CIOMP_2024-09-15_17-12-12.png

如果配置正确,但是连接出现错误的话(比如连了一宿)可以ctrl+shift+p调出命令输入框执行Remote X11: Reconnect Display

VSCode Server 下载时间过长问题

正常通过ssh连接的时候vscode会让远程机器下载VSCode Server,如果未联网或者下载慢请按如下操作:

打开VScode的帮助-关于(help-about)模块,出现Version,Commit,Data,Electron等信息,其中最关键的是Commit后面的字符串,被称为Commit ID,其是由40位十六进制字符串,利用Commit ID下载VScode Server,文件为vscode-server-linux-x64.tar.gz,下载链接有两个

https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable

https://vscode.download.prss.microsoft.com/dbazure/download/stable/${commit_id}/vscode-server-linux-x64.tar.gz 

注意把:${commit_id}替换成对应的Commit ID

下载后将vscode-server-linux解压到连接用户的目录下的.vscode-server/bin/${commit_id}下,具体操作如下:

# 1 在/home/usr/下新建文件夹.vscode-server/bin/${commit_id}
mkdir -p ~/.vscode-server/bin/${commit_id}
# 2 将vscode-server-linux-x64.tar.gz文件放置在${commit_id}目录下,并进入该文件夹
cd ~/.vscode-server/bin/${commit_id}
# 3 解压文件vscode-server-linux-x64.tar.gz
tar -xvzf vscode-server-linux-x64.tar.gz --strip-components 1
# 4 删除多余文件vscode-server-linux-x64.tar.gz
rm vscode-server-linux-x64.tar.gz
# 5 重启VScode,在安装完成Remote-ssh后,可通过ssh连接远程服务器,此时会生成data,extensions文件夹,可以连接成功,表明VScode-Server安装成功。

教程 | PowerDNS的部署与使用


PowerDNS简介

PowerDNS是一个跨平台的开源DNS服务组件,成立于20世纪90年代末,是开源DNS软件、服务和支持的主要供应商。它提供了三个核心组件:Authoritative、Recursor和dnsdist,分别作为权威服务器、域名递归解析和DNS服务负载均衡来使用,每个服务独立存在,可根据需求进行部署。PowerDNS支持多种数据库后端,包括MySQL、PostgreSQL和SQLite等,以适应不同的实际需求。在Windows环境下,PowerDNS使用Access的mdb文件记录DNS信息,而在Linux/Unix环境下则使用MySQL来记录。

PowerDNS的主要特点包括高性能、可扩展性、安全性和灵活性。它采用多线程和多进程的架构,能够处理大量的DNS查询请求,并提供快速的响应时间。同时,PowerDNS支持分布式部署,可以通过添加更多的服务器来扩展系统的容量和吞吐量。在安全性方面,PowerDNS具有DNSSEC(DNS安全扩展)支持和防止DNS缓存污染等功能。

安装

# 这边是用ubuntu。
sudo apt install pdns pdns-backend-mysql pdns-recursor

配置

mysql

mysql的服务上网找,我这里用的宝塔。
创建pdns_server数据库

CREATE TABLE domains (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255) NOT NULL,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INT DEFAULT NULL,
  type                  VARCHAR(6) NOT NULL,
  notified_serial       INT DEFAULT NULL,
  account               VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;
 
CREATE UNIQUE INDEX name_index ON domains(name);
 
CREATE TABLE records (
  id                    BIGINT AUTO_INCREMENT,
  domain_id             INT DEFAULT NULL,
  name                  VARCHAR(255) DEFAULT NULL,
  type                  VARCHAR(10) DEFAULT NULL,
  content               BLOB(64000) DEFAULT NULL,
  ttl                   INT DEFAULT NULL,
  prio                  INT DEFAULT NULL,
  change_date           INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername            VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB;
 
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);
 
CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;
 
CREATE TABLE comments (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) NOT NULL,
  comment               BLOB(64000) NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;
 
CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
 
CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB;
 
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
 
CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB;
 
CREATE INDEX domainidindex ON cryptokeys(domain_id);
 
CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB;
 
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

pdns server

vim /etc/pdns/pdns.conf
#设置数据库相关的
launch=gmysql
gmysql-host=10.0.0.110
gmysql-port=3306
gmysql-dbname=pdns_server
#管理数据库的相关用户和密码
gmysql-user=pdns_server
gmysql-password=pdns_server
#访问权限
allow-axfr-ips=0.0.0.0/0,::1
allow-dnsupdate-from=0.0.0.0/0,::1
allow-notify-from=0.0.0.0/0,::/0
allow-unsigned-notify=yes
also-notify=10.0.0.10
#daemon 启动
daemon=yes
disable-axfr=no
guardian=no
#是否master
master=yes
#是否slave
slave=no
#启动权限
setgid=pdns
setuid=pdns
#打印日志
log-dns-details=yes
log-dns-queries=no
loglevel=6
log-timestamp=yes
logging-facility=0
#开启api
api=yes
api-key=dnsadmin1syn
#启动webserver 监控
webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=0.0.0.0/0
webserver-port=8081
#监听的地址端口
local-address=0.0.0.0
local-port=54
#记录query 日志
query-logging=yes

pdns-recursor 递归解析

vim /etc/pdns-recursor/recursor.conf
#允许访问的地址
allow-from=0.0.0.0/0
#开启日志
disable-syslog=yes
#关闭dnssec 转发有用
dnssec=off
#forward-zones是只转发,不递归 少用
#forward-zones=hexug.com=127.0.0.1:54
#forward-zones-recurse是找不到就递归,找的到就转发,用逗号分隔  这里是将pdns中定义的域名,转发到pdns服务的54端口上
forward-zones-recurse=test.com=127.0.0.1:54,abc.com=127.0.0.1:54,.=114.114.114.114
#绑定在所有端口商
local-address=0.0.0.0
local-port=53
log-common-errors=yes
security-poll-suffix=
setgid=pdns-recursor
setuid=pdns-recursor

启动服务并且设置为开机启动

sudo systemctl start pdns
sudo systemctl start pdns-recursor
sudo systemctl enable pdns
sudo systemctl enable pdns-recursor

WEB管理界面 phpDNSadmin

源码Github地址
PowerDNS-Admin-0.4.2.zip 下载地址

部署的话直接用的宝塔python项目部署的。就不介绍了。