Intel ACRN 安装WIN10 VM

news2024/11/16 11:44:36
上一篇帖子记录了ACRN运行rt linux,这篇帖子记录一下最近倒腾出来的WIN10。目前架构如下

ACRN可以把它理解为一个基于Linux类似软件的Type1 Hypervisor,基于Linux去做而不是baremetal是为了更方便去配置资源。

首先我们得有两台电脑,一台是开发机,另一台是目标机

开发机:

主要用于编译ACRN_hypervisor和ACRN_kernel ,另外建议目标机使用intel的ECI-Jammy(基于ubuntu魔改的)core-jammy — ECI documentation (intel.com) 目前版本应该在3.1

目标机:

运行ACRN_Service_VM以及guest_VMs

我这边用的是cpu为12代i7的目标机,制作WIN10启动镜像需要用到OVFM.FD,这个是按intel的cpu代数区分的,所以不是很通用。

Step1 环境配置

首先进入目标机的BIOS,修改下面的选项,PM Support是8代core才有的,所以不用管

然后我的建议是使用ECI--jammy作为目标机的操作系统core-jammy — ECI documentation (intel.com) 

虽然ACRN官方文档用的是Ubuntu22.04,但是我推荐ECI-Jammy,理由如下:

1.ECI-Jammy基于ubuntu魔改,有intel优化,而且还支持apt-get

2.ECI-Jammy有intel的仓库,有运动控制库

3.ECI-Jammy自带intel基于cpu优化过的preempt-rt

4.ECI-Jammy会生成.img镜像,可以直接给ACRN的rt_vm当做镜像用

假设你用的是ECI,由于默认的静态ip设置会和ACRN的冲突,一个是networking脚本配置,一个是systemd-networkd管理,所以我们要统一一下,开机后

如果用ECI的话,请把eci-user加入sudoers

$ su

$ nano /etc/sudoers

root    ALL=(ALL:ALL) ALL

eci-user ALL=(ALL:ALL) ALL

$ :wq

source /home/eci-user/.bashrc
$ sudo apt update
$ cd /etc/network
$ rm interfaces

$ cd /etc/systemd/network

$ touch 20-static.network

$ nano 20-static.network

[Match]
Name=enp4s0
[Network]
Address=192.168.8.89
Gateway=192.168.8.1
DNS=8.8.8.8
DNS=8.8.4.4

[DHCP]
UseDNS=false



$ sudo systemctl enable systemd-networkd
$ sudo systemctl restart systemd-networkd

按照官方文档配置好开发机

Getting Started Guide — Project ACRN™ 3.3 documentation

插上USB键盘鼠标,生成my_board,当生成my_board.xml后,我们要使用acrn_configurator去生成配置,然后编译acrn_hypervisor和acrn_kernel。 

ACRN Configurator Tool — Project ACRN™ 3.4-unstable documentation

在acrn_configurator中,找到VM0,改名成ACRN_Service_VM,并在内核命令中设置i915.modeset=0

在acrn_configurator中创建一个WIN10的VM,把PCI里的VGA传递进去,在USB里把我们的鼠标键盘也传递进去

按照文档编译 ACRN_hypervisor和ACRN_kernel 然后安装到目标机上

开机后选择带有VM标识的启动项 

​ 

不出意外你应该 卡在这个界面,这是因为我们modeset=0以后,显示器不会显示console了,因为WIN10要用到。

Step2 三个东西

不要担心,我们还是能通过ssh的方式连接上的

ssh eci-user@192.168.8.89

然后我们要准备三个东西

1. Windows10.iso

下载 Windows 10一定要从这里下载安装器,然后选择USB介质,下载Windows10.iso,大概4.7G,不要去下三方的雨木林风什么的,识别不到的

2.winvrito

这个是oracle的一个虚拟化驱动,https://edelivery.oracle.com/osdc/faces/SoftwareDelivery在这个网站注册,然后选择Download Package.输入 Oracle Linux 7.6 并点击 Search.

选择DLP: Oracle Linux 7.6 点击continue

选择x86-64-bit

右键该项,选择另存为,解压后得到 winvrito

3.OVMF.fd

这部分的连接在此,但是无法完全根据上面的内容进行操作就是了

Enable GPU Passthrough (GVT-d) — Project ACRN™ 3.4-unstable documentation

打开你的开发机,安装docker(请自行安装,这里不做说明)

$ cd ~
$ git clone https://github.com/projectacrn/acrn-edk2.git

$ docker pull ubuntu:16.04

 网页提供了一个脚本,我也放在这里

#!/bin/bash
# Copyright (C) 2021 Intel Corporation.
# SPDX-License-Identifier: BSD-3-Clause
#
# PREREQUISITES:
# 1) Get your specific "IntelGopDriver.efi" and "Vbt.bin"
#    from your BIOS vender
# 2) Install Docker on your host machine and allow non-root users
#    For Ubuntu: https://docs.docker.com/engine/install/ubuntu/
#    To enable non-root users: https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user
# 3) If you are working behind proxy, create a file named
#    "proxy.conf" in ${your_working_directory} with
#    configurations like below:
#    Acquire::http::Proxy "http://x.y.z:port1";
#    Acquire::https::Proxy "https://x.y.z:port2";
#    Acquire::ftp::Proxy "ftp://x.y.z:port3";
#
# HOWTO:
# 1) mkdir ${your_working_directory}
# 2) cd ${your_working_directory}
# 2) mkdir gop
# 3) cp /path/to/IntelGopDriver.efi /path/to/Vbt.bin gop
# 4) cp /path/to/build_acrn_ovmf.sh ${your_working_directory}
# 5) ./build_acrn_ovmf.sh
#
# OUTPUT: ${your_working_directory}/acrn-edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd
#
# For more information, ./build_acrn_ovmf.sh -h
#

gop_bin_dir="./gop"
docker_image_name="ubuntu:ovmf.16.04"
proxy_conf="proxy.conf"
acrn_ver="latest"

if [ ! -x "$(command -v docker)" ]; then
    echo "Install Docker first:"
    echo "If you are using Ubuntu, you can refer to: https://docs.docker.com/engine/install/ubuntu/"
    exit
fi

if [ ! -d "${gop_bin_dir}" ]; then
    mkdir ${gop_bin_dir}
    echo "Copy IntelGopDriver.efi and Vbt.bin to ${gop_bin_dir}"
    exit
fi

if [ ! -f "${gop_bin_dir}/IntelGopDriver.efi" ]; then
    echo "Copy IntelGopDriver.efi to ${gop_bin_dir}"
    exit
fi

if [ ! -f "${gop_bin_dir}/Vbt.bin" ]; then
    echo "Copy Vbt.bin to ${gop_bin_dir}"
    exit
fi

if [ ! -f "${proxy_conf}" ]; then
    touch "${proxy_conf}"
fi

usage()
{
    echo "$0 [-v ver] [-i] [-s] [-h]"
    echo "  -v ver: The release version of ACRN, e.g. 2.3"
    echo "  -i:     Delete the existing docker image ${docker_image_name} and re-create it"
    echo "  -s:     Delete the existing acrn-edk2 source code and re-download/re-patch it"
    echo "  -h:     Show this help"
    exit
}

re_download=0
re_create_image=0

while getopts "hisv:" opt
do
    case "${opt}" in
        h)
            usage
            ;;
        i)
            re_create_image=1
            ;;
        s)
            re_download=1
            ;;
        v)
            acrn_ver=${OPTARG}
            ;;
        ?)
            echo "${OPTARG}"
            ;;
    esac
done
shift $((OPTIND-1))

if [[ "${re_create_image}" -eq 1 ]]; then
    if [[ "$(docker images -q ${docker_image_name} 2> /dev/null)" != "" ]]; then
        echo "===================================================================="
        echo "Deleting the old Docker image ${docker_image_name}  ..."
        echo "===================================================================="
        docker image rm -f "${docker_image_name}"
    fi
fi

if [[ "${re_download}" -eq 1 ]]; then
    echo "===================================================================="
    echo "Deleting the old acrn-edk2 source code ..."
    echo "===================================================================="
    sudo rm -rf acrn-edk2
fi

create_acrn_edk2_workspace()
{
    echo "===================================================================="
    echo "Downloading & patching acrn_edk2 source code ..."
    echo "===================================================================="

    [ -d acrn-edk2 ] && sudo rm -rf acrn-edk2

    git clone https://github.com/projectacrn/acrn-edk2.git
    if [ $? -ne 0 ]; then
        echo "git clone acrn-edk2 failed"
        return 1
    fi

    cd acrn-edk2
    git submodule update --init CryptoPkg/Library/OpensslLib/openssl
    if [ $? -ne 0 ]; then
        echo "git submodule acrn-edk2 failed"
        return 1
    fi

    if [ "${acrn_ver}" != "latest" ]; then
        git checkout --recurse-submodules -b "v${acrn_ver}" "ovmf-acrn-v${acrn_ver}"
        if [ $? -ne 0 ]; then
            echo "git checkout --recurse-submodules -b v${acrn_ver} ovmf-acrn-v${acrn_ver} failed"
            return 1
        fi
    fi

    wget -q https://projectacrn.github.io/${acrn_ver}/_static/downloads/Use-the-default-vbt-released-with-GOP-driver.patch
    if [ $? -ne 0 ]; then
        echo "Downloading Use-the-default-vbt-released-with-GOP-driver.patch failed"
        return 1
    fi

    wget -q https://projectacrn.github.io/${acrn_ver}/_static/downloads/Integrate-IntelGopDriver-into-OVMF.patch
    if [ $? -ne 0 ]; then
        echo "Downloading Integrate-IntelGopDriver-into-OVMF.patch failed"
        return 1
    fi

    git am --keep-cr Use-the-default-vbt-released-with-GOP-driver.patch
    if [ $? -ne 0 ]; then
        echo "Apply Use-the-default-vbt-released-with-GOP-driver.patch failed"
        return 1
    fi

    git am --keep-cr Integrate-IntelGopDriver-into-OVMF.patch
    if [ $? -ne 0 ]; then
        echo "Apply Integrate-IntelGopDriver-into-OVMF.patch failed"
        return 1
    fi

    return 0
}

create_docker_image()
{
    echo "===================================================================="
    echo "Creating Docker image ..."
    echo "===================================================================="

    cat > Dockerfile.ovmf <<EOF
FROM ubuntu:16.04

WORKDIR /root/acrn

COPY ${proxy_conf} /etc/apt/apt.conf.d/proxy.conf
RUN apt-get update && apt-get install -y vim build-essential uuid-dev iasl git gcc-5 nasm python-dev
EOF

    docker build -t "${docker_image_name}" -f Dockerfile.ovmf .
    rm Dockerfile.ovmf
}

if [[ "$(docker images -q ${docker_image_name} 2> /dev/null)" == "" ]]; then
    create_docker_image
fi

if [ ! -d acrn-edk2 ]; then
    create_acrn_edk2_workspace
    if [ $? -ne 0 ]; then
        echo "Download/patch acrn-edk2 failed"
        exit
    fi
else
    cd acrn-edk2
fi

cp -f ../${gop_bin_dir}/IntelGopDriver.efi OvmfPkg/IntelGop/IntelGopDriver.efi
cp -f ../${gop_bin_dir}/Vbt.bin OvmfPkg/Vbt/Vbt.bin

source edksetup.sh

sed -i 's:^ACTIVE_PLATFORM\s*=\s*\w*/\w*\.dsc*:ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc:g' Conf/target.txt
sed -i 's:^TARGET_ARCH\s*=\s*\w*:TARGET_ARCH           = X64:g' Conf/target.txt
sed -i 's:^TOOL_CHAIN_TAG\s*=\s*\w*:TOOL_CHAIN_TAG        = GCC5:g' Conf/target.txt

cd ..

docker run \
    -ti \
    --rm \
    -w $PWD/acrn-edk2 \
    --privileged=true \
    -v $PWD:$PWD \
    ${docker_image_name} \
    /bin/bash -c "source edksetup.sh && make -C BaseTools && build -DFD_SIZE_2MB -DDEBUG_ON_SERIAL_PORT=TRUE"

这时候你会发现,根据网页的内容,无论是一种方式还是第二种都会报错:

第一种,因为gcc不是gcc-5

 第二种,不知道为什么就报错了

这时候你得创建这个docker,然后step by step,之前运行脚本后会生成一个ubuntu:ovmf.16.04的docker镜像,首先自己创建该镜像,然后准备好你的Vbt.bin和IntelGopDriver.efi以及网页里提到的两个patch

  • Use-the-default-vbt-released-with-GOP-driver.patch

  • Integrate-IntelGopDriver-into-OVMF.patch

$ sudo docker create -it ubuntu:ovmf.16.04
$ docker start container_id

$ cd ~
$ docker cp acrn-edk2 container_id:~/
$ docker cp Vbt.bin container_id:~/
$ docker cp IntelGopDriver.efi container_id:~/
$ docker cp Use-the-default-vbt-released-with-GOP-driver.patch container_id:~/
$ docker cp Integrate-IntelGopDriver-into-OVMF.patch container_id:~/

$ docker exec -it container_id /bin/bash
$ cd ~
$ cp Use-the-default-vbt-released-with-GOP-driver.patch ./acrn-edk2
$ cp Integrate-IntelGopDriver-into-OVMF.patch ./acrn-edk2
$ cd acrn-edk2/OvmfPkg/
$ mkdir IntelGop
$ mkdir Vbt
$ cd ~
$ cp IntelGopDriver.efi  acrn-edk2/OvmfPkg/IntelGop/IntelGopDriver.efi
$ cp Vbt.bin acrn-edk2/OvmfPkg/Vbt/Vbt.bin
$ cd acrn-edk2
$ git apply Use-the-default-vbt-released-with-GOP-driver.patch
$ git apply Integrate-IntelGopDriver-into-OVMF.patch
$ cd acrn-edk2
$ git submodule update --init CryptoPkg/Library/OpensslLib/openssl
$ source edksetup.sh
$ make -C BaseTools
$vim Conf/target.txt

  ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc
  TARGET_ARCH = X64
  TOOL_CHAIN_TAG = GCC5

$build -DFD_SIZE_2MB -DDEBUG_ON_SERIAL_PORT=TRUE

 编译完成后在这个路径下能找到Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd

Step3 安装win10

参考Run Windows as the User VM OS — Project ACRN™ 3.4-unstable documentation

在目标机上

$ cd ~
$ mkdir work
$ sudo apt-get install qemu-utils
$ cd ~/work
$ qemu-img create -f raw win10-ltsc.img 40G

现在把Window.iso和OVMF.fd以及winvirtio.iso都拷贝到work目录下,目录结构如下所示,这里launch_user_vm_id2.sh是我们acrn_configurator生成的一个脚本,我们还要修改一下这个脚本 

dm_params=(
    --windows
    `add_cpus                                24 32 40 48`
    -m 4096M
    --ovmf /home/eci-user/work/OVMF.fd
    `add_virtual_device                        1:0 lpc`
    `add_virtual_device                        0:0 hostbridge`
    `add_virtual_device                        3 xhci 1-6`
    `add_passthrough_device                    2 0000:00:02.0`
    `add_logger_settings                       console=4 kmsg=3 disk=5`
    -s 6,virtio-blk,/home/eci-user/work/win10-ltcs.img
    -s 7,ahci,cd:/home/eci-user/work/Windows.iso
    -s 8,achi,cd:/home/eci-user/work/winvirtio.iso
    -s 9,passthru,0/14/0,d3hot_reset
    -s 10,virtio-net,tap=tap0
    WIN10                            
)

 这里稍微解释一下:

这个是我的USB键鼠收发器

 

这个是我的intel的VGA

 

这个是USB Controller 我之前没加,无法重启windows(安装器结束后重启一直蓝屏),不知道是不是和这个有关,加上去了就好了

运行脚本,显示器上会出现boot from CD/DVD,这时候键盘按下任意按键!!!!!

boot from CD/DVD,这时候键盘按下任意按键!!!!!

boot from CD/DVD,这时候键盘按下任意按键!!!!!

 在这一步选择加载驱动,然后点击浏览,选择到有一个CD ROM磁盘里面有vio\win10\amd64.把下面的隐藏不兼容驱动去掉,全选所有的驱动,点击下一步。

 就会出现磁盘了,我没有截图,借用一下官网的,这里我们的是40G的

 Step4 一些问题

安装完后机器会重启,重启的时候就不需要按键盘了,直接等待让他进入win10的引导。但是你可能会跟我一样出现下面的问题:

1.蓝屏

2.一直是Recovery 

没有解决办法。。我试了一下午有一次(添加-s 9,passthru,0/14/0,d3hot_reset并重启电脑以后)它就正常了。。。

Step5 正常启动

我们可以拷贝之前的lanuch脚本,然后把windows.iso和winvirtio.iso删除,就可以了。

庆幸的是,这个win10-ltsc.img是可以复用的。所以下一次不用这么苦逼的装系统了。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2049892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小米手机安装reex本地局域网环境使用webdav协议访问并观看alist挂载的网盘视频和音频记录

文章目录 说明第一步&#xff1a;下载reex第二步&#xff1a;安装reex问题解决&#xff1a;关闭小米应用安全验证 第三步&#xff1a;打开wifi&#xff0c;连接alist webdav服务 说明 这里提供一种小米手机安装reex并在本地局域网环境使用webdav协议访问并观看alist挂载的网盘…

K8S - Secret 的简介和使用

Secret 的定义 Kubernetes&#xff08;k8s&#xff09;中的 Secret 是一种用于存储敏感信息的 Kubernetes 资源对象&#xff0c;如密码、API 密钥、证书等。Secret 被设计为用于安全地存储和管理敏感数据&#xff0c;并且可以通过 Volume 或环境变量的方式将这些数据提供给 Po…

STM32软件I2C通信详解

目录 18.[江协]I2C通信详解 I2C通信介绍 软件I2C和硬件I2C的区别 I2C硬件电路规定 I2C软件设计&#xff08;时序基本单元&#xff09; 起始条件与终止条件 主机发送一个字节 的时序单元 主机接收一个字节 的时序单元 主机/从机 应答 基本单元 I2C完整时序&#xff08…

【Python单元测试】学习笔记1

文章目录 01-单元测试基础什么是单元测试常用的文件结构运行单元测试 02. 断言函数03. Test Fixtures什么是Test Fixtures模块级别的Fixtures类级别的Fixtures方法级别的Fixtures 04.Mock python单元测试学习笔记1&#xff1a;https://blog.csdn.net/qq_42761751/article/detai…

kali实用工具之NC

NC&#xff08;netcat&#xff09;被称为网络工具中的瑞士军刀&#xff0c;体积小巧&#xff0c;但功能强大。Nc主要功能是可以在两台设备上面相互交互&#xff0c;即侦听模式/传。 1、传输数据 在kali开启监听6666端口号&#xff1a; 在centos连接kali的6666端口号&#xff1a…

LeetCode --- 410周赛

题目列表 3248. 矩阵中的蛇 3249. 统计好节点的数目 3250. 单调数组对的数目 I 3251. 单调数组对的数目 II 一、矩阵中的蛇 只要按照题目要求模拟即可&#xff0c;代码如下 class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands…

Camera Link 与 NI PCIe-1433 的工作原理及应用

Camera Link 是一种专为工业和科学成像应用设计的串行通信协议标准。它的主要优势在于能够提供高带宽、高可靠性的图像数据传输&#xff0c;并且具备灵活的配置选项&#xff0c;适用于多种不同的摄像机类型。Camera Link 的标准使得它在需要高速度、高分辨率图像传输的应用中得…

Java流程控制08:continue、break、goto

本节内容视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p43&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p43&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 java中break和continue的作用和区别 在J…

通过kuboard界面配置ingress

安装 Ingress Controller&#xff0c;Kuboard 为您提供了一种快速安装 ingress-nginx 的方法&#xff0c;步骤如下所示。 1&#xff09;导航到集群的 集群管理 --> 网络 --> IngressClass 列表页&#xff0c;如下图所示&#xff1a; 2&#xff09;点击图中的 安装 Ingre…

WordPress美化节日灯笼插件,适合春节的时候使用

源码介绍&#xff1a; WordPress美化节日灯笼插件&#xff0c;适合每年过年的时候安在网站上使用&#xff0c;这款插件可以备用着&#xff0c;一款WordPress节日灯笼美化插件&#xff0c;可以给网页自动加一个灯笼效果使用说明&#xff1a;到网站WP后台 - 插件 - 安装插件 - 上…

可复制拖拽流程图

功能&#xff1a;如上图所示&#xff0c;从左侧拖拽源拖拽出模块后&#xff0c;在右侧显示。 源码&#xff1a;

【OpenCV 】插值的方法原理,图片缩放,矫正,边界填充

图像旋转 缩放 计算机中的图像是以数组的方式储存&#xff0c;每个位置储存了像素点的像素值。对图像进行旋转缩放&#xff0c;就是对数组进行操作&#xff0c;乘以对应的矩阵&#xff0c;进行空间变换&#xff0c;而矩阵的行列式的值&#xff0c;就是缩放的倍数。 进行缩放旋…

stm32智能颜色送餐小车(ESP8266WIFI模块、APP制作、物联网模型建立、MQTTFX)

大家好啊&#xff0c;我是情谊&#xff0c;今天我们来介绍一下我最近设计的stm32产品&#xff0c;我们在今年七月份的时候参加了光电设计大赛&#xff0c;我们小队使用的就是stm32的智能送餐小车&#xff0c;虽然止步于省赛&#xff0c;但是还是一次成长的经验吧&#xff0c;那…

在IntelliJ IDEA中使用Git推送项目

去gitee网站注册用户 gitee网站地址:https://gitee.com/ github网站地址:https://github.com/ 一、创建仓库 以下以gitee为例进行介绍&#xff0c;github操作雷同。 1、创建仓库 点击页面右上方的"“并选择"创建仓库” 2、设置仓库相关信息 首先输入仓库名&…

时序预测|基于PO-TCN-BiGRU的数据单变量和多变量时序预测Matlab程序 含基础模型对比TCN-BiGRU

时序预测|基于PO-TCN-BiGRU的数据单变量和多变量时序预测Matlab程序 含基础模型对比TCN-BiGRU 文章目录 前言时序预测|基于PO-TCN-BiGRU的数据单变量和多变量时序预测Matlab程序 含基础模型对比TCN-BiGRU 一、PO-TCN-BiGRU模型1. 时间卷积网络 (TCN)2. 双向门控循环单元 (BiGRU…

Modbus-RTU使用过程中的问题

此程序是在visual studio 2005的MFC程序中执行的&#xff0c;通过引入ModbusRTU.dll进行程序的编程&#xff0c;通过Dependency Walker工具查看ModbusRTU.dll中的静态函数如下&#xff1a; 在ModbusRTU.h文件中 MOD_API WORD RTUReadDiscreteInputs(BYTE nSlaveAddress, WORD …

接口自动化测试,介入时间以及整个流程规范是怎样的?

最近&#xff0c;小编身边有人提出一个问题&#xff1a; 背景 公司的接口自动化是从开发提测的时候开始用例设计开发的&#xff08;因为我们公司没有接口文档&#xff0c;只能等开发完成后自己抓包&#xff09;&#xff0c;也就是接口自动化开发和功能测试是同时进行的&#…

Ubuntu 基础使用

一、下载Vmware workstation 和ubuntu映像文件 二、安装虚拟机 三、安装完成之后打开程序&#xff0c;选择创建新的虚拟机 选择映射文件 编辑信息 这里尽量选择一个特定的位置 根据自己的要求设定 设置完成后等待自己安装不需要进行操作 出现登录页面表示安装成功 四、基本指令…

K8S系列——(一)、Ubuntu上安装Helm

在使用K8S搭建集群服务时&#xff0c;有时候需要用到Helm&#xff08;一个用于Kubernetes应用管理的工具&#xff09;&#xff0c;下面是在Ubuntu上安装Helm的过程。 1.更新系统软件包列表 sudo apt-get update2.安装必要的依赖项 sudo apt-get install apt-transport-https…

怎么在网络攻击中屹立不倒

在当今蓬勃发展的网络游戏产业中&#xff0c;服务器安全无疑是企业生存与发展的基石。面对互联网环境中无处不在的DDoS&#xff08;分布式拒绝服务&#xff09;与CC&#xff08;挑战碰撞&#xff09;攻击威胁&#xff0c;游戏服务器的防御能力与高效处理能力显得尤为重要。相较…