Init
This commit is contained in:
110
03-UnrealEngine/流程管理与部署/BuildGraph与UnrealBinaryBuilde.md
Normal file
110
03-UnrealEngine/流程管理与部署/BuildGraph与UnrealBinaryBuilde.md
Normal file
@@ -0,0 +1,110 @@
|
||||
---
|
||||
title: BuildGraph与UnrealBinaryBuilde
|
||||
date: 2022-08-06 20:41:15
|
||||
tags: BuildGraph
|
||||
rating: ⭐️⭐️
|
||||
---
|
||||
|
||||
## BuildGraph
|
||||
- 共享共同的构建步骤,以节约构建时间
|
||||
- 能使用Graph对编译量进行优化
|
||||
- 易于并行化构建
|
||||
- 存储构建脚本在每个分支中,而不需要编写额外的后端程序
|
||||
- 不同的产品可以定制不同的额外步骤
|
||||
|
||||
基于以上的需求,EPIC的开发了BuildGraph,类似于Make/Ant/MSBuild,但一开始就是基于并行分布式处理设计的。各种操作定义在AutomationTool中,可以通过派生CustomTask类来扩展构建任务。
|
||||
文档:https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/BuildTools/AutomationTool/BuildGraph/
|
||||
|
||||
本人推荐看查利鹏的文章《BuildGraph:构建支持多平台打包的二进制引擎》https://imzlp.com/posts/11956/,里面除了介绍了基础用法之外还介绍了加快构建的方法(如何砍掉不必要的构建过程)以及构建安卓与IOS端的方法。
|
||||
|
||||
官方视频也有对它进行介绍(10:17分开始):
|
||||
《Tools and Infrastructure for Large Teams | Unreal Dev Days 2019 | Unreal Engine》
|
||||
https://youtu.be/d6lyAI4Ftkw
|
||||
|
||||
视频中还介绍了:
|
||||
- EPIC的自动合并工具RoboMerge,源码位于Engine\Extras\RoboMerge。
|
||||
- 同步工作区工具BuildAgent,源码位于Engine\Source\Programs\BuildAgent。
|
||||
- AutoSDK,源码位于Engine\Extras\AutoSDK。
|
||||
- UnrealGameSync,源码位于Engine\Source\Programs\UnrealGameSync。
|
||||
|
||||
PS.BuildAgent与UnrealGameSync基于perforce。
|
||||
|
||||
分布式流程逻辑:
|
||||

|
||||
|
||||
## 插件构建命令
|
||||
>Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -Plugin=[Path to .uplugin file, must be outside engine directory] -Package=[Output directory] -Rocket -VS2019
|
||||
|
||||
`D:\UnrealEngine\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -Plugin=C:\Users\BlueRose\Desktop\YueHuaProject\Plugins\MultiDraw\MultiDraw.uplugin -Package=C:\Users\BlueRose\Desktop\Ouput\plugins -Rocket -VS2019 -TargetPlatforms=Win64`
|
||||
|
||||
## 引擎构建命令
|
||||
`D:\UnrealEngine\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat BuildGraph -target="Make Installed Build Win64" -script=Engine/Build/InstalledEngineBuild.xml -set:WithDDC=true -set:SignExecutables=false -set:EmbedSrcSrvInfo=false -set:GameConfigurations=Development;Shipping -set:WithFullDebugInfo=false -set:HostPlatformEditorOnly=false -set:AnalyticsTypeOverride= -set:HostPlatformDDCOnly=true -set:WithWin64=true -set:WithMac=false -set:WithAndroid=false -set:WithIOS=false -set:WithTVOS=false -set:WithLinux=false -set:WithLumin=false -set:WithLinuxArm64=false -set:CompileDatasmithPlugins=false -set:WithServer=false -set:WithClient=false -set:WithHoloLens=false`
|
||||
|
||||
## AutomationTool其他命令
|
||||
具体可以参考:https://github.com/botman99/ue4-unreal-automation-tool
|
||||
```
|
||||
AnalyzeThirdPartyLibs CleanDevices RebasePublicIncludePaths TestKillAll
|
||||
BenchmarkBuild CleanFormalBuilds RebuildHLOD TestLog
|
||||
BenchmarkOptions CleanTempStorage RebuildLightMaps TestMacZip
|
||||
BlameKeyword CodeSurgery RecordPerformance TestMcpConfigs
|
||||
Build CopySharedCookedBuild ReplaceAssetsUsingManifest TestMessage
|
||||
BuildCMakeLib CopyUAT ResavePackages TestOSSCommands
|
||||
BuildCommonTools CryptoKeys ResavePluginDescriptors TestP4_ClientOps
|
||||
BuildCookRun DebugSleep ResaveProjectDescriptors TestP4_CreateChangelist
|
||||
BuildDerivedDataCache DumpBranch RunEditorTests TestP4_Info
|
||||
BuildEditor ExportIPAFromArchive RunP4Reconcile TestP4_LabelDescription
|
||||
BuildForUGS ExportMcpTemplates RunUnreal TestP4_StrandCheckout
|
||||
BuildGame ExtractPaks StashTarget TestRecursion
|
||||
BuildGraph FinalizeInstalledBuild SubmitUtilizationReportToEC TestRecursionAuto
|
||||
BuildHlslcc FixPerforceCase SyncBinariesFromUGS TestStopProcess
|
||||
BuildPhysX FixupRedirects SyncDDC TestSuccess
|
||||
BuildPlugin GenerateAutomationProject SyncDepotPath TestTestFarm
|
||||
BuildServer GenerateDSYM SyncProject TestThreadedCopyFiles
|
||||
BuildTarget GitPullRequest SyncSource TestUATBuildProducts
|
||||
BuildThirdPartyLibs IPhonePackager TempStorageTests UBT
|
||||
CheckBalancedMacros ListMobileDevices TestArguments UE4BuildUtilDummyBuildCommand
|
||||
CheckCsprojDotNetVersion ListThirdPartySoftware TestBlame UnstashTarget
|
||||
CheckForHacks Localise TestChangeFileType UpdateLocalVersion
|
||||
CheckPerforceCase Localize TestChanges UploadDDCToAWS
|
||||
CheckRestrictedFolders LookForOverlappingBuildProducts TestCleanFormalBuilds WriteIniValueToPlist
|
||||
CheckTargetExists MegaXGE TestCombinePaths ZipProjectUp
|
||||
CheckXcodeVersion OpenEditor TestFail ZipUtils
|
||||
CleanAutomationReports P4WriteConfig TestFileUtility
|
||||
CleanDDC ParseMsvcTimingInfo TestGauntlet
|
||||
```
|
||||
|
||||
## UnrealBinaryBuilder
|
||||
使用BuildGraph需要使用命令行,对开发者还是不够友好,所以可以使用UnrealBinaryBuilder:https://github.com/ryanjon2040/Unreal-Binary-Builder 这个项目使用c#编写,代码相对比较简单,可以参考用于公司内部的CI/CD工具以及分布式构建系统编写(如何与BuildGraph交互与通信)。查看源码后发现已经对应UE5进行了适配,所以可以放心使用。
|
||||
|
||||
一开始进入的是界面。如果是刚下载的源代码可以点击Start来下载二进制文件、生成引擎解决方案文件以及构建AutomationTool。
|
||||

|
||||
|
||||
之后点击Compile选项卡来设置构建选项。左边的Platform选择要构建的平台,其中Mac、Ios、Android可以参考查利鹏的文章。其中构建需要能够打开的引擎需要勾选的include DDC与Host DDC Only,不然运行引擎会提示丢失各种Shader与Shader文件夹。左下角的输入栏可以指定编译的版本,默认是Development与Shipping。点击Copy Commandline To Clipboard,会将生成的命令行复制到剪贴板,之后可以粘贴到文字编辑工具中查看,来确定所有的编译参数是否正确,也可以之后在cmd中直接运行这个命令来执行编译。最后点击Build UnrealEngine来进行构建。
|
||||

|
||||
|
||||
实际的编译时间比你手动编译的要长,是因为默认的BuildGraph构建文件**Engine/Build/InstalledEngineBuild.xml**中会有编译所有模块的指令。这里可以根据需求来创建新的BuildGraph文件去掉 -allmodules与-nolink来解决。
|
||||
```xml
|
||||
<Node Name="Compile UE4Game Win64" Requires="Compile UnrealHeaderTool Win64" Produces="#UE4Game Win64;#UE4Game Win64 Unstripped;#UE4Game Win64 Stripped;#UE4Game Win64 Unsigned;#UE4Game Win64 Signed">
|
||||
<ForEach Name="Target" Values="UE4Game;$(OptionalClientTarget);$(OptionalServerTarget)">
|
||||
<ForEach Name="Configuration" Values="$(GameConfigurations)">
|
||||
<Compile Target="$(Target)" Platform="Win64" Configuration="$(Configuration)" Tag="#UE4Game Win64" Arguments="-precompile -allmodules -nolink $(VSCompilerArg) $(TargetDebugInfoArg)"/>
|
||||
<Compile Target="$(Target)" Platform="Win64" Configuration="$(Configuration)" Tag="#UE4Game Win64" Arguments="-precompile $(VSCompilerArg) $(TargetDebugInfoArg)" Clean="false"/>
|
||||
</ForEach>
|
||||
</ForEach>
|
||||
</Node>
|
||||
```
|
||||
|
||||
在Zip Build选项卡中,你可以设置是否在编译完成后使用zip将引擎打包,推荐勾选FeaturePacks、Samples、Templates,不然新建项目与Level中的选项将会失效。如果用户需要debug那就需要勾选PDB与DEBUG。
|
||||

|
||||
|
||||
### “missing PDBCopy”问题解决
|
||||
构建的时候会遇到一个“missing PDBCopy”的问题。需要下载Win10 SDK安装Debugging Tools for Windows。下载地址:
|
||||
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
|
||||
|
||||
只需要勾选**Debugging Tools for Windows**并安装即可解决问题。
|
||||

|
||||
|
||||
## 构建无源码版本
|
||||
编译是需要所有的头文件的。所以使用默认设置,并在打包Zip时勾选`Source`,最后再解压把所有`*.cpp`文件删除。
|
||||
|
||||
|
47
03-UnrealEngine/流程管理与部署/EPIC大型项目资产数据跨地域同步方案.md
Normal file
47
03-UnrealEngine/流程管理与部署/EPIC大型项目资产数据跨地域同步方案.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: EPIC大型项目资产数据跨地域同步方案
|
||||
date: 2022-11-10 14:59:48
|
||||
excerpt:
|
||||
tags: DDC
|
||||
rating: ⭐
|
||||
---
|
||||
## 前言
|
||||
对于大型项目来说同步Asset相对较快,但是构建资产数据缓存却比较慢,经常需要花很长时间才能打开编辑器。该视频介绍了一些解决方法。视频为[Improving Developer Iteration in Unreal Engine 5 | Unreal Fest 2022](https://www.youtube.com/watch?v=_gpJeeqIbjo)
|
||||
|
||||
## 资产数据同步方法
|
||||
1. [[#Unreal Cloud DDC]] UE5.2(Beta)
|
||||
2. [[#Virtual Asset]]UE5.1(Beta)
|
||||
3. [[#Horde Compute]]UE5.x(TBD)
|
||||
|
||||
## Unreal Cloud DDC
|
||||
- Local Project DDC项目DDC:
|
||||
- Local Share DDC(本地共享DDC):
|
||||
|
||||
但是我们目标是`Team Shared DDC`,即每个人都有自己的一部分LocalDDC,然后团队有其他大部分共享的DDC。但并不适合使用VPN来获取数据。所以EPIC使用多台云服务器(多个地区)上构建DDC。他们开发了一个灵活可配置的系统来进行管理。
|
||||
|
||||
- 云上部署
|
||||
- 多地部署
|
||||
- 云服务器数据两两同步
|
||||
- 支持OIDC登录与身份验证
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## Virtual Asset
|
||||

|
||||
通过将Asset的结构数据生成DDC Key,这样就可以从DDC缓存中获取到数据了。所以我们就不需要BulkData了。以此来减少每日同步数据的量。同时因为这些缓存数据是散列形式的,这样就不会出现重复生成的问题。
|
||||

|
||||
而DDC Key就是视频中介绍的VirtualAssets
|
||||
Virtual Asset
|
||||
- 同步更快
|
||||
- 更小的足迹数据
|
||||
- 优先从UnrealCloudDDC上同步,次选Perforce
|
||||
|
||||
## Horde Compute
|
||||
不充钱你会变强么
|
||||
|
||||
## 其他
|
||||
EPIC在UE5开发了新的针对DDC构建的API
|
||||

|
||||

|
53
03-UnrealEngine/流程管理与部署/FastBuild联机编译Shader以及共享DDC.md
Normal file
53
03-UnrealEngine/流程管理与部署/FastBuild联机编译Shader以及共享DDC.md
Normal file
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: FastBuild联机编译Shader以及共享DDC
|
||||
date: 2022-08-09 13:55:15
|
||||
tags: FastBuild DDC
|
||||
rating: ⭐️⭐️
|
||||
---
|
||||
# UE5的Zen Loader & Zen Store
|
||||
UE5推出了Zen Loader & Zen Store,大概率会在之后的版本代替之前的DDC缓存功能。但目前该功能没有详细的使用文档。
|
||||
- [Zen Loader](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/zen-loader-in-unreal-engine)
|
||||
- [Zen Store](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/zen-store-in-unreal-engine?application_version=5.4)
|
||||
|
||||
# 前言
|
||||
目前考虑的方法是使用FastBuild的分布式编译来加快Shader编译与速度,并且使用共享DDC来减少构建时间。
|
||||
- 在 Mac 构建机上配置 UE4 FastBuild 及 DDC:https://zhuanlan.zhihu.com/p/474404469
|
||||
- UE4.24 FastBuild(v1.02) 支持C++与 Shader 可用的分布编译加速方案:https://zhuanlan.zhihu.com/p/307581961
|
||||
- 官方文档
|
||||
- FastBuild:https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/BuildTools/UnrealBuildTool/BuildConfiguration/
|
||||
- DDC文档:https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/DerivedDataCache/
|
||||
|
||||
## 共享DDC
|
||||
1. 在DefaultEngine.ini中覆盖你的项目设置(如下图所示),该覆盖项会将路径设置为团队的有效位置。
|
||||
```ini
|
||||
[InstalledDerivedDataBackendGraph] Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=10, FoldersToClean=10, MaxFileChecksPerSec=1, ConsiderSlowAt=70, PromptIfMissing=false, Path=\YourCompanyServer\DDC, EnvPathOverride=UE-SharedDataCachePath, EditorOverrideSetting=SharedDerivedDataCache)
|
||||
```
|
||||
2. 将 `UE-SharedDataCachePath`(在Mac/Linux上为 `UE_SharedDataCachePath`)的环境变量(如下图所示)设置为要使用的文件夹。
|
||||
3. 在编辑器General-Global-DerivedDataCache中,设置 `SharedDerivedDataCache` 变量。
|
||||
|
||||
- 官方译版引擎:[InstalledDerivedDataBackendGraph]
|
||||
- 源码版:[DerivedDataBackendGraph]
|
||||
|
||||
### 使用Commandlet生成DDC
|
||||
在设置完之后就可以通过 Commandlet 来执行DDC的生成了:
|
||||
```cmd
|
||||
Engine\Binaries\Win64\UE4Editor.exe Client\Client.uproject -run=DerivedDataCache -fill
|
||||
```
|
||||
|
||||
### 禁用共享DDC
|
||||
当开发人员远程处理项目时,并且该项目已配置了共享DDC时,开发人员可能会遇到性能不佳的情况,这是因为访问DDC数据比生成DDC数据花费的时间更长。要暂时禁用共享DDC,请使用以下方法之一:
|
||||
- 在命令行上传递-ddc=noshared。
|
||||
- 将环境变量设置为本地硬盘驱动器:
|
||||
- `UE-SharedDataCachePath=None`
|
||||
- 在Mac上:`UE_SharedDataCachePath=None`
|
||||
|
||||
## 启用FastBuild编译Shader
|
||||
Shader 编译使用 CVars 打开,在 DefaultEngine.ini 中的 [/Script/Engine.RendererSettings] 部分,添加如下内容:
|
||||
```
|
||||
r.FASTBuildShaderCompile=1
|
||||
```
|
||||
|
||||
### FASTBuild Dashboard
|
||||
可以使用FASTBuild Dashboard来查看联机构建情况。
|
||||
|
||||
地址:https://github.com/hillin/FASTBuild-Dashboard
|
13
03-UnrealEngine/流程管理与部署/LightMass联机构建部署.md
Normal file
13
03-UnrealEngine/流程管理与部署/LightMass联机构建部署.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: LightMass联机构建部署
|
||||
date: 2024-06-12 13:06:46
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
# 前言
|
||||
1. 官方文档
|
||||
1. Unreal Swarm https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-swarm-in-unreal-engine?application_version=5.4
|
||||
2. Tutorial: Setting Up Swarm for Multiple Machines https://iamsparky.wordpress.com/2010/08/24/tutorial-setting-up-swarm-for-multiple-machines/
|
||||
3. Swarm Agent Troubleshooting https://nerivec.github.io/old-ue4-wiki/pages/swarm-agent-troubleshooting.html
|
||||
4. Unreal Engine 4: use Swarm to distribute Lighting build on Local Network https://srombauts.fr/2017/11/10/ue4-use-swarm-distribute-lighting-build-network/
|
75
03-UnrealEngine/流程管理与部署/UE5 Ubantu & Docker 部署.md
Normal file
75
03-UnrealEngine/流程管理与部署/UE5 Ubantu & Docker 部署.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
title: UE5 Ubantu & Docker 部署
|
||||
date: 2023-09-12 18:20:39
|
||||
excerpt:
|
||||
tags:
|
||||
- Ubantu
|
||||
- Docker
|
||||
rating: ⭐⭐
|
||||
---
|
||||
# 前言
|
||||
本文假设系统已经安装完Docker,并且读者已经将镜像拉取完毕。并且假设此电脑装有显卡,且显存在3G以上(切记:AI专业显卡无法启动UE)。
|
||||
- 文档地址:https://docs.unrealengine.com/5.3/en-US/quick-start-guide-for-using-container-images-in-unreal-engine/
|
||||
- 镜像地址:https://github.com/orgs/epicgames/packages/container/package/unreal-engine
|
||||
|
||||
# UE安装
|
||||
不同于Windows与Mac系统,Linux没有提供Epic启动器,但可以直接下载官方编译好的版本。各版本下载地址:https://www.unrealengine.com/en-US/linux
|
||||
# UE镜像选择
|
||||
- [runtime](https://github.com/orgs/epicgames/packages/container/unreal-engine/111082761?tag=runtime)
|
||||
- [dev-5.3](https://github.com/orgs/epicgames/packages/container/unreal-engine/125977937?tag=dev-5.3)
|
||||
- [dev-slim-5.3](https://github.com/orgs/epicgames/packages/container/unreal-engine/125977946?tag=dev-slim-5.3)
|
||||
|
||||
镜像主要分为runtime以及dev两种类型(slim为瘦身版)。主要的区别在于runtime是为了运行UE打包过的项目,带有图形显示环境。dev则带有一个对应版本的虚幻引擎,此引擎为源码编译版,官方也提供执行编译&构建镜像资料,有需求可以自行编译,一般这种镜像是为了编译、打包、测试项目或者执行CPU操作所用。
|
||||
|
||||
官方的runtime容器用的是第三方制作的镜像(也可以算是官方的,github的ReadME说是参与了官方容器的开发):
|
||||
- https://github.com/adamrehn/ue4-runtime
|
||||
- https://hub.docker.com/r/adamrehn/ue4-runtime/tags
|
||||
更多信息可以参考这位大佬的网站:https://unrealcontainers.com/docs/obtaining-images/write-your-own
|
||||
|
||||
本人因为项目需求使用`ue4-runtime:22.04-vulkan-x11`镜像。该镜像会将镜像内的UE窗口直接映射到系统桌面上,可以方便得查看错误。
|
||||
|
||||
PS.dev镜像因为带有引擎,需要下载20~30G,只建议肉身翻墙或者高级科学上网工具者使用。但即使肉身翻墙,10GB的那个包下载速度依然特别慢。最终解压完的镜像大约有60多G,小空间的VPS也不好整。
|
||||
## 问题解决
|
||||
### Docker提示没有可选设备驱动
|
||||
>docker: Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]
|
||||
|
||||
解决方法,安装nvidia-container-toolkit。
|
||||
```bash
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
|
||||
sudo apt-key add -
|
||||
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
|
||||
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
|
||||
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
|
||||
sudo apt-get update
|
||||
|
||||
sudo apt-get install -y nvidia-container-toolkit
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
### 构建带有UE的图形环境
|
||||
简单的做法就是下载一份Linux版本的UE之后将目录映射进容器,比如:
|
||||
```bash
|
||||
sudo docker run --gpus=all --rm -e DISPLAY -ti \
|
||||
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
|
||||
-v /home/user/Linux_Unreal_Engine_5.1.1:/home/ue4/UnrealEngine \
|
||||
-v /home/user/Project/:/project \
|
||||
adamrehn/ue4-runtime:22.04-vulkan-x11
|
||||
```
|
||||
|
||||
后台运行:
|
||||
```bash
|
||||
sudo docker run --gpus=all -d --restart=always --privileged=true -e DISPLAY -ti \
|
||||
-v /home/user/Linux_Unreal_Engine_5.1.1:/home/ue4/UnrealEngine \
|
||||
-v /home/user/Project/:/project \
|
||||
adamrehn/ue4-runtime:22.04-vulkan-x11
|
||||
```
|
||||
之后可以使用docker exec让项目启动。
|
||||
# 进入容器
|
||||
![[UEDocker_进入UE容器.png]]
|
||||
使用第一个命令构建容器后,会进入容器,并且可以通过输入命令行进行操作,主要的命令有:
|
||||
- 生成解决方案:/home/ue4/UnrealEngine/Engine/Build/BatchFiles/Linux/GenerateProjectFiles.sh /project/XXXX.uproject -game -engine -rocket -progress -VSCode
|
||||
- 编译项目:/home/ue4/UnrealEngine/Engine/Build/BatchFiles/Linux/Build.sh Development Linux -Project="/project/XXXX.uproject" -TargetType=Editor -Progress -NoEngineChanges -NoHotReloadFromIDE
|
||||
- 启动项目:/home/ue4/UnrealEngine/Engine/Binaries/Linux/UnrealEditor -logs "/project/XXXX.uproject"
|
||||
|
||||
**为了防止生成解决方案失败,可以把项目目录与UE目录设置权限。**
|
||||
PS.实际是因为Ubantu系统版本可能与容器系统并不相同,所以需要重新编译一下,才能运行项目。
|
59
03-UnrealEngine/流程管理与部署/UE符号服务器搭建笔记.md
Normal file
59
03-UnrealEngine/流程管理与部署/UE符号服务器搭建笔记.md
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: UE符号服务器搭建笔记
|
||||
date: 2022-09-13 10:56:50
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐⭐
|
||||
---
|
||||
## 前言
|
||||
主要是为了解决在美术不用下载调试符号的情况下,引擎崩溃时可以准确定位到代码。
|
||||
>PDB文件主要存储了调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等,但是我们算了一下,整个项目的pdb文件加起来有30多个G,每天编辑器要编10个版本,导致拉pdb到本地的成本也很高,会浪费很多时间。
|
||||
|
||||
思路为:
|
||||
>搭建一个pdb服务器(同符号服务器一个意思这里),每次做好版本的时候,将pdb都传到这台服务器上,在策划机器上发生crash的时候,ue才会用dbghelp去解析dump文件,dbghelp会拉起symsrv.dll 去pdb服务器取得需要的pdb文件拉到本地(也可以不拉),从而进一步实现对dump中的地址解析,变成文件名,函数名,行号等详细信息
|
||||
|
||||
参考文章:
|
||||
- ue4 符号服务器搭建:https://zhuanlan.zhihu.com/p/563637510
|
||||
- 微软官方文档
|
||||
- SymStore使用案例: https://docs.microsoft.com/en-us/windows/win32/debug/using-symstore
|
||||
- SymStore所有参数列表:https://docs.microsoft.com/en-us/windows/win32/debug/symstore-command-line-options
|
||||
- SymSrv使用案例:https://docs.microsoft.com/en-us/windows/win32/debug/using-symsrv
|
||||
|
||||
## 流程
|
||||
|
||||
1. 安装pdb相关工具。
|
||||
- 我们需要symstore命令,要做的是安装Debugging Tools for Windows [官方下载地址](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools)
|
||||
- symstore的默认安装位置为:`C:\Program Files (x86)\Windows Kits\10\Debuggers\x64`
|
||||
2. 搭建pdb服务器。
|
||||
- 支持本地路径、共享与Https方式。
|
||||
3. 使用symastore上传pdb。
|
||||
- `symstore.exe add /r /f H:\MyGame\Engine\Binaries\Win64 /s \\sanhao-NB0\pdbShare /t ACM /z pri`
|
||||
- [[#微软文档中的symstore案例]]
|
||||
4. 增加`DefaultEditorPerProjectUserSettings.ini`设置。
|
||||
```ini
|
||||
[/Script/UnrealEd.CrashReporterSettings]
|
||||
RemoteStorage=\\sanhao-NB0\pdbShare
|
||||
DownstreamStorage=D:\PDBTest //这个是本地缓存pdb文件的路径
|
||||
```
|
||||
5. 在美术的机器上的`C:\Windows\System32`目录下放置`symsrv.dll`。与symstore同路径。
|
||||
6. 在美术的机器上添加环境变量:`_NT_SYMBOL_PATH srv*d:\PDBTest*\\sanhao-NB0\pdbShare
|
||||
- [[#微软文档中的SymSrv案例]]
|
||||
7. 符号服务器的空间是有限的,需要定期删除过期文件,删除需要的命令是agestore。
|
||||
|
||||
### 微软文档中的SymStore案例
|
||||
- `symstore add /r /f \\largeapp\appserver\bins\*.* /s \\testdir\symsrv /t "Large Application" /v "Build 432" /c "Sample add"`
|
||||
- `symstore add /r /p /f \\BuildServer\BuildShare\3790free\symbols\*.* /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 free" /c "Sample add"
|
||||
- `symstore add /r /p /f \\BuildServer\BuildShare\3790Chk\symbols\*.* /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 checked" /c "Sample add"`
|
||||
|
||||
### 微软文档中的SymSrv案例
|
||||
o use SymSrv with a symbol store on \\mybuilds\mysymbols, set the following symbol path:
|
||||
`set _NT_SYMBOL_PATH= srv*\\mybuilds\mysymbols`
|
||||
|
||||
To set the symbol path so that the debugger will copy symbol files from a symbol store on \\mybuilds\mysymbols to your local directory c:\localsymbols, use:
|
||||
`set _NT_SYMBOL_PATH=srv*c:\localsymbols*\\mybuilds\mysymbols`
|
||||
|
||||
To set the symbol path so that the debugger will copy symbol files from a symbol store on \\mybuilds\mysymbols to the default downstream store (typically c:\debuggers\sym), use:
|
||||
`set _NT_SYMBOL_PATH=srv**\\mybuilds\mysymbols`
|
||||
|
||||
To use a cascading store, set the following symbol path:
|
||||
`set _NT_SYMBOL_PATH = srv*c:\localsymbols*\\NearbyServer\store*https://DistantServer`
|
50
03-UnrealEngine/流程管理与部署/Ubantu平台Puerts编译问题解决.md
Normal file
50
03-UnrealEngine/流程管理与部署/Ubantu平台Puerts编译问题解决.md
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: Ubantu平台Puerts编译问题解决
|
||||
date: 2023-09-15 15:50:48
|
||||
excerpt:
|
||||
tags:
|
||||
- Ubantu
|
||||
- Puerts
|
||||
- Docker
|
||||
rating: ⭐⭐⭐
|
||||
---
|
||||
# 前言
|
||||
本人使用的版本是[Unreal_v1.0.5](https://github.com/Tencent/puerts/releases/tag/Unreal_v1.0.5)的Nodejs版本,首先使用Ubantu23.04进行测试,之后换成了Ubantu22.04。Puerts在Ubantu(Linux)上部署的坑也比较多,遂写此文。
|
||||
|
||||
# Linux上的编译问题解决
|
||||
1. FileSystemOperation.cpp
|
||||
1. `#include "HAL/PlatformFilemanager.h" => #include "HAL/PlatformFileManager.h"`
|
||||
2. Compile PesapiFrameworkLoader.mm error: Objective-C was disabled in PCH file but is currently enabled
|
||||
1. 将PesapiFrameworkLoader.mm的后缀名改成PesapiFrameworkLoader.cpp
|
||||
|
||||
## V8环境库问题
|
||||
报错内容:**ld.lld: error: unable to find library -lnode**
|
||||
在询问作者后得知是V8环境库的编译环境与系统环境不符所致,需要自己编译库来解决。
|
||||
>https://github.com/Tencent/puerts/issues/1521
|
||||
|
||||
大致方法就是下载并且运行编译脚本自己编译库。该库2月16日Released的版本在Ubantu22.04上测试通过,所以建议大家使用Ubantu22.04。其他版本需要自己编译。
|
||||
>https://github.com/puerts/backend-nodejs
|
||||
|
||||
### 编译所需要的库
|
||||
```bash
|
||||
sudo apt-get install clang
|
||||
sudo apt-get install libc++-dev
|
||||
sudo apt-get install libc++abi-dev
|
||||
curl -sL https://deb.nodesource.com/setup_16.x | sudo -e bash -
|
||||
sudo apt-get install -y nodejs
|
||||
cd /home/user/Projects/backend-nodejs/node-script
|
||||
npm install -s commander
|
||||
# 部分纯净系统可能需要安装这2个东西
|
||||
sudo apt-get install make
|
||||
sudo apt-get install git
|
||||
```
|
||||
|
||||
因为该脚本是为Gihub Action编写的,其他还支持Ubuntu 20.04镜像,可以参考 https://github.com/actions/runner-images/ 。如果你是其他版本的系统就需要自己clone该仓库并且修改脚本进行编译。编译完文件会在/home/user/node/out/Release
|
||||
|
||||
调用方式:
|
||||
```bash
|
||||
./linux.sh 工作目录路径 16.x
|
||||
```
|
||||
这里我推荐修改脚本,直接手动指定2个参数,并且删除会报错地方,之后就可以编译了。编译完替换**Plugins\Puerts\ThirdParty\nodejs_16\lib\Linux**中文件即可。
|
||||
|
||||
# UE-Runtime容器部署问题
|
30
03-UnrealEngine/流程管理与部署/UnrealHorde/Untitled.md
Normal file
30
03-UnrealEngine/流程管理与部署/UnrealHorde/Untitled.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Untitled
|
||||
date: 2024-06-28 10:58:10
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
# 前言
|
||||
- Horde README.md https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/README.md
|
||||
- [**Deploying Horde**](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/Docs/Deployment.md)
|
||||
- - 有关 Horde 的架构和组件的信息,以及部署它们的最佳实践。
|
||||
**受众:** IT、系统管理员、打算修改 Horde 的程序员。
|
||||
- [**Configuring and Operating Horde**](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/Docs/Config.md)
|
||||
- - 描述如何设置和管理 Horde。
|
||||
**受众:**构建/开发运营团队、管理员。
|
||||
- [**Horde Internals**](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/Docs/Internals.md)
|
||||
- - 描述如何构建和修改 Horde 及其架构。
|
||||
**受众:**希望扩展 Horde 的开发人员。
|
||||
|
||||
# Internals
|
||||
## Server
|
||||
Horde 默认配置为支持本地开发。您可以通过打开`Engine/Source/Programs/Horde/Horde.sln`并将 Horde.Server 设置为默认项目来启动它。默认情况下,您可以通过 访问服务器`http://localhost:5000/account`。
|
||||
|
||||
## Docker
|
||||
Horde 包含`Dockerfile`用于创建 Docker 映像的 。但是,它在虚幻引擎源代码树中的位置要求事先暂存文件,以减少复制到构建映像中的数据大小。
|
||||
|
||||
执行这些操作的 BuildGraph 脚本包含在 中`Engine\Source\Programs\Horde\HordeBuild.xml`,可按如下方式运行:
|
||||
```
|
||||
RunUAT.bat Engine/Source/Programs/Horde/HordeBuild.xml -Target="Build HordeServer"
|
||||
```
|
48
03-UnrealEngine/流程管理与部署/VPS服务部署/ACME.sh 使用资料.md
Normal file
48
03-UnrealEngine/流程管理与部署/VPS服务部署/ACME.sh 使用资料.md
Normal file
@@ -0,0 +1,48 @@
|
||||
## 地址
|
||||
https://github.com/acmesh-official/acme.sh
|
||||
|
||||
## 通过acme.sh脚本来设置证书
|
||||
安装acme.sh
|
||||
```
|
||||
apt-get update && apt-get -y install socat //安装socat
|
||||
yum install socat
|
||||
wget -qO- get.acme.sh | bash //安装脚本
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
## 申请证书
|
||||
在你的域名解析服务提供商那里添加好解析记录,假定你的域名是yourdomain.com,记得不要开启CDN,然后执行下面命令申请证书。
|
||||
```
|
||||
acme.sh --issue --standalone -d yourdomain.com -k ec-256
|
||||
```
|
||||
因为本人要有blog,需要与nginx容器共存,所以使用网站目录方式:
|
||||
```
|
||||
acme.sh --issue -d blueroses.top -d www.blueroses.top -d tj.blueroses.top -k ec-256 --webroot /root/docker/nginx/html
|
||||
```
|
||||
|
||||
### 通配符证书申请
|
||||
通配符证书只支持dns方式,这里使用CloudFlare。首先在https://dash.cloudflare.com/profile/api-tokens 申请一个Global API Token。点击Global API Key栏的View即可,之后输入:
|
||||
```bash
|
||||
export CF_Key="19db67256c0eca16b5f4f4e8a7150c00eec16"
|
||||
export CF_Email="378100977@qq.com"
|
||||
```
|
||||
|
||||
```bash
|
||||
acme.sh --issue -d blueroses.top -d *.blueroses.top --dns dns_cf \
|
||||
--key-file /root/docker/trojan/trojan.key \
|
||||
--fullchain-file /root/docker/trojan/trojan.crt \
|
||||
--reloadcmd "docker restart nginx-web trojan"
|
||||
```
|
||||
|
||||
## 安装证书和私钥到指定位置
|
||||
```
|
||||
acme.sh --installcert -d blueroses.top \
|
||||
--fullchain-file /root/docker/trojan/trojan.crt \
|
||||
--key-file /root/docker/trojan/trojan.key \
|
||||
--ecc --reloadcmd "docker restart nginx-web trojan"
|
||||
```
|
||||
|
||||
## 自动续期
|
||||
```
|
||||
acme.sh --upgrade --auto-upgrade
|
||||
```
|
21
03-UnrealEngine/流程管理与部署/VPS服务部署/CloudFlare DDNS.md
Normal file
21
03-UnrealEngine/流程管理与部署/VPS服务部署/CloudFlare DDNS.md
Normal file
@@ -0,0 +1,21 @@
|
||||
## CloudFlare Key
|
||||
https://dash.cloudflare.com/profile
|
||||
|
||||
点击 API令牌->API秘钥:
|
||||
- Global API Key:23402010e956bb4d996ab994e178c62b3742c
|
||||
- Origin CA Key:v1.0-e2bbd4334c2f22123bde5da9-6540095b825ebbcfcf3e4abb47a07c51ea3a7ae66042059fb54ec5711cdbc11c4d380d09e3ed2837d55a90e918f10c86a6bdcf782601501fccc67191064186d9246842b23cd3092f
|
||||
|
||||
在域名的概述里有个区域ID,就是zoneId。
|
||||
- 区域ID:f84f14315f6b630be28364a1c217eea2
|
||||
|
||||
## 华硕路由器CloundFlare DDNS
|
||||
说明网址:http://tech.mornlong.com/post/29.html
|
||||
|
||||
## NodeJS DDNS服务
|
||||
最后更新于2018年,最好再自己看看
|
||||
- https://xcoder.in/2014/09/20/lets-build-ourselves-ddns/
|
||||
- https://github.com/XadillaX/dloucflare
|
||||
|
||||
其他:
|
||||
- https://www.npmjs.com/package/@oawu/ddns
|
||||
- https://www.npmjs.com/package/cloudflare-ddns-sync
|
70
03-UnrealEngine/流程管理与部署/VPS服务部署/CloudReve安装命令.md
Normal file
70
03-UnrealEngine/流程管理与部署/VPS服务部署/CloudReve安装命令.md
Normal file
@@ -0,0 +1,70 @@
|
||||
## 安装教程地址
|
||||
https://hub.docker.com/r/xavierniu/cloudreve
|
||||
|
||||
## 安装caddy用于反向代理
|
||||
```
|
||||
www.blueroses.top {
|
||||
tls admin@blueroses.top
|
||||
proxy / cloudreve:5212 {
|
||||
transparent
|
||||
}
|
||||
}
|
||||
```
|
||||
```
|
||||
docker run -d \
|
||||
--name caddy \
|
||||
-e "ACME_AGREE=true" \
|
||||
-e "CADDYPATH=/etc/caddycerts" \
|
||||
-v /dockercnf/caddy/certs:/etc/caddycerts \
|
||||
-v /dockercnf/caddy/Caddyfile:/etc/Caddyfile \
|
||||
--network my-network \
|
||||
-p 80:80 -p 443:443 \
|
||||
--restart unless-stopped \
|
||||
abiosoft/caddy
|
||||
```
|
||||
## aria2
|
||||
uid=0(root) gid=0(root) groups=0(root)
|
||||
```
|
||||
docker run -d \
|
||||
--name aria2 \
|
||||
--restart unless-stopped \
|
||||
--log-opt max-size=1m \
|
||||
-e PUID=0 \
|
||||
-e PGID=0 \
|
||||
-p 6800:6800 \
|
||||
-p 6888:6888 -p 6888:6888/udp \
|
||||
--network my-network \
|
||||
-v /dockercnf/aria2/config:/config \
|
||||
-v /dockercnf/aria2/downloads:/downloads \
|
||||
p3terx/aria2-pro
|
||||
```
|
||||
## cloudreve本体
|
||||
```
|
||||
docker run -d \
|
||||
--name cloudreve \
|
||||
-e PUID=0 \
|
||||
-e PGID=0 \
|
||||
-e TZ="Asia" \
|
||||
--network my-network \
|
||||
--restart=unless-stopped \
|
||||
-p 5212:5212 \
|
||||
-v /dockercnf/cloudreve/uploads:/cloudreve/uploads \
|
||||
-v /dockercnf/aria2/downloads:/downloads \
|
||||
-v /dockercnf/cloudreve/conf.ini:/cloudreve/conf.ini \
|
||||
-v /dockercnf/cloudreve/cloudreve.db:/cloudreve/cloudreve.db \
|
||||
xavierniu/cloudreve
|
||||
```
|
||||
## 账号密码
|
||||
首次启动后请执行docker logs -f cloudreve
|
||||
```
|
||||
[Info] 2020-04-08 07:15:19 初始化数据库连接
|
||||
[Info] 2020-04-08 07:15:19 开始进行数据库初始化...
|
||||
[Info] 2020-04-08 07:15:19 初始管理员账号:admin@cloudreve.org
|
||||
[Info] 2020-04-08 07:15:19 初始管理员密码:IAFhUH3m
|
||||
[Info] 2020-04-08 07:15:20 数据库初始化结束
|
||||
[Info] 2020-04-08 07:15:20 初始化任务队列,WorkerNum = 10
|
||||
[Info] 2020-04-08 07:15:20 初始化定时任务...
|
||||
[Info] 2020-04-08 07:15:20 当前运行模式:Master
|
||||
[Info] 2020-04-08 07:15:20 开始监听 :5212
|
||||
```
|
||||
账号为本人QQ邮箱,密码为常用密码
|
@@ -0,0 +1,27 @@
|
||||
#TODO
|
||||
# Jenkins通过命令行启动Ue4的自动测试框架
|
||||
https://www.emidee.net/ue4/2018/11/13/UE4-Unit-Tests-in-Jenkins.html
|
||||
好像可以通过 命令行来启动Ue4的自动测试框架
|
||||
|
||||
基础过程
|
||||
https://patricevignola.com/post/automation-jenkins-unreal
|
||||
|
||||
|
||||
# GitHook
|
||||
Git hooks是基于事件的。当你执行特定的git指令时,该软件会从git仓库下的hooks目录下检查是否有相对应的脚本,如果有就执行。
|
||||
|
||||
有些脚本是在动作执行之前被执行的,这种“先行脚本”可用于实现代码规范的统一、完整性检查、环境搭建等功能。有些脚本则在事件之后被执行,这种“后行脚本”可用于实现代码的部署、权限错误纠正(git在这方面的功能有点欠缺)等功能。
|
||||
|
||||
# 安装一个钩子
|
||||
钩子都被存储在Git目录下的hooks子目录中。也即绝大部分项目中的.git/hooks。当你用git init初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。这些脚本除了本身可以被调用外,它们还暴露了被触发时所传入的参数。这些示例的名字都是以 .sample 结尾,如果想启用它们,移除这个后缀即可。
|
||||
|
||||
把一个正确命名且可执行的文件放入 Git 目录下的 hooks 子目录中,即可激活该钩子脚本。这样一来,它就能 被 Git 调用。
|
||||
|
||||
|
||||
第三方选择使用
|
||||
# Gitlab Webhooks
|
||||
Webhooks 允许第三方应用监听 GitLab 上的特定事件,在这些事件发生时通过 HTTP POST 方式通知( 超时5秒) 到第三方应用指定的 Web URL。 例如项目有新的内容 Push,或是 Merge Request 有更新等。 WebHooks 可方便用户实现自动部署,自动测试,自动打包,监控项目变化等。
|
||||
|
||||
webhooks, 可以在 pull request / merge master 等几个场景下, 设置异步回调通知(http 请求)。这个背后就是 git hooks 在起作用。
|
||||
|
||||
因此,利用 WebHooks 的特性,可配合 Jenkins 实现一系列的自动化任务。
|
890
03-UnrealEngine/流程管理与部署/VPS服务部署/NAS与服务部署.md
Normal file
890
03-UnrealEngine/流程管理与部署/VPS服务部署/NAS与服务部署.md
Normal file
@@ -0,0 +1,890 @@
|
||||
---
|
||||
title: NAS与服务部署
|
||||
date: 2022-09-15 10:02:03
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
# 绿联NAS
|
||||
https://support.ugnas.com/knowledgecenter/#/detail/eyJpZCI6MTI4MywidHlwZSI6InRhZzAwMiIsImxhbmd1YWdlIjoiemgtQ04iLCJjbGllbnRUeXBlIjoiUEMiLCJhcnRpY2xlSW5mb0lkIjo0MjQsImFydGljbGVWZXJzaW9uIjoiIiwicGF0aENvZGUiOiIifQ==
|
||||
|
||||
# BE88U支持的SFP+
|
||||
- SFP+ Optical transceiver(10G) : 10Gtek AXS85-192-M3
|
||||
- SFP+ transceiver Electrical 10G : TP-LINK TL-SM510U
|
||||
- SFP (1G) transceiver : SCOPTO ZK-GE-SM-3A/SC 1.25G1310nm/1550nm 3KM SC DDM
|
||||
- 2.5G GPON: HUAWEI SmartAX MA5671A (2.5G)/ NOKIA GPON ONT SFP Class I Laser G-010S-A
|
||||
- DAC: SHENGWEI SFP+ 10G DAC Cable 1m 30AWG
|
||||
|
||||
# NAS噪音太大,大家都吧NAS放置到哪了
|
||||
NAS噪音太大,大家都吧NAS放置到哪了? - cloud的回答 - 知乎
|
||||
https://www.zhihu.com/question/636419559/answer/3453548199
|
||||
|
||||
购买防共鸣垫
|
||||
# Token
|
||||
## blueroses.top AccessToken
|
||||
e01895f42649090f95bbea3cd94df897ca5c7e22
|
||||
## github双向验证恢复码
|
||||
bd0dc-c80ce
|
||||
09120-97ed1
|
||||
46bae-53203
|
||||
0a1b4-dde0d
|
||||
cae50-36821
|
||||
8c24c-31c93
|
||||
6931b-b582f
|
||||
90e3e-33c1e
|
||||
58bce-5b314
|
||||
94535-5da38
|
||||
6963d-6c7b7
|
||||
e5a82-23d6f
|
||||
837af-f7b5c
|
||||
3f421-2383d
|
||||
465e8-03051
|
||||
1d2fe-f3fdf
|
||||
## github 图床 picgo 设置
|
||||
blueroseslol/ImageBag
|
||||
master
|
||||
|
||||
- 图床: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
|
||||
- Picgo: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
|
||||
|
||||
ImageBag/Images/
|
||||
https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest
|
||||
|
||||
## Dockerhub Token
|
||||
dckr_pat_mWBh2SVqaaIU1QuAzSngrt8H6Do
|
||||
|
||||
# IOS
|
||||
- 38100977@qq.com
|
||||
- bluerose_us@qq.com (美国)
|
||||
- loujiajie2@sina.com (台湾)
|
||||
|
||||
# 路由器DDNS与科学上网插件
|
||||
https://blueroseslol.asuscomm.com:12345/Main_Login.asp
|
||||
https://blueroses.asuscomm.com:8443/Main_Login.asp
|
||||
- https://github.com/hq450/fancyss
|
||||
- **[https://t.me/merlinclashfile](https://t.me/merlinclashfile)**
|
||||
# 杂项
|
||||
- 星际蜗牛
|
||||
- [阿文菌爱捡垃圾 篇二十九:手把手教您组装一台ITX的高性能NAS:598元的6盘位准系统+I5 8代+B365+万兆网卡](https://post.smzdm.com/p/a834noe6/)
|
||||
- 黑群晖
|
||||
- [文菌装NAS 篇五:手把手教您安装黑群晖918+ 6.2保姆级教程,这应该是装黑群晖NAS最详细的教程了,含群晖设置](https://post.smzdm.com/p/aqx07xmk/)
|
||||
- UPS
|
||||
- 山特(SANTAK)TG-BOX600/850 UPS
|
||||
- 保护好你的小鸡!保姆级服务器安全教程! https://blog.laoda.de/archives/how-to-secure-a-linux-server
|
||||
|
||||
## NAS系统选择
|
||||
- OMV:与FreeNAS相比,拥有原生Docker,可以直接让容器使用硬件。
|
||||
- [官方下载地址](https://www.openmediavault.org/download.html)
|
||||
- [一次满足两个愿望?HTPC_NAS二合一服务器搭建教学(OMV新手入门)](https://www.bilibili.com/video/BV1Ge41147B9?spm_id_from=333.999.0.0&vd_source=d47c0bb42f9c72fd7d74562185cee290)
|
||||
- [OMV搭建系列教程[0] – 最小化安装Debian11](https://www.bilibili.com/read/cv13834759/)
|
||||
- 可使用protainer管理Docker
|
||||
- FreeNAS:比较适合企业使用,优势在于:拷贝速度以及硬盘寿命。
|
||||
- ZFS
|
||||
- Docker:需要在虚拟机上安装系统再部署。
|
||||
- UnRaid:要钱……
|
||||
|
||||
测速网速测试:
|
||||
```
|
||||
apt-get install speedtest-cli
|
||||
speedtest-cli --secure
|
||||
```
|
||||
|
||||
测速脚本:
|
||||
`wget -qO- bench.sh | bash`
|
||||
|
||||
vps ping测试、去程/回程路由跟踪、vps一键测试脚本:
|
||||
https://v2xtls.org/vps-ping%E6%B5%8B%E8%AF%95%E3%80%81%E5%8E%BB%E7%A8%8B-%E5%9B%9E%E7%A8%8B%E8%B7%AF%E7%94%B1%E8%B7%9F%E8%B8%AA%E3%80%81vps%E4%B8%80%E9%94%AE%E6%B5%8B%E8%AF%95%E8%84%9A%E6%9C%AC/
|
||||
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/hijkpw/testrace/master/testrace.sh
|
||||
bash testrace.sh
|
||||
```
|
||||
|
||||
## OMV6 网站路径
|
||||
/var/www/openmediavault/
|
||||
## Reality协议
|
||||
https://www.youtube.com/watch?v=3oQi_YBRTiQ&t=1s
|
||||
|
||||
客户端推荐:
|
||||
https://jichangtuijian.com/Reality%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E8%84%9A%E6%9C%AC%E5%92%8C%E5%90%84%E4%B8%AA%E7%B3%BB%E7%BB%9F%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%94%B6%E9%9B%86%E6%8E%A8%E8%8D%90.html
|
||||
## 检测端口是否被屏蔽
|
||||
- 国外站长工具:https://www.yougetsignal.com/tools/open-ports/
|
||||
- 国内站长工具:https://tool.chinaz.com/port
|
||||
- https:https://zhuanlan.zhihu.com/p/21286171
|
||||
# 待部署列表
|
||||
- [ ] Heidmall 导航页方便找对应应用
|
||||
- [x] 百度网盘
|
||||
- [x] gitea
|
||||
- 漫画
|
||||
- [x] LANraragi
|
||||
- [x] OnlyOffice
|
||||
- 影片
|
||||
- Emby Server(收费)
|
||||
- Plex(收费)
|
||||
- Overseerr(附带BT下载、传输功能)
|
||||
- [x] nas-tools
|
||||
- [x] Jellyfin(Emby Server代替品)
|
||||
- [x] qbittorrent
|
||||
- 下载
|
||||
- [x] Aria2
|
||||
- [x] Aria-NG
|
||||
- [ ] Transmisiion
|
||||
- 智能设备管理
|
||||
- HomeBridge
|
||||
- 照片
|
||||
- Moment
|
||||
- ResilioSync(手机照片备份)
|
||||
- Drive
|
||||
- hentaiathome
|
||||
- 笔记:[[#memos]]
|
||||
|
||||
# Docker源
|
||||
Portainer可以更换Docker的源,来加快下载速度。
|
||||
- azure源docker源:dockerhub.azk8s.cn
|
||||
- Docker中国区官方:registry.docker-cn.com
|
||||
- 网易:[http://hub-mirror.c.163.com](https://link.zhihu.com/?target=http%3A//hub-mirror.c.163.com/)
|
||||
- 中国科技大学镜像加速:[https://docker.mirrors.ustc.edu.cn](https://link.zhihu.com/?target=https%3A//docker.mirrors.ustc.edu.cn/)
|
||||
|
||||
# 域名与地址
|
||||
https://blueroses.asuscomm.com:8443
|
||||
ipv4.blueroses.top
|
||||
bluerose.top
|
||||
|
||||
## DNSPod
|
||||
ID:350298
|
||||
Token:ed4a9b995c02c1185964f0fdb01b76df
|
||||
|
||||
350311
|
||||
|
||||
# 服务部署
|
||||
- Portainer:9000 admin ljj@88483649
|
||||
- 路由器:https://blueroses.asuscomm.com:8443/
|
||||
- ~~Heidmall:8080~~
|
||||
- CloudReve:5212
|
||||
- Gitea:8888
|
||||
- SVN: http://ipv4.blueroses.top:7777/svnadmin
|
||||
- baidunetdisk:5800
|
||||
- lanraragi:9999
|
||||
- NASTools:10000
|
||||
- qbittorrenthttp:8080
|
||||
- Jellyfin:8096
|
||||
- [[#Perlite]]
|
||||
|
||||
## Heidmall
|
||||
参考:https://zhuanlan.zhihu.com/p/405906100
|
||||
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp heimdall
|
||||
```
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name=heimdall \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-p 8080:80 \
|
||||
-p 666:443 \
|
||||
-v /home/heimdall:/config \
|
||||
--restart unless-stopped \
|
||||
linuxserver/heimdall:latest
|
||||
```
|
||||
|
||||
### 增加密码保护
|
||||
This image now supports password protection through htpasswd. Run the following command on your host to generate the htpasswd file `docker exec -it heimdall htpasswd -c /config/nginx/.htpasswd <username>`. Replace
|
||||
|
||||
## CloudReve
|
||||
### 创建目录结构
|
||||
```c++
|
||||
cd /home
|
||||
mkdir -vp cloudreve/{uploads,avatar} \
|
||||
&& touch cloudreve/conf.ini \
|
||||
&& touch cloudreve/cloudreve.db \
|
||||
&& mkdir -p aria2/config \
|
||||
&& mkdir -p data/aria2 \
|
||||
&& chmod -R 777 data/aria2
|
||||
```
|
||||
|
||||
### 运行
|
||||
然后将以下文件保存为 `docker-compose.yml`,放置于当前目录,与 cloudreve 同一层级,同时,修改文件中的 `RPC_SECRET`。
|
||||
```c++
|
||||
version: "3.8"
|
||||
services:
|
||||
cloudreve:
|
||||
container_name: cloudreve
|
||||
image: cloudreve/cloudreve:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5212:5212"
|
||||
volumes:
|
||||
- temp_data:/data
|
||||
- ./cloudreve/uploads:/cloudreve/uploads
|
||||
- ../srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/jellyfin/:/cloudreve/uploads/1/H
|
||||
- ./cloudreve/conf.ini:/cloudreve/conf.ini
|
||||
- ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
|
||||
- ./cloudreve/avatar:/cloudreve/avatar
|
||||
depends_on:
|
||||
- aria2
|
||||
aria2:
|
||||
container_name: aria2
|
||||
image: p3terx/aria2-pro
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6800:6800"
|
||||
environment:
|
||||
- RPC_SECRET=bluerose
|
||||
- RPC_PORT=6800
|
||||
volumes:
|
||||
- ./aria2/config:/config
|
||||
- temp_data:/data
|
||||
volumes:
|
||||
temp_data:
|
||||
driver: local
|
||||
driver_opts:
|
||||
type: none
|
||||
device: $PWD/data
|
||||
o: bind
|
||||
```
|
||||
|
||||
### 运行镜像
|
||||
后台运行模式,可以从 docker/docker-compose 的日志中获取默认管理员账户用户名和密码
|
||||
```c++
|
||||
docker-compose up -d
|
||||
```
|
||||
或者,直接运行,log 将会直接输出在当前控制台中,请注意退出之后保持当前容器运行
|
||||
```c++
|
||||
docker-compose up
|
||||
```
|
||||
在之后的控制面板中,按照如下配置
|
||||
1. **[不可修改]** RPC 服务器地址 => `http://aria2:6800`
|
||||
2. **[可修改, 需保持和 docker-compose.yml 文件一致]** RPC 授权令牌 => `your_aria_rpc_token`
|
||||
3. **[不可修改]** Aria2 用作临时下载目录的 节点上的绝对路径 => `/data`
|
||||
|
||||
### 更新
|
||||
关闭当前运行的容器,此步骤不会删除挂载的配置文件以及相关目录
|
||||
>docker-compose down
|
||||
|
||||
如果此前已经拉取 docker 镜像,使用以下命令获取最新镜像
|
||||
>docker pull cloudreve/cloudreve
|
||||
|
||||
## Aria2-NG
|
||||
- http://192.168.50.6:6800/jsonrpc
|
||||
- get
|
||||
- bluerose
|
||||
|
||||
```c++
|
||||
docker run -d \
|
||||
--name ariang \
|
||||
--log-opt max-size=1m \
|
||||
--restart unless-stopped \
|
||||
-p 6880:6880 \
|
||||
p3terx/ariang
|
||||
```
|
||||
|
||||
## Gitea
|
||||
```c++
|
||||
cd /home
|
||||
mkdir -vp gitea
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run -d --restart=always --privileged=true --name=gitea \
|
||||
-p 822:22 \
|
||||
-p 8888:3000 \
|
||||
-v /home/gitea:/data \
|
||||
gitea/gitea:latest
|
||||
|
||||
docker run -d --restart=always --privileged=true --name=gitea \
|
||||
-p 822:22 \
|
||||
-p 8888:3000 \
|
||||
-v /root/docker/gitea:/data \
|
||||
gitea/gitea:latest
|
||||
```
|
||||
|
||||
https://blog.csdn.net/weixin_44415928/article/details/131700249
|
||||
|
||||
邮箱授权码
|
||||
uidsmqmeqjuubjhj
|
||||
## SVN
|
||||
参考文章:
|
||||
- https://www.cnblogs.com/zepc007/p/14521394.html
|
||||
- https://blog.csdn.net/zhuocailing3390/article/details/123777266
|
||||
|
||||
创建目录并且修改权限:
|
||||
```c++
|
||||
cd /home
|
||||
mkdir -vp svn
|
||||
chmod -R 777 /home/svn
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run -d --name svn-server --restart=always \
|
||||
-v /home/svn:/home/svn \
|
||||
-p 7777:80 \
|
||||
-p 3690:3690 \
|
||||
elleflorio/svn-server
|
||||
```
|
||||
|
||||
创建管理员用户
|
||||
```c++
|
||||
docker exec -t svn-server htpasswd -b /etc/subversion/passwd <username> <password>
|
||||
docker exec -t svn-server htpasswd -b /etc/subversion/passwd bluerose ljj199221
|
||||
```
|
||||
|
||||
进入容器内部
|
||||
```bash
|
||||
docker exec -it svn-server /bin/sh
|
||||
```
|
||||
修改配置:
|
||||
```shell
|
||||
# 进入apache2目录
|
||||
cd /etc/apache2/
|
||||
|
||||
# 修改
|
||||
vi httpd.conf
|
||||
```
|
||||
修改内容:
|
||||
```shell
|
||||
ServerName ipv4.blueroses.top:7777
|
||||
```
|
||||
|
||||
### 配置
|
||||
访问地址:http://ipv4.blueroses.top:7777/svnadmin,进行后台的配置管理,配置内容如下:
|
||||
|
||||
- Subversion authorization file :/etc/subversion/subversion-access-control
|
||||
- User authentication file (SVNUserFile): /etc/subversion/passwd
|
||||
- Parent directory of the repositories (SVNParentPath): /home/svn
|
||||
- Subversion client executable:/usr/bin/svn
|
||||
- Subversion admin executable:/usr/bin/svnadmin
|
||||
>注意:配置填写好后进行test测试,Test passed后再进行保存配置信息
|
||||
|
||||

|
||||
|
||||
### 测试
|
||||
访问仓库,地址规则为:`ip:prot/svn/仓库名称`,比如:[http://ipv4.blueroses.top:7777/svn/demo/](http://ipv4.blueroses.top:7777/svn/demo/),svn客户端也用这个地址。
|
||||
|
||||
## 百度网盘
|
||||
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp baidunetdisk/{config,downloads}
|
||||
```
|
||||
|
||||
```c++
|
||||
docker create \
|
||||
--name=baidunetdisk \
|
||||
-p 5800:5800 \
|
||||
-p 5900:5900 \
|
||||
-v /home/baidunetdisk/config:/config \
|
||||
-v /home/baidunetdisk/downloads:/config/baidunetdiskdownload \
|
||||
--restart unless-stopped \
|
||||
johngong/baidunetdisk:latest
|
||||
```
|
||||
|
||||
## calibre-web
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp calibre/{config,books}
|
||||
```
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name=calibre-web \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-e DOCKER_MODS=linuxserver/mods:universal-calibre `#optional` \
|
||||
-e OAUTHLIB_RELAX_TOKEN_SCOPE=1 `#optional` \
|
||||
-p 8083:8083 \
|
||||
-v /home/calibre/config:/config \
|
||||
-v /home/calibre/books/library:/books \
|
||||
--restart unless-stopped \
|
||||
linuxserver/calibre-web:latest
|
||||
```
|
||||
|
||||
安装完进入网页界面会提示没有Meta.db,可以通过安装另一个镜像来获得:
|
||||
```c++
|
||||
docker run -d \
|
||||
--name=calibre \
|
||||
--security-opt seccomp=unconfined `#optional` \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Europe/London \
|
||||
-e PASSWORD= `#optional` \
|
||||
-e CLI_ARGS= `#optional` \
|
||||
-p 8080:8080 \
|
||||
-p 8081:8081 \
|
||||
-v /home/calibreTest/:/config \
|
||||
--restart unless-stopped \
|
||||
linuxserver/calibre:latest
|
||||
```
|
||||
|
||||
安装完进入8080,完成安装即可,之后在Calibre Library中就有Meta.db了。
|
||||
|
||||
## lanraragi
|
||||
https://post.smzdm.com/p/aenz8k7q/
|
||||
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp lanraragi/{content,database}
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run --name=lanraragi -d \
|
||||
-p 9999:3000 \
|
||||
-v /home/lanraragi/content:/home/koyomi/lanraragi/content \
|
||||
-v /home/lanraragi/database:/home/koyomi/lanraragi/database \
|
||||
--restart unless-stopped \
|
||||
dezhao/lanraragi_cn
|
||||
```
|
||||
|
||||
```bash
|
||||
cd /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea
|
||||
mkdir -vp lanraragi/{content,database}
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run --name=lanraragi -d \
|
||||
-p 9999:3000 \
|
||||
-v /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/lanraragi/content:/home/koyomi/lanraragi/content \
|
||||
-v /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/lanraragi/database:/home/koyomi/lanraragi/database \
|
||||
--restart unless-stopped \
|
||||
dezhao/lanraragi_cn
|
||||
```
|
||||
/srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/
|
||||
https://e-hentai.org/
|
||||
|
||||
IOS APP:https://github.com/Doraemoe/DuReader
|
||||
|
||||
## 影音系列
|
||||
media使用一个公共外部文件夹
|
||||
```c++
|
||||
cd /home
|
||||
mkdir -vp media
|
||||
```
|
||||
|
||||
- TMDB:blueroses
|
||||
- API 36dfc472117c89d9d747184c31c4777d
|
||||
- TMDB超时问题解决: https://todsay.com/views/59.html
|
||||
- TMDB超时问题解决:https://www.hao4k.cn/thread-56601-1-1.html
|
||||
- 检测工具
|
||||
- https://tools.ipip.net/dns.php
|
||||
- 爱站ping检测工具
|
||||
|
||||
修改NAS Host即可,修改/etc/hosts文件。
|
||||
|
||||
NAS翻墙:https://www.youtube.com/watch?v=ha6mYJW8tIo
|
||||
### V2ray
|
||||
```c++
|
||||
cd /home
|
||||
mkdir -vp v2ray/modules
|
||||
touch v2ray/resolv.conf
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
--network=host \
|
||||
--name v2raya \
|
||||
-e V2RAYA_ADDRESS=0.0.0.0:2017 \
|
||||
-v /home/v2ray/modules:/lib/modules:ro \
|
||||
-v /home/v2ray/resolv.conf:/etc/resolv.conf \
|
||||
-v /home/v2ray:/etc/v2raya \
|
||||
mzz2017/v2raya-nightly:latest
|
||||
```
|
||||
|
||||
预览端口2017
|
||||
进入之后选择导入V2ray设置,之后选择这一行的“选择”按钮,并且点击左上角的开启。并且勾选放置DNS污染。
|
||||
|
||||
docker attach
|
||||
docker exec -it v2raya bash
|
||||
|
||||
docker exec -it mzz2017_v2raya-nightly sh
|
||||
v2raya --lite --log-level debug
|
||||
|
||||
### homeassistant
|
||||
```c++
|
||||
docker run -d \
|
||||
--name homeassistant \
|
||||
--privileged \
|
||||
--restart=unless-stopped \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-v /data/homeassistant:/config \
|
||||
--network=host \
|
||||
homeassistant/home-assistant
|
||||
```
|
||||
|
||||
默认端口8123
|
||||
|
||||
### NAS-TOOl
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp nastools/{config,media}
|
||||
```
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name nas-tools \
|
||||
--hostname nas-tools \
|
||||
-p 10000:3000 `# 默认的webui控制端口` \
|
||||
-v /home/nastools/config:/config `# 冒号左边请修改为你想在主机上保存配置文件的路径` \
|
||||
-v /home/media:/media `# 媒体目录,多个目录需要分别映射进来` \
|
||||
-e PUID=0 `# 想切换为哪个用户来运行程序,该用户的uid,详见下方说明` \
|
||||
-e PGID=0 `# 想切换为哪个用户来运行程序,该用户的gid,详见下方说明` \
|
||||
-e UMASK=000 `# 掩码权限,默认000,可以考虑设置为022` \
|
||||
-e NASTOOL_AUTO_UPDATE=false `# 如需在启动容器时自动升级程程序请设置为true` \
|
||||
-e REPO_URL="https://ghproxy.com/https://github.com/jxxghp/nas-tools.git" `# 如果你访问github的网络不太好,可以考虑在创建容器时增加设置一个环境变量` \
|
||||
--restart unless-stopped \
|
||||
nastools/nas-tools:2.9.1
|
||||
```
|
||||
|
||||
***因为作者跑路了,所以需要使用其他人的镜像***
|
||||
|
||||
- https://hub.docker.com/r/sungamma/nas-tools/tags
|
||||
- https://hub.docker.com/r/ljnpng/nastools
|
||||
- https://hub.docker.com/r/nastools/nas-tools/tags
|
||||
|
||||
NASTools:admin password
|
||||
|
||||
- 从零开始的软路由之爱快docker安装nastools:https://zhuanlan.zhihu.com/p/547732022
|
||||
- 耗资过万,新手如何搭建家庭影院?绿联nas-tools详细教程:https://zhuanlan.zhihu.com/p/553313603
|
||||
|
||||
其他需要安装的:
|
||||
- Kodi Sync Queue(电视盒子)
|
||||
- kodi-19.4-Matrix-armeabi-v7a.apk(电视机上安装)
|
||||
|
||||
### jellyfin
|
||||
- 中国特供版:https://hub.docker.com/r/nyanmisaka/jellyfin
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp jellyfin/{config,tvshows,movies}
|
||||
cd /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea
|
||||
mkdir -vp jellyfin/H
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run -d \
|
||||
--name=jellyfin \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-p 8096:8096 \
|
||||
-p 8920:8920 `#optional` \
|
||||
-p 7359:7359/udp `#optional` \
|
||||
-p 1900:1900/udp `#optional` \
|
||||
-v /home/jellyfin/config:/config \
|
||||
-v /home/media/tvshows:/data/tvshows \
|
||||
-v /home/media:/data/movies \
|
||||
-v /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/jellyfin:/data/movies/H \
|
||||
--restart unless-stopped \
|
||||
nyanmisaka/jellyfin:latest
|
||||
```
|
||||
|
||||
### prowlarr
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp prowlarr/{config}
|
||||
```
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name=prowlarr \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
--network=host \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-p 9696:9696 \
|
||||
-v /home/prowlarr/config:/config \
|
||||
--restart unless-stopped \
|
||||
linuxserver/prowlarr:develop
|
||||
```
|
||||
/home/prowlarr/config/config.xml 中api key
|
||||
|
||||
ACG资源:
|
||||
- https://www.acgbox.link/#term-7
|
||||
|
||||
### ChineseSubFinder
|
||||
```c++
|
||||
cd /home
|
||||
mkdir -vp ChineseSubFinder /{config,media,browser}
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run -d \
|
||||
-v /home/ChineseSubFinder/config:/config `# 冒号左边请修改为你想在主机上保存配置、日志等文件的路径` \
|
||||
-v /home/media:/media `# 请修改为需要下载字幕的媒体目录,冒号右边可以改成你方便记忆的目录,多个媒体目录需要添加多个-v映射` \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e PERMS=true `# 是否重设/media权限` \
|
||||
-e TZ=Asia/Shanghai `# 时区` \
|
||||
-e UMASK=022 `# 权限掩码` \
|
||||
-p 19035:19035 \
|
||||
-p 19037:19037 `# webui 的视频列表读取图片用,务必设置不要暴露到外网` \
|
||||
--name chinesesubfinder \
|
||||
--hostname chinesesubfinder \
|
||||
--log-driver "json-file" \
|
||||
--log-opt "max-size=100m" `# 限制docker控制台日志大小,可自行调整` \
|
||||
allanpk716/chinesesubfinder:latest-lite
|
||||
```
|
||||
|
||||
### opensubtitles
|
||||
- blueroses
|
||||
- Ljj@88483649
|
||||
|
||||
### qBittorent
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp qBittorent/{config,media}
|
||||
```
|
||||
|
||||
```c++
|
||||
docker run -d \
|
||||
--name=qbittorrent \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-e WEBUI_PORT=8080 \
|
||||
-p 8080:8080 \
|
||||
-p 6881:6881 \
|
||||
-p 6881:6881/udp \
|
||||
-v /home/qBittorent/config:/config \
|
||||
-v /home/media/home:/downloads/home \
|
||||
-v /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/jellyfin/:/downloads/home/H \
|
||||
-v /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/jellyfin/AV:/downloads/home/AV \
|
||||
-v /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/jellyfin/3D:/downloads/home/3D \
|
||||
-v /srv/dev-disk-by-uuid-186bd712-77aa-422d-972f-8666404ff8ea/jellyfin/2D:/downloads/home/2D \
|
||||
--restart unless-stopped \
|
||||
linuxserver/qbittorrent
|
||||
```
|
||||
|
||||
username/password is `admin/adminadmin`.
|
||||
|
||||
▼默认监听端口是6881,即使想要映射监听端口,也不要监听默认端口,大多数PT站都是禁了的,用6881端口进行PT下载就会遇到以下问题:“Port 6881 is blacklisted!”,端口被黑名单了。
|
||||
|
||||

|
||||
|
||||
▼翻看PT站点的公告或者是常见问题,就可以看到被屏蔽的端口号,6881-6889都是禁封的,像这个站点推荐了49153-65535端口,随便自行设置就好。
|
||||
|
||||

|
||||
|
||||
### 让qBit可以外网访问
|
||||
去掉 启用Host Header属性验证。
|
||||
|
||||
▼刚安装好的qBit是不能通过外网访问的,即使在路由器上做了端口转发,访问时你会发现出现下面的情况。
|
||||

|
||||
|
||||
▼这时候我们需要将配置文件”qbittorent.conf“下载到本地进行修改,在文档末尾加入下面的代码。
|
||||
> WebUI\HostHeaderValidation=false
|
||||
|
||||

|
||||
|
||||
▼将修改好的conf文件上传到qBit的config文件夹下进行覆盖。
|
||||
|
||||

|
||||
|
||||
**注意:似乎只有admin用户有删除Container文件夹下文件的权限,请用admin用户进行操作。**
|
||||
|
||||

|
||||
### 初见qBittorrent
|
||||
▼现在在外网环境下也能够登录qBittorent了,用户名为admin,密码为adminadmin。
|
||||

|
||||
|
||||
▼此时的qBit还是英文,找到图中的小齿轮➡Web UI➡简体中文。
|
||||

|
||||
修改默认密码
|
||||
▼在刚刚修改语言的位置,往下拉一点点,就可以看到修改账号密码的地方了,为了省事(偷懒)也可以对局域网内网中的IP地址设置白名单,省去身份验证的步骤。
|
||||
|
||||

|
||||
|
||||
修改监听端口
|
||||
▼就香前面说的,监听端口在部署Docker时咱们没有做映射,默认的时6881,为了下载有速度,咱们这里随便roll一个用于传入连接的端口,同时开启UPnP功能转发端口,下载就能跑的起来了。
|
||||
|
||||

|
||||
|
||||
### 修改下载位置与自动添加种子
|
||||
▼我们之前将downloads文件夹映射到了Multimedia文件夹,这里展示出来的download是容器内部的文件夹,实际上是我们Nas上的Multimedia,相当于是根目录,是不能修改的,能做的只是在后面跟上新的路径,比如说”/Music“或者是”/Movie“之类的,如此下载就会下载到Multimedia下的Music/Movie等自建文件夹。自动添加种子奶爸一般不用,小伙伴们自行使用。
|
||||
|
||||

|
||||
|
||||
### PT站
|
||||
https://blog.csdn.net/u012558210/article/details/106538528
|
||||
|
||||
- http://share.dmhy.org/
|
||||
- https://www.36dm.com/
|
||||
- https://www.skyey2.com/login_notice.php
|
||||
- https://www.nicept.net/donate.php
|
||||
|
||||
## OnlyOffice
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp onlyoffice/{logs,data}
|
||||
```
|
||||
|
||||
```bash
|
||||
docker run -i -t -d -p 9999:80 \
|
||||
-v /home/onlyoffice/logs:/var/log/onlyoffice \
|
||||
-v /home/onlyoffice/data:/var/www/onlyoffice/Data \
|
||||
onlyoffice/documentserver
|
||||
```
|
||||
之后让Example自动启动:
|
||||
```bash
|
||||
docker exec 6b51e5dd3e43 sudo sed 's,autostart=false,autostart=true,' -i /etc/supervisor/conf.d/ds-example.conf
|
||||
```
|
||||
|
||||
## hentaiathome
|
||||
客户编号:44771
|
||||
客户端密钥:m4NKWURvR83BsnJTuej1
|
||||
44771-m4NKWURvR83BsnJTuej1
|
||||
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp hentaiathome/{data,download}
|
||||
|
||||
#Pull image
|
||||
docker pull ghcr.io/disappear9/hentaiathome:latest
|
||||
|
||||
#Create volume for caches and logs
|
||||
docker volume create h_at_h_data
|
||||
|
||||
#Run it
|
||||
docker run -d --name h_at_h \
|
||||
-p 9876:9876 \
|
||||
-v /home/hentaiathome/data:/hath/data \
|
||||
-v /home/hentaiathome/download:/hath/download \
|
||||
-e HatH_KEY=44771-xgp46ibo7fUJfsg3MU7U \
|
||||
ghcr.io/disappear9/hentaiathome
|
||||
```
|
||||
|
||||
Update:
|
||||
```bash
|
||||
#Stop
|
||||
sudo docker stop h_at_h
|
||||
|
||||
#Delete
|
||||
sudo docker rm h_at_h
|
||||
|
||||
#Delete old image
|
||||
sudo docker rmi ghcr.io/disappear9/hentaiathome
|
||||
|
||||
#Pull new image
|
||||
sudo docker pull ghcr.io/disappear9/hentaiathome
|
||||
|
||||
#Run it
|
||||
sudo docker run -d --name h_at_h -p YOUR_PORT:YOUR_PORT -v h_at_h_data:/hath/data -v /DOWNLOAD_DIR:/hath/download ghcr.io/disappear9/hentaiathome
|
||||
Or
|
||||
sudo docker run -d --name h_at_h --net host -v h_at_h_data:/hath/data -v /DOWNLOAD_DIR:/hath/download ghcr.io/disappear9/hentaiathome
|
||||
If you want to change port in the future.
|
||||
```
|
||||
|
||||
## Perlite
|
||||
```bash
|
||||
cd /home
|
||||
mkdir -vp perlite/{notes,config,web}
|
||||
|
||||
docker container rm perlite
|
||||
docker image rm sec77/perlite:latest
|
||||
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
```bash
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
perlite:
|
||||
image: sec77/perlite:latest
|
||||
container_name: perlite
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NOTES_PATH=note
|
||||
- HIDE_FOLDERS=docs,private,trash
|
||||
- LINE_BREAKS=true
|
||||
volumes:
|
||||
- ./note:/var/www/perlite/note:ro
|
||||
- ./config:/web/config \
|
||||
|
||||
web:
|
||||
build:
|
||||
context: ./web
|
||||
image: sec77/perlite_web:stable
|
||||
container_name: perlite_web
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 9090:80
|
||||
volumes_from:
|
||||
- perlite
|
||||
depends_on:
|
||||
- perlite
|
||||
```
|
||||
|
||||
Gitea Token e2eb7193b043e0d914ba76651197ad0a36daa974
|
||||
|
||||
## Perforce
|
||||
```bash
|
||||
docker run -d --restart unless-stopped \
|
||||
-v /home/perforce/p4:/p4 \
|
||||
-p 1666:1666 \
|
||||
blueroses/perforce-helix-p4d:2024.5
|
||||
```
|
||||
|
||||
p4admin
|
||||
pass12349ers
|
||||
|
||||
## Jenkins
|
||||
参考:https://zhuanlan.zhihu.com/p/89312003
|
||||
|
||||
```bash
|
||||
docker run --name jenkinsci-blueocean -d -u root --restart unless-stopped \
|
||||
-p 8080:8080 \
|
||||
-p 50000:50000 \
|
||||
-v /mnt/nfs-1/jenkins/Data:/var/jenkins_home \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
jenkinsci/blueocean
|
||||
```
|
||||
|
||||
## jeessy/ddns-go
|
||||
|
||||
- 不挂载主机目录, 删除容器同时会删除配置
|
||||
```bash
|
||||
# host模式, 同时支持IPv4/IPv6, Liunx系统推荐
|
||||
docker run -d --name ddns-go --restart=always --net=host /opt/ddns-go:/root jeessy/ddns-go
|
||||
# 桥接模式, 只支持IPv4, Mac/Windows系统推荐
|
||||
docker run -d --name ddns-go --restart=always -p 9876:9876 jeessy/ddns-go
|
||||
```
|
||||
- 在浏览器中打开`http://主机IP:9876`,修改你的配置,成功
|
||||
|
||||
- [可选] 挂载主机目录, 删除容器后配置不会丢失。可替换 `/opt/ddns-go` 为主机目录, 配置文件为隐藏文件
|
||||
```bash
|
||||
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
|
||||
```
|
||||
|
||||
- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)
|
||||
```bash
|
||||
docker run -d --name ddns-go --restart=always --net=host jeessy/ddns-go -l :9877 -f 600
|
||||
```
|
||||
|
||||
# memos
|
||||
```bash
|
||||
docker run -d --name memos --restart=always\
|
||||
-p 5230:5230 \
|
||||
-v /root/docker/memos:/var/opt/memos \
|
||||
neosmemo/memos:stable
|
||||
```
|
||||
|
||||
# Navidrome
|
||||
智能歌单
|
||||
```c++
|
||||
{
|
||||
"all": [
|
||||
{"contains": {"filepath":"/music/Tobu"}}
|
||||
],
|
||||
"sort": "dateadded",
|
||||
"order": "desc"
|
||||
}
|
||||
```
|
||||
|
||||
音乐削刮:
|
||||
- https://sspai.com/post/90896
|
||||
- https://www.cnblogs.com/vinlxc/p/11347744.html
|
83
03-UnrealEngine/流程管理与部署/VPS服务部署/Nginx安装命令.md
Normal file
83
03-UnrealEngine/流程管理与部署/VPS服务部署/Nginx安装命令.md
Normal file
@@ -0,0 +1,83 @@
|
||||
## 运行 有问题不能使用
|
||||
mkdir -p /root/docker/nginx/conf
|
||||
mkdir -p /root/docker/nginx/html
|
||||
mkdir -p /root/docker/nginx/log
|
||||
mkdir -p /root/docker/nginx/ssl
|
||||
```
|
||||
docker run -d --restart=always --name nginx-web \
|
||||
-v /root/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
|
||||
-v /root/docker/nginx/html:/usr/share/nginx/html \
|
||||
-v /root/docker/nginx/log:/var/log/nginx \
|
||||
-v /root/docker/trojan/:/root/docker/trojan \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
-p 80:80 \
|
||||
nginx
|
||||
```
|
||||
|
||||
## 默认配置地址
|
||||
https://github.com/nginx/nginx/blob/master/conf/nginx.conf
|
||||
|
||||
记得修改
|
||||
```
|
||||
location / {
|
||||
root html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
```
|
||||
```
|
||||
location / {
|
||||
root /usr/share/nginx/html/;
|
||||
index index.html index.htm;
|
||||
}
|
||||
```
|
||||
修改完配置后需要重启docker容器。
|
||||
## 默认路径
|
||||
/usr/share/nginx/html/
|
||||
|
||||
## 有关DNS
|
||||
~~默认的域名blueroses.top是指向cloudflare的,所以通过域名来访问SFTP需要访问在cloudflare设置的子域名~~。然而是cloudflare域名解析的问题。
|
||||
- tj.blueroses.top
|
||||
- www.blueroses.top
|
||||
|
||||
因为还添加了阿里云DNS解析,所以更换VPS时需要记得**修改阿里云的DNS设置**。
|
||||
|
||||
## VPS Blog部署
|
||||
其他方法都或多或少的比较麻烦,所以最后用SFtp。
|
||||
### SFtp
|
||||
```
|
||||
docker run --privileged --name sftp \
|
||||
-v /root/docker/nginx/html:/home/web/ \
|
||||
-p 2222:22 -d atmoz/sftp \
|
||||
web:web:1000:1000:web
|
||||
```
|
||||
账号密码结为web,遇到权限问题,需要设置一下目录权限。
|
||||
chmod -R 666 /docker/nginx/html/
|
||||
|
||||
```
|
||||
docker run --name mysftp -p 2294:22 -d atmoz/sftp foo:pass:::upload
|
||||
|
||||
--name mysftp 容器名称
|
||||
foo:pass:::upload 其中foo为用户名,pass为密码,upload为上传的文件会保存到容器里面的/home/foo/upload目录里面
|
||||
-p 22:22 将宿主机的22端口映射到容器的22端口,这样方位宿主机的22端口则会转发到容器的22端口上
|
||||
-d atmoz/sftp 使用dockup hub中的atmoz/sftp镜像创建容器
|
||||
```
|
||||
|
||||
### githook
|
||||
因为使用docker所以没法直接执行bash。
|
||||
```
|
||||
rm -rf /docker/nginx/test/
|
||||
mkdir /docker/nginx/test/
|
||||
git clone /docker/gitea/git/repositories/bluerose/blog.git /docker/nginx/test/
|
||||
rm -rf
|
||||
cp -rf /docker/nginx/test/ /docker/nginx/html/
|
||||
|
||||
```
|
||||
```
|
||||
GIT_REPO=/docker/gitea/git/repositories/bluerose/blog.git \
|
||||
TMP_GIT_CLONE=/docker/test/ \
|
||||
PUBLIC_WWW=/docker/nginx/html/ \
|
||||
rm -rf ${TMP_GIT_CLONE} \
|
||||
mkdir ${TMP_GIT_CLONE} \
|
||||
git clone $GIT_REPO $TMP_GIT_CLONE \
|
||||
cp -rf ${TMP_GIT_CLONE} ${PUBLIC_WWW}
|
||||
```
|
881
03-UnrealEngine/流程管理与部署/VPS服务部署/Perforce Helix Core搭建.md
Normal file
881
03-UnrealEngine/流程管理与部署/VPS服务部署/Perforce Helix Core搭建.md
Normal file
@@ -0,0 +1,881 @@
|
||||
---
|
||||
title: Perforce Helix Core搭建
|
||||
date: 2022-12-21 14:51:55
|
||||
excerpt:
|
||||
tags: Perforce
|
||||
rating: ⭐
|
||||
---
|
||||
# 前言
|
||||
- 知乎
|
||||
- P4服务器部署、配置、备份流程详解 https://zhuanlan.zhihu.com/p/676332084
|
||||
# Perforce Docker
|
||||
可以使用这个容器:
|
||||
https://hub.docker.com/r/sourcegraph/helix-p4d
|
||||
|
||||
但这个容器是2020年构建的,我这里重新调整了一下,并且手动构建成功,具体可以参考下文。
|
||||
|
||||
## DockerFile构建
|
||||
大致步骤如下:
|
||||
1. 下载**blueroseslol/helix-docker**仓库的所有文件。
|
||||
2. 构建DockerFile。
|
||||
|
||||
```bash
|
||||
cd /home/perforce/helix-docker/helix-p4d/ && \
|
||||
docker build -f /home/perforce/helix-docker/helix-p4d/Dockerfile -t helix-p4d:2024.5 .
|
||||
```
|
||||
|
||||
docker build --file ./helix-p4d/Dockerfile --tag helix-p4d:2023.7 .
|
||||
|
||||
## 使用
|
||||
```shell
|
||||
docker run -d --name helix-p4d\
|
||||
-p 1666:1666 \
|
||||
-v /home/perforce/p4:/p4 \
|
||||
helix-p4d:2024.5
|
||||
```
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
-p 1666:1666 \
|
||||
-v /home/perforce/p4:/p4 \
|
||||
sourcegraph/helix-p4d:2020.2
|
||||
```
|
||||
|
||||
admin
|
||||
pass12349ers
|
||||
### Github文档
|
||||
```shell
|
||||
docker run --rm \
|
||||
--publish 1666:1666 \
|
||||
sourcegraph/helix-p4d:2020.2
|
||||
```
|
||||
|
||||
默认端口`:1666`, 默认用户名为 `admin`, 默认密码: `pass12349ers`。以下是所有配置的默认值。
|
||||
```shell
|
||||
NAME=perforce-server
|
||||
P4HOME=/p4
|
||||
P4NAME=master
|
||||
P4TCP=1666
|
||||
P4PORT=1666
|
||||
P4USER=admin
|
||||
P4PASSWD=pass12349ers
|
||||
P4CASE=-C0
|
||||
P4CHARSET=utf8
|
||||
JNL_PREFIX=perforce-server
|
||||
```
|
||||
|
||||
可以使用`--env` 覆盖上述环境变量:
|
||||
```shell
|
||||
docker run --rm \
|
||||
--publish 1666:1666 \
|
||||
--env P4USER=amy \
|
||||
--env P4PASSWD=securepassword \
|
||||
sourcegraph/helix-p4d:2020.2
|
||||
```
|
||||
|
||||
请注意,尽管服务器在重启后仍能存活(即数据被保留),但如果你在初始启动后(即镜像的第一次运行,在选项被硬编码为Perforce Helix核心服务器自身配置时)改变选项,它可能会中断。要启动一个长期运行的生产容器,记得要把数据目录(`P4HOME`)容器,把`--rm`标志换成`d`(分离):
|
||||
```shell
|
||||
docker run -d \
|
||||
--publish 1666:1666 \
|
||||
--env P4PASSWD=securepassword \
|
||||
--volume ~/.helix-p4d-home:/p4 \
|
||||
sourcegraph/helix-p4d:2020.2
|
||||
```
|
||||
|
||||
### 启用SSL
|
||||
首先生成自签名证书:
|
||||
```shell
|
||||
mkdir ssl
|
||||
pushd ssl
|
||||
openssl genrsa -out privatekey.txt 2048
|
||||
openssl req -new -key privatekey.txt -out certrequest.csr
|
||||
openssl x509 -req -days 365 -in certrequest.csr -signkey privatekey.txt -out certificate.txt
|
||||
rm certrequest.csr
|
||||
popd
|
||||
```
|
||||
接下来设置SSL文件映射目录也就是`P4SSLDIR`的值,并且设置`P4PORT`使用SSL。
|
||||
```shell
|
||||
docker run --rm \
|
||||
--publish 1666:1666 \
|
||||
--env P4PORT=ssl:1666 \
|
||||
--env P4SSLDIR=/ssl \
|
||||
--volume ./ssl:/ssl \
|
||||
sourcegraph/helix-p4d:2023.1
|
||||
```
|
||||
|
||||
### 时间显示问题
|
||||
1. 修改容器内系统时区。
|
||||
2. 修改P4V时间显示,Edit - Preferences - Display - Show date andtime as,Server time => Local time。
|
||||
|
||||
##### Docker容器修改时间
|
||||
方法一:配置Dockerfile镜像时修改,这样打包出来的镜像文件是需要的时区的。
|
||||
操作方式:Dockerfile中添加代码
|
||||
```bash
|
||||
# 在安装tzdata之前最好先update和upgrade,以防apt-get获取不到tzdata
|
||||
RUN apt-get update -y && apt-get upgrade -y
|
||||
# 安装,中国用户填写[Asia/Shanghai] ,表示亚洲/上海 ,东八区
|
||||
RUN apt-get install -y tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
```
|
||||
缺点:由于构建时需要更新ubuntu,所以需要需要网络支持,网络不好的时候拖累构建镜像的速度。亲测,在中国白天速度快,晚上慢。
|
||||
|
||||
**建议通过env进行指定**:
|
||||
```bash
|
||||
ENV TZ=Asia/Shanghai
|
||||
RUN In -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
```
|
||||
|
||||
方法二(强烈不推荐):在运行的容器中,进行修改
|
||||
操作方式:docker attach 登录到运行的容器中执行如下代码
|
||||
```bash
|
||||
# 在安装tzdata之前最好先update和upgrade,以防apt-get获取不到tzdata
|
||||
apt-get update -y && apt-get upgrade -y
|
||||
# 安装
|
||||
apt-get install -y tzdata
|
||||
# 配置
|
||||
echo "Asia/Shanghai" > /etc/timezone
|
||||
# dpkg-reconfigure -f noninteractive tzdata 或者这个。
|
||||
dpkg-reconfigure tzdata
|
||||
```
|
||||
|
||||
方法三:启动容器的时候进行设置
|
||||
操作方式:启动命令中添加 挂载目录,例如:
|
||||
```bash
|
||||
# 启动容器时挂载宿主机目录
|
||||
docker run -v /etc/localtime:/etc/localtime:ro <IMAGE:TAG>
|
||||
# 其中 -v 参数中ro代表只读模式(read only)
|
||||
# 如果您的项目中已经使用了-v 没有关系,启动时挂载多个目录只要写多个-v就可以
|
||||
```
|
||||
缺点:依赖于宿主机,一般生产环境宿主机都是linux,如果你也是Linux内核,推荐使用
|
||||
|
||||
### 推送镜像到Dockerhub
|
||||
登录
|
||||
```bash
|
||||
docker login
|
||||
|
||||
# Github
|
||||
docker login ghcr.io -u 378100977@qq.com -p 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
|
||||
```
|
||||
|
||||
推送
|
||||
```bash
|
||||
docker tag 5572f8b12de1 blueroses/perforce-helix-p4d:2024.5
|
||||
docker push blueroses/perforce-helix-p4d:2024.5
|
||||
|
||||
# 登录github
|
||||
docker push ghcr.io/blueroses/perforce-helix-p4d:2024.5
|
||||
```
|
||||
|
||||
## helix-proxy Docker
|
||||
Package: helix-proxy
|
||||
Priority: optional
|
||||
Section: non-free/vcs
|
||||
Installed-Size: 30
|
||||
Maintainer: Perforce Software, Inc. <support+packaging@perforce.com>
|
||||
Architecture: amd64
|
||||
Source: perforce
|
||||
Version: 2024.1-2596294~focal
|
||||
|
||||
|
||||
# IDE设置
|
||||
- VSCode - Settings - Extensions - Perforce
|
||||
- Client:工作区名称
|
||||
- Dir:工作目录
|
||||
- Password:密码
|
||||
- Port:服务器ip与端口
|
||||
- User:用户名
|
||||
- Rider - Settings - Version Control - Perforce
|
||||
- 输入Server、User、Workspace、utf8
|
||||
# Perforce
|
||||
## 参考
|
||||
- 官方文档
|
||||
- https://www.perforce.com/manuals/p4guide/Content/P4Guide/Home-p4guide.html
|
||||
- https://help.perforce.com/helix-core/quickstart-unreal/Content/quickstart/game-home-quickstart.html
|
||||
- 知乎&UE官方文档
|
||||
- https://docs.unrealengine.com/5.1/en-US/using-perforce-as-source-control-for-unreal-engine/
|
||||
- [UE5 源码引擎构建&UGS部署与搭建](https://zhuanlan.zhihu.com/p/414193101?utm_id=0)
|
||||
- [UE4管理多重项目-WiseeEngineering](https://zhuanlan.zhihu.com/p/364346565)
|
||||
- [UnrealEnigne源码构建&Perforce&(UnrealGameSync)开发版本控制基础部署](https://zhuanlan.zhihu.com/p/362276094)
|
||||
- [打通UE4美术资源版本控制关节](https://zhuanlan.zhihu.com/p/261692804)
|
||||
- [UE5+Perforce+阿里云ECS版本控制搭建流程与工作流程](https://zhuanlan.zhihu.com/p/640743305)
|
||||
- 解决大小写问题 :[P4服务器部署、配置、备份流程详解](https://zhuanlan.zhihu.com/p/676332084)
|
||||
- 视频
|
||||
- [ [英文直播]版本控制基础 | Version Control Fundamental(真实字幕组)](https://www.bilibili.com/video/BV1tp4y1C7f8/?spm_id_from=333.337.search-card.all.click&vd_source=d47c0bb42f9c72fd7d74562185cee290)
|
||||
- [配置管理软件Perforce代码版本管理中分支和标签应用示例—4.Local库的分支](https://www.bilibili.com/video/BV14z411b7VB/?spm_id_from=333.999.0.0&vd_source=d47c0bb42f9c72fd7d74562185cee290)
|
||||
- [配置管理软件Perforce代码版本管理中分支和标签应用示例—5.stream库的分支](https://www.bilibili.com/video/BV1xK41177W1/?spm_id_from=333.999.0.0&vd_source=d47c0bb42f9c72fd7d74562185cee290)
|
||||
- [P4V进阶教学自用——stream分支基本操作+文件resolve+分支制作](https://www.bilibili.com/video/BV1LC411z76w/?spm_id_from=333.999.0.0&vd_source=d47c0bb42f9c72fd7d74562185cee290)
|
||||
|
||||
### cmd
|
||||
- 设置默认服务器IP:`p4 set P4PORT=servername:port`
|
||||
- 设置默认用户名:`p4 set P4USER=your.username`
|
||||
- 设置typemap:`p4 -P YourPassword typemap`
|
||||
- 设置p4ignore
|
||||
- `p4 set P4IGNORE=.p4ignore`
|
||||
- `p4 ignores`
|
||||
- `p4 add -f ...`:add(add所有文件并且包含文件名含通配符的文件)
|
||||
- `p4 reconcile -aed`:检查所有增加/修改/删除的文件并且放到Pending Changelist
|
||||
- [p4 clean](https://www.perforce.com/manuals/cmdref/Content/CmdRef/p4_clean.html)
|
||||
- `p4 clean -a`:从工作区中删除没有add的文件。
|
||||
- `p4 clean -n`:不执行任何操作即可预览操作结果。
|
||||
- `p4 clean -i`:可清除ignore的文件。
|
||||
|
||||
## 规划
|
||||
### 开发目录设计
|
||||
- [UE4管理多重项目-WiseeEngineering(翻译)](https://zhuanlan.zhihu.com/p/364346565)
|
||||
|
||||
- ArtSource(美术资源:引擎中相应的美术资产应该统一从ArtSource仓库导入,这样美术人员可以集中在标准资产管线下的资产迭代,可以更加集中注意力于美术资产质量,所以前提是项目初期必须构建标准稳定的渲染和审核验收流程(这一点也是国内很多项目及经常返工,开发成本极高的原因))
|
||||
- Engine(引擎路径,这里我用于个人使用则不需要太多的分流)
|
||||
- Project(项目工程)
|
||||
|
||||
Example:
|
||||
- e:\\Perforce
|
||||
- ArtSource
|
||||
- ShowRoom
|
||||
- UnrealEngine
|
||||
|
||||
### ASoul P4的设计
|
||||
仓库:
|
||||
1. Engine(Stream Depot)
|
||||
1. 引擎源码
|
||||
2. Project(Stream Depot)
|
||||
1. 构建引擎。
|
||||
2. 项目工程。
|
||||
3. ArtSource(Local Depot)
|
||||
1. 美术资产。
|
||||
|
||||
#### 分支
|
||||
1. Release
|
||||
2. Mainline
|
||||
3. Development
|
||||
1. UE4
|
||||
2. UE5
|
||||
3. Trunk分支(主干)
|
||||
4. shiwan(线上分支)
|
||||
1. shiwanxxx
|
||||
2. shiwanpico
|
||||
3. ...
|
||||
|
||||
使用最暴力的Mainland(主干)分支开发模式,如有试玩需求,会创建shiwan分支。
|
||||
|
||||
#### 用户
|
||||
1. admin
|
||||
2. art
|
||||
3. director
|
||||
4. ~~remote~~ (这个用户名无法登陆)
|
||||
5. qa
|
||||
|
||||
#### 权限管理
|
||||
`//仓库名/分支/目录/...`
|
||||
1. *
|
||||
1. read://...
|
||||
2. art:
|
||||
1. write://Project/Development/LiveDirector/Content/...
|
||||
3. director
|
||||
1. write://Project/Development/LiveDirector/Content/...
|
||||
4. qa
|
||||
1. write://Project
|
||||
|
||||
#### WorkSpace设置
|
||||
1. 编码使用:UTF8-no bom
|
||||
2. Connection–>Edit Current Workspace–>Advanced,设置为
|
||||
1. Line ending characters for text file -> `UNIX style linefeed`
|
||||
2. OnSubmit -> `Don't submit unchanged files`
|
||||
3. 勾选
|
||||
1. Allwrite
|
||||
2. Clobbr
|
||||
3. Altsync(直播棚不要勾这个)
|
||||
|
||||
#### .p4ignore
|
||||
```bash
|
||||
# Ignore IDE related files
|
||||
.vscode\
|
||||
.vsconfig\
|
||||
|
||||
# Ignore project-specific files
|
||||
LiveDirector\Binaries\**\*.pdb
|
||||
LiveDirector\Binaries\**\*-Debug.*
|
||||
LiveDirector\Binaries\**\*-Shipping.*
|
||||
LiveDirector\Build\Receipts\*
|
||||
LiveDirector\DerivedDataCache\*
|
||||
LiveDirector\Intermediate\*
|
||||
LiveDirector\Plugins\**\Intermediate\*
|
||||
LiveDirector\Saved\*
|
||||
LiveDirector\*.sln
|
||||
LiveDirector\*.vcxproj
|
||||
LiveDirector\*.vs\
|
||||
LiveDirector\*.idea\
|
||||
LiveDirector\obj\
|
||||
LiveDirector\**\FileOpenOrder\
|
||||
|
||||
|
||||
Tools\VCluster\Binaries\**\*.pdb
|
||||
Tools\VCluster\Binaries\**\*-Debug.*
|
||||
Tools\VCluster\Binaries\**\*-Shipping.*
|
||||
Tools\VCluster\Build\Receipts\*
|
||||
Tools\VCluster\DerivedDataCache\*
|
||||
Tools\VCluster\Intermediate\*
|
||||
Tools\VCluster\Plugins\**\Intermediate\*
|
||||
Tools\VCluster\Saved\*
|
||||
Tools\VCluster\*.sln
|
||||
Tools\VCluster\*.vcxproj
|
||||
Tools\VCluster\*.vs\
|
||||
Tools\VCluster\*.idea\
|
||||
Tools\VCluster\obj\
|
||||
Tools\VCluster\**\FileOpenOrder\
|
||||
|
||||
# Ignore Engine temporary files
|
||||
Engine\**\__pycache__\*.pyc
|
||||
|
||||
# Ignore temporary files for Editor runs
|
||||
Engine\Engine\Intermediate\EditorRuns\
|
||||
|
||||
# Add back binary-distributed plugins
|
||||
!LiveDirector\Plugins\DirectorAssistanter\Intermediate\
|
||||
|
||||
# Ignore RiderLink
|
||||
LiveDirector\Plugins\Developer\RiderLink\
|
||||
|
||||
# Ingore LiveCoding(?) temporary files
|
||||
Engine\**\Intermediate\Build\**\*.h.old
|
||||
|
||||
# Ignore UnrealInsights temporary files
|
||||
Engine\Engine\Programs\UnrealInsights\Saved\
|
||||
Engine\Engine\Programs\UnrealInsights\Intermediate\
|
||||
|
||||
# Ignore Node.js moddules for RemoteControlWebInterface
|
||||
Engine\Engine\Plugins\VirtualProduction\RemoteControlWebInterface\**\node_modules\
|
||||
Engine\Engine\Plugins\VirtualProduction\RemoteControlWebInterface\**\package.json
|
||||
Engine\Engine\Plugins\VirtualProduction\RemoteControlWebInterface\**\package-lock.json
|
||||
Engine\Engine\Plugins\VirtualProduction\RemoteControlWebInterface\WebApp\**\build\
|
||||
Engine\Engine\Plugins\VirtualProduction\RemoteControlWebInterface\WebApp\Server\public\
|
||||
|
||||
# Ignore all Engine files.
|
||||
Engine\
|
||||
|
||||
# Ignore Ts History
|
||||
LiveDirector\ts_file_versions_info.json
|
||||
```
|
||||
|
||||
## 搭建p4顺序
|
||||
1. 搭建Perforce服务
|
||||
2. 创建一个Stream Depot或者所有Depot。
|
||||
3. 设置 p4 typemap
|
||||
4. 创建MainLine分支
|
||||
5. 添加.p4ignore文件
|
||||
6. 创建一个工作区,设置工作区设置后上传文件。
|
||||
|
||||
## Typemap
|
||||
typemap 的设置能够在 Perforce 中控制文件的只读和可写的形式。 然后要做这件事情,需要管理员先在命令行cmd下设置 P4 的环境变量。
|
||||
在指定仓库上右键,点击`Open Command Windows Here`,输入`p4 typemap`即可在弹出的txt文件中修改保存关闭即可。(输入UE官方推荐的内容即可)
|
||||
```text
|
||||
# The form data below was edited by Jeff
|
||||
# Perforce File Type Mapping Specifications.
|
||||
#
|
||||
# TypeMap: a list of filetype mappings; one per line.
|
||||
# Each line has two elements:
|
||||
#
|
||||
# Filetype: The filetype to use on 'p4 add'.
|
||||
#
|
||||
# Path: File pattern which will use this filetype.
|
||||
#
|
||||
# See 'p4 help typemap' for more information.
|
||||
|
||||
TypeMap:
|
||||
text //....asp
|
||||
text //....cnf
|
||||
text //....css
|
||||
text //....htm
|
||||
text //....html
|
||||
text //....inc
|
||||
text //....js
|
||||
text //....ts
|
||||
text+w //....log
|
||||
text+w //....ini
|
||||
text+w //....pdm
|
||||
binary+Fl //....zip
|
||||
binary+Fl //....bz2
|
||||
binary+Fl //....rar
|
||||
binary+Fl //....gz
|
||||
binary+Fl //....avi
|
||||
binary+Fl //....jpg
|
||||
binary+Fl //....jpeg
|
||||
binary+Fl //....mpg
|
||||
binary+Fl //....gif
|
||||
binary+Fl //....tif
|
||||
binary+Fl //....mov
|
||||
binary+Fl //....jar
|
||||
binary+l //....ico
|
||||
binary+l //....exp
|
||||
binary+l //....btr
|
||||
binary+l //....bmp
|
||||
binary+l //....doc
|
||||
binary+l //....dot
|
||||
binary+l //....xls
|
||||
binary+l //....ppt
|
||||
binary+l //....pdf
|
||||
binary+l //....tar
|
||||
binary+l //....exe
|
||||
binary+l //....dll
|
||||
binary+l //....lib
|
||||
binary+l //....bin
|
||||
binary+l //....class
|
||||
binary+l //....war
|
||||
binary+l //....ear
|
||||
binary+l //....so
|
||||
binary+l //....rpt
|
||||
binary+l //....cfm
|
||||
binary+l //....ma
|
||||
binary+l //....mb
|
||||
binary+l //....pac
|
||||
binary+l //....m4a
|
||||
binary+l //....mp4
|
||||
binary+l //....aac
|
||||
binary+l //....wma
|
||||
binary+l //....docx
|
||||
binary+l //....pptx
|
||||
binary+l //....xlsx
|
||||
binary+l //....png
|
||||
binary+l //....raw
|
||||
binary+l //....odt
|
||||
binary+l //....ods
|
||||
binary+l //....odg
|
||||
binary+l //....odp
|
||||
binary+l //....otg
|
||||
binary+l //....ots
|
||||
binary+l //....ott
|
||||
binary+l //....psd
|
||||
binary+l //....sxw
|
||||
binary+S2w //....exe
|
||||
binary+S2w //....dll
|
||||
binary+S2w //....lib
|
||||
binary+S2w //....app
|
||||
binary+S2w //....dylib
|
||||
binary+S2w //....stub
|
||||
binary+S2w //....ipa
|
||||
binary //....bmp
|
||||
text //....ini
|
||||
text //....config
|
||||
text //....cpp
|
||||
text //....h
|
||||
text //....c
|
||||
text //....cs
|
||||
text //....m
|
||||
text //....mm
|
||||
text //....py
|
||||
binary+l //....uasset
|
||||
binary+l //....umap
|
||||
binary+l //....upk
|
||||
binary+l //....udk
|
||||
binary+w //....exe
|
||||
binary+w //....dll
|
||||
binary+w //....lib
|
||||
binary+w //....app
|
||||
binary+w //....dylib
|
||||
binary+w //....stub
|
||||
binary+w //....ipa
|
||||
binary //....bmp
|
||||
text //....ini
|
||||
text+w //....config
|
||||
text //....cpp
|
||||
text //....h
|
||||
text //....c
|
||||
text //....cs
|
||||
text //....m
|
||||
text //....mm
|
||||
text //....py
|
||||
binary+l //....uasset
|
||||
binary+l //....umap
|
||||
binary+l //....upk
|
||||
binary+l //....udk
|
||||
binary+l //....ubulk
|
||||
text //....ignore
|
||||
```
|
||||
|
||||
## 相关概念
|
||||
### Workspace
|
||||
- 官方工作区文档:https://www.perforce.com/manuals/p4guide/Content/P4Guide/configuration.workspace.options.html
|
||||
|
||||
Workspace可以理解为,depot到本地的一个映射,对应本地的一个目录,**存储了该工作区域的相关设置以及历史记录**。
|
||||
新建Workspace,在p4admin中depot查看在服务器中存放的所有Ddepot仓库
|
||||
|
||||
开发的过程中可以有多个Workspace(例如一个用来开发,一个用来更新验证保证提交没有错误),但一般只推荐有一个Workspace。
|
||||
|
||||
### WorkspaceView
|
||||
- 官方工作区文档:https://www.perforce.com/manuals/p4guide/Content/P4Guide/configuration.workspace_view.html
|
||||
|
||||
PS. 非流用户可以通过以下方式更新客户端工作区视图
|
||||
1. 调用 **[p4 client](https://www.perforce.com/manuals/cmdref/Content/CmdRef/p4_client.html)** 命令,打开客户端规范。
|
||||
2. 编辑 **View:** 客户端规范中的字段。
|
||||
### AltSync
|
||||
这是一种2024.1推出的新的同步技术,允许您减少从库同步到客户端工作区时的初始等待时间,从而加快工作速度。您可以节省时间、磁盘空间和网络带宽,因为您只在需要时下载所需的内容。相关文档:
|
||||
- 文档:
|
||||
- https://www.perforce.com/manuals/p4vfs/Content/P4VFS/p4vfs-intro.html
|
||||
- https://www.perforce.com/manuals/p4vfs/Content/P4VFS/p4vfs-and-p4v.html
|
||||
- p4vfs(需要额外安装)
|
||||
- https://www.perforce.com/downloads/helix-core-virtual-file-service
|
||||
|
||||
### P4ExcludeList
|
||||
|
||||
### .p4ignore
|
||||
创建`.p4ignore`文件后,执行命令行设置ignore
|
||||
```bash
|
||||
p4 set P4IGNORE=.p4ignore
|
||||
p4 ignores
|
||||
```
|
||||
|
||||
```text
|
||||
# Ignore project files in the root
|
||||
*.sln
|
||||
!*\*.sln
|
||||
.vs
|
||||
*.suo
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.pdb
|
||||
*-Debug.dll
|
||||
*.xcodeproj
|
||||
.\Makefile
|
||||
.\CMakeLists.txt
|
||||
.\.ue4dependencies
|
||||
|
||||
ipch\*
|
||||
|
||||
# Packaged engine builds
|
||||
LocalBuilds\*
|
||||
|
||||
# DDC should never be checked in
|
||||
Engine\DerivedDataCache\*
|
||||
Templates\**\DerivedDataCache\*
|
||||
|
||||
# Engine intermediates & binaries
|
||||
Engine\Intermediate\*
|
||||
Engine\Plugins\**\Intermediate\*
|
||||
Engine\Programs\**\Intermediate\*
|
||||
Engine\Binaries*
|
||||
Engine\Plugins\**\Binaries\*
|
||||
|
||||
# Feature Packs (they might get updated with langauge packs?)
|
||||
FeaturePacks\*
|
||||
|
||||
# Samples & Templates
|
||||
Templates\**\Intermediate\*
|
||||
Templates\**\Saved\*
|
||||
Samples\**\Intermediate\*
|
||||
|
||||
# C# Intermediate folders
|
||||
Engine\Source\Programs\**\obj\*
|
||||
Engine\Platforms\**\Programs\**\obj\*
|
||||
|
||||
# Saved folders for programs should not be checked in
|
||||
Engine\Programs\**\Saved\*
|
||||
Engine\Programs\UnrealBuildTool\*
|
||||
|
||||
# Ignore any saved local files
|
||||
Engine\Saved\*
|
||||
|
||||
# Ignore any build receipts
|
||||
Engine\Build\Receipts\*
|
||||
|
||||
# Ignore Unix backup files
|
||||
*~
|
||||
|
||||
# Ignore Mac desktop services store files
|
||||
.DS_Store
|
||||
|
||||
# Ignore crash reports
|
||||
crashinfo--*
|
||||
|
||||
# Ignore linux project files
|
||||
*.user
|
||||
*.pro
|
||||
*.pri
|
||||
*.kdev4
|
||||
|
||||
#
|
||||
# Setup.bat Ignores
|
||||
#
|
||||
# There already might be some files pushed into the repo that would otherwise be
|
||||
# filtered: those are from the initial commit, coming directly from UE4-GitHub.
|
||||
# After running Setup.bat, the folders below will be populated with ~46GB of
|
||||
# files. Hence we'll be blanked ignoring some directories such as ThirdParty,
|
||||
# Media, Content, etc. If we want to change anything in those blanked-ignored
|
||||
# folders, we should unignore the specific thing we're adding.
|
||||
#
|
||||
.git\*
|
||||
Samples\**\Content\*
|
||||
Samples\**\Media\*
|
||||
Templates\**\Content\*
|
||||
Templates\**\Media\*
|
||||
Templates\Media\*
|
||||
Engine\Platforms\**\Content\*
|
||||
Engine\Documentation\*
|
||||
Engine\Extras\*
|
||||
Engine\Content\*
|
||||
Engine\Build\*
|
||||
Engine\Source\ThirdParty\*
|
||||
Engine\Source\Programs\*
|
||||
Engine\Source\Developer\*
|
||||
Engine\Plugins\*
|
||||
|
||||
# Specific files
|
||||
Engine\Config\ShaderCategories.csv
|
||||
.tgitconfig
|
||||
.ue4dependencies
|
||||
|
||||
# After all this above, there's still a couple folders and files left that doesn't
|
||||
# fit the filtering criteria above, so we handle them individually here.
|
||||
Engine\Source\Runtime\Navmesh\RecastDemo*
|
||||
Engine\Source\Runtime\Launch\Resources\Mac*
|
||||
Engine\Source\Runtime\Launch\Resources\Linux*
|
||||
Engine\Source\Runtime\Experimental\Voronoi\Private\voro++*
|
||||
|
||||
Engine\Source\Runtime\Apple\MetalRHI\Public\ue4_stdlib.metal
|
||||
Engine\Source\Runtime\AVEncoder\Private\Microsoft\Windows\ThirdParty\NvEncoder\LicenseAgreement.pdf
|
||||
Engine\Source\Runtime\Experimental\Chaos\.clang-format
|
||||
Engine\Source\Runtime\TraceLog\Private\Trace\LZ4\Epic.patch
|
||||
Templates\TemplateResources\Standard\*.FBX
|
||||
|
||||
|
||||
#
|
||||
# PLUGINS
|
||||
#
|
||||
# Plugins that come with Setup.bat are ignored above altogether, so we un-ignore
|
||||
# the custom plugins we want to ship with the customized UE4.
|
||||
!Engine\Plugins\Marketplace*
|
||||
!Engine\Plugins\Runtime\HoudiniEngine*
|
||||
# ... but keep ignoring their Build & Intermediate
|
||||
Engine\Plugins\Marketplace\**\Intermediate\*
|
||||
Engine\Plugins\Marketplace\**\Binaries\*
|
||||
Engine\Plugins\Runtime\**\Intermediate\*
|
||||
Engine\Plugins\Runtime\**\Binaries\*
|
||||
|
||||
#
|
||||
# PackageEngine.bat Ignores
|
||||
#
|
||||
# Packaging the engine will generate some .ini files which are safe to ignore
|
||||
#
|
||||
Samples\**\Saved\*
|
||||
```
|
||||
|
||||
### Job
|
||||
- https://www.bilibili.com/video/BV13C4y1s73M/?spm_id_from=333.999.0.0&vd_source=d47c0bb42f9c72fd7d74562185cee290
|
||||
可以关联多个Commit并且可以设置状态,以此追踪一个功能或者Bug的工作状态。比较像git的Issue以及工单系统。
|
||||
|
||||
### 分支合并
|
||||
分支切换需要修改设置以防止增加工作区:Preference - Stream - "Work in this Stream" menu behavior选项设置为Reuse current workspace。
|
||||
|
||||
## Helix4Git
|
||||
- 官方文档
|
||||
- https://www.perforce.com/manuals//helix-for-git/Content/Helix4Git/install-config.install.html
|
||||
- https://www.perforce.com/manuals//helix-for-git/Content/Helix4Git/install-config.config.html
|
||||
- 代理商知乎
|
||||
- https://zhuanlan.zhihu.com/p/545765248
|
||||
|
||||
DockerFile搞起来太麻烦……
|
||||
|
||||
# Perforce Proxy
|
||||
- 官方文档
|
||||
- https://www.perforce.com/manuals/p4dist/Content/P4Dist/chapter.proxy.html
|
||||
|
||||
一种用于同步主Perforce服务器数据的远程服务器。适合远程的分布式协作。
|
||||
|
||||
# 其他
|
||||
## 注册源码引擎到EpicGames
|
||||
经过上面的步骤,源码引擎已经构建成功,但是在对项目就行选择引擎版本的时候,发现并没有这个版本 。这是因为,构建的引擎没有注册到EpicGames中,找到EpicGames安装目录下的注册器。复制到源码工程并且运行即可。
|
||||
```text
|
||||
Launcher\Engine\Binaries\Win64\UnrealVersionSelector.exe
|
||||
```
|
||||
|
||||
# Perforce问题解决
|
||||
## 大小写问题解决
|
||||
官方的相关解释:
|
||||
- [Changing the Case of a Filename](https://portal.perforce.com/s/article/3448)
|
||||
- [Case Sensitivity](https://portal.perforce.com/s/article/3081)
|
||||
|
||||
我想到一个解决方案,就是删除这个文件夹,之后分别以为大写与小写文件名,再拉新就可以把资产都拉下来。
|
||||
1. 删除文件夹。
|
||||
2. 新建 Nailin_Birthday2024_V02,拉新备份后比较效果。
|
||||
3. 新建 NaiLin_Birthday2024_V02,拉新备份后比较效果。
|
||||
4. 替换旧与错误资产。
|
||||
5. 删除服务器上的Nailin_Birthday2024_V02与NaiLin_Birthday2024_V02文件夹。
|
||||
6. 重新上传。
|
||||
|
||||
## 使用Trigger进行检查
|
||||
参考:[P4服务器部署、配置、备份流程详解](https://zhuanlan.zhihu.com/p/676332084)
|
||||
|
||||
- 官方文档
|
||||
- [trigger.table.fields](https://www.perforce.com/manuals/p4sag/Content/P4SAG/scripting.trigger.table.fields.html)
|
||||
- [triggers.variables](https://www.perforce.com/manuals/p4sag/Content/P4SAG/scripting.triggers.variables.html)
|
||||
- 中文解析: https://www.cnblogs.com/itech/archive/2011/08/17/2141310.html
|
||||
- [triggers.command](https://www.perforce.com/manuals/p4sag/Content/P4SAG/scripting.triggers.command.html)
|
||||
- 案例
|
||||
1. [ ] 运行Python脚本 https://stackoverflow.com/questions/78156353/perforce-trigger-script-not-found
|
||||
2. [ ] Python检查代码: https://gist.github.com/cmcginty/8d99e0eac345e06dc1ba
|
||||
3. [ ] https://swarm.workshop.perforce.com/files/guest/perforce_software/sdp/dev/Unsupported/Samples/triggers/CheckCaseTrigger.py?v=%40%3D29027
|
||||
4. [ ] https://swarm.workshop.perforce.com/files/guest/perforce_software/sdp/dev/Server/Unix/p4/common/bin/triggers/CheckCaseTrigger.py?v=4
|
||||
|
||||
### 添加一个Trigger
|
||||
字段名称(例如`Triggers:`)必须左对齐(不缩进)并且必须以冒号结尾。字段值(即您添加的一组行,每个触发器一行)必须在字段名称下方的行上使用空格或制表符缩进。
|
||||
|
||||
表单`p4 triggers`如下所示:
|
||||
```bash
|
||||
Triggers:
|
||||
relnotecheck change-submit //depot/bld/... "/usr/bin/rcheck.pl %user%"
|
||||
verify_jobs change-submit //depot/... "/usr/bin/job.py %change%"
|
||||
```
|
||||
|
||||
PS.***脚本内部的换行符需要跟换成unix的!***
|
||||
|
||||
### Trigger Example
|
||||
[P4服务器部署、配置、备份流程详解](https://zhuanlan.zhihu.com/p/676332084)
|
||||
|
||||
on_create_workspace.sh:创建工作区自动填写设置。
|
||||
```bash
|
||||
workspacename=$1
|
||||
workspacefile=$2
|
||||
|
||||
p4="p4 -u perforce_trigger"
|
||||
|
||||
$p4 trust -fy >/dev/null 2>&1
|
||||
if [ -z "$($p4 clients -e $workspacename)" ]; then
|
||||
sed -i '/Options:/{s/noallwrite/allwrite/g}' $workspacefile
|
||||
sed -i '/Options:/{s/noclobber /clobber /g}' $workspacefile
|
||||
|
||||
if grep -q "^SubmitOptions:" $workspacefile; then
|
||||
sed -i 's/^SubmitOptions:.*/SubmitOptions: leaveunchanged/' $workspacefile
|
||||
else
|
||||
echo "SubmitOptions: leaveunchanged" >> $workspacefile
|
||||
fi
|
||||
|
||||
if grep -q "^LineEnd:" $workspacefile; then
|
||||
sed -i 's/^LineEnd:.*/LineEnd: unix/' $workspacefile
|
||||
else
|
||||
echo "LineEnd: unix" >> $workspacefile
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
check_case_conflict.sh:大小写检查
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
changelist=$1
|
||||
|
||||
p4="p4 -p 127.0.0.1:1666 -u perforce_trigger"
|
||||
pending_files=($($p4 opened -s -c $changelist | awk '{print $1}'))
|
||||
canSubmit=0
|
||||
|
||||
|
||||
function p4_user_login()
|
||||
{
|
||||
$p4 login -s ${@:2} "$1" 2>/dev/null | grep -q ^//
|
||||
}
|
||||
|
||||
if p4_user_login; then
|
||||
echo nswl123456|$p4 -u perforce_trigger login
|
||||
fi
|
||||
|
||||
function p4_file_exist()
|
||||
{
|
||||
$p4 files -e ${@:2} "$1" 2>/dev/null | grep -q ^//
|
||||
}
|
||||
|
||||
function p4_path_exist()
|
||||
{
|
||||
$p4 dirs ${@:2} "$1" 2>/dev/null | grep -q ^//
|
||||
}
|
||||
|
||||
function check_changelist_file_conflict()
|
||||
{
|
||||
local file=$1
|
||||
local pending_list=(${@:2})
|
||||
local message=
|
||||
|
||||
for other_file in ${pending_list[@]}; do
|
||||
if [ $file != $other_file ] && [ ${file,,} == ${other_file,,} ]; then
|
||||
message="$message\n$other_file"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$message" ]; then
|
||||
message="Changelist File Case Conflict(提交队列大小写冲突:文件):$message"
|
||||
printf "$message"
|
||||
fi
|
||||
}
|
||||
|
||||
function check_changelist_path_conflict()
|
||||
{
|
||||
local path=$(dirname $1)
|
||||
local pending_list=(${@:2})
|
||||
local message=
|
||||
|
||||
while [ $path != '/' ]; do
|
||||
for i in ${!pending_list[@]}; do
|
||||
local other_file=${pending_list[$i]}
|
||||
if [[ "$other_file" != "$path"* ]] && [[ "${other_file,,}" == "${path,,}"* ]]; then
|
||||
message="$message\n$other_file"
|
||||
unset "pending_list[$i]"
|
||||
fi
|
||||
done
|
||||
path=$(dirname $path)
|
||||
done
|
||||
|
||||
if [ "$message" ]; then
|
||||
message="Changelist Path Case Conflict(提交队列大小写冲突:路径):$message"
|
||||
printf "$message"
|
||||
fi
|
||||
}
|
||||
|
||||
for file in ${pending_files[@]}; do
|
||||
# Check File Case Conflicted Or Not
|
||||
canSubmit=0
|
||||
message=
|
||||
if ! p4_file_exist $file && p4_file_exist $file -i; then
|
||||
#===== Output Error Message =====#
|
||||
message="$message\nDepot File Case Conflicted (仓库大小写冲突:文件):\n$($p4 files -i "$file")"
|
||||
#================================#
|
||||
fi
|
||||
|
||||
# Check Path Case Conflicted Or Not
|
||||
path=$(dirname $file)
|
||||
while [ $path != '/' ]
|
||||
do
|
||||
if ! p4_path_exist $path && p4_path_exist $path -i; then
|
||||
#===== Output Error Message =====#
|
||||
message="$message\nDepot Path Case Conflicted (仓库大小写冲突:路径):\n$($p4 dirs -i "$path")"
|
||||
#================================#
|
||||
break
|
||||
fi
|
||||
path=$(dirname $path)
|
||||
done
|
||||
|
||||
temp_message=$(check_changelist_file_conflict "$file" "${pending_files[@]}")
|
||||
if [ "$temp_message" ]; then
|
||||
message="$message\n$temp_message"
|
||||
fi
|
||||
|
||||
temp_message=$(check_changelist_path_conflict "$file" "${pending_files[@]}")
|
||||
if [ "$temp_message" ]; then
|
||||
message="$message\n$temp_message"
|
||||
fi
|
||||
|
||||
if [ "$message" ]; then
|
||||
canSubmit=1
|
||||
message="File(文件):\n$file\n$message"
|
||||
printf "\n==============================\n$message\n==============================\n"
|
||||
fi
|
||||
done
|
||||
exit $canSubmit
|
||||
```
|
||||
|
||||
```text
|
||||
on_create_workspace form-out client "/p4/triggers/on_create_workspace.sh %formname% %formfile%"
|
||||
check_case_conflict change-submit //... "/p4/triggers/check_case_conflict.sh %changelist%"
|
||||
```
|
||||
|
||||
### 自动登录命令
|
||||
```
|
||||
echo password|p4 -u user login
|
||||
```
|
||||
|
||||
### 工作区设置选项
|
||||
https://www.perforce.com/manuals/v22.2/p4guide/Content/P4Guide/configuration.workspace.html
|
42
03-UnrealEngine/流程管理与部署/VPS服务部署/Postfix邮件服务器搭建.md
Normal file
42
03-UnrealEngine/流程管理与部署/VPS服务部署/Postfix邮件服务器搭建.md
Normal file
@@ -0,0 +1,42 @@
|
||||
## 参考网址
|
||||
https://www.kutu66.com//GitHub/article_113357
|
||||
|
||||
## docker后缀
|
||||
在 Docker 容器中运行带有smtp身份验证( sasldb )的postfix。 TLS和OpenDKIM支持是可选的。
|
||||
|
||||
## 需求
|
||||
Docker 1.0
|
||||
## 安装
|
||||
```
|
||||
sudo docker pull catatnight/postfix
|
||||
```
|
||||
|
||||
## 用法
|
||||
使用smtp身份验证创建后缀容器
|
||||
```
|
||||
docker run -p 25:25
|
||||
-e maildomain=mail.example.com -e smtp_user=user:pwd
|
||||
--name postfix -d catatnight/postfix# Set multiple user credentials: -e smtp_user=user1:pwd1,user2:pwd2,...,userN:pwdN
|
||||
```
|
||||
|
||||
本人使用
|
||||
```
|
||||
docker run -p 25:25 -e maildomain=mail.blueroses.top -e smtp_user=gitea@blueroses.top:ljj@12345678 --name postfix -d catatnight/postfix
|
||||
```
|
||||
```
|
||||
$ sudo docker run -p 25:25
|
||||
-e maildomain=mail.example.com -e smtp_user=user:pwd
|
||||
--name postfix -d catatnight/postfix# Set multiple user credentials: -e smtp_user=user1:pwd1,user2:pwd2,...,userN:pwdN
|
||||
启用 OpenDKIM: 在 /path/to/domainkeys 中保存你的域密钥 .private
|
||||
|
||||
$ sudo docker run -p 25:25
|
||||
-e maildomain=mail.example.com -e smtp_user=user:pwd
|
||||
-v/path/to/domainkeys:/etc/opendkim/domainkeys
|
||||
--name postfix -d catatnight/postfix
|
||||
启用 TLS(587): 将SSL证书 .key 和 .crt 保存到 /path/to/certs
|
||||
|
||||
$ sudo docker run -p 587:587
|
||||
-e maildomain=mail.example.com -e smtp_user=user:pwd
|
||||
-v/path/to/certs:/etc/postfix/certs
|
||||
--name postfix -d catatnight/postfix
|
||||
```
|
@@ -0,0 +1,149 @@
|
||||
该脚本仅用于Ubantu或者Debian
|
||||
```bash
|
||||
#/bin/bash
|
||||
echo "获取公网ip中..."
|
||||
ip=$(curl -s ipinfo.io/ip)
|
||||
echo "获取成功,公网地址为 $ip"
|
||||
echo "是否使用域名,是请在10秒内输入该服务器绑定域名,否则将使用公网ip"
|
||||
read -t 10 domain
|
||||
|
||||
if [ -z "$domain" ]; then
|
||||
echo "未输入域名,将使用公网IP $ip"
|
||||
else
|
||||
echo "使用域名 $domain"
|
||||
ip="$domain"
|
||||
fi
|
||||
|
||||
echo "倒计时10秒,请在此期间输入端口号(不输入将使用默认端口50000)..."
|
||||
read -t 10 port
|
||||
if [ -z "$port" ]; then
|
||||
port=50000
|
||||
fi
|
||||
echo "使用的端口号是: $port"
|
||||
#更新软件源,安装docker、二维码输出工具
|
||||
apt update && apt install docker.io qrencode
|
||||
#安装docker-compose
|
||||
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
docker-compose --version
|
||||
docker-compose down
|
||||
#创建代理文件夹并生成配置文件
|
||||
mkdir /root/xray && cd /root/xray
|
||||
cat > docker-compose.yml <<EOF
|
||||
version: '3.9'
|
||||
services:
|
||||
v2ray:
|
||||
container_name: xray
|
||||
image: teddysun/xray
|
||||
ports:
|
||||
- $port:$port
|
||||
volumes:
|
||||
- ./config:/etc/xray/
|
||||
restart: always
|
||||
EOF
|
||||
#生成所需变量
|
||||
output=$(docker run --rm teddysun/xray /bin/sh -c "xray uuid && xray x25519")
|
||||
uuid=$(echo "$output" | awk 'NR==1 {print $1}')
|
||||
privateKey=$(echo "$output" | awk 'NR==2 {print $3}')
|
||||
publicKey=$(echo "$output" | awk 'NR==3 {print $3}')
|
||||
shortIDs=$(openssl rand -hex 8)
|
||||
#生成配置文件
|
||||
cat > /root/xray/config/config.json <<EOF
|
||||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"routing": {
|
||||
"domainStrategy": "IPIfNonMatch",
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"ip": [
|
||||
"geoip:cn"
|
||||
],
|
||||
"outboundTag": "block"
|
||||
}
|
||||
]
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"listen": "0.0.0.0",
|
||||
"port": $port,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [
|
||||
{
|
||||
"id": "$uuid",
|
||||
"flow": "xtls-rprx-vision"
|
||||
}
|
||||
],
|
||||
"decryption": "none"
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp",
|
||||
"security": "reality",
|
||||
"realitySettings": {
|
||||
"show": true, // 若为 true,输出调试信息
|
||||
"dest": "www.lovelive-anime.jp:443", // 目标网站最低标准:国外网站,支持 TLSv1.3、X25519 与 H2,域名非跳转用(主域名可能被用于跳转到 www)
|
||||
"xver": 0,
|
||||
"serverNames": [
|
||||
"www.lovelive-anime.jp"
|
||||
],
|
||||
"privateKey": "$privateKey",
|
||||
"shortIds": [
|
||||
"$shortIDs"
|
||||
]
|
||||
}
|
||||
},
|
||||
"sniffing": {
|
||||
"enabled": true,
|
||||
"destOverride": [
|
||||
"http",
|
||||
"tls"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"tag": "direct"
|
||||
},
|
||||
{
|
||||
"protocol": "blackhole",
|
||||
"tag": "block"
|
||||
}
|
||||
],
|
||||
"policy": {
|
||||
"levels": {
|
||||
"0": {
|
||||
"handshake": 2,
|
||||
"connIdle": 120
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
#启动容器
|
||||
docker-compose up -d
|
||||
#输出导入链接
|
||||
echo "vless://$uuid@$ip:$port?headerType=none&type=tcp&encryption=none&fp=chrome&pbk=$publicKey&sid=$shortIDs&spx=%2F&flow=xtls-rprx-vision&security=reality&sni=www.lovelive-anime.jp#los-2"
|
||||
#输出二维码
|
||||
qrcode="vless://$uuid@$ip:$port?headerType=none&type=tcp&encryption=none&fp=chrome&pbk=$publicKey&sid=$shortIDs&spx=%2F&flow=xtls-rprx-vision&security=reality&sni=www.lovelive-anime.jp#los-2"
|
||||
qrencode -t ANSIUTF8 "$qrcode"
|
||||
#输出维护指令
|
||||
echo "维护时请进入docker-compose.yml所在目录执行以下命令"
|
||||
echo "重启命令: docker-compose restart"
|
||||
echo "停止命令: docker-compose down"
|
||||
echo "启动命令: docker-compose up -d"
|
||||
echo "查看日志命令: docker-compose logs -f"
|
||||
echo "查看容器命令: docker-compose ps"
|
||||
```
|
||||
|
||||
# 服务器url
|
||||
```bash
|
||||
vless://4d9c1538-2f99-4781-b1fa-8b1cfb67f441@150.109.145.182:50000?headerType=none&type=tcp&encryption=none&fp=chrome&pbk=68Qo5gmZARkxbVw1ArKnCSMw_t8PBGt76e8nnLUPikI&sid=53f9d10d625ba230&spx=%2F&flow=xtls-rprx-vision&security=reality&sni=www.lovelive-anime.jp#los-2
|
||||
```
|
||||
|
||||
|
||||
vless://bm9uZToyMzRhZmNhYy0xNjIwLTRjOWQtYWU1ZC01Mjg4NzkzZDQ3NTlAMTUwLjEwOS4xNDUuMTgyOjUwMDAw?remarks=los-2&obfs=none&tls=1&peer=www.lovelive-anime.jp&xtls=2&pbk=cjf52COyZtTPsCCicvnGWv6BRt9Izd19j7hSL93bwhs&sid=b43a312c479aaae2
|
@@ -0,0 +1,113 @@
|
||||
```bash
|
||||
#/bin/bash
|
||||
ip=`curl -s ipinfo.io/ip`
|
||||
#更新软件源,安装docker
|
||||
apt update && apt install docker.io
|
||||
#安装docker-compose
|
||||
curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
docker-compose --version
|
||||
#创建代理文件夹并生成配置文件
|
||||
mkdir /root/xray && cd /root/xray
|
||||
cat > docker-compose.yml <<EOF
|
||||
version: '3.9'
|
||||
services:
|
||||
xray:
|
||||
container_name: xray
|
||||
image: teddysun/xray
|
||||
ports:
|
||||
- 50000:50000
|
||||
volumes:
|
||||
- ./config:/etc/xray/
|
||||
restart: always
|
||||
EOF
|
||||
cat > ./config/config.json <<EOF
|
||||
{
|
||||
"log": {
|
||||
"loglevel": "warning"
|
||||
},
|
||||
"routing": {
|
||||
"domainStrategy": "IPIfNonMatch",
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"ip": [
|
||||
"geoip:cn"
|
||||
],
|
||||
"outboundTag": "block"
|
||||
}
|
||||
]
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"listen": "0.0.0.0",
|
||||
"port": 50000,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [
|
||||
{
|
||||
"id": "d45724ee-8d61-4845-dff3-aa24e68bd69b", // 执行 xray uuid 生成,或 1-30 字节的字符串
|
||||
"flow": "xtls-rprx-vision"
|
||||
}
|
||||
],
|
||||
"decryption": "none"
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp",
|
||||
"security": "reality",
|
||||
"realitySettings": {
|
||||
"show": true, // 若为 true,输出调试信息
|
||||
"dest": "www.lovelive-anime.jp:443", // 目标网站最低标准:国外网站,支持 TLSv1.3、X25519 与 H2,域名非跳转用(主域名可能被用于跳转到 www)
|
||||
"xver": 0,
|
||||
"serverNames": [ // 客户端可用的 serverName 列表,暂不支持 * 通配符
|
||||
"www.lovelive-anime.jp"
|
||||
],
|
||||
"privateKey": "ECQgaNUw3Y6NgO0iSxtVlY-zp0cK6pYaFQ4MRaSgRkg", // 执行 xray x25519 生成,填 "Private key" 的值
|
||||
"shortIds": [ // 客户端可用的 shortId 列表,可用于区分不同的客户端
|
||||
"6ba85179e30d4fc2" // 0 到 f,长度为 2 的倍数,长度上限为 16,可留空,或执行 openssl rand -hex 8 生成
|
||||
]
|
||||
}
|
||||
},
|
||||
"sniffing": {
|
||||
"enabled": true,
|
||||
"destOverride": [
|
||||
"http",
|
||||
"tls"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"tag": "direct"
|
||||
},
|
||||
{
|
||||
"protocol": "blackhole",
|
||||
"tag": "block"
|
||||
}
|
||||
],
|
||||
"policy": {
|
||||
"levels": {
|
||||
"0": {
|
||||
"handshake": 2,
|
||||
"connIdle": 120
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EOF
|
||||
|
||||
#启动容器
|
||||
docker-compose up -d
|
||||
|
||||
#输出导入链接
|
||||
echo vless://d45724ee-8d61-4845-dff3-aa24e68bd69b@$ip:50000?headerType=none&type=tcp&encryption=none&fp=chrome&pbk=aoXo-XpKezaDaZIzia6e8mCHYpIWkKCfLZrbrYj4SHw&sid=6ba85179e30d4fc2&spx=%2F&flow=xtls-rprx-vision&security=reality&sni=www.lovelive-anime.jp#los-2
|
||||
echo "维护时请进入docker-compose.yml所在目录执行以下命令"
|
||||
echo "重启命令: docker-compose restart"
|
||||
echo "停止命令: docker-compose down"
|
||||
echo "启动命令: docker-compose up -d"
|
||||
echo "查看日志命令: docker-compose logs -f"
|
||||
echo "查看容器命令: docker-compose ps"
|
||||
```
|
316
03-UnrealEngine/流程管理与部署/VPS服务部署/VPS账号与Trojan安装命令.md
Normal file
316
03-UnrealEngine/流程管理与部署/VPS服务部署/VPS账号与Trojan安装命令.md
Normal file
@@ -0,0 +1,316 @@
|
||||
## vps 价格
|
||||
### hostkey
|
||||
1核 2G内存 30G硬盘 0.010K贝壳/小时 2M带宽 (≈72元/月)
|
||||
2核 4G内存 40G硬盘 0.020K贝壳/小时 3M带宽 (≈144元/月)
|
||||
|
||||
### 搬瓦工
|
||||
CN2 GIA 1190元/年
|
||||
|
||||
### UCloud
|
||||
1M/2M 225元/年起
|
||||
2M/5M 534元/年起
|
||||
|
||||
### 硅云
|
||||
1核1G 带宽 2M 232 元/1年
|
||||
2核2G 带宽 2M 482 元/1年
|
||||
|
||||
## blueroses.top(阿里云)
|
||||
### DNS
|
||||
alla.ns.cloudflare.com
|
||||
micah.ns.cloudflare.com
|
||||
dns19.hichina.com
|
||||
dns20.hichina.com
|
||||
f1g1ns1.dnspod.net
|
||||
f1g1ns2.dnspod.net
|
||||
|
||||
### cloudflare
|
||||
如果不通可能是cloudflare出问题了。
|
||||
|
||||
默认的域名blueroses.top是指向cloudflare的,所以通过域名来访问SFTP需要访问在cloudflare设置的子域名。
|
||||
- tj.blueroses.top
|
||||
- www.blueroses.top
|
||||
|
||||
因为还添加了阿里云DNS解析,所以更换VPS时需要记得**修改阿里云的DNS设置**。
|
||||
|
||||
## 搬瓦工
|
||||
378100977@qq.com ljj199221
|
||||
|
||||
## 测速网址
|
||||
### SpeedTest
|
||||
https://www.speedtest.net/
|
||||
|
||||
测速命令:`wget -qO- bench.sh | bash`
|
||||
|
||||
### ip测速
|
||||
https://tools.ipip.net/newping.php
|
||||
|
||||
### 检查Ip是否被墙
|
||||
https://bandwagonhoster.com/653.html
|
||||
http://www.ping.pe/
|
||||
https://ping.pe/
|
||||
|
||||
### 搬瓦工免费换ip
|
||||
https://kiwivm.64clouds.com/main-exec.php?mode=blacklistcheck
|
||||
|
||||
## 单位阿里云账号
|
||||
```
|
||||
阿里云账号(拜托华城租的服务器)
|
||||
子账户:zjsjcpzljczx@1042965787832287
|
||||
密码:123456&*()LlL
|
||||
123456&*()LlL
|
||||
zaq1@XSW2
|
||||
登录地址:http://signin.aliyun.com/1042965787832287/login.htm
|
||||
|
||||
116.62.69.44
|
||||
```
|
||||
```
|
||||
门户网站域名:轻工院方工管理。
|
||||
```
|
||||
|
||||
# Trojan
|
||||
## BBR Plus加速脚本
|
||||
wget "https://github.com/chiakge/Linux-NetSpeed/raw/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
|
||||
|
||||
## 一键Trojan脚本
|
||||
curl -O https://raw.githubusercontent.com/atrandys/trojan/master/trojan_centos7.sh && chmod +x trojan_centos7.sh && ./trojan_centos7.sh
|
||||
|
||||
curl -O https://raw.githubusercontent.com/atrandys/trojan/master/trojan_mult.sh && chmod +x trojan_mult.sh && ./trojan_mult.sh
|
||||
|
||||
### 修改密码
|
||||
修改Trojan服务端密码需用到的命令
|
||||
```
|
||||
sudo systemctl stop trojan
|
||||
cd /usr/src/trojan
|
||||
vi server.conf
|
||||
sudo systemctl restart trojan
|
||||
```
|
||||
|
||||
### 安卓Android端Igniter下载地址
|
||||
https://github.com/trojan-gfw/igniter...
|
||||
|
||||
### IOS
|
||||
需要借用他人IOS账号购买ShadowRocket。
|
||||
|
||||
## 使用Docker安装Trojan
|
||||
### 安装Docker
|
||||
1. 卸载老版本的 docker 及其相关依赖
|
||||
sudo yum remove docker docker-common container-selinux docker-selinux docker-engine
|
||||
2. 更新yum
|
||||
yum update
|
||||
3. 安装 yum-utils,它提供了 yum-config-manager,可用来管理yum源
|
||||
sudo yum install -y yum-utils
|
||||
4. 添加yum源
|
||||
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
||||
5. 更新索引
|
||||
sudo yum makecache fast
|
||||
6. 安装 docker-ce
|
||||
sudo yum install -y docker-ce
|
||||
指定版本安装
|
||||
yum -y install docker-ce-18.06.3.ce
|
||||
yum install docker-ce docker-ce-cli containerd.io
|
||||
7. 启动 docker
|
||||
sudo systemctl start docker
|
||||
8. 验证是否安装成功
|
||||
sudo docker info
|
||||
9. 开机自启动
|
||||
systemctl enable docker
|
||||
|
||||
### 通过acme.sh脚本来设置证书
|
||||
安装acme.sh
|
||||
```
|
||||
apt-get update && apt-get -y install socat //安装socat
|
||||
yum install socat
|
||||
wget -qO- get.acme.sh | bash //安装脚本
|
||||
source ~/.bashrc
|
||||
```
|
||||
#### 申请证书
|
||||
在你的域名解析服务提供商那里添加好解析记录,假定你的域名是yourdomain.com,记得不要开启CDN,然后执行下面命令申请证书。
|
||||
```
|
||||
acme.sh --issue --standalone -d yourdomain.com -k ec-256
|
||||
```
|
||||
因为本人要有blog,需要与nginx容器共存,所以使用网站目录方式:
|
||||
```
|
||||
acme.sh --issue -d blueroses.top -d www.blueroses.top -d tj.blueroses.top -k ec-256 --webroot /root/docker/nginx/html
|
||||
```
|
||||
|
||||
#### 安装证书和私钥到指定位置
|
||||
```
|
||||
acme.sh --installcert -d blueroses.top \
|
||||
--fullchain-file /root/docker/trojan/trojan.crt \
|
||||
--key-file /root/docker/trojan/trojan.key \
|
||||
--ecc --reloadcmd "docker restart nginx-web trojan"
|
||||
```
|
||||
|
||||
#### 自动续期
|
||||
```
|
||||
acme.sh --upgrade --auto-upgrade
|
||||
```
|
||||
|
||||
#### 证书过期解决方法:手动使用DNS验证(没必要用这个)
|
||||
通过Docker关闭Nginx服务器之后,执行申请证书
|
||||
```
|
||||
acme.sh --issue --standalone -d tj.blueroses.top -k ec-256
|
||||
```
|
||||
2020.9.19遇到证书过期(是cloudflare把我的DNS解析删掉了)
|
||||
如果出错可以考虑用DNS验证
|
||||
```
|
||||
acme.sh --issue --dns -d tj.blueroses.top -k ec-256 --yes-I-know-dns-manual-mode-enough-go-ahead-please
|
||||
```
|
||||
重启Trojan服务。
|
||||
|
||||
#### acme.sh证书签发单位更换
|
||||
因为acme.sh 2.0更换了默认的签发单位为zerossl,所以如果有需要可以更换:
|
||||
```
|
||||
acme.sh --set-default-ca --server letsencrypt
|
||||
acme.sh --set-default-ca --server zerossl
|
||||
```
|
||||
|
||||
### 安装Docker
|
||||
```
|
||||
wget -qO- get.docker.com | bash //安装docker
|
||||
systemctl start docker //启动docker服务
|
||||
systemctl status docker //查看docker运行状态
|
||||
docker -v //查看docker版本
|
||||
systemctl enable docker //将docker服务加入开机自启动
|
||||
```
|
||||
|
||||
### 安装Trojan
|
||||
```
|
||||
docker pull teddysun/trojan
|
||||
```
|
||||
创建并且修改配置文件**(证书路径、密码)**。
|
||||
```cd /docker/trojan && vim config.json```
|
||||
|
||||
password可以设置多个,方便多用户使用.
|
||||
```
|
||||
{
|
||||
"run_type": "server",
|
||||
"local_addr": "0.0.0.0",
|
||||
"local_port": 443,
|
||||
"remote_addr": "127.0.0.1",
|
||||
"remote_port": 80,
|
||||
"password": [
|
||||
"512512512",
|
||||
"512"
|
||||
],
|
||||
"log_level": 1,
|
||||
"ssl": {
|
||||
"cert": "/etc/trojan/trojan.crt",
|
||||
"key": "/etc/trojan/trojan.key",
|
||||
"key_password": "",
|
||||
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
|
||||
"cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
|
||||
"prefer_server_cipher": true,
|
||||
"alpn": [
|
||||
"http/1.1"
|
||||
],
|
||||
"reuse_session": true,
|
||||
"session_ticket": false,
|
||||
"session_timeout": 600,
|
||||
"plain_http_response": "",
|
||||
"curves": "",
|
||||
"dhparam": ""
|
||||
},
|
||||
"tcp": {
|
||||
"prefer_ipv4": false,
|
||||
"no_delay": true,
|
||||
"keep_alive": true,
|
||||
"reuse_port": false,
|
||||
"fast_open": false,
|
||||
"fast_open_qlen": 20
|
||||
},
|
||||
"mysql": {
|
||||
"enabled": false,
|
||||
"server_addr": "127.0.0.1",
|
||||
"server_port": 3306,
|
||||
"database": "trojan",
|
||||
"username": "trojan",
|
||||
"password": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
#### 启动命令
|
||||
trojan
|
||||
```
|
||||
docker run -d --name trojan --restart always --net host \
|
||||
-p 443:443 \
|
||||
-v /root/docker/trojan:/etc/trojan \
|
||||
teddysun/trojan
|
||||
```
|
||||
|
||||
trojan-go
|
||||
```bash
|
||||
docker run -d --network host --name trojan-go --restart=always \
|
||||
-v /root/docker/trojan-go:/etc/trojan-go \
|
||||
teddysun/trojan-go
|
||||
```
|
||||
|
||||
#### 一键脚本紧急时候使用
|
||||
```bash
|
||||
curl -sL https://raw.githubusercontent.com/phlinhng/v2ray-tcp-tls-web/master/install.sh) && v2script
|
||||
```
|
||||
|
||||
#### ~~带有管理后台的Docker部署~~ 会顶掉我Blog网站所以放弃
|
||||
1. 安装mysql
|
||||
因为mariadb内存使用比mysql至少减少一半, 所以推荐使用mariadb数据库
|
||||
```
|
||||
docker run --name trojan-mariadb --restart=always -p 3306:3306 \
|
||||
-v /root/docker/mariadb:/var/lib/mysql \
|
||||
-e MYSQL_ROOT_PASSWORD=trojan \
|
||||
-e MYSQL_ROOT_HOST=% \
|
||||
-e MYSQL_DATABASE=trojan \
|
||||
-d mariadb:10.2
|
||||
```
|
||||
|
||||
数据库:trojan
|
||||
账号:root
|
||||
密码:trojan
|
||||
|
||||
2. 安装trojan
|
||||
```
|
||||
docker run -it -d --name trojan-web --net=host --restart=always --privileged jrohy/trojan init
|
||||
```
|
||||
|
||||
运行完后进入容器 `docker exec -it trojan-web bash`, 然后输入`trojan`即可进行初始化安装
|
||||
- 启动web服务: `systemctl start trojan-web`
|
||||
- 设置自启动: `systemctl enable trojan-web`
|
||||
- 更新管理程序: `source <(curl -sL https://git.io/trojan-install)`
|
||||
|
||||
#### 查看日志
|
||||
docker logs -f 容器id
|
||||
docker logs -f --tail string 容器id
|
||||
|
||||
# Nginx
|
||||
```bash
|
||||
docker run -d --restart=always --name nginx-web \
|
||||
-v /root/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
|
||||
-v /root/docker/nginx/html:/usr/share/nginx/html \
|
||||
-v /root/docker/nginx/log:/var/log/nginx \
|
||||
-v /root/docker/trojan/:/root/docker/trojan \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
-p 80:80 \
|
||||
nginx
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
docker run -d --privileged --restart=always --name nginx-web \
|
||||
-v /root/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
|
||||
-v /root/docker/nginx/html:/usr/share/nginx/html \
|
||||
-v /root/docker/nginx/log:/var/log/nginx \
|
||||
-v /root/docker/trojan/:/usr/share/trojan \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
-p 80:80 \
|
||||
-p 443:443 \
|
||||
nginx
|
||||
```
|
||||
|
||||
# X-UI
|
||||
```bash
|
||||
docker run -itd --network=host \
|
||||
-v /root/docker/x-ui/db/:/etc/x-ui/ \
|
||||
-v /root/docker/trojan/:/root/cert/ \
|
||||
--name x-ui --restart=unless-stopped \
|
||||
enwaiax/x-ui
|
||||
```
|
||||
|
2
03-UnrealEngine/流程管理与部署/VPS服务部署/使用Nginx实现访问认证.md
Normal file
2
03-UnrealEngine/流程管理与部署/VPS服务部署/使用Nginx实现访问认证.md
Normal file
@@ -0,0 +1,2 @@
|
||||
## 访问指定页面需要输入账号密码的方法
|
||||
https://www.cnblogs.com/brianzhu/p/8625502.html
|
8
03-UnrealEngine/流程管理与部署/Win10:如何修改双网卡的优先级?.md
Normal file
8
03-UnrealEngine/流程管理与部署/Win10:如何修改双网卡的优先级?.md
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
title: Untitled
|
||||
date: 2024-06-20 14:53:43
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
https://blog.csdn.net/w892824196/article/details/104063369
|
135
03-UnrealEngine/流程管理与部署/使用Fastbuild加快UnrealEngine编译速度.md
Normal file
135
03-UnrealEngine/流程管理与部署/使用Fastbuild加快UnrealEngine编译速度.md
Normal file
@@ -0,0 +1,135 @@
|
||||
---
|
||||
title: 使用Fastbuild加快UnrealEngine编译速度
|
||||
date: 2021-11-09 22:34:16
|
||||
excerpt:
|
||||
tags: FastBuild
|
||||
rating: ⭐
|
||||
---
|
||||
|
||||
# 使用Fastbuild加快UnrealEngine编译速度
|
||||
如果你有多台电脑或者服务器就可以使用FastBuild提高编译速度。虽然最后测试法线,i7-7700+一台几年前的e5 40核心服务器依然比不过今年买的枪神5笔记本。
|
||||
|
||||
如果你完全按照 https://zhuanlan.zhihu.com/p/158400394 的教程来操作,那你就被坑了。目前Fastbuild的最新版本与UE是不兼容的。很可能会出现寻找的目录与FastBuild创建的目录不一致的问题。以下是本人的log:
|
||||
```
|
||||
已启动生成…
|
||||
1>------ 已启动生成: 项目: UE4, 配置: Development_Editor x64 ------
|
||||
1>Building UE4Editor and ShaderCompileWorker...
|
||||
1>Using Visual Studio 2019 14.29.30136 toolchain (D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133) and Windows 10.0.19041.0 SDK (D:\Windows Kits\10).
|
||||
1>Detected build type as Windows from 'D:\UnrealEngine\UnrealEngine4.27\Engine\Build\Windows\cl-filter\cl-filter.exe' using search term 'Windows'
|
||||
1>Using path : {D:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC/Redist/MSVC\14.29.30133} for vccorlib_.dll (MSVC redist)...
|
||||
1> ...Add an entry for MsvcCRTRedistVersion in BuildConfiguration.xml to specify a version number
|
||||
1>FBuild Command Line Arguments: '-monitor -summary -dist -cacheread -ide -clean -config "D:\UnrealEngine\UnrealEngine4.27\Engine\Intermediate\Build\fbuild.bff" -nostoponerror
|
||||
1>BFF file 'D:\UnrealEngine\UnrealEngine4.27\Engine\Intermediate\Build\fbuild.bff' has changed (reparsing will occur).
|
||||
1>Using brokerage folder
|
||||
1>No workers found in '\\DESKTOP-QI1GP15\FastBuildBroker\main\20.windows\'
|
||||
1>No workers available - Distributed compilation disabled
|
||||
```
|
||||
|
||||
## 操作步骤
|
||||
上述问题是因为当前使用的FastBuild协议版本与UE4所需的不同造成的,所以你需要使用EPIC定制的FastBuild。本人使用Win10与UnrelEngine4.27.0源码版目前正确的操作步骤如下:
|
||||
1. 使用源码目录`Engine\Extras\ThirdPartyNotUE\FASTBuild\Win64\`下的FastBuild。指定一个不含用中文路径的目录。
|
||||
2. 在该目录中再新建一个名为`FBuild`的文件夹,并将3个文件复制进去。这一步是可选步骤,是为了兼容`FBDashboard.exe`。你可以去FastBuild官网下载,并且指定目录下。(只需要复制FBDashboard.exe,放在FBuild外面)
|
||||
3. 创建共享文件夹。添加当前用户与Everyone用户权限为读/写。之后再用其他电脑访问一次,能进入并且写文件就完成了。(只需要其中一台电脑or服务器创建共享文件夹即可,其他所有机器都会使用这个共享文件夹)
|
||||
4. 添加环境变量FASTBUILD_BROKERAGE_PATH,内容为共享文件夹的网络路径,比如`\\DESKTOP-QI1GP15\FastBuildBroker`;Path变量添加FBuild.exe所在目录,之后在CMD中输入FBuild,运行后提示`Failed to open BFF 'fbuild.bff'`就代表添加成功了。
|
||||
5. 在其他电脑与服务器上执行上述步骤。
|
||||
6. 添加编译配置。给`Engine\Saved\UnrealBuildTool\BuildConfiguration.xml`添加`bAllowFASTBuild`配置为true。
|
||||
|
||||
比如这样:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
|
||||
<BuildConfiguration>
|
||||
<bAllowFASTBuild>true</bAllowFASTBuild>
|
||||
</BuildConfiguration>
|
||||
</Configuration>
|
||||
```
|
||||
|
||||
## 共享问题
|
||||
你很可能会遇到无法打开共享或是网络发现的功能,下面我分享以下解决方法。测试系统:win10、win2012 r2。
|
||||
|
||||
1. 关闭win防火墙。
|
||||
2. 在控制面板-程序-启动或者关闭服务器功能中,确保安装了SMB 1.0/CIFS 文件共享支持下的所有功能。
|
||||
3. 运行services.msc,启动Computer Browser服务并将启动方式设置为自动。将下列服务启动并将启动方式设置为自动(延迟启动):Function Discovery Provider Host、Function Discovery Resource Publication、Network Connections、UPnP Device Host。
|
||||
|
||||
## 其他注意点
|
||||
`江湖小辈`教程中使用FastBuild源码版是为了做测试以及通过修改源代码来实现通过Ip来代替计算机名来寻找共享。如果你想使用最新版本就需要修改FastBuild源码中的`distributed protocol version`。本人没有试过,但应该是这样没错。
|
||||
|
||||
对于团队来说添加Shader编译也许必须的,所以还可能修改UBT代码。(可以参考《腾讯游戏开发精粹》一书的对应章节)但记住在修改完UBT代码后,需要重新编译UBT。 调试UBT的话,需要在UBT工程上右键-属性-调试页面中,将配置设为Debug,之后添加命行参数,之后在Debug模式下就可以命中断点了。编译UE4源码命令行如下:
|
||||
```
|
||||
UE4Editor Win64 Development -Quiet -WaitMutex -FromMsBuild
|
||||
```
|
||||
对于在家办公想要使用公司服务器进行编译,使用反向代理+OpenConnect应该是可行的,只要带宽足够。
|
||||
|
||||
## 编译配置
|
||||
是一个名为`BuildConfiguration.xml`的xml文件,用于控制编译。除了可以在项目`Config/UnrealBuildTool`中添加外。UBT还会从以下位置(Windows系统)的XML配置文件读取设置:
|
||||
|
||||
- Engine/Saved/UnrealBuildTool/BuildConfiguration.xml - 针对特定引擎版本。
|
||||
- User Folder/AppData/Roaming/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml
|
||||
- My Documents/Unreal Engine/UnrealBuildTool/BuildConfiguration.xml - 适用于所有已安装的引擎版本。
|
||||
|
||||
除了上文中说到的bAllowFASTBuild外,因为本人使用附带git信息的引擎源码,编译时UBT会先去读取git信息,但因为源码git信息量太大,非常浪费时间。这里可以添加
|
||||
```xml
|
||||
<SourceFileWorkingSet>
|
||||
<Provider>None</Provider>
|
||||
<RepositoryPath></RepositoryPath>
|
||||
<GitPath></GitPath>
|
||||
</SourceFileWorkingSet>
|
||||
```
|
||||
起到让UBT禁用“使用 'git status' 来确定AdaptiveUnityBuild。下面介绍一下其他参数,完整参数请去官方文档参考。
|
||||
|
||||
### LocalExecutor
|
||||
- ProcessorCountMultiplier:本地执行的处理器计数乘数。设为小于1可为其他任务保留CPU。使用本地执行器(非XGE)时,在每个CPU核心上运行单一操作。注意: 可将该属性设为较大的值,在多数情况下可稍微提高编译速度,但电脑在编译期间的响应速度将变慢。
|
||||
- MaxProcessorCount:本地执行的最大处理器数量。
|
||||
|
||||
### ParallelExecutor
|
||||
- MaxProcessorCount:本地执行的最大处理器数量。
|
||||
- ProcessorCountMultiplier:本地执行的处理器计数乘数。设为小于1可为其他任务保留CPU。
|
||||
- bStopCompilationAfterErrors:启用时,将在发生编译错误后停止编译目标。
|
||||
|
||||
我在查看了AnswerHUB看到有人分享了自己的配置:
|
||||
|
||||
查阅代码之后发现,这些配置选项要去看 BuildConfigProperties.INT.udn 里的参数,ProcessorCountMultiplier 是在 ParallelExecutor 下的,所以改成以下配置:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
|
||||
<ParallelExecutor>
|
||||
<ProcessorCountMultiplier>7</ProcessorCountMultiplier>
|
||||
<MaxProcessorCount>7</MaxProcessorCount>
|
||||
<bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
|
||||
</ParallelExecutor>
|
||||
</Configuration>
|
||||
```
|
||||
目前我使用的完整配置:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
|
||||
<BuildConfiguration>
|
||||
<ProcessorCountMultiplier>7</ProcessorCountMultiplier>
|
||||
<MaxParallelActions>7</MaxParallelActions>
|
||||
<bAllowParallelExecutor>true</bAllowParallelExecutor>
|
||||
</BuildConfiguration>
|
||||
<SNDBS>
|
||||
<ProcessorCountMultiplier>4</ProcessorCountMultiplier>
|
||||
<MaxProcessorCount>4</MaxProcessorCount>
|
||||
</SNDBS>
|
||||
<ParallelExecutor>
|
||||
<ProcessorCountMultiplier>7</ProcessorCountMultiplier>
|
||||
<MaxProcessorCount>7</MaxProcessorCount>
|
||||
<bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
|
||||
</ParallelExecutor>
|
||||
</Configuration>
|
||||
```
|
||||
|
||||
### FASTBuild
|
||||
- FBuildExecutablePath:用于指定 fbuild.exe 的位置(如果发布的二进制文件未使用)
|
||||
- bEnableDistribution:控制网络构建分布(network build distribution)
|
||||
- FBuildBrokeragePath:用于指定中间件的位置。如为null,则FASTBuild退回检查FASTBUILD_BROKERAGE_PATH
|
||||
- bEnableCaching:控制是否使用缓存。仅当该选项启用后,CachePath和FASTCacheMode才会相关。
|
||||
- CacheMode:缓存访问模式 - 仅当bEnableCaching为真时相关;
|
||||
- FBuildCachePath:用于指定缓存的位置。如为null,FASTBuild会退回检查FASTBUILD_CACHE_PATH
|
||||
- bForceRemote:是否强制远程
|
||||
- bStopOnError:是否在错误上停止
|
||||
- MsvcCRTRedistVersion:使用哪个MSVC CRT Redist版本
|
||||
|
||||
## UnityBuild
|
||||
- bUseAdaptiveUnityBuild:使用启发式方法来确定哪些文件目前正在被迭代,并将它们从unity blobs中排除,从而加快增量编译的时间。目前的实现使用只读标志来区分工作集,假设文件正在被修改,源码控制系统将使其可写。这对Perforce是正确的,但对Git不是。
|
515
03-UnrealEngine/流程管理与部署/提升FastBuild编译UnrealEngine的速度.md
Normal file
515
03-UnrealEngine/流程管理与部署/提升FastBuild编译UnrealEngine的速度.md
Normal file
@@ -0,0 +1,515 @@
|
||||
---
|
||||
title: 提升FastBuild编译UnrealEngine的速度
|
||||
date: 2021-11-09 22:34:16
|
||||
excerpt:
|
||||
tags: FastBuild
|
||||
rating: ⭐
|
||||
---
|
||||
在上一篇文章之后我进行了进一步测试,下面是结果。
|
||||
|
||||
## 测试结果
|
||||
**测试配置**:
|
||||
i7-8700 3.2Ghz 12线程
|
||||
16GB内存
|
||||
WDC PC SN730 SDBQNTY-256G-1001 固态硬盘
|
||||
ST1000DM003-1SB102 机械硬盘
|
||||
|
||||
**服务器配置**:
|
||||
Inter Xeon Silver 4114 2.2GHz (2处理器)40线程
|
||||
64GB内存
|
||||
|
||||
引擎版本`4.27.0 Release`
|
||||
网络:百兆网络
|
||||
|
||||
### 引擎放在机械硬盘
|
||||

|
||||
总共花费时间与编译量:
|
||||
```
|
||||
1>[2328/2328] UnrealBuildTool.exe UE4Editor.target
|
||||
1>Total time in FASTBuild executor: 8160.80 seconds
|
||||
1>Total execution time: 8501.83 seconds
|
||||
```
|
||||
141min
|
||||
|
||||
### 引擎放在机械硬盘并禁用插件
|
||||

|
||||
总共花费时间与编译量:
|
||||
```
|
||||
3>[1000/1000] UnrealBuildTool.exe UEToonRenderingEditor.target
|
||||
3>Total time in FASTBuild executor: 3765.71 seconds
|
||||
3>Total execution time: 3902.75 seconds
|
||||
```
|
||||
65min
|
||||
|
||||
这里我额外测试了一下开启`ForceRemote`的情况:
|
||||

|
||||
```
|
||||
3>[1000/1000] UnrealBuildTool.exe UEToonRenderingEditor.target
|
||||
3>Total time in FASTBuild executor: 4508.08 seconds
|
||||
3>Total execution time: 4708.38 seconds
|
||||
```
|
||||
78min
|
||||
|
||||
### 引擎放在固态硬盘并禁用插件
|
||||
因为将引擎从机械硬盘移动到固态硬盘,中间删除了一些东西导致引擎多编译了一些,实际时间要比测试的要短3~8min。
|
||||

|
||||
|
||||
```
|
||||
3>[1006/1006] UnrealBuildTool.exe UEToonRenderingEditor.target
|
||||
3>Total time in FASTBuild executor: 2478.80 seconds
|
||||
3>Total execution time: 2584.69 seconds
|
||||
```
|
||||
43min
|
||||
|
||||
## 猜想与总结
|
||||
首先FastBuild的大致编译流程为分发编译任务=》远程机编译完之后下载obj文件=》所有编译任务完成后在本地进行链接并且生成对应文件。了解此我们才能对瓶颈进行分析。
|
||||
|
||||
- 远程机经常“偷懒”:本人在测试中发现远程机在编译时经常“偷懒”,且该阶段下内存、网络经常处于满负荷状态。因此本人认为这是因为没有使用千兆网络,下载时间过场而导致这种情况的产生。
|
||||
- 任务显示超时:在编译过程中,远程机有时会出现超时的情况,个人猜测可能是因为动用了所有核心编译,导致网络连接的心跳检测失败而导致的。
|
||||
|
||||
基于以上结果我
|
||||
|
||||
但我经过一系列测试之后发现以下方法可以提升编译速度,影响程度由高到低排列如下:
|
||||
|
||||
1. 在uproject文件中禁用不必要插件。
|
||||
2. 将源码放在固态硬盘中。
|
||||
3. 使用千兆网络,而非百兆。(预计能加快5min)
|
||||
4. 使用缓存模式。
|
||||
|
||||
## 在uproject文件中禁用不必要插件
|
||||
直接在插件管理界面中禁用插件即可。也可以直接将禁用的列表复制到uproject文件中。本人禁用的插件如下:
|
||||
```json
|
||||
"Plugins": [
|
||||
{
|
||||
"Name": "AlembicImporter",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AppleMoviePlayer",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AppleImageUtils",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "OnlineSubsystemGooglePlay",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Android"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "AndroidPermission",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AndroidMoviePlayer",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AndroidMedia",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AndroidDeviceProfileSelector",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AudioCapture",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AutomationUtils",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AvfMedia",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "ChaosClothEditor",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "ChaosCloth",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "ChaosEditor",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "ChaosNiagara",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "ChaosSolverPlugin",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "CodeLiteSourceCodeAccess",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "CLionSourceCodeAccess",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "Paper2D",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "GooglePAD",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MagicLeapMedia",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Lumin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "MagicLeap",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Lumin",
|
||||
"Mac",
|
||||
"Win64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "MagicLeapPassableWorld",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Lumin",
|
||||
"Mac",
|
||||
"Win64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "OpenImageDenoise",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "IOSDeviceProfileSelector",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "LinuxDeviceProfileSelector",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "CharacterAI",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "DatasmithContent",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "GeometryCache",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "SpeedTreeImporter",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "LuminPlatformFeatures",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Lumin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "MLSDK",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "WmfMedia",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "WebMMoviePlayer",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MediaCompositing",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "ImgMedia",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "OnlineSubsystemNull",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "OnlineSubsystemUtils",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "OnlineSubsystemIOS",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"IOS",
|
||||
"TVOS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "ChunkDownloader",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "OnlineSubsystem",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "XCodeSourceCodeAccess",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "EditableMesh",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "PerforceSourceControl",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "PlasticSourceControl",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "SubversionSourceControl",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "SteamVR",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Win32",
|
||||
"Win64",
|
||||
"Linux"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "OpenXRHandTracking",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Win32",
|
||||
"Win64",
|
||||
"Linux",
|
||||
"HoloLens",
|
||||
"Android"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "OpenXREyeTracker",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Win32",
|
||||
"Win64",
|
||||
"Linux",
|
||||
"HoloLens",
|
||||
"Android"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "OpenXR",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Win32",
|
||||
"Win64",
|
||||
"Linux",
|
||||
"Android",
|
||||
"HoloLens"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "OculusVR",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"Win32",
|
||||
"Win64",
|
||||
"Android"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "EnvironmentQueryEditor",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "AISupport",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "Synthesis",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MotoSynth",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "SoundFields",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "LocationServicesBPLibrary",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "XGEController",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "OodleData",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "OodleNetwork",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "TextureFormatOodle",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "ExampleDeviceProfileSelector",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "GeometryMode",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MeshPainting",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "TcpMessaging",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "UdpMessaging",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MacGraphicsSwitching",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MobileLauncherProfileWizard",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "PlatformCrypto",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MobilePatchingUtils",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "WindowsMoviePlayer",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "GoogleCloudMessaging",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "PhysXVehicles",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "NullSourceCodeAccess",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "FacialAnimation",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "PostSplashScreen",
|
||||
"Enabled": false,
|
||||
"SupportedTargetPlatforms": [
|
||||
"XboxOne"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Name": "KDevelopSourceCodeAccess",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MatineeToLevelSequence",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "MediaPlayerEditor",
|
||||
"Enabled": false
|
||||
},
|
||||
{
|
||||
"Name": "VisualStudioCodeSourceCodeAccess",
|
||||
"Enabled": false
|
||||
}
|
||||
]
|
||||
```
|
||||
其实还可以禁用更多的插件,我在测试的时候没有全部禁用。
|
||||
除了可以减少编译量,以节约时间外。同时也可以减少编译完之后所占用的空间。占用空间165G=>108G。
|
||||
|
||||
## 使用缓存模式
|
||||
经过测试仅仅是将`bEnableCaching`设置为true好像是不能开启缓存模式的。应该还需要设置`CacheMode`。在源码中`CacheMode`分别为ReadWrite、ReadOnly、WriteOnly,枚举对应的值依次为0,1,2。因为缓存模式适用于多人引擎团队,对于我这种独狼爱好者来说意义不大,所以就没测试。有兴趣的可以自己跟一下UBT的代码。
|
||||
```xml
|
||||
<FASTBuild>
|
||||
<bEnableCaching>true</bEnableCaching>
|
||||
<CacheMode>0</CacheMode>
|
||||
</FASTBuild>
|
||||
```
|
||||
## 本地核心控制
|
||||
在编译UE4时FastBuildWorker.exe无法控制本地使用核心数。如果你不想占用本地资源可以将bForceRemote设置为true,引擎编译过程中就不会占用本地核心了(开头还是会使用一些,以及Link阶段只能进行)。
|
||||
|
||||
如果只想让本地不会卡死,则可以使用一下参数:
|
||||
```xml
|
||||
<LocalExecutor>
|
||||
<ProcessorCountMultiplier>0.9</ProcessorCountMultiplier>
|
||||
<MaxProcessorCount>11</MaxProcessorCount>
|
||||
</LocalExecutor>
|
||||
<ParallelExecutor>
|
||||
<ProcessorCountMultiplier>0.9</ProcessorCountMultiplier>
|
||||
<MaxProcessorCount>11</MaxProcessorCount>
|
||||
</ParallelExecutor>
|
||||
```
|
||||
本人测试结果,不设置MaxProcessorCount是不行的。
|
||||
|
||||
## BuildConfigure
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
|
||||
<BuildConfiguration>
|
||||
<bAllowFASTBuild>true</bAllowFASTBuild>
|
||||
</BuildConfiguration>
|
||||
<SourceFileWorkingSet>
|
||||
<Provider>None</Provider>
|
||||
<RepositoryPath></RepositoryPath>
|
||||
<GitPath></GitPath>
|
||||
</SourceFileWorkingSet>
|
||||
<LocalExecutor>
|
||||
<ProcessorCountMultiplier>0.95</ProcessorCountMultiplier>
|
||||
<MaxProcessorCount>11</MaxProcessorCount>
|
||||
</LocalExecutor>
|
||||
<ParallelExecutor>
|
||||
<ProcessorCountMultiplier>0.95</ProcessorCountMultiplier>
|
||||
<MaxProcessorCount>11</MaxProcessorCount>
|
||||
<bStopCompilationAfterErrors>true</bStopCompilationAfterErrors>
|
||||
</ParallelExecutor>
|
||||
<FASTBuild>
|
||||
<bEnableCaching>true</bEnableCaching>
|
||||
</FASTBuild>
|
||||
</Configuration>
|
||||
|
||||
```
|
13
03-UnrealEngine/流程管理与部署/版本管理/P4V学习笔记.md
Normal file
13
03-UnrealEngine/流程管理与部署/版本管理/P4V学习笔记.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: P4V学习笔记
|
||||
date: 2022-09-27 17:37:02
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
|
||||
## P4V
|
||||
1. 新建一个工作区。
|
||||
2. 选择仓库,点击GetLatest。
|
||||
|
||||
- GetLatest:更新
|
@@ -0,0 +1,129 @@
|
||||
#TODO 二分法 定位bug git bisect:让你闭眼都能定位疑难 bug的利器
|
||||
https://zhuanlan.zhihu.com/p/521905865
|
||||
|
||||
本文分享自华为云社区《利用好 git bisect 这把利器,帮助你快速定位疑难 bug》,作者: DevUI。
|
||||
|
||||
使用git bisect二分法定位问题的基本步骤:
|
||||
|
||||
git bisect start [最近的出错的commitid] [较远的正确的commitid]
|
||||
测试相应的功能
|
||||
git bisect good 标记正确
|
||||
直到出现问题则 标记错误 git bisect bad
|
||||
提示的commitid就是导致问题的那次提交
|
||||
问题描述
|
||||
我们以Vue DevUI组件库的一个bug举例子
|
||||
|
||||
5d14c34b这一次commit,执行yarn build报错,报错信息如下:
|
||||
|
||||
✓ building client + server bundles...
|
||||
✖ rendering pages...
|
||||
build error:
|
||||
ReferenceError: document is not defined
|
||||
我可以确定的是上一次发版本(d577ce4)是可以build成功的。
|
||||
|
||||
git bisect 简介
|
||||
git bisect命令使用二分搜索算法来查找提交历史中的哪一次提交引入了错误。它几乎能让你闭着眼睛快速定位任何源码导致的问题,非常实用。
|
||||
|
||||
你只需要告诉这个命令一个包含该bug的坏commit ID和一个引入该bug之前的好commit ID,这个命令会用二分法在这两个提交之间选择一个中间的commit ID,切换到那个commit ID的代码,然后询问你这是好的commit ID还是坏的commit ID,你告诉它是好还是坏,然后它会不断缩小范围,直到找到那次引入bug的凶手commit ID。
|
||||
|
||||
这样我们就只需要分析那一次提交的代码,就能快速定位和解决这个bug(具体定位的时间取决于该次提交的代码量和你的经验),所以我们提交代码时一定要养成小批量提交的习惯,每次只提交一个小的独立功能,这样出问题了,定位起来会非常快。
|
||||
|
||||
接下来我就以Vue DevUI之前出现过的一个bug为例,详细介绍下如何使用git bisect这把利器。
|
||||
|
||||
定位过程
|
||||
git bisect start 5d14c34b d577ce4
|
||||
or
|
||||
git bisect start HEAD d577ce4
|
||||
其中5d14c34b这次是最近出现的有bug的提交,d577ce4这个是上一次发版本没问题的提交。
|
||||
|
||||
执行完启动bisect之后,马上就切到中间的一次提交啦,以下是打印结果:
|
||||
|
||||
kagol:vue-devui kagol$ git bisect start 5d14c34b d577ce4
|
||||
Bisecting: 11 revisions left to test after this (roughly 4 steps)
|
||||
[1cfafaaa58e03850e0c9ddc4246ae40d18b03d71] fix: read-tip icon样式泄露 (#54)
|
||||
可以看到已经切到以下提交:
|
||||
|
||||
[1cfafaaa] fix: read-tip icon样式泄露 (#54)
|
||||
执行命令:
|
||||
|
||||
yarn build
|
||||
构建成功,所以标记下good:
|
||||
|
||||
git bisect good
|
||||
kagol:vue-devui kagol$ git bisect good
|
||||
Bisecting: 5 revisions left to test after this (roughly 3 steps)
|
||||
[c0c4cc1a25c5c6967b85100ee8ac636d90eff4b0] feat(drawer): add service model (#27)
|
||||
标记万good,马上又通过二分法,切到了一次新的提交:
|
||||
|
||||
[c0c4cc1a] feat(drawer): add service model (#27)
|
||||
再次执行build命令:
|
||||
|
||||
yarn build
|
||||
build失败了,出现了我们最早遇到的报错:
|
||||
|
||||
✓ building client + server bundles...
|
||||
✖ rendering pages...
|
||||
build error:
|
||||
ReferenceError: document is not defined
|
||||
标记下bad,再一次切到中间的提交:
|
||||
|
||||
kagol:vue-devui kagol$ git bisect bad
|
||||
Bisecting: 2 revisions left to test after this (roughly 2 steps)
|
||||
[86634fd8efd2b808811835e7cb7ca80bc2904795] feat: add scss preprocessor in docs && fix:(Toast) single lifeMode bug in Toast
|
||||
以此类推,不断地验证、标记、验证、标记…最终会提示我们那一次提交导致了这次的bug,提交者、提交时间、提交message等信息。
|
||||
|
||||
kagol:vue-devui kagol$ git bisect good
|
||||
c0c4cc1a25c5c6967b85100ee8ac636d90eff4b0 is the first bad commit
|
||||
commit c0c4cc1a25c5c6967b85100ee8ac636d90eff4b0
|
||||
Author: nif <lnzhangsong@163.com>
|
||||
Date: Sun Dec 26 21:37:05 2021 +0800
|
||||
|
||||
feat(drawer): add service model (#27)
|
||||
|
||||
* feat(drawer): add service model
|
||||
|
||||
* docs(drawer): add service model demo
|
||||
|
||||
* fix(drawer): remove 'console.log()'
|
||||
|
||||
packages/devui-vue/devui/drawer/index.ts | 7 +++--
|
||||
.../devui-vue/devui/drawer/src/drawer-service.ts | 33 ++++++++++++++++++++++
|
||||
packages/devui-vue/devui/drawer/src/drawer.tsx | 3 ++
|
||||
packages/devui-vue/docs/components/drawer/index.md | 29 +++++++++++++++++++
|
||||
4 files changed, 69 insertions(+), 3 deletions(-)
|
||||
create mode 100644 packages/devui-vue/devui/drawer/src/drawer-service.ts
|
||||
最终定位到出问题的commit:
|
||||
|
||||
c0c4cc1a is the first bad commit
|
||||
https://github.com/DevCloudFE/vue-devui/commit/c0c4cc1a25c5c6967b85100ee8ac636d90eff4b0
|
||||
|
||||
整个定位过程几乎是机械的操作,不需要了解项目源码,不需要了解最近谁提交了什么内容,只需要无脑地:验证、标记、验证、标记,最后git会告诉我们那一次提交出错。
|
||||
|
||||
这么香的工具,赶紧来试试吧!
|
||||
|
||||
问题分析
|
||||
直到哪个commit出问题了,定位起来范围就小了很多。
|
||||
|
||||
如果平时提交代码又能很好地遵循小颗粒提交的话,bug呼之欲出。
|
||||
|
||||
这里必须表扬下我们DevUI的田主(Contributor)们,他们都养成了小颗粒提交的习惯,这次导致bug的提交c0c4cc1a,只提交了4个文件,涉及70多行代码。
|
||||
|
||||
|
||||
我们在其中搜索下document关键字,发现了两处,都在drawer-service.ts整个文件中:
|
||||
|
||||
一处是12行的:
|
||||
|
||||
static $body: HTMLElement | null = document.body
|
||||
另一处是17行的:
|
||||
|
||||
this.$div = document.createElement('div')
|
||||
|
||||
最终发现罪魁祸首就是12行的代码!
|
||||
|
||||
破案!
|
||||
|
||||
此处@lnzhangsong我们的田主,有空麻烦修下这个bug。
|
||||
|
||||
|
||||
|
||||
点击关注,第一时间了解华为云新鲜技术~
|
37
03-UnrealEngine/流程管理与部署/版本管理/使用Git SubModule来管理开源插件.md
Normal file
37
03-UnrealEngine/流程管理与部署/版本管理/使用Git SubModule来管理开源插件.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
title: 使用Git SubModule来管理开源插件
|
||||
date: 2022-08-10 13:55:20
|
||||
excerpt:
|
||||
tags: Git
|
||||
rating: ⭐
|
||||
---
|
||||
# 前言
|
||||
之前有考虑过将项目中自己的移植版AdvancedLocomotionSystem v4换成社区维护版本[ALS-Community](https://github.com/dyanikoglu/ALS-Community)。众所周知,如果主仓库下存在子.git文件夹,那子.git文件夹中的改动主仓库是无法检测到的,除非把子.git删除。但我既想在主项目中使用git来管理版本又想在插件中保留git信息以方便从github中获取最新的改动。查了一番资料,最后发现git已经给出了解决方案:Git SubModule。
|
||||
|
||||
## 用法
|
||||
### submodule add
|
||||
第一步添加submodule,命令为:
|
||||
>git submodule add url path
|
||||
|
||||
例如:
|
||||
>git submodule add https://github.com/dyanikoglu/ALS-Community.git Plugins/ALS-Community
|
||||
|
||||
执行完之后就会出现.gitmodules文件,里面主要是git submodule相关信息。
|
||||

|
||||
|
||||
同时还会有一个与子模块同名的文件出现,它记录Commit的hash值,如果子模块的Commit发生变动,主仓库的这个文件都会出现改动。
|
||||

|
||||
在上传github之后,点击这个文件就会自动跳转到之前定义的仓库url。
|
||||
|
||||
### Clone
|
||||
默认的clone可能会出现submodule为空的情况。这是需要在Clone后面加上`--recurse-submodules`选项。例如:
|
||||
>git clone --recurse-submodules https://github.com/XXXX/XXXX
|
||||
|
||||
## 个人建议
|
||||
因为考虑到后续可能会修改插件,所以还是建议先fork一下目标仓库,之后git submodule add这个仓库。这样依然可以通过添加原仓库Remote的方式来更新代码。
|
||||
|
||||
最近本人开始使用Obsidian笔记,把Github图床仓库作为子模块下载到Asset目录下,或许也是个不错的选择。
|
||||
|
||||
### Git-Fork
|
||||
这里我推荐git-fork这个软件,免费小巧又好用。特别是打开源码仓库的时候,速度比SourceTree快多了。默认情况下已经可以自动下载submodule。
|
||||
另外说一点,点击标签页右边的+,除了会显示之前打开过的仓库之外,还会显示这些仓库目录下的子仓库,可以说是相当方便了。
|
16
03-UnrealEngine/流程管理与部署/自定义引擎版本.md
Normal file
16
03-UnrealEngine/流程管理与部署/自定义引擎版本.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: 未命名
|
||||
date: 2024-06-07 16:40:28
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
# 自定义引擎版本
|
||||
- https://forums.unrealengine.com/t/where-to-inject-custom-engine-versioning/305079
|
||||
- 官方文档
|
||||
- https://dev.epicgames.com/documentation/en-us/unreal-engine/versioning-of-assets-and-packages-in-unreal-engine?application_version=5.3
|
||||
|
||||
具体的命令应该说是
|
||||
```
|
||||
RunUAT.bat UpdateLocalVersion [-CL=INT] [-CompatibleCL=INT] [-Build=STRING] [-SkipHeader] [-Licensee] [-Promoted=BOOL] [-Branch=STRING]
|
||||
```
|
11
03-UnrealEngine/流程管理与部署/路由器与NAS/Docker 使用显卡.md
Normal file
11
03-UnrealEngine/流程管理与部署/路由器与NAS/Docker 使用显卡.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Docker 使用显卡
|
||||
date: 2023-07-11 17:30:59
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
关键词:docker显卡直通
|
||||
|
||||
https://www.cnblogs.com/lixinliang/p/15874381.html
|
||||
https://www.bilibili.com/read/cv21061249/
|
10
03-UnrealEngine/流程管理与部署/路由器与NAS/IPTV搭建.md
Normal file
10
03-UnrealEngine/流程管理与部署/路由器与NAS/IPTV搭建.md
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
title: IPTV搭建
|
||||
date: 2023-07-11 15:55:56
|
||||
excerpt:
|
||||
tags: IPTV
|
||||
rating: ⭐
|
||||
---
|
||||
- [看!我是如何收集这些资源的,不仅免费而且还是高清稳定的线路 | 零度解说](https://www.youtube.com/watch?v=3C1Bzp-A4Ek)
|
||||
- [三分钟实现IPTV自由 华硕路由器IPTV革新设置指南](https://www.youtube.com/watch?v=39gVMsSUat4)
|
||||
|
71
03-UnrealEngine/流程管理与部署/路由器与NAS/OMV & Kodi 安装笔记.md
Normal file
71
03-UnrealEngine/流程管理与部署/路由器与NAS/OMV & Kodi 安装笔记.md
Normal file
@@ -0,0 +1,71 @@
|
||||
---
|
||||
title: OMV & Kodi 安装笔记
|
||||
date: 2023-07-11 15:59:33
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
|
||||
# 方案参考
|
||||
## 打造家庭一体化Nas+HTPC:基于OMV+kodi的解决方案-Part2
|
||||
[打造家庭一体化Nas+HTPC:基于OMV+kodi的解决方案-Part2](https://post.smzdm.com/p/678921/)
|
||||
### (1)安装X图形化界面
|
||||
(本人
|
||||
使用比较小巧的xfce4,也可以自选其它桌面)
|
||||
|
||||
```bash
|
||||
apt-get install xorg xfce4 xinit lightdm
|
||||
```
|
||||
其中lightdm用来管理自动登录。
|
||||
|
||||
### (2)安装Kodi本体
|
||||
```bash
|
||||
apt-get install kodi
|
||||
```
|
||||
|
||||
安装完毕后输入 **startxfce4** 进入虚拟桌面:
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_4/)
|
||||
进入xfce桌面,选择默认布局
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_5/)
|
||||
### (4)设置自动启动
|
||||
作为一个懒人,自然希望开机以后,不用登录,不用输密码就能自动打开kodi,那么就需要搞清楚开机到启动kodi之间Nas都要干些什么。流程:通电开机—账号登录—启动X界面—启动kodi。那么
|
||||
|
||||
1.自动启动kodi
|
||||
**usera[dd](https://pinpai.smzdm.com/102135/) –m –s /bin/bash kodiuser** 创建一个名为kodiuser的用户
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_11/)
|
||||
进入网页管理端,就能找到kodiuser了。
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_12/)
|
||||
把kodiuser添加进audio和video用户组,并设置密码。
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_13/)
|
||||
|
||||
重启。这里的帐户不要输,会自动跳转到Xfce4。
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_14/)
|
||||
|
||||
在右上角设置为启动kodi。
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_15/)
|
||||
|
||||
建议登录一下确认效果。
|
||||
|
||||
**2.自动登录X界面**
|
||||
|
||||
|
||||
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_16/)
|
||||
|
||||
**vi /etc/lightdm/lightdm.conf** 修改配置文件
|
||||
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_17/)
|
||||
|
||||
文件比较长,下滚找到autologin一栏
|
||||
|
||||
[](https://post.smzdm.com/p/ax5w5m4/pic_18/)
|
||||
|
||||
填上用户名,用delete键删掉这行前面的#号
|
||||
输入 **:wq** 保存退出。
|
||||
重启,应该会直接跳出kodi界面。
|
||||
|
||||
## OpenMediaVault搭配Kodi,一次性解决家用NAS和HTPC设置问题
|
||||
[OpenMediaVault搭配Kodi,一次性解决家用NAS和HTPC设置问题](https://post.smzdm.com/p/akmr2w9e/)
|
||||
|
||||
## Kodi其他安装命令
|
||||
apt install kodi kodi-bin
|
236
03-UnrealEngine/流程管理与部署/路由器与NAS/OMV与Debian安装与使用笔记.md
Normal file
236
03-UnrealEngine/流程管理与部署/路由器与NAS/OMV与Debian安装与使用笔记.md
Normal file
@@ -0,0 +1,236 @@
|
||||
---
|
||||
title: OMV与Debian安装与使用笔记
|
||||
date: 2022-09-20 09:31:42
|
||||
excerpt: 摘要
|
||||
tags: Debian
|
||||
rating: ⭐⭐
|
||||
---
|
||||
|
||||
## 前言
|
||||
推荐入门文章:
|
||||
- [Debian 新手指南(持续更新)](https://zhuanlan.zhihu.com/p/488109156)
|
||||
- [锐角云 N3450折腾OMV记录](https://www.cnblogs.com/wxfy/p/15765363.html):
|
||||
|
||||
- omv5 基于debian 10
|
||||
- omv6 基于debian 11
|
||||
|
||||
后台:http://ipv4.blueroses.top/
|
||||
| 版本 | 说明 | 示例 |
|
||||
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
|
||||
| alpine | Alpine Linux 操作系统,它是一个独立发行版本,相比较 Debian 操作系统来说 Alpine,更加轻巧 https://alpinelinux.org | docker pull node:alpine3.14 |
|
||||
| jessie | Debian 8,更旧的稳定(oldoldstable)版,马上就淘汰了 2015 https://wiki.debian.org/DebianJessie | docker pull node:10.22.0-jessie |
|
||||
| stretch | Debian 9,旧的稳定(oldstable)版,现有长期支持 2017,比较老,目前除了 LTS 其他版本已经不再提供技术支持了,所以我们非必要情况下还是不要选择它比较好 https://wiki.debian.org/DebianStretch | docker pull node:lts-stretch |
|
||||
| buster | Debian 10,当前的稳定(stable)版 2019,比较新,支持比较全面,受广大Debian爱好者的好评!像 PHP、Python 之类的语言、应用都会使用这个版本的 Debian 搭建 Docker 基础镜像 https://wiki.debian.org/DebianBuster | docker pull node:lts-buster |
|
||||
| bullseye | Debian 11,即将上位的稳定(stable)版 2021https://wiki.debian.org/DebianBullseye docker pull node:lts-bullseye xxx-slim 一般都基于 Debian 和 glibc,删除了许多非必需的软件包,优化了体积 docker pull node:stretch-slim | docker pull node:buster-slim |
|
||||
|
||||
## 在Debian上安装OMV
|
||||
### 添加秘钥
|
||||
```
|
||||
apt-get install --yes gnupg
|
||||
wget -O "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc" https://packages.openmediavault.org/public/archive.key
|
||||
apt-key add "/etc/apt/trusted.gpg.d/openmediavault-archive-keyring.asc"
|
||||
```
|
||||
### 添加软件包存储库
|
||||
大陆地区使用TUNA的源:
|
||||
```ini
|
||||
cat <<EOF > /etc/apt/sources.list.d/openmediavault.list
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/public usul main
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/packages usul main
|
||||
## Uncomment the following line to add software from the proposed repository.
|
||||
# deb https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/public usul-proposed main
|
||||
# deb https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/packages usul-proposed main
|
||||
## This software is not part of OpenMediaVault, but is offered by third-party
|
||||
## developers as a service to OpenMediaVault users.
|
||||
# deb https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/public usul partner
|
||||
# deb https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/packages usul partner
|
||||
EOF
|
||||
```
|
||||
### 安装
|
||||
```c++
|
||||
export LANG=C.UTF-8
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export APT_LISTCHANGES_FRONTEND=none
|
||||
apt-get update
|
||||
apt-get --yes --auto-remove --show-upgraded \
|
||||
--allow-downgrades --allow-change-held-packages \
|
||||
--no-install-recommends \
|
||||
--option DPkg::Options::="--force-confdef" \
|
||||
--option DPkg::Options::="--force-confold" \
|
||||
install openmediavault-keyring openmediavault
|
||||
|
||||
omv-confdbadm populate
|
||||
```
|
||||
|
||||
### 安装脚本(非桌面环境有效)
|
||||
大概率是需要没有安装过桌面的Debian:https://github.com/OpenMediaVault-Plugin-Developers/installScript
|
||||
|
||||
## Debian检查软件包依赖
|
||||
- 查看谁依赖了这个包:
|
||||
- aptitude why libboost1.71-tools-dev
|
||||
- 查看libboost-all-dev 依赖哪些包
|
||||
- apt-cache depends libboost-all-dev
|
||||
- 查看所有带libboost的包
|
||||
- dpkg -l | grep libboost
|
||||
|
||||
Debian phpapi-20151012 不能安装的原因可能是因为某个包安装了更新phpapi的版本。(可能是php7.4系列)
|
||||
|
||||
### 用apt安装时,出现依赖障碍时,如何解决?
|
||||
出现因依赖无法安装,可以尝试:
|
||||
>aptitude install xxx-软件
|
||||
|
||||
```ini
|
||||
install - 安装/升级软件包
|
||||
remove - 卸载软件包
|
||||
purge - 卸载软件包并删除其配置文件
|
||||
hold - 将软件包置于保持状态
|
||||
unhold - 取消对一个软件包的保持命令
|
||||
markauto - 将软件包标记为自动安装
|
||||
unmarkauto - 将软件包标记为手动安装
|
||||
forbid-version - 禁止 aptitude 升级到某一特定版本的软件包。
|
||||
update - 下载新/可升级软件包列表
|
||||
safe-upgrade - 执行一次安全的升级
|
||||
full-upgrade - 执行升级,可能会安装和卸载软件包
|
||||
forget-new - 忘记哪些软件包是“新”的
|
||||
search - 按名称 和/或 表达式搜索软件包
|
||||
show - 显示一个软件包的详细信息
|
||||
clean - 删除已下载的软件包文件
|
||||
autoclean - 删除旧的已下载软件包文件
|
||||
changelog - 查看一个软件包的变更日志
|
||||
download - 下载软件包的 .deb 文件
|
||||
reinstall - 下载并(可能)重新安装一个现在已经安装了的软件包
|
||||
```
|
||||
|
||||
## Debian安装时驱动加载
|
||||
参考:https://wiki.debian.org/Firmware
|
||||
一种简单的方法是使用直接包含所有非免费固件包的**安装程序映像** :[https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/](https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/)。另一种方法是单独下载固件已经烧纸镜像的移动介质中(U盘)。可以在[https://cdimage.debian.org/cdimage/unofficial/non-free/firmware/](https://cdimage.debian.org/cdimage/unofficial/non-free/firmware/)中寻找对应Debian版本的固件。
|
||||
|
||||
- Debian软件包查找:https://packages.debian.org/
|
||||
- firmware-iwlwifi_20210315-3_all.deb:https://packages.debian.org/bullseye/all/firmware-iwlwifi/download
|
||||
- 带有Nonfree固件的Debian镜像:https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/
|
||||
- https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/11.5.0+nonfree/amd64/iso-dvd/
|
||||
|
||||
### 加载驱动
|
||||
将下载的驱动`*.ucode`放到`/lib/firmware`(该目录需要手动新建)。或者在另一个U盘( 分区fat32)里新建一个目录`/firmware`并放置`*.ucode`或者deb软件包,或者放在根目录。
|
||||
|
||||
### OMV驱动版本
|
||||
>**openmediavault 是否有适用于我的硬件的驱动程序?**
|
||||
所有模块驱动程序均由 oldstable 8.9 版(又名 Jessie)的 Debian 标准内核提供。默认情况下,此发行版附带内核 3.16。可以选择安装 backport kernel 4.9。如果 Debian Jessie 支持硬件,那么 openmediavault 也支持硬件。Jessie backport kernel 4.9 是目前 Stretch (Debian 9.3) 使用的默认内核,因此它为较新的硬件提供支持。
|
||||
|
||||
## 更新源
|
||||
源目录:
|
||||
- 官方源
|
||||
```ini
|
||||
deb http://deb.debian.org/debian buster main contrib non-free
|
||||
# deb-src http://deb.debian.org/debian buster main contrib non-free
|
||||
deb http://deb.debian.org/debian buster-updates main contrib non-free
|
||||
# deb-src http://deb.debian.org/debian buster-updates main contrib non-free
|
||||
deb http://deb.debian.org/debian-security/ buster/updates main contrib non-free
|
||||
# deb-src http://deb.debian.org/debian-security/ buster/updates main contrib non-free
|
||||
```
|
||||
- 清华
|
||||
```ini
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main contrib non-free
|
||||
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing main contrib non-free
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing-updates main contrib non-free
|
||||
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing-updates main contrib non-free
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ testing-backports main contrib non-free
|
||||
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ testing-backports main contrib non-free
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security testing-security main contrib non-free
|
||||
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security testing-security main contrib non-free
|
||||
```
|
||||
- 中国科技大学
|
||||
```ini
|
||||
deb https://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
|
||||
#deb-src https://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
|
||||
deb https://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
|
||||
#deb-src https://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
|
||||
deb https://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
|
||||
#deb-src https://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
|
||||
deb https://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
|
||||
#deb-src https://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
|
||||
```
|
||||
- 阿里云
|
||||
```ini
|
||||
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
|
||||
#deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
|
||||
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
|
||||
#deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
|
||||
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
|
||||
#deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
|
||||
deb http://mirrors.aliyun.com/debian-security/ stretch/updates main non-free contrib
|
||||
#deb-src http://mirrors.aliyun.com/debian-security/ stretch/updates main non-free contrib
|
||||
```
|
||||
更新操作:
|
||||
```c++
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade
|
||||
sudo apt-get dist-upgrade
|
||||
```
|
||||
`apt-get dist-upgrade `为更新发行版/分支操作。
|
||||
|
||||
### 替换源解决源失效问题
|
||||
如果提示下面的问题,可以使用替换源的方式来解决:
|
||||
>E: Some index files failed to download, they have been ignored, or old ones used instead.
|
||||
>E: 仓库 “https://download.docker.com/linux/debian n/a Release” 没有 Release 文件
|
||||
|
||||
1. 修改`/etc/apt/sources.list`文件,在桌面系统内可以使用`gedit /etc/apt/sources.list`。
|
||||
2. 替换成其他的源。比如阿里云的:
|
||||
```ini
|
||||
deb http://mirrors.aliyun.com/debian wheezy main contrib non-free
|
||||
#deb-src http://mirrors.aliyun.com/debian wheezy main contrib non-free
|
||||
deb http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free
|
||||
#deb-src http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free
|
||||
deb http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free
|
||||
#deb-src http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free
|
||||
```
|
||||
3. 如果还是提示错误就需要删除 **/etc/apt/sources.list.d** 下的所有文件了。
|
||||
```ini
|
||||
cd /etc/apt/sources.list.d
|
||||
ls
|
||||
rm XXXX
|
||||
```
|
||||
|
||||
#### 其他更换源命令
|
||||
```ini
|
||||
mv /etc/apt/sources.list /etc/apt/sources.list.bak ?(先备份)
|
||||
echo "deb https://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib" >/etc/apt/sources.list
|
||||
echo "deb https://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib " >>/etc/apt/sources.list
|
||||
echo "deb https://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib" >>/etc/apt/sources.list
|
||||
```
|
||||
|
||||
## 远程登录
|
||||
***第一次安装完需要手动安装ssh***
|
||||
|
||||
需要使用网线连接安装,Wifi安装会导致进系统后无法连接Lan。
|
||||
使用`omv-firstaid`可以进行其他设置。重新设置WorkBench就可以了。
|
||||
## 杂项
|
||||
### 允许Root用户登录
|
||||
默认情况下debian是不允许以root用户登录的,只能以其他用户登录系统中,然后su到root用户下进行操作。
|
||||
1. 修改/etc/gdm3/daemon.conf文件,新增下面一行AllowRoot = true。
|
||||
```ini
|
||||
[security]
|
||||
AllowRoot = true
|
||||
```
|
||||
2. 修改/etc/pam.d/gdm-password,注释掉下面内容
|
||||
```ini
|
||||
#auth required pam_succeed_if.so user != root quiet_success
|
||||
```
|
||||
然后重启操作系统,就可以使用root用户登录操作系统了。
|
||||
|
||||
### 安装V2rayA客户端
|
||||
https://v2raya.org/docs/prologue/installation/debian/
|
||||
|
||||
### Debian设置Http代理
|
||||
方法一:有系统变量文件/etc/profile 里增加
|
||||
>export http_proxy=[http://username:password@proxyIP:proxyPORT](http://username:password@proxyip:proxyPORT/)(或者ip地址+端口号)
|
||||
|
||||
方法二:有用户变量文件~/.bashrc 里增加上面那句,只对指定的用户生效。
|
||||
|
||||
方法三:修改/etc/apt/apt.conf 文件,如果没有这个文件可以新建一个 增加一句:
|
||||
>Acquire::http::Proxy "[http://username:password@proxyIP:proxyPORT](http://username:password@proxyip:proxyPORT/)"; (或者ip地址+端口号)注意后面有一个分号。
|
||||
|
||||
最后输入 sudo apt-get update 测试
|
||||
|
||||
# OMV网页后台出错解决方法
|
||||
清楚网页缓存
|
||||
Try if clearing the browser cache solves it. Or try Ctrl+Shift+R when you are on the OMV web GUI
|
70
03-UnrealEngine/流程管理与部署/路由器与NAS/frp反向代理实现内网穿透.md
Normal file
70
03-UnrealEngine/流程管理与部署/路由器与NAS/frp反向代理实现内网穿透.md
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: frp反向代理实现内网穿透
|
||||
date: 2023-07-11 16:12:34
|
||||
excerpt:
|
||||
tags:
|
||||
rating: ⭐
|
||||
---
|
||||
|
||||
# 服务端配置
|
||||
Docker 启动**frps**的命令:
|
||||
```bash
|
||||
docker run --restart=always --network host -d \
|
||||
-v /home/frp/frps.ini:/etc/frp/frps.ini \
|
||||
--name frps snowdreamtech/frps
|
||||
```
|
||||
|
||||
服务器配置:
|
||||
```ini
|
||||
[common]
|
||||
# 监听端口
|
||||
bind_port = 7100
|
||||
# 面板端口
|
||||
dashboard_port = 7500
|
||||
# 登录面板账号设置
|
||||
dashboard_user = bluerose
|
||||
dashboard_pwd = ljj199221
|
||||
# 设置http及https协议下代理端口(非重要)
|
||||
vhost_http_port = 7001
|
||||
vhost_https_port = 7002
|
||||
# 身份验证
|
||||
token = ljj@378100977
|
||||
```
|
||||
|
||||
# 内网Linux客户端
|
||||
Docker 启动**frpc**的命令:
|
||||
```bash
|
||||
docker run --restart=always --network host -d \
|
||||
-v /root/frp/frpc.ini:/etc/frp/frpc.ini \
|
||||
--name frpc snowdreamtech/frpc
|
||||
```
|
||||
|
||||
内网客户端配置:
|
||||
```bash
|
||||
[common]
|
||||
# server_addr为FRPS服务器IP地址
|
||||
server_addr = 150.109.145.182
|
||||
# server_port为服务端监听端口,bind_port
|
||||
server_port = 7100
|
||||
# 身份验证
|
||||
token = ljj@378100977
|
||||
|
||||
# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
|
||||
# type 为连接的类型,此处为tcp
|
||||
# local_ip 为中转客户端实际访问的IP
|
||||
# local_port 为目标端口
|
||||
# remote_port 为远程端口
|
||||
[ssh]
|
||||
type = tcp
|
||||
local_ip = 127.0.0.1
|
||||
local_port = 22
|
||||
remote_port = 10022
|
||||
|
||||
[wol web]
|
||||
type = http
|
||||
local_ip = 127.0.0.1
|
||||
local_port = 7000
|
||||
custom_domains = blueroses.top
|
||||
```
|
||||
|
||||
# 外网Win客户端
|
82
03-UnrealEngine/流程管理与部署/路由器与NAS/如何在华硕路由器中使用自己编写的脚本.md
Normal file
82
03-UnrealEngine/流程管理与部署/路由器与NAS/如何在华硕路由器中使用自己编写的脚本.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# 插件参考
|
||||
1. Develop Plugin for Asuswrt Merlin:https://wdicc.com/develop-plugin-for-asuswrt-merlin/
|
||||
2. [插件集成] 【AsusWrt】自制路由器信息插件:https://bbs.hassbian.com/thread-3697-1-1.html
|
||||
|
||||
# 脚本
|
||||
## 脚本1:重新拨号的脚本
|
||||
刷的官改固件,脚本可以放到/koolshare/scripts 下,重启的话也不会丢失,官方固件的话可以放到/jffs 下
|
||||
```bash
|
||||
vi /koolshare/scripts/repppd.sh
|
||||
#!/bin/sh
|
||||
/usr/bin/logger -c "断开拨号连接"
|
||||
killall pppd
|
||||
/usr/bin/logger -c "延时10秒"
|
||||
sleep 10
|
||||
/usr/bin/logger -c "重新拨号"
|
||||
pppd file /tmp/ppp/options.wan0 >/dev/null 2>&1 &
|
||||
```
|
||||
## 脚本2:检测脚本
|
||||
检测百度是否可以连接,5秒超时,两次检测,间隔1分钟,如果两次检测都无法连接百度则执行脚本1重新拨号。具体参数看懂了自己改哦很简单的。
|
||||
```bash
|
||||
vi /koolshare/scripts/checknetwork.sh
|
||||
#!/bin/sh
|
||||
#检测网络链接畅通
|
||||
function network()
|
||||
{
|
||||
#超时时间
|
||||
local timeout=5
|
||||
|
||||
#目标网站
|
||||
local target=www.baidu.com
|
||||
|
||||
#获取响应状态码
|
||||
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
|
||||
if [ "x$ret_code" = "x200" ]; then
|
||||
|
||||
#网络畅通
|
||||
return 1
|
||||
else
|
||||
|
||||
#网络不畅通
|
||||
return 0
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
#第1次检测
|
||||
network
|
||||
first_check=$?
|
||||
|
||||
#睡眠60秒
|
||||
sleep 60
|
||||
|
||||
#第2次检测
|
||||
network
|
||||
second_check=$?
|
||||
if [[ $first_check -eq 0 && $second_check -eq 0 ]];then
|
||||
/usr/bin/logger -c "无法连接互联网,准备重新拨号!"
|
||||
|
||||
#执行脚本1重新拨号
|
||||
/bin/sh /koolshare/scripts/repppd.sh
|
||||
exit -1
|
||||
fi
|
||||
/usr/bin/logger -c "网络正常"
|
||||
exit
|
||||
```
|
||||
|
||||
## 脚本3:开机添加定时任务脚本
|
||||
因为路由器重启后,crontab的定时任务会被清空,所以需要在开机时用命令添加定时检测任务, /jffs/scripts/这个目录下的脚本在重启后都会重新执行。我写的是每10分钟执行一次网络检测的脚本。
|
||||
|
||||
```bash
|
||||
vi /jffs/scripts/services-start.sh
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
#添加定时任务,每10分钟检测网络一次
|
||||
|
||||
/usr/sbin/cru a checknetwork "*/10 * * * * /bin/sh /koolshare/scripts/checknetwork.sh"
|
||||
|
||||
#每周一早上6点05分,重新拨号
|
||||
|
||||
/usr/sbin/cru a repppd "5 6 * * 1 /bin/sh /koolshare/scripts/repppd.sh"
|
||||
```
|
168
03-UnrealEngine/流程管理与部署/路由器与NAS/尝试在TUF-AX3000假设Gitea服务器.md
Normal file
168
03-UnrealEngine/流程管理与部署/路由器与NAS/尝试在TUF-AX3000假设Gitea服务器.md
Normal file
@@ -0,0 +1,168 @@
|
||||
## 前言
|
||||
之前买了华硕路由器,趁着过年有空打算好好玩玩,打算做个版本管理服务器啥。但最后因为买的机器内存只有0.5g,又遇到运行gitea二进制文件报错的问题就没继续了。
|
||||
> line 1: syntax error: unexpected "("
|
||||
|
||||
不过研究过程感觉有些意义便有了此文。之前建议先知道一下内核版本:
|
||||
```
|
||||
uname -a
|
||||
```
|
||||
本人的路由器为:
|
||||
```
|
||||
Linux TUF-AX3000-07F8 4.1.52 #2 SMP PREEMPT Sat Nov 7 03:08:27 CST 2020 armv7 GNU/Linux
|
||||
```
|
||||
另外本人不推荐购买ax3000。真要做版本管理服务器可能还是x86 CPU的NAS比较好。树莓派之前也尝试搭过gitlab(基本处于崩溃边缘),但用gitea就没问题。
|
||||
|
||||
## 对于USB2JFFS插件的U盘选择
|
||||
USB2JFFS插件对U盘读写速度有要求,同时也为了有更好的使用体验。所以本人购买了CHIPFANCIER U盘。品名为:
|
||||
>CHIPFANCIER固态U盘SSD 高性能纯金属 windows to go USB3.0旋转外壳 128G
|
||||
|
||||
这里不推荐使用金士顿以及闪迪的低端U盘。因为他们的写入速度都不会超过30MB/s,都不符合USB2JFFS插件要求(35MB/s)。本人购买U盘的测速结果:
|
||||
```
|
||||
【2021年02月16日 19:49:16】 USB磁盘[/dev/sda1]的三次平均顺序读取速度大约为:263.16 MB/s
|
||||
【2021年02月16日 19:49:16】 USB磁盘[/dev/sda1]的三次平均顺序写入速度大约为:132.74 MB/s
|
||||
【2021年02月16日 19:49:16】 USB磁盘[/dev/sda1]的读写速度符合USB2JFFS插件要求!
|
||||
```
|
||||
使用这个插件还需要将U盘格式化成EXT4。可以使用diskgenius来进行格式化。
|
||||
|
||||
## 安装Entware
|
||||
找到两种安装方法:
|
||||
### 使用SCRIPTS BOOTLOADER FOR ASUS ROUTER
|
||||
安装起来比较方便,附带几个常用插件,而且会将安装的内容都转移到U盘。但该插件只保证对在官方固件或梅林固件能完美运行。
|
||||
|
||||
安装过程:
|
||||
1. 插入空白U盘
|
||||
2. 登录ssh并输入命令
|
||||
```
|
||||
cd /tmp && wget -q -O /tmp/install_online --no-check-certificate "https://cdn.jsdelivr.net/gh/JACK-THINK/SCRIPTS-BOOTLOADER-FOR-ASUS-ROUTER@latest/script_bootloader/bin/install_online" && chmod 777 /tmp/install_online && /tmp/install_online
|
||||
```
|
||||
3. 中间会有需要输入参数的环节在输入后回车即可(虚拟内存以及路由器账号密码)
|
||||
|
||||
参考文章:
|
||||
- https://koolshare.cn/thread-138615-1-1.html
|
||||
- https://github.com/JACK-THINK/SCRIPTS-BOOTLOADER-FOR-ASUS-ROUTER/blob/master/How_to_Use_zh-CN.md#scripts-bootloader-for-asus-router-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E
|
||||
|
||||
### 官方命令安装方法
|
||||
安装命令:
|
||||
```
|
||||
mkdir /jffs/entware-ng.arm
|
||||
ln -nsf /jffs/entware-ng.arm /tmp/opt
|
||||
wget -O - http://pkg.entware.net/binaries/ ... /entware_install.sh | /bin/sh
|
||||
echo "#!/bin/sh" > /jffs/scripts/services-start
|
||||
echo "sleep 20" >> /jffs/scripts/services-start
|
||||
echo "ln -ns /jffs/entware-ng.arm /tmp/opt" >> /jffs/scripts/services-start
|
||||
echo "/opt/etc/init.d/rc.unslung start" >> /jffs/scripts/services-start
|
||||
echo "#!/bin/sh" > /jffs/scripts/services-stop
|
||||
echo "/opt/etc/init.d/rc.unslung stop" >> /jffs/scripts/services-stop
|
||||
chmod a+rx /jffs/scripts/*
|
||||
```
|
||||
参考文章:
|
||||
- https://www.cnblogs.com/YangGC/p/12524609.html
|
||||
|
||||
## 查看entware软件列表
|
||||
安装之前最好看一些有哪些是可以安装的:
|
||||
http://pkg.entware.net/binaries/armv7/Packages.html
|
||||
|
||||
- lighttpd
|
||||
- node-npm
|
||||
- node
|
||||
- aria2
|
||||
- git
|
||||
- git-http
|
||||
- nagix
|
||||
|
||||
不过很可惜没有docker,所以gitea就必须手动部署了。
|
||||
|
||||
## Gitea
|
||||
这里我尝试使用二进制安装方式。
|
||||
|
||||
参考文章:
|
||||
- https://docs.gitea.io/en-us/install-from-binary/
|
||||
- https://www.cnblogs.com/skymyyang/p/13606587.html
|
||||
- https://www.cnblogs.com/azureology/p/13237221.html
|
||||
|
||||
## 其他环境安装
|
||||
### Node.js
|
||||
```
|
||||
opkg install node
|
||||
opkg install node-npm
|
||||
```
|
||||
之后安装request模块
|
||||
```
|
||||
npm install request
|
||||
```
|
||||
参考文章:
|
||||
- https://koolshare.cn/forum.php?mod=viewthread&tid=189560&extra=page%3D2%26filter%3Dtypeid%26typeid%3D104
|
||||
|
||||
### PHP环境安装
|
||||
使用的是ONMP
|
||||
|
||||
参考文章:
|
||||
- https://zhih.me/onmp-installation/
|
||||
|
||||
#### EDE+Entware+ONMP搭建个人私有云Nextcloud
|
||||
https://koolshare.cn/thread-137015-1-1.html
|
||||
|
||||
## 其他步骤
|
||||
### 查看默认Bash位置
|
||||
Enterprise 默认使用的shell即为bash shell。
|
||||
```
|
||||
echo $SHELL
|
||||
```
|
||||
## gitea
|
||||
### 下载二进制文件
|
||||
```
|
||||
wget -O gitea https://dl.gitea.io/gitea/1.13.2/gitea-1.13.2-linux-amd64
|
||||
chmod +x gitea
|
||||
```
|
||||
|
||||
### 增加用户
|
||||
文档中的命令为:
|
||||
```
|
||||
adduser \
|
||||
--system \
|
||||
--shell /bin/bash \
|
||||
--gecos 'Git Version Control' \
|
||||
--group \
|
||||
--disabled-password \
|
||||
--home /home/git \
|
||||
git
|
||||
```
|
||||
但路由器系统默认没有adduser命令,所以我们需要安装对应的模块:
|
||||
```
|
||||
opkginstall shadow-common
|
||||
opkginstall shadow-useradd
|
||||
opkginstall shadow-groupad
|
||||
opkginstall shadow-usermod
|
||||
```
|
||||
```
|
||||
useradd \
|
||||
--system \
|
||||
--shell /bin/bash \
|
||||
--comment 'Git Version Control' \
|
||||
--create-home \
|
||||
--home-dir /tmp/mnt/ASUS_ROUTER/home/git/ \
|
||||
git
|
||||
```
|
||||
会遇到问题:
|
||||
>useradd: cannot open /opt/etc/passwd
|
||||
```
|
||||
opkg install lsattr
|
||||
opkg install chattr
|
||||
```
|
||||
PS.但到这一步还是遇到无法cannot open /opt/etc/passwd的问题,之后尝试手动添加用户也宣告失败。但最后我发现可以在路由器的文件共享服务页面中添加用户。@-@
|
||||
|
||||
### 设置环境变量
|
||||
```
|
||||
export GITEA_WORK_DIR=/tmp/mnt/ASUS_ROUTER/var/lib/gitea/
|
||||
```
|
||||
|
||||
### 将Gitea二进制文件复制到全局位置
|
||||
```
|
||||
cp gitea /tmp/mnt/ASUS_ROUTER/usr/local/bin/
|
||||
```
|
||||
|
||||
## 运行Gitea
|
||||
### 从命令行/终端运行
|
||||
```
|
||||
GITEA_WORK_DIR=/tmp/mnt/ASUS_ROUTER/var/lib/gitea/ /tmp/mnt/ASUS_ROUTER/usr/local/bin/gitea web -c /tmp/mnt/ASUS_ROUTER/etc/gitea/app.ini
|
||||
```
|
159
03-UnrealEngine/流程管理与部署/路由器与NAS/远程唤醒WOL.md
Normal file
159
03-UnrealEngine/流程管理与部署/路由器与NAS/远程唤醒WOL.md
Normal file
@@ -0,0 +1,159 @@
|
||||
---
|
||||
title: 远程唤醒WOL
|
||||
date: 2022-8-10 22:00:49
|
||||
excerpt: 摘要
|
||||
tags: TODO
|
||||
rating: ⭐
|
||||
status: inprogress
|
||||
---
|
||||
|
||||
## 参考
|
||||
- [新手小白如何使用TeamViewer远程开关机(远程唤醒WOL)并远程控制电脑?](https://zhuanlan.zhihu.com/p/144834189)
|
||||
- [如何远程开启你的电脑:WoL的原理和陷阱](https://zhuanlan.zhihu.com/p/28859620)
|
||||
- [WOL网络唤醒在微星主板上开启(ubuntu 20.04/Windows 10双系统)](https://www.mobibrw.com/2020/28210)
|
||||
- [华硕主板如何在BIOS中设置和启用WOL(Wake On Lan)功能](https://www.asus.com/support/FAQ/1045950/)
|
||||
|
||||
大概率需要自己安装官方的驱动,而不是使用Win10自带的。
|
||||
|
||||
## 诊断方法
|
||||
https://zhuanlan.zhihu.com/p/130717144
|
||||
下载Wake On Lan,在目标电脑上运行,勾选**封包监控诊断工具**。之后在另一台电脑上发送wol命令即可。
|
||||
|
||||
## 失败原因分析
|
||||
https://post.smzdm.com/p/amx025p4/
|
||||
|
||||
- 在BIOS中关闭快速启动。
|
||||
-
|
||||
|
||||
## APP
|
||||
- 手机APP
|
||||
- DD-WRT
|
||||
- PC APP
|
||||
- WakeOnLanGui
|
||||
|
||||
## 华硕路由器
|
||||
首先设置远程访问授权,系统管理-系统设置-远程访问设置。之后就可以通过8443端口进行访问了。
|
||||
|
||||
## OMV6
|
||||
除了在主板中开启这个设置外,在`网络-接口-高级设置`中勾选`网络唤醒 WOL`即可。
|
||||
|
||||
## 唤醒服务部署
|
||||
### wol-go-web(没有http page)
|
||||
参考:http://blog.sysu.tech/Docker/%E4%BD%BF%E7%94%A8Docker%E9%85%8D%E7%BD%AEWOL(Wake%20On%20Lan)%E6%9C%8D%E5%8A%A1/
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--net=host \
|
||||
--env PORT=8000 \
|
||||
--name=wol \
|
||||
chishin/wol-go-web
|
||||
```
|
||||
|
||||
使用说明:http://192.168.0.236:8000/;随后直接访问 [http://192.168.211.1:8002/wol?mac=your_mac](http://192.168.211.1:8002/wol?mac=your_mac) 即可远程开机。注意这里`your_mac`要替换为你要唤醒电脑网卡的mac地址
|
||||
|
||||
### go-rest-wol
|
||||
>需要手动先创建externall-file-on-host.csv文件。并且添加csv内容:
|
||||
```bash
|
||||
docker run --name=wol -d \
|
||||
-e "WOLHTTPPORT=7000" \
|
||||
-p 7000:7000 \
|
||||
-v /mnt/nfs-1/wol/externall-file-on-host.csv:/app/computer.csv \
|
||||
--restart unless-stopped \
|
||||
dabondi/go-rest-wol
|
||||
```
|
||||
|
||||
### 其他备选容器
|
||||
- 1M+ https://hub.docker.com/r/dabondi/go-rest-wol
|
||||
- 10k+ https://hub.docker.com/r/aranajuan/wolweb
|
||||
- 500k+ https://hub.docker.com/r/ex0nuss/remote-wake-sleep-on-lan-docker
|
||||
- 10k+ https://hub.docker.com/r/chtake/pi-wol
|
||||
|
||||
## 开启WOL
|
||||
参考
|
||||
- https://post.smzdm.com/p/amx025p4/
|
||||
- https://zhuanlan.zhihu.com/p/29100706
|
||||
- https://zhuanlan.zhihu.com/p/183704557
|
||||
- https://blog.berd.moe/archives/intel-nuc-i210-wol-troubleshooting/
|
||||
- https://office66.cn/post/39888.html
|
||||
|
||||
相关关键词:
|
||||
- ACPI
|
||||
- PCIE 设备开机
|
||||
- Automatic Power On
|
||||
- Wake on LAN/WLAN
|
||||
- Power Management
|
||||
- Power On by Onboard LAN
|
||||
- Power On by PCI-E Devices
|
||||
- ......
|
||||
|
||||
>注意路由器需要绑定静态路由表,否则关机时间长了,就会无法远程开机
|
||||
|
||||
微星BIOS:
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
Inter网卡需要安装对应驱动:**Intel PROSet Adapter Configuration Utility**。这个程序中会列出我们在 `devmgmt.msc` 中看不到的一部分设置,其中就包括 “电源关闭状态下魔包唤醒”,这个值在 I210 上默认是禁用,而在 I219 上默认是启用的
|
||||

|
||||
如图,`devmgmt.msc` 中不存在这个设置,应该是网卡特有的
|
||||

|
||||
|
||||
## 关机后网卡保持供电
|
||||
BIOS-Advanced-APM Configuration 里,将 Power On By PCI-E 设置为开启,如下图所示:
|
||||

|
||||
|
||||
|
||||
进系统后,安装过网卡官网驱动后,我们看网卡属性高级设置里,有“关机网络唤醒”的设置,这个设置,默认也是开启的,只要注意不要设置为关闭即可。然后机器关机。
|
||||
|
||||

|
||||
|
||||
板载 Realtek 8111x 系列的千兆网卡的主板,WOL 的实现中,Windows10 下 电源管理中,开启与关闭快速启动都不影响 WOL 的实现。
|
||||
|
||||
第二,我们介绍板载 Intel i219V 千兆网卡的主板的网络唤醒。
|
||||
|
||||
步骤如前,接上网线,开机后我们进入 BIOS-Advanced-APM Configuration 里, 将 Power On By PCI-E/PCI 设置为开启,如下图所示:
|
||||
|
||||

|
||||
|
||||
进入系统后,安装好官网的网卡驱动,进入设备管理器的网络适配器里找到 Intel(R) Ethernet Connetion I219V 网卡设备,在其属性----高级设置里这里有很多设置项 目,拉到下面,有个启用 PME 的设置,这个默认也是开启的,只要不设置为关闭即可。
|
||||
|
||||

|
||||
|
||||
对于 i219V 的千兆网卡,我们必须要把 Windows10 下面电源管理中的快速启动取消掉,才可以在 Windows 关机后实现 WOL。
|
||||
|
||||

|
||||
|
||||
第三,对于板载了 Intel i211AT 千兆网卡的主板来讲,网络唤醒的设置如下: BIOS-Advanced-APM Configuration 里,将 Power On By PCI-E/PCI 设置为开 启,如下图所示:
|
||||
|
||||

|
||||
|
||||
操作系统下,进入设备管理器的网络适配器里找到 Intel(R) I211 Gigabit Network Connetion 网卡设备,在其属性----高级设置里这里有很多设置项目,拉到下面,有个启用 PME 的设置,请一定把这个设置设置为开启,默认是关闭的。
|
||||
|
||||

|
||||
|
||||
开启后,无论 Windows10 里的快速关机开启与否,关机后,都可以实现网络唤醒。
|
||||
|
||||
最后以表格形式总结如下:
|
||||
|
||||

|
||||
|
||||
华硕主板
|
||||
http://m.dnxtc.net/zixun/zuzhuangjiaocheng/2022-09-28/11233.html
|
||||
|
||||
# 华硕工程师回答
|
||||
![[Asus_WOL1.png]]![[Asus_WOL2.png]]
|
||||
|
||||
## Inter网卡在S5状态(完全关机)下无法远程开机的问题
|
||||
目前状态下在S4状态(休眠)可以开机,但S5状态下无法开机。解决可以参考:
|
||||
https://www.intel.com/content/www/us/en/support/articles/000038313/ethernet-products.html
|
||||
|
||||
- 允许计算机关闭此设备以节约电源:禁用
|
||||
- 启用PME:启用
|
||||
- 模式匹配唤醒:启用
|
||||
- 等待连接?
|
154
03-UnrealEngine/流程管理与部署/远程办公与自动化逻辑.md
Normal file
154
03-UnrealEngine/流程管理与部署/远程办公与自动化逻辑.md
Normal file
@@ -0,0 +1,154 @@
|
||||
#TODO 远程办公与自动化逻辑 流程尝试
|
||||
# 需求与功能整理
|
||||
## 杭州部门需求
|
||||
- 服务器联机构建
|
||||
- 外包公司场景交付,不构建,效果不一样,构建了会耗费大量时间。
|
||||
- 外包动画镜头时,因为烘焙时间过长,动画师只能使用Hack手段去打光。
|
||||
- Shader联机编译
|
||||
- 网盘搭建
|
||||
- 外包公司资产传递(使用百度云、QQ直接传递)
|
||||
- 公司外/内部的资产共享与版本管理
|
||||
- 外包上下游的资产有效性检测,使用Lyda工具进行自动的有效性检查
|
||||
- 使用Win的文件查找功能,找到目标资产比较耗时
|
||||
- 制作Asset的GameplayTag以及查询工具,以方便其他人调用
|
||||
- 远程唤醒
|
||||
- 员工失误将电脑关了使得无法远程控制
|
||||
- UE4协作
|
||||
- 多人一起编辑一个虚幻工程
|
||||
- 制作流程管理
|
||||
- 使用腾讯文档手动进行管理 卡 的制作进度。问题是这个表格是死的。
|
||||
- 其他公司会使用CGTeamWork。
|
||||
- 可以考虑使用飞书的多维表格,飞书开放了开发接口,可以与版本管理软件、CI/CD连用。https://open.feishu.cn/document/ukTMukTMukTM/uATMzUjLwEzM14CMxMTN/overview
|
||||
- https://www.bilibili.com/video/BV1o44y1a7JT?spm_id_from=333.337.search-card.all.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
|
||||
- ~~资产生命周期管理(制片 中卡的状态:缩略图、使用的角色资产、资产改进)~~
|
||||
- 还需要制作UE4版本管理插件、以及MovieRenderQueue插件
|
||||
- 插件编写
|
||||
- UE4使用同一设置导入ABC
|
||||
- Maya材质导入UE工具
|
||||
- 知识库编写
|
||||
|
||||
## DCC中间文件
|
||||
- fbx
|
||||
- usd
|
||||
- Animation Workflows Using Unreal Engine and Maya | Webinar https://www.youtube.com/watch?v=Ddu7TAICAXw
|
||||
- Omniverse平台系列(MDL材质格式)
|
||||
- abc
|
||||
- vdb
|
||||
- Import VDBs into Unreal Engine 5 https://www.youtube.com/watch?v=iEclyxwCWaY
|
||||
- 使用OpenVDB流程。
|
||||
|
||||
# 问题解决
|
||||
- 大部分需求都需要服务器的支持,而且都是需要外网连接到服务器的,所以最好有网络安全专业人帮忙做好服务器安全防护。
|
||||
- 联机烘焙与构建需要占用大量带宽。最好是在使用光纤来搭建局域网。(已经有一些家庭使用光纤了)
|
||||
|
||||
- 一台数据存储服务器,用于存储数据。(硬盘空间大,同时考虑硬盘可替换性,放置数据丢失)
|
||||
- 一台编译构建服务器。(CPU强劲一些,避免存重要数据,腾讯的编译机器1~2年换一次硬盘)
|
||||
- 适配光口的网卡、交换机、路由器。
|
||||
|
||||
## 服务器联机构建
|
||||
通过服务器的强劲CPU性能,对编译工作进行加速。
|
||||
|
||||
- 联机烘焙光影:
|
||||
- 在服务器部署Unreal Swarm,进行联机烘焙。
|
||||
- 或许可以使用GPULightMass提高速度,但效果会与基于CPU的LightMass不同(是否可以和一些一手包方沟通一下?)。
|
||||
- 联机编译引擎源码:
|
||||
- 使用FastBuild编译。(亲自测试过)
|
||||
- 二分法查找Bug。
|
||||
- 联机编译Shader:
|
||||
- 使用FastBuild编译。需要修改FastBuild与引擎的代码。
|
||||
|
||||
如果是多地服务器联机编译,卡脖子就是网络带宽问题(上传与下载,目前的企业专线宽带也就1000M)。联机编译能把100M的上传/下载全部吃完,多地服务器没测试过。
|
||||
|
||||
## 网盘搭建
|
||||
使用Centos(Linux) 作为服务器,Docker来部署。系统可以NextCloud、FileSea、Cloudreve(这款有亲自试过,Windows版还未测试过)。
|
||||
|
||||
## 公司外/内部的资产共享与版本管理
|
||||
- 版本管理软件
|
||||
- SVN Git混合:优势是免费。
|
||||
- Perforce:优势是EPIC提供了很多相关工具。
|
||||
- CI/CD软件
|
||||
- JB TeamCity
|
||||
- Jenkins
|
||||
|
||||
建议先使用一台电脑进行流程搭建测试。
|
||||
|
||||
同时还需要制作插件,给Asset或者Asset包打上标签,方便后续查找资产以及资产复用。(类似大数据的方法)
|
||||
|
||||
### 流程
|
||||
假设分支设计为类似:
|
||||
- GitFlow
|
||||
- Master分支
|
||||
- Release分支
|
||||
- 程序Develop分支
|
||||
- 美术Develop分支
|
||||
- Feature分支
|
||||
- HotFixs分支
|
||||
|
||||
#### 引擎/游戏开发:
|
||||
理想的情况下,程序组员在开发完某个功能后,发送给MergeRequest给组长,组长在审阅完之后将其合并至Develop分支。在合并之前会触发Hook,调用自动测试与打包测试功能。部分错误在Development模式不会出现,但会在Shipping模式出现。通过测试之后系统才会完成合并。
|
||||
|
||||
每个Release版本版本,都应该执行打包与自动部署功能,以保证测试组能够及时收到完整测试版本。
|
||||
|
||||
上述阶段无论成功与失败都会发送EMail或者调用办公软件(钉钉或者飞书提醒相关组员)。
|
||||
|
||||
#### UE影片制作:
|
||||
从接到外包开始:
|
||||
- 使用网盘或者版本管理系统来接收项目
|
||||
- 如果对方愿意使用版本管理系统(Perforce)推荐使用这个,因为上传前会对数据进行压缩,这样传输下效率会更高,并且方便修改。
|
||||
- 如果对方不愿意,可以时候我公司自己搭建的网盘。等上传完之后,CI/CD程序将这个包解压并且加入到Perforce流程。每制作到一定程度,再自动压缩放回网盘。
|
||||
- 使用版本管理的一个好处就是可以来回对比多个版本的效果。(但只限于序列帧,视频的话,只能同时放映进行人肉对比)
|
||||
- 制作进度控制。版本系统上传数据之后,会发送EMail或者调用办公软件(钉钉或者飞书提醒相关组员)。
|
||||
|
||||
#### CI/CD
|
||||
- 资产检查
|
||||
- 检查是否有资源引用丢失,避免反工。(外包方资源没有拷贝全,这个问题在打开对应关卡后才会发现)
|
||||
- 资产打包测试(UE4的打包测试)
|
||||
- 游戏与引擎开发最好有一个定时打包测试的功能,这样可以及时发现问题,一些问题只有在打包时才会发现。
|
||||
- UE的自动测试框架(偏游戏,与CI/CD配合使用,模拟用户操作)
|
||||
- 蓝图可视化测试
|
||||
- 序列帧上传到版本管理系统后,服务器开始压片
|
||||
|
||||
#### 自动部署
|
||||
- docker 像素流自动部署
|
||||
- 开游戏分区
|
||||
|
||||
#### 给美术同步引擎
|
||||
如果使用Perforce,就可以使用官方的UnrealGameSync,来同步引擎与资产。
|
||||
|
||||
具体需要考虑其他分公司的情况,对于我们这次二次元项目来说,很合适。
|
||||
|
||||
## 远程唤醒
|
||||
对员工电脑的BIOS进行设置以允许服务器对其唤醒,再使用华硕路由器里的插件~~研发一个简单的Web网站~~就可以实现远程唤醒电脑了。(可以节约较多电费)
|
||||
|
||||
https://zhuanlan.zhihu.com/p/302835122
|
||||
|
||||
## 联机协作
|
||||
### 多人一起编辑一个虚幻工程
|
||||
Explore Collaboration with Unreal Engine’s Multi-User Editor | Webinar
|
||||
https://www.youtube.com/watch?v=MPIpOdNmNGE
|
||||
|
||||
这个插件潘翔他们在用。或许可以在以下的应用场景中使用:
|
||||
1. 重庆动捕棚,做虚拟拍摄
|
||||
2. 杭州帮忙修改场景、打光。
|
||||
3. 多地区领导与客户同时审片。
|
||||
|
||||
|
||||
### 网络协作
|
||||
[教育直播]虚幻引擎里的团队协作 | Collaboration and Teamwork in Unreal Engine(官方字幕)
|
||||
https://www.bilibili.com/video/BV1oZ4y1n7j2?spm_id_from=333.337.search-card.all.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
|
||||
|
||||
蓝图Asset合并与Diff
|
||||
|
||||
## 制作流程管理
|
||||
|
||||
## 知识库编写
|
||||
【Obsidian推荐】论文笔记和日程管理,科研好帮手!
|
||||
https://www.bilibili.com/video/BV1XR4y1w7jp?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
|
||||
|
||||
分享个用Obsidian搭建的小型团队协同工作方案(上-演示与目录设置)
|
||||
https://www.bilibili.com/video/BV1oZ4y1U7b9/
|
||||
https://zhuanlan.zhihu.com/p/457800106
|
||||
|
||||
gitbook,Unity使用这个来制作文档。
|
||||
|
||||
# 任务安排
|
Reference in New Issue
Block a user