【失败的教程】Ubuntu安装星际争霸2 以及强化学习环境
这是个失败的教程我只是想吐槽操蛋的linux、wine、战网配置花了我两天啥也没干好你一个大学生好好学习多好搞什么操作系统是觉得自己会敲命令行向黑客一样很酷吗嘉豪吧我去你码。你跟着这个做吧【在Linux里安装暗黑2重制版|Ubuntu安装暴雪战网客户端教程-哔哩哔哩】 https://b23.tv/irUVQnH后面别看了环境和注册表都乱套了我重装系统了linux纯傻逼。国服战网只给 Windows 安装包但暴雪为 AI 研究提供了独立 Linux 版 SC2 客户端专门支持 headless 无界面运行与 API 调用完美适配强化学习。安装依赖sudo apt update sudo apt install -y libsdl2-2.0-0 libssl-dev python3-pip下载战网wget https://blzdistsc2-a.akamaihd.net/Linux/SC2.4.10.zip解压解压地址是-d后面的内容unzip -P iagreetotheeula SC2.4.10.zip -d ~/进入SC2的Maps文件夹地图下载感谢气泡橙汁Zz 的提供地图的下载地址是https://aiarena.net/wiki/maps/#wiki-toc-sc2-ai-arena-season-23的Sc2 AI Arena Season 2/3标签下的download但是这个网站访问比较困难我把自己下载好的地图的网盘链接放在这里链接https://pan.baidu.com/s/1G3U-lPI2yi6agz2_jSOKoA?pwd6fep 提取码6fep如果你在window下在的可以用airportal传到服务器或你虚拟机上。服务器/虚拟机端输入这个取件码即可。下载后是zip解压到Maps文件夹中。即可。然后创建虚拟环境StarCraft2并激活# 创建名为sc2_rl的环境指定python3.10PySC2最兼容版本 conda create -n StarCraft2 python3.10 -y # 激活环境 conda activate StarCraft2安装ipykernelconda install jupyter ipykernel将环境注册为conda内核python -m ipykernel install --user --nameStarCraft2 --display-name Python (Conda StarCraft2)然后输入jupyter notebook就可以跳转到jupyter了右上角New找到刚刚创建的StarCraft2环境以下是我们项目会使用到的库!pip install --upgrade pip !pip install --upgrade burnysc2 !pip install gymnasium !pip install stable-baselines3[extra] !pip install opencv-python !pip install numpy !pip install pillow !pip install matplotlib !pip install tensorboard !pip install torch torchvision !pip install nest-asyncio !pip install protobuf6运行后再运行下面的代码块如果没有报错说明安装都是正常的。from sc2 import maps from sc2.player import Bot, Computer from sc2.main import run_game from sc2.data import Race, Difficulty from sc2.bot_ai import BotAI import pickle import time import random import numpy as np from sc2.ids.unit_typeid import UnitTypeId import math import cv2 import os os.environ[KMP_DUPLICATE_LIB_OK]True import nest_asyncio import asyncio nest_asyncio.apply() # 1. 导入依赖库 from stable_baselines3 import PPO import os import time from StarCraft2Env import StarCraft2Env import torch as th import torch.nn as nn from stable_baselines3.common.torch_layers import BaseFeaturesExtractor import numpy as np import gymnasium as gym import time import pickle import subprocess from sc2 import maps from sc2.player import Bot, Computer from sc2.main import run_game from sc2.data import Race, Difficulty from sc2.bot_ai import BotAI傻逼Linux区分大小写然后我们的两个库分别用到大写和小写的maps这在window是没问题的但是在傻逼的linux就会出错官方的例子用不了我们可以尝试用这个from sc2 import maps from sc2.player import Bot, Computer from sc2.main import run_game from sc2.data import Race, Difficulty from sc2.bot_ai import BotAI from sc2.maps import Map # 新增导入 Path from pathlib import Path import os import nest_asyncio os.environ[KMP_DUPLICATE_LIB_OK]True nest_asyncio.apply() # 1. 定义字符串路径 map_path_str /home/lpa/StarCraftII/Maps/2000AtmospheresAIE.SC2Map # 2. 将字符串转换为 Path 对象 (关键步骤) map_path_obj Path(map_path_str) # 3. 传入 Path 对象给 Map game_map Map(map_path_obj) class WorkerRushBot(BotAI): async def on_step(self, iteration: int): if iteration 0: for worker in self.workers: worker.attack(self.enemy_start_locations[0]) # 运行游戏 run_game(game_map, [ Bot(Race.Protoss, WorkerRushBot()), Computer(Race.Zerg, Difficulty.Medium) ], realtimeTrue) print(游戏已启动保持窗口开启 10 秒...) asyncio.get_event_loop().run_until_complete(asyncio.sleep(10)) print(时间到程序结束。)然后啥也没发生(base) lpalab-24:~/StarCraftII/Versions/Base69232$ ./SC2_x64 Version: B69232 (SC2.4.6-Publish) Build: Oct 23 2018 01:43:04 Command Line: ./SC2_x64 Starting up... Startup Phase 1 complete Fatal Error: Failed to find .build.info file at path: /home/lpa/StarCraftII/.build.info Terminating... 已终止这是一个非常经典的“文件路径配置错误”。根据你提供的报错信息SC2 启动器在错误的路径下寻找.build.info文件导致游戏无法启动。️ 核心原因与解决方案报错分析SC2 启动器默认认为它位于StarCraftII目录下因此它试图在/home/lpa/StarCraftII/目录下寻找.build.info文件。但实际情况是你的可执行文件位于/home/lpa/StarCraftII/Versions/Base69232/目录下。解决方法你需要创建一个符号链接软连接告诉系统StarCraftII的根目录在哪里。请在终端中依次执行以下命令回到 StarCraftII 的根目录cd ~/StarCraftII创建指向当前版本的符号链接(注意如果Versions目录下有多个文件夹确保文件夹名是Base69232ln -s Versions/Base69232 .build.infohttps://github.com/BurnySc2/python-sc22. Linux 安装指南关键警告but the latter is headless so you cannot actually see the game.这句话非常关键。它说 Linux 原生版本通常是“无头模式”Headless的。意思是它只能在后台运行你无法看到游戏画面只能用来训练 AI 模型。如果你想看 AI 怎么打或者想自己玩建议用 Lutris 安装 Windows 版。孩子们我瞎了。方法 A (Wine/Lutris)你可以用 Wine 或 Lutris 安装 Windows 版的星际争霸安装Lutrissudo apt install lutris启动Lutris/usr/games/lutris如果有报错的话试试国内源LUTRIS_RUNTIME_URLhttps://mirrors.ustc.edu.cn/lutris /usr/games/lutris进来后点击加号搜索battle.net选择第一个报错处理点击back再安装一次原因是虽然这傻逼战网是64位的但是需要32位支持真傻逼第一步安装系统级 32 位支持库最关键之前的日志里你在尝试安装wine32但可能没成功或没装全。请在终端执行以下命令1sudo dpkg --add-architecture i386 2sudo apt update 3sudo apt install wine32(注意如果提示确认输入 Y 并回车)第二步删除坏掉的文件夹因为之前的尝试失败了那个文件夹现在是坏的必须删掉重来。在终端输入1rm -rf ~/Games/battlenet第三步手动创建空文件夹防止权限问题让系统帮你建一个干净的文件夹1mkdir -p ~/Games/battlenet第四步检查 Wine 版本回到 Lutris 的安装界面点号 - 搜索 Battle.net - Install。同时检查Wine prefix路径是否填的是/home/lpa/Games/battlenet。第五步开始安装现在点击右下角的Install。成功了炸单了既然图形安装程序会崩溃我们就跳过它直接下载并运行战网客户端。关闭当前窗口点击你截图中的“关闭”按钮然后回到 Lutris点击红色的Abort按钮彻底停止当前的安装任务。手动下载战网安装包打开你的浏览器访问暴雪的官方下载页面https://download.battle.net/zh-cn/下载Windows版的战网安装程序文件名通常是Battle.net-Setup.exe。在 Lutris 中配置并运行在 Lutris 主界面找到你已经配置好的Battle.net游戏条目就是之前安装失败的那个。点击它选择Configure(配置)。在配置窗口中点击左侧的Game options(游戏选项)。找到Executable(可执行文件) 这一行点击右侧的Browse(浏览)。在弹出的文件选择器中找到你刚刚用浏览器下载的Battle.net-Setup.exe文件并选中它。点击Save(保存)。开始安装现在直接点击 Lutris 主界面中 Battle.net 条目上的Play(播放) 按钮。这次Lutris 会直接运行你下载的安装包有很大概率会成功弹出战网的安装界面让你选择安装路径和语言然后开始安装。我不知道现在该骂战网还是骂傻逼linux了对就是在这个界面修改但你选错地方了你目前停留在“运行环境选项”卡我们需要切换到旁边的“系统选项”卡去处理那个红色的 Vulkan 报错。你截图里那个醒目的红色报错Error Missing Vulkan libraries... i386 architecture这直接证实了我之前的判断你的系统里缺少 32 位的 Vulkan 驱动库。这就是导致 Wine 崩溃Assertion failed的根本原因战网客户端虽然没有 3D 画面但它依赖这些底层图形库来渲染界面缺了就会直接挂掉。请按照以下步骤操作这是解决问题的关键第一步安装 32 位 Vulkan 库打开你的终端输入以下命令并回车需要输入密码1sudo apt install libvulkan1:i386 mesa-vulkan-drivers:i386第二步切换 Wine 版本在你截图的那个下拉菜单里不要选wine-ge-8-26也不要选系统自带 Wine 9.0。点击下拉菜单。寻找是否有lutris-7.2-11-x86_64或者wine-ge-7-53。如果有选它如果没有就先选系统自带 Wine 9.0试试因为 9.0 对新版图形驱动支持更好。第三步关闭 Esync/Fsync在你截图的下方把启用 Esync和启用 Fsync这两个开关关掉变成灰色。原因有时候 Linux 内核的同步机制和 Wine 冲突关掉能提高稳定性。第四步保存并重试点击右上角的保存然后回到主界面再次点击Play。这次应该就能顺利跑起来了如果还是报错请把新的报错截图发给我。OHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH终于他妈的下好了还有一关骂战网连except都懒得处理太棒了看到你这张图我必须得恭喜你你已经成功了一大半那个满屏乱跳的winedebugger和这个BLZBNTBNA00000005错误恰恰证明战网客户端已经成功安装并运行起来了之前的 Wine 崩溃问题已经解决。现在你遇到的这个BLZBNTBNA00000005错误意思是“更新服务进入了睡眠模式”。简单来说战网的主程序醒了但它负责下载游戏的“后台小弟”更新服务还在睡大觉或者被 Linux 系统卡住了。这是 Lutris 运行战网时的经典最后一关。别急按下面的步骤操作马上就能解决终极修复方案清理“睡眠”的进程我们需要把那个卡住的“后台小弟”强制干掉让它重新启动。1. 彻底关闭战网在 Lutris 里点击STOP按钮确保战网完全关闭。2. 清理“残留”的后台文件关键步骤战网的更新服务文件残留在后台导致冲突。我们需要删除它。打开你的终端复制并运行下面这行命令直接复制整行1rm -rf ~/.config/Battle.net ~/.cache/Battle.net ~/Games/battlenet/drive_c/ProgramData/Battle.net ~/Games/battlenet/drive_c/ProgramData/Blizzard\ Entertainment(注如果你的 Lutris 游戏路径不是~/Games/battlenet请根据你实际的文件夹路径修改上面命令的后半部分)3. 设置 Lutris 的启动参数防止再次睡眠为了让战网在 Linux 下不自动“睡着”我们需要给它加个“兴奋剂”参数。在 Lutris 里右键点击 Battle.net -Configure(配置)。点击左侧的System options(系统选项)。找到Environment variables(环境变量)。点击Add(添加)填入Key:WINEESYNCValue:0再添加一个Key:WINEFSYNCValue:0(注我们在上一步关掉了 Esync/Fsync 开关这里再次确保它们被禁用因为这两个功能经常导致战网后台服务假死)4. 重新启动回到 Lutris 主界面点击Play。预期结果战网会重新初始化可能会重新下载一点更新文件然后就能正常进入登录界面了如果第一次启动还是报错不要慌再次点击 Play 启动第二次通常第二次就彻底好了。点击保存这张图里的报错信息非常关键它揭示了问题的本质图形渲染层彻底崩了。看这几行关键错误EGL_NOT_INITIALIZEDEGL图形接口初始化失败。Exiting GPU process due to errorsGPU 进程因为错误退出了。msvproc.dll找不到这个文件。简单来说你的战网客户端试图调用显卡进行 3D 加速来渲染界面但是失败了可能是显卡驱动、Wine 版本或 DXVK 设置的问题。别担心既然之前的“安装崩溃”解决了现在这个“渲染崩溃”有一个非常简单的“降级疗法”——强制使用软件渲染。也就是不让它调用显卡而是用 CPU 来画界面。虽然稍微吃一点 CPU但对于战网这种界面程序来说完全没问题而且极其稳定。请按照以下步骤操作这招通常能“起死回生”方案一强制软件渲染最推荐成功率最高这个方法通过设置环境变量告诉 Wine“别找显卡了直接用 CPU 画图”。在 Lutris 里右键点击 Battle.net -Configure(配置)。点击左侧的System options(系统选项)。找到Environment variables(环境变量) 区域。点击Add(添加)填入以下两组变量如果之前有设置过其他的先留着第一组Key:LIBGL_ALWAYS_SOFTWAREValue:1第二组Key:WINEDEBUGValue:-all(这个是为了屏蔽那些烦人的 debugger 刷屏)点击Save(保存)。再次点击Play运行。看到那个红色的报错了吗这才是问题的根源。那个红色的字写着Error Missing Vulkan libraries ... i386 architecture。这解释了为什么之前的方案都无效你的系统里缺少32位的Vulkan驱动库。Wine 运行 Windows 程序时即便你关闭了 DXVK它仍然需要底层的 Vulkan 库来处理图形界面。你的系统里只有 64 位的库但战网客户端或者是 Wine 的前端组件试图调用 32 位的库找不到于是疯狂报错、崩溃、弹出 Debugger。要解决这个问题必须把缺失的 32 位库补上。请严格执行以下步骤第一步打开终端在你的 Linux 系统里打开终端Terminal。第二步开启多架构支持如果之前没做过输入以下命令并回车1sudo dpkg --add-architecture i386(输入密码时不会显示星号输完直接回车)第三步安装 32 位 Vulkan 驱动这是最关键的一步。根据你的显卡类型输入对应的命令如果你是 NVIDIA 显卡最常见1sudo apt update 2sudo apt install libvulkan1:i386 libvulkan1(如果提示找不到包可能需要安装nvidia-driver-xxx:i386但通常libvulkan1:i386就足够了)如果你是 AMD 或 Intel 核显1sudo apt update 2sudo apt install mesa-vulkan-drivers:i386 mesa-vulkan-drivers第四步验证并重启 Lutris安装完成后彻底关闭 Lutris右键托盘图标退出或者在系统监视器里杀掉进程。重新打开 Lutris。再次进入 Battle.net 的配置界面Configure - Runner options。看那个红色的Error Missing Vulkan libraries应该消失了。DXVK开关可以尝试打开变成灰色或蓝色或者保持关闭。看到红色的报错消失说明你的系统底层库已经补全了这是个巨大的进步但现在终端里满屏的EGL_BAD_ALLOC和SwapChain错误说明问题卡在了显卡显存分配上。战网客户端的界面是基于网页引擎CEF的它在 Wine 里启动时会尝试申请大量的显存来渲染页面但往往因为 Wine 的显存模拟机制没配置好导致申请失败Bad Alloc然后程序崩溃Debugger 疯狂弹窗。别担心我们只需要给 Wine “骗”一点显存出来就行了。核心解决方案修改注册表强制增加显存请严格按照以下步骤操作这是解决EGL_BAD_ALLOC最直接的办法第一步打开 Wine 注册表编辑器在终端里输入以下命令并回车确保 Lutris 里的战网是关闭状态1lutris -x winecfg注意这会打开战网专用环境的配置窗口。第二步进入注册表在弹出的Wine Configuration窗口中点击底部的注册表编辑器按钮或者在终端直接输入lutris -x regedit。第三步新建显存键值在注册表编辑器里像操作文件夹一样依次展开左边的目录HKEY_CURRENT_USER-Software-Wine-Direct3D(如果没有 Direct3D 文件夹右键点击 Wine 文件夹 - 新建 - 项命名为 Direct3D)第四步添加显存大小点击选中Direct3D文件夹。在右边的空白区域右键-新建-字符串值。名字填入VideoMemorySize双击它数值数据填入4096(代表 4GB 显存足够战网用了)。点击确定。第五步再次尝试软件渲染双保险虽然我们要修复显卡问题但为了防止 Debugger 刷屏干扰我们再加一个屏蔽变量。回到 Lutris 配置界面 -系统选项。找到环境变量。添加Key:WINEDEBUGValue:-all
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2512977.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!