0%

如何搭建戴森球计划联机MOD NebulaMultiplayerMod 的无头服务器

本教程基于有GUI的Linux或者Windows,以Windows作为主要对象

无头服务器

Nebula可以在没有GPU设备的服务器上运行。
以下是运行它的步骤。

  1. Steam

    理论上还支持 XBOX ,但我我没有 XBOX 版的戴森球计划,这里只给出 Steam 版的方法

    如果你在 Steam 上购买了游戏,则需要登录 Steam 才能在服务器上运行游戏。如果你只有一个 Steam 帐户,你可以将 Steam 设置为离线模式,这样就能同时在两台设备上同时启动游戏了。

    在游戏目录根目录(DSPGame.exe 旁边)创建一个 steam_appid.txt 文件,文本为 1366540。这样就能直接从 exe 启动游戏了。

    steam_appid.txt

  2. 模组管理器

    打开 r2modman,前往 Settings -> Debugging -> Set launch parameters,然后在文本框里填入以下内容

    -batchmode -nographics -server -load-latest

    Set launch parameters

    -batchmode表示在“无头”模式下运行应用程序。在此模式下,应用程序不显示任何内容或接受用户输入。
    -nographics表示不使用显卡。
    -server表示启动戴森球计划的无头服务器模式。
    -load-latest表示启动后加载上次退出游戏时自动保存的存档。

  3. BepInEx Console

    默认情况下,BepInEx 控制台窗口是关闭的。启动无头服务器模式后,只能在任务管理器中看到服务器进程,你无法得知服务器运行的具体状态。这里推荐你启用 BepInEx 的控制台。

    你只需要将 BepInEx 的配置文件中的 Logging.Console 选项设置为 true,就可以启用控制台了。

    Logging.Console

    如果没有配置文件的话,你需要先单击左上角的 Start modded 启动一次来生成配置文件。

    另外,也可以在命令行直接启动服务器。
    ./DSPGAME.exe --doorstop-enable true --doorstop-target "C:\Users\Administrator\AppData\Roaming\r2modmanPlus-local\DysonSphereProgram\profiles\Default\BepInEx\core\BepInEx.Preloader.dll" -batchmode -nographics -server -load-latest
    其中 --doorstop-enable true --doorstop-target "C:\Users\Administrator\AppData\Roaming\r2modmanPlus-local\DysonSphereProgram\profiles\Default\BepInEx\core\BepInEx.Preloader.dll" 这部分可以在上面第二步设置 launch parameters 处找到。

  4. 关闭服务器

    在控制台窗口使用 Ctrl+C 关闭服务器。服务器会自动保存然后关闭。

附录

Unity 命令行参数

命令 详情
-batchmode 在“无头”模式下运行应用程序。在此模式下,应用程序不显示任何内容或接受用户输入。
-nographics 当您在批处理模式下使用此参数时,Unity 不会初始化图形设备。
-logFile 指定 Unity 写入编辑器或 Windows/Linux/OSX 独立日志文件的位置。

Nebula 命令行参数

命令 详情
-server 以无头模式启动戴森球计划
-load <savename> 加载指定的存档
-load-latest 加载上次退出时自动保存的存档
-newgame <seed> <starCount> <resourceMultiplier> 新建游戏
-ups <integer value> 以指定的 UPS 运行

Nebula 配置项

Nebula 的配置文件在 BepInEx\config\nebula.cfg

配置项 默认 详情
AutoPauseEnabled true 服务器没人的时候自动暂停游戏
RemoteAccessEnabled false 启用后可在客户端游戏聊天栏简单控制服务器
RemoteAccessPassword 如果提供,这将设置一个密码,用于客户端进行身份验证以访问远程服务器命令
ServerPassword 如果提供,进入服务器将需要输入密码

聊天框命令

RemoteAccessEnabled 设置为 true 时,客户端可以使用以下命令:

命令 详情
/server login [RemoteAccessPassword] /server login hunter2 验证身份以访问远程服务器
/server list [saveNum] /server list 5 按时间和服务器上的保存名称显示最近的 [saveNum] 个保存文件
/server save [saveName] /server save save1 将当前游戏保存为 [saveName]。如果未指定saveName,则会保存到 _lastexit_
/server load <saveName> /server load save1 加载 saveName 存档。当前游戏将会被保存到 _lastexit_
/server info /server info

服务器迁移时需要注意的文件

  • Nebula 将玩家数据存储在存档旁边的单独文件 [SaveName].server 中
  • 确保客户端和服务器中的 player.key 文件不同。文件默认路径为保存文件夹的上层(%userprofile%\Documents\Dyson Sphere Program\player.key)。删除这个文件可以生成新文件并作为新玩家加入。
  • 聊天命令 /playerdata 列出、删除、保存玩家数据。如果你的存档是从别的地方得到的,可以使用这个命令加载上一个会话的玩家数据

环境:

相信当你看到这篇文章的时候已经部署好了mirai,并且版本为最新稳定版v2.15.0,那么……

检查一下环境有没有问题

  1. 更新一下
1
2
sudo apt update
sudo apt upgrade
  1. 确认Java版本大于等于1.8

不装Java能用mirai吗?

1
java -version
  1. 确认已部署2.15.0及以上版本的mirai

安装fix-protocol-version插件,确认登录协议版本

  1. 关闭正在运行的mirai

  2. 下载fix-protocol-version,然后放入plugins文件夹

1
2
cd mirai/plugins
wget https://github.com/cssxsh/fix-protocol-version/releases/download/v1.9.9/fix-protocol-version-1.9.9.mirai2.jar
  1. 启动mirai
1
2
cd ..
./mcl
  1. 在线同步协议
1
protocol sync ANDROID_PHONE

在线同步协议

  1. 确认当前登录协议版本
1
protocol info

确认当前登录协议版本

这样,咱们就知道了当前的登录协议是什么版本

部署unidbg-fetch-qsign

  1. 获取unidbg-fetch-qsign
1
2
cd ~
wget https://github.com/fuqiuluo/unidbg-fetch-qsign/releases/download/1.1.6/unidbg-fetch-qsign-1.1.6.zip
  1. 解压 unidbg-fetch-qsign-1.1.6.zip
1
unzip unidbg-fetch-qsign-1.1.6.zip

目录结构

  1. 配置

之前已经获知了我们的登录协议版本为8.9.63,所以我们配置8.9.63

编辑 ./unidbg-fetch-qsign-1.1.6/txlib/8.9.63/config.json

1
nano unidbg-fetch-qsign-1.1.6/txlib/8.9.63/config.json

默认的config.json长这样↓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"server": {
"host": "0.0.0.0",
"port": 8080
},
"key": "114514",
"auto_register": false,
"protocol": {
"qua": "V1_AND_SQ_8.9.63_4194_YYB_D",
"version": "8.9.63",
"code": "4194"
},
"unidbg": {
"dynarmic": false,
"unicorn": true,
"debug": false
}
}

大概有以下几个项目需要设置

key value
host 能够访问该服务的IP地址;0.0.0.0表示可以从任何位置访问该服务
port 开放的端口;注意不要与正在使用的端口重复
key 注册实例的密钥
dynarmic 一个开源的动态ARM指令集模拟器(大概能提高效率?)

编辑好config.json之后按下Ctrl+X离开,按下Y进行保存,最后按下Enter确认替换原文件

保存

  1. 检查端口是否被占用
1
sudo netstat -lntp

端口列表

如果之前在config.json中配置的端口在输出的列表中出现了,就换个端口

启动!

示例命令:

1
/home/yourame/unidbg-fetch-qsign-1.1.6/bin/unidbg-fetch-qsign --basePath=/home/yourname/unidbg-fetch-qsign-1.1.6/txlib/8.9.63/
参数 说明
/home/yourname/unidbg-fetch-qsign-1.1.6/bin/unidbg-fetch-qsign 此目录指向unidbg-fetch-qsign的启动文件
–basePath=… 指向之前配置的config.json所在的文件夹

你已经完全理解了启动命令的含义,该启动了

启动成功

当出现23:50:23.781 [DefaultDispatcher-worker-1] INFO ktor.application - Responding at http://127.0.0.1:9080时,启动就成功了

将unidbg-fetch-qsign注册为服务以实现后台运行或开机启动

当然,想要实现这两个功能并不一定要使用我在此提供的方法

使用Ctrl+C关闭刚刚启动的unidbg-fetch-qsign,然后创建服务

新建 /etc/systemd/system/qsign.service

1
sudo nano /etc/systemd/system/qsign.service

在文件中写入一下内容

1
2
3
4
5
6
7
8
9
[Unit]
Description=unidbg-fetch-qsign
After=network.target

[Service]
ExecStart=/home/yourame/unidbg-fetch-qsign-1.1.6/bin/unidbg-fetch-qsign --basePath=/home/yourname/unidbg-fetch-qsign-1.1.6/txlib/8.9.63/

[Install]
WantedBy=multi-user.target

大概有以下几个项目需要设置

key value
Description 简介
ExecStart 写入之前运行成功的命令

编辑好qsign.service之后按下Ctrl+X离开,按下Y进行保存,最后按下Enter确认替换原文件

qsign.service

在此插入一点简单的systemctl命令说明。更多的可以在此查看

命令 效果
systemctl daemon-reload 重新加载 systemd 守护进程的配置
systemctl start PATTERN... 启动(activate)指定的已加载单元(无法启动未加载的单元)。
systemctl stop PATTERN... 停止(deactivate)指定的单元
systemctl restart PATTERN... 重新启动指定的单元。
systemctl status [PATTERN...|PID...] 如果指定了单元,那么显示指定单元的运行时状态信息,以及这些单元最近的日志数据。 如果指定了PID,那么显示指定PID所属单元的运行时状态信息,以及这些单元最近的日志数据。
systemctl enable NAME..., enable PATH... 启用指定的单元或单元实例(多数时候相当于将这些单元设为”开机时自动启动”或”插入某个硬件时自动启动”)。
systemctl disable NAME... 停用指定的单元或单元实例(多数时候相当于撤销这些单元的”开机时自动启动”以及”插入某个硬件时自动启动”)。

刚才我们已经编辑了一个用于unidbg-fetch-qsign的qsign.service

如果要后台运行

1
2
sudo systemctl daemon-reload
sudo systemctl start qsign.service

检查一下是否已经成功启动

1
sudo systemctl status qsign.service

qsign.service

可以看到已经成功启动了

想要停止unidbg-fetch-qsign,只需要执行sudo systemctl stop qsign.service就行了

如果还想让它开机自动启动

1
sudo systemctl enable qsign.service

然后你又不想让它开机自动启动了

1
sudo systemctl disable qsign.service

配置fix-protocol-version

fix-protocol-version的配置文件在默认情况下会生成在mcl根目录,名称为KFCFactory.json

1
2
cd mirai
nano KFCFactory.json

默认的config.json长这样↓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"0.0.0": {
"base_url": "http://127.0.0.1:8080",
"type": "fuqiuluo/unidbg-fetch-qsign",
"key": "114514"
},
"0.1.0": {
"base_url": "http://127.0.0.1:8888",
"type": "kiliokuara/magic-signer-guide",
"server_identity_key": "vivo50",
"authorization_key": "kfc"
},
"8.8.88": {
"base_url": "http://127.0.0.1:80",
"type": "TLV544Provider"
}
}

大概有以下几个项目需要设置

key value
base_url 还记得刚才config.json填的端口吗
key 还记得刚才config.json填的密钥吗

按照默认文件中的格式编辑

KFCFactory.json

编辑好KFCFactory.json之后按下Ctrl+X离开,按下Y进行保存,最后按下Enter确认替换原文件

终于,该启动bot了

1
2
cd mirai
./mcl

期间提示需要进行短信验证,进行验证即可

成功

好!Bot活了!-

参考

具体情况是这样的

  1. 在旧系统中,创建存储池,创建数据集,然后通过SMB将这个数据集共享出来,然后使用Windows 11进行连接,并在里面创建文件夹A,在文件夹A里面创建文件A.txt
  2. 导出这个存储池
  3. 关闭TrueNAS Scale
  4. 引导进TrueNAS Scale的安装程序,进行清洁安装,不保留原有数据
  5. 安装完成后进入网页后台,导入第2步中旧系统导出的存储池,以第一步相同的方式共享出来
  6. 此时使用Windows 11进行连接,对文件A.txt进行写操作或者删除操作,提示没有权限,同时无法在文件夹A中创建文件或文件夹。但是在共享的根目录中,也就是与文件夹A同级的文件夹,可以正常创建和删除文件与文件夹

这个问题困扰了我好几个小时,直到我看见这篇文章:
SMB Permissions won’t allow chmod, is there a work around?

在数据集选项卡中,编辑权限出现问题的数据集的详细信息,将高级选项中的ACL类型改为SMB/NFSv4。好了,现在新系统中也能正常访问旧系统时创建的目录了。

具体什么机制我也不太懂,就记录下

安装SteamCMD

为SteamCMD创建一个文件夹

1
D:\steamcmd

steamcmd文件夹

下载SteamCMD for Windows

将压缩包中的文件解压到文件夹中

解压

安装Barotrauma服务端

为Barotrauma服务端创建一个文件夹:

1
D:\BarotraumaServer

BarotraumaServer文件夹

启动SteamCMD:

双击steamcmd.exe
SteamCMD启动中
SteamCMD启动完成
SteamCMD文件夹

指定安装位置:

1
force_install_dir  D:\BarotraumaServer

指定安装位置

anonymous身份进行登录

1
login anonymous

登录

安装Barotrauma服务端

1
app_update 1026340 validate

安装成功
BarotraumaServer文件夹

配置服务器:

参考这篇文章对服务器进行配置
参考这篇文章对权限进行配置

安装MOD:

  1. 在自己的客户端中设置好需要启用的MOD,语言调整为需要的语言。

语言影响的是NPC的对话

  1. 来到客户端的根目录(D:\Program Files\Steam\steamapps\common\Barotrauma),将根目录中的LocalMods文件夹和config_player.xml复制到服务端根目录(D:\BarotraumaServer

退出SteamCMD

1
quit

启动服务器

双击DedicatedServer.exe
最后,当命令行显示Server started时,服务器就启动成功了
Barotrauma服务器启动成功

关闭服务器

1
quit

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

安装环境

操作系统:Ubuntu 20.04.3

“安装环境”还是“安装”环境呢

添加 PHP 8.1.2 相关的软件源

目前 Ubuntu 20.04 的软件源里并没有 8.0 以上版本的 PHP,所以需要添加非官方源

1
2
~# add-apt-repository ppa:ondrej/php
~# add-apt-repository ppa:ondrej/apache2

更新索引并升级

1
2
~# apt update
~# apt upgrade

安装 Apache2 和 PHP 8.1.2

目前 Ubuntu 20.04 的软件源里添加非官方源

1
~# apt install apache2 php8.1

安装必要的 PHP 插件

1
~# apt install php8.1-mysql php8.1-mbstring php8.1-gd php8.1-xml php8.1-zip

启用 RewriteEngine

1
~# a2enmod rewrite

安装并配置 MySQL

安装

1
~# apt install mysql-server mysql-client

为皮肤站创建一个数据库

1
2
~# mysql
mysql> create database blessingskin;

为皮肤站创建一个用户

1
mysql> create user 'blessing'@'localhost' identified by 'blessingskin';

为用户 blessing 分配数据库 blessingskin 的权限

1
mysql> grant all on blessingskin.* to 'blessing'@'localhost';

重新加载权限表

1
mysql> flush privileges;

安装 Blessing Skin Server 6.0.0-rc.2

下载

1
~$ wget https://gitee.com/snowmoonss/blessing-skin-server/attach_files/965315/download/blessing-skin-server-6.0.0-rc.2.zip

解压到 /var/www/bs

1
~# unzip blessing-skin-server-6.0.0-rc.2.zip -d /var/www/bs

复制配置文件

1
2
~$ cd /var/www/bs
/var/www/bs# cp .env.example .env

生成 app key

1
/var/www/bs# php artisan key:generate

更改目录所有者为 Apache2 的运行账户

1
~# chown -R www-data. bs

复制一份示例站点的配置文件并保存为 bs.conf

1
2
/var/www/bs$ cd /etc/apache2/sites-available
/etc/apache2/sites-available# cp 000-default.conf bs.conf

编辑 bs.conf,我这里用的是 vim 编辑器,可以使用自己手熟

1
/etc/apache2/sites-available# vim bs.conf

ServerAdmin 按需修改,服务器出现某些错误的时候会显示在页面上 DocumentRoot 改为 /var/www/bs/public,也就是刚才解压到的文件夹 ErrorLogCustomLog 按需修改 经我测试,AllowOverride FileInfo 会报错(来源)

1
/var/www/bs/public/.htaccess: Options not allowed here

我太菜了,无法得知还需要什么权限,遂 All 了:

1
2
3
<Directory /var/www/bs>
AllowOverride All
</Directory>

最后的配置文件就是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin serveradmin@example.com
DocumentRoot /var/www/bs/public

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error-bs.log
CustomLog ${APACHE_LOG_DIR}/access-bs.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf

<Directory /var/www/bs>
AllowOverride All
</Directory>
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

更加进阶的内容还请自行探究

关闭 Apache2 自带的示例站点,启用配置好的 bs.config 并重新加载 Apache2 配置文件

1
2
3
/etc/apache2/sites-available# a2dissite 000-default.conf
/etc/apache2/sites-available# a2ensite bs.conf
/etc/apache2/sites-available# systemctl restart apache2

启动!

第一次打开的界面应该是这样的: 欢迎 此时单击**下一步** 然后填写数据库信息,相信刚才创建数据库的时候有记住都干了些什么吧: 填写数据库信息 按照提示填写就行: 填写信息 恭喜你,安装成功! 安装成功

看这篇文章时请先看原文,这篇文章只是对原文进行补充 阅览原文时,请至少浏览一遍,而不是直接就按照文章上手开始安装 我用的 VMware ,所以以下内容只能保证在 VMware 上无误

基础安装

虚拟机安装前的准备

配置VMware

自定义(高级)

Workstation 16.2.x

安装程序映像文件

Linux,其它Linux 5.x内核64位

取名环节

1个处理器,2个内核

4GB 使用网络地址转换(NAT)

选择 准虚拟化SCSI ,据说性能更高,我没亲自测过 准虚拟化SCSI

选择 NVME ,2022年了,大家应该都有NVME硬盘了吧,当然这里只是虚拟一个NVME硬盘 NVME

创建新虚拟磁盘

最大磁盘大小60GB,将虚拟磁盘拆分成多个文件

又是取名环节

概览]

点击 自定义硬件 ,勾选 虚拟化Intel VT-x/EPT或AMD-V/RVI虚拟化CPU性能计数器 。之后点击 关闭 ,关闭这个对话框回到概览。点击 完成 ,完成虚拟机创建 勾选虚拟化Intel VT-x/EPT或AMD-V/RVI和虚拟化CPU性能计数器

创建完成后先不急着启动虚拟机,先 编辑虚拟机设置 ,转到 高级 选项卡,将 固件类型 中的 BIOS 改为 UEFI 固件类型选择UEFI

ArchLinux 基础安装

1. 禁用 reflector 服务(并不)

我们不禁用 reflector 服务 ,而是使用该服务自动生成一个 mirrorlist参考连接 选择在最近 12 小时内同步的,并且是位于中国的镜像,然后根据下载速度进行排序,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件内:

1
reflector --country China --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

3. 连接网络

这一步应该在1. 禁用 reflector 服务之前就做好,而不是现在才做。

6. 更换国内软件仓库镜像源加快下载速度

因为在1. 禁用 reflector 服务这一步中已经将软件仓库镜像源设置为了国内仓库,所以这一步也不用再做

7. 分区和格式化(使用 Btrfs 文件系统)

进行到这一步时需要注意:原文这里是以整个系统已经存在一个 Windows 系统为前提进行分区的,所以没有写全新安装时还需要分一个efi分区。参考原文的💾 分区和格式化

进阶安装

桌面环境与常用应用

2. 准备非 root 用户(重要)

这一步很重要,不能跳过。当然,不小心跳过了也有补救的办法 原文使用的登陆器是 sddm ,它在默认配置下是不显示 UID 1000 以下的账户的,也就是说不会显示 root 账户,即无法以 root 账户登录系统,所以我们要先创建一个非 root 用户。 如果不慎跳过了这一步并且已经重启进入了登录界面,可以使用 CTRL+ALT+F1~F6 切换 TTY,使用 root 账户登录并创建一个账户

7. 安装基础功能包

如果不习惯 vim ,可以安装一个 kate 或者 gedit 。 kate 是 KDE Applications 的一部分。如果用 sudo kate 的话, kate 会报错无法打开,我很菜,我也不明白为什么。但 gedit 不会, gedit 是 GNOME 桌面环境的文本编辑器。

10. 设置系统为中文

若按照原文所述方法设置语言后,UI 中仍然有部分英文,建议按照此文设置语言

11. 安装输入法(指安装 Fcitx5)

我按照原文描述安装输入法后仍然无法正常使用输入法。原文在此安装的是 fcitx5 。如果你遇上了跟我相同的遭遇——fcitx5 看起来安装好了,但 CTRL+Space 却没有任何反应,并不能切换为中文输入法——请参考此文重新进行安装。 如果你想安装其它输入法: Fcitx:Fcitx (Flexible Input Method Framework) ──即小企鹅输入法,它是一个以 GPL 方式发布的输入法平台,可以通过安装引擎支持多种输入法,支持简入繁出,是在 Linux 操作系统中常用的中文输入法。它的优点是,短小精悍、跟程序的兼容性比较好。 Fcitx5:Fcitx5 是继 Fcitx 后的新一代输入法框架。即原文中安装的输入法。 IBus:IBus (“Intelligent Input Bus”) 是一个输入法框架,一个输入非英语字符的系统。IBus 的功能与 SCIM 和 Uim 类似。

进阶话题

可选配置

可选配置(基础)

⚒ 虚拟机增强功能(客体机插件)

原文使用的是 VirtualBox 环境,故此处安装的是 VirtualBox 客体机插件,而我们的环境是 VMware ,故需要安装 VMware Tools 。参考文章

1
sudo pacman -Syu open-vm-tools

如果在安装后出现了窗口分辨率无法自动适配的问题,可以参考这个章节

系统美化

2. zsh 美化

原文中,这一步先是安装了一个名为zimzsh插件管理器,然后使用该插件管理器安装了powerlevel10k,都需要访问 GitHub ,可能需要科学上网。 如果在访问 GitHub 时遇到了困难,那么你可以试试这个方法:

1
2
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

这个方法跳过安装zim,直接从 Gitee 安装powerlevel10k

注意: 如果你正在使用一个插件管理器(例如:Oh My Zsh, Prezto, Zim, Antibody, Antigen, Zplug, Zgen, Zplugin, Zinit, Homebrew…),那么你需要先禁用已经启用的主题。

当然,你也可以直接安装 aur 上的官方包:

1
2
yay -S --noconfirm zsh-theme-powerlevel10k-git
echo 'source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

上面引用的 zsh-theme-powerlevel10k-git 是官方 PowerLevel10k 包。 除此之外,还存在着一个 zsh-theme-powerlevel10k 社区包。Historically, it has been breaking often and for extended periods of time. Do not use it. 以上内容来自:https://github.com/romkatv/powerlevel10k#installation

整个系统的安装基本就到此为止了,希望以上我碰上的疑难杂症你都不会碰到。原文算是我看过的比较好的一份 Archlinux 安装指南了。它比 ArchLinux Wiki 的内容更加得有条理,值得初学者安装参考。

在国服Windows客户端中,这些内容默认存储在:

1
C:\Program Files (x86)\上海数龙科技有限公司\最终幻想XIV\game\My Games\FINAL FANTASY XIV - A Realm Reborn\FFXIV_CHR004*************

文件/文件夹

说明

log

消息窗历史记录

AQC.DAT

近期悄悄话角色列表

ADDON.DAT

界面设置

COMMON.DAT

角色设置

CONTROL0.DAT

角色设置(键鼠)

CONTROL1.DAT

角色设置(手柄)

GEARSET.DAT

套装列表

GS.DAT

九宫幻卡卡组

HOTBAR.DAT

热键栏设置

ITEMFDR.DAT

雇员物品顺序

ITEMODR.DAT

物品栏、兵装库物品顺序

KEYBIND.DAT

键位设置

LOGFLTER.DAT

消息窗设置

MACRO.DAT

用户宏(该角色专用)

UISAVE.DAT

UI使用记录

可以将A角色的文件直接复制到B角色的文件夹中直接使用,像键位设置这种复制一下就十分方便。

警告:本文充斥着大量机翻

bup: It backs things up

bup 是一个备份程序。它是“backup”的缩写。难以置信的是,这竟然是第一个被命名位“bup”的开源程序。

尽管bup的名字不起眼,但它很酷。为了让你知道这有多酷,我写了这首诗:

1
2
3
4
Bup is teh awesome
What rhymes with awesome?
I guess maybe possum
But that's irrelevant.

嗯……这样有帮助吗?也许散文更有用。

bup太棒了

bup有一些其它备份软件没有的优点:

  • 它使用滚动校验算法(类似于rsync),将大文件分割成若干块。这样做的好处是,你可以增量备份巨大的虚拟机(VM)磁盘镜像、数据库和XML文件——即使它们通常都在一个巨大的文件中,也不会因为多次备份消耗大量的磁盘空间

  • 它使用git(开源版本控制系统)的packfile格式,这样一来,即使你不喜欢bup的用户界面,也可以通过别的方式访问存储的数据。

  • 与git不同,它直接写packfiles(没有单独的垃圾收集/重新打包阶段)。即使是巨大的数据量,它依旧能保持很高的效率。bup改进的索引格式也允许你追踪比git更多的文件名(数百万),并追踪更多的对象(数百或数千GB)。

  • 数据“自动”在增量备份之间共享,而无需了解哪个备份是基于哪个备份——即使备份是由两台互不关联的计算机制成。您只需使用bup进行备份,它就能以最小的数据量建立增量备份。

  • 你可以直接备份到一个远程bup服务器,从而不消耗本地磁盘空间。如果你的备份进程在中途被打断了,下一次启动将会接着中断的地方继续。部署一个bup服务器也十分简单:只需要在一个有着ssh访问权限的设备安装bup。

  • Bup可以拥有“PAR2”冗余,即使磁盘有未被发现的损坏,也可以恢复已损坏的内容。

  • 增量备份时,你无须担心每次都会保存一份完整的备份;_增量_备份只会在第一次进行完整备份,仅仅消耗少量的磁盘空间。

  • 你可以将你的仓库挂在位一个FUSE文件系统进行访问,或者通过Samba导出。

  • 它时用python写的(有些部分用了C使得它更高效),因此,你很容易对它进行拓展和维护。

你也可能想避免使用bup

  • 它远没有像tar那样经过良好的测试,它更有可能吃掉你的数据。它还缺少一些关键性的功能,但它一直在被完善。

  • 它需要Python 3.7或更新版本(或2.7稍长),C语言编译器,以及1.5.6或更新版本的git。如果你希望fsck能够生成从某些损坏的类型中恢复的信息,它也需要par2。虽然Python 2.7仍被支持,但请做好升级计划。Python 2的上游支持在2020-01-01结束,我们也将会放弃支持。

  • 它现在只能在Linux,FreeBSD,NetBSD,OS X 10.4+,Solaris,或者Windows(with Cygwin, and WSL)上运行。欢迎提供在其它平台运行的补丁。

  • 直到被解决前,如果bup运行在Python 3环境下,在命令行中使用某些不寻常的参数时,bup会崩溃。glibc bug

  • 其它任何在“这太蠢了”中的项目。

新版本带来的显著变化

测试状态

branch

Debian

FreeBSD

macOS

master

Debian test status

FreeBSD test status

macOS test status

0.30.x

Debian test status

FreeBSD test status

macOS test status

0.29.x

Debian test status

FreeBSD test status

macOS test status

开始

从源码开始

  • 使用git获取bup源码:

    1
    git clone https://github.com/bup/bup
  • 如果你想帮助开发,你应该留在当前的主分支上。但是如果您只想使用bup,请查看最新的稳定版本:

    1
    git checkout 0.32

    你可以在这里找到最新的稳定版:https://github.com/bup/bup/releases

  • 安装最新的python库(包括开发库)。

    在最近的Debian/Ubuntu版本上,使用以下命令(以root用户身份运行):

    1
    apt-get build-dep bup

    否则,请尝试以下命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    apt-get install python3.7-dev python3-fuse
    apt-get install python3-pyxattr python3-pytest
    apt-get install python3-distutils
    apt-get install pkg-config linux-libc-dev libacl1-dev
    apt-get install gcc make acl attr rsync
    apt-get isntall python3-pytest-xdist # 可选(平行测试)
    apt-get install par2 # 可选(纠错)
    apt-get install libreadline-dev # 可选 (bup ftp)
    apt-get install python3-tornado # 可选 (bup web)

    或者,如果您还不能迁移到Python 3(请尽快迁移):

    1
    2
    3
    4
    5
    6
    7
    8
    apt-get install python2.7-dev python-fuse
    apt-get install python-pyxattr python-pytest
    apt-get install pkg-config linux-libc-dev libacl1-dev
    apt-get install gcc make acl attr rsync
    apt-get isntall python-pytest-xdist # 可选(平行测试)
    apt-get install par2 # 可选(纠错)
    apt-get install libreadline-dev # 可选(bup ftp)
    apt-get install python-tornado # 可选(bup web)

    CentOS上(至少对于CentOS 6),使用以下命令(以root用户身份运行):

    1
    2
    3
    4
    5
    6
    yum groupinstall "Development Tools"
    yum install python2 python2-devel libacl-devel pylibacl
    yum install fuse-python pyxattr
    yum install perl-Time-HiRes
    yum install readline-devel # 可选(bup ftp)
    yum install python-tornado # 可选(bup web)

    除了默认的CentOS仓库之外,您可能还需要添加RPMForge(fuse python)和EPEL(pyxattr)。

    Cygwin上,安装python、make、rsync和gcc4。

    如果您想在没有tornado软件包的系统上使用可选的bup web服务器,您可能需要尝试以下命令:

    1
    pip install tornado
  • 构建:

    1
    make
  • 运行测试:

    1
    make long-check

    或者,如果你想快一点:

    1
    make check

    如果安装了Python XDist模块,那么通过添加-j选项,你可能可以更快地运行测试(有关更多信息,请参阅./HACKING):

    1
    make -j check

    测试应该通过。如果没有通过,请发送电子邮件给bup-list@googlegroups.com。如果当前工作目录路径上有符号链接,测试可能会失败,但你可以在测试之前使用以下命令可以避免这个问题:

    1
    cd "$(pwd -P)"
  • 您可以通过make install安装bup,并使用DESTDIR和PREFIX覆盖默认目标。

    文件通常安装到$DESTDIR/$PREFIX,其中DESTDIR默认为空,PREFIX默认为/usr/local。因此,如果要将bup安装到/opt/bup,可以执行以下命令:

    1
    make install DESTDIR=/opt/bup PREFIX=''
  • bup使用的Python版本由./configure选择的python-config程序决定,该程序将搜索合理的版本,除非在环境中设置了bup_Python_config。你可以通过configure输出或检查config/config.var/bup-Python-config来查看选择了哪个Python可执行文件,你也可以通过重新运行./configure来更改选择。

从二进制包开始

已知bup的二进制软件包是为以下操作系统构建的:

使用bup

  • 获取任何bup命令的帮助:

    1
    2
    3
    4
    5
    6
    bup help
    bup help init
    bup help index
    bup help save
    bup help restore
    ...
  • 初始化默认的BUP_DIR(~/.BUP你可以通过bup -d DIR…设定BUP_DIR环境变量):

    1
    bup init
  • 创建一份本地备份(-v-vv能够增加可读性):

    1
    2
    bup index /etc
    bup save -n local-etc /etc
  • 恢复备份到./dest

    1
    2
    bup restore -C ./dest local-etc/latest/etc
    ls -l dest/etc
  • 查看你的备份占用了多少磁盘空间:

    1
    du -s ~/.bup
  • 再次进行备份(与上一次完全相同;请注意,你不必指定此备份为增量备份,它会自动进行增量备份):

    1
    2
    bup index /etc
    bup save -n local-etc /etc
  • 看看在第一次备份的基础上第二次备份使用了多少磁盘空间:

    1
    du -s ~/.bup
  • 获取已有的备份:

    1
    bup ls local-etc
  • 恢复你的第一次备份:

    1
    bup restore -C ./dest-2 local-etc/2013-11-23-11195/etc
  • 备份到远程服务器需要远程服务器上能够执行bup命令(包含在环境变量PATH中。/etc/profileetc/environment~/.profile~/.bashrc),并且能够通过ssh连接远程服务器。 将SERVERNAME替换为实际的服务器名:

    1
    2
    3
    bup init -r SERVERNAME:path/to/remote-bup-dir
    bup index /etc
    bup save -r SERVERNAME:path/to/remote-bup-dir -n local-etc /etc
  • 备份到远程服务器的~/.bup

    1
    2
    bup index /etc
    bup save -r SERVER: -n local-etc /etc
  • 查看远程服务器中已有的备份:

    1
    bup ls -r SERVER:
  • 将远程备份恢复到./dest

    1
    2
    bup restore -r SERVER: -C ./dest local-etc/latest/etc
    ls -l dest/etc
  • 保护你的备份不受死亡射线的伤害(好吧,更可能是偶尔出现的坏磁盘块)。这会写入所有现有数据的奇偶校验信息(目前通过par2),以便bup能够从一定数量的存储库损坏中恢复:

    1
    bup fsck -g
  • 使用split/join而不是index/save/restore。尝试使用tar进行本地备份:

    1
    tar -cvf - /etc  bup split -n local-etc -vv
  • 尝试恢复tarball:

    1
    bup join local-etc  tar -tf -
  • 查看你的备份占用了多少磁盘空间:

    1
    du -s ~/.bup
  • 再次创建tar备份:

    1
    tar -cvf - /etc  bup split -n local-etc -vv
  • 看看在第一次备份的基础上第二次备份使用了多少磁盘空间:

    1
    du -s ~/.bup
  • 恢复第一次备份(~1是git符号,表示比最新版本旧的版本):

    1
    bup join local-etc~1  tar -tf -
  • 查看基于split的备份:

    1
    GIT_DIR=~/.bup git log local-etc
  • 将tar存档保存到远程服务器(不使用tar-z以消除重复数据):

    1
    tar -cvf - /etc  bup split -r SERVERNAME: -n local-etc -vv
  • 从远程tar存档恢复:

    1
    bup join -r SERVERNAME: local-etc  tar -tf -

就这些!

关于FreeBSD

  • FreeBSD的make命令不同于bup的Makefile。为了编译代码、运行测试并安装bup,你需要从名为gmake的端口安装GNU Make,然后使用其中的可执行文件。(即使用gmake test运行bup的测试套件)

  • Python的开发头会自动安装在python端口上,因此无需单独安装。

  • 要使用bup fuse命令,需要从sysutils部分的fusefs kmod端口安装fuse内核模块,从devel部分的py fusefs端口安装库。

  • par2命令可在名为par2cmdline的端口中找到。

  • 为了编译文档,你需要pandoc,可以在textproc部分中名为hs pandoc的端口中找到它。

关于NetBSD/pkgsrc

  • 请参阅pkgsrc/sysutils/bup,它应该是最新的稳定版本,并包含手册页。它包含合理的依赖项(gitpar2py-fuse-bindings)。

  • fuse-python包很难找到,它是由sourceforge上的fuse项目分发的python语言绑定的一个单独的tarball。它以pkgsrc/sysutils/bup的形式提供,在NetBSD 5上,bup-fuse与之配合使用。

  • bup fuse将每个目录/文件显示为索引节点0。NetBSD的libc中的目录遍历代码(fts)会将其解释为一个循环和错误输出,因此ls -Rfind将不起作用。

  • 不支持ACL。如果有人愿意对其进行支持,请调整dev/compare-trees

关于Cygwin

  • 不支持ACL。如果有人愿意对其进行支持,请调整dev/compare-trees

  • test/ext/test-misc中,已禁用两个测试。这些测试检查重复保存是否生成相同的树,以及中间索引是否不会改变SHA1。显然,Cygwin在访问时间方面有一些不寻常的行为(这可能需要进一步调查)。可能相关:http://cygwin.com/ml/cygwin/2007-06/msg00436.html

Notes on OS X

  • 不支持ACL。如果有人愿意对其进行支持,请调整dev/compare-trees

工作原理

基本存储:

bup将其数据存储在git格式的存储库中。不幸的是,git本身在bup的用例中并没有表现得很好(大量的文件、大小巨大的文件、保留文件权限/所有权都很重要),所以除了一些帮助程序之外,我们基本上不使用git的代码。例如,bup有自己的git打包文件编写器,它是用python编写的。

基本上,bup split读取stdin上的数据(或从命令行上指定的文件),使用滚动校验和(类似于rsync)将其分解成块,并将这些块保存到新的git packfile中。每个备份至少有一个git打包文件。

在决定是否将特定块写入新的packfile时,bup首先检查存在的所有其他packfile,看看它们是否已经拥有该块。如果是,则跳过该块。

git包分为两部分:包本身_(.pack)_和索引_(.idx)_。索引非常小,包含包中所有对象的列表。因此,在生成远程备份时,我们不必从远程服务器获得包文件的副本:本地端只需下载服务器索引文件的副本,并将对象与生成新包时的对象进行比较,然后直接发送到服务器。

bup splitbup save-n选项是要创建的备份的名称,但实际上它是作为git分支实现的。因此,您可以做一些有趣的事情,比如使用git签出一个特定的分支,并接收一组与您拆分的文件相对应的区块文件。

如果使用-b-t-c而不是-n,bup split将分别向标准输出一个blob列表、一个包含该blob列表的树或一个包含该树的提交。您可以使用它来构建自己的脚本,用这些值执行某些操作。

bup索引:

“bup index”遍历文件系统并更新文件(默认情况下,文件名为~/.bup/bupindex),以包含每个文件和目录的名称、属性以及可选的git SHA1(blob id)。

“bup save”相当于多次运行“bup split”,在索引中每个文件运行一次,然后合成一个包含所有结果对象的git树。除此之外,这使得“git diff”更加有用(与拆分tarball相比,tarball本质上是一个大的二进制blob)。然而,由于bup将大文件分割成更小的块,生成的树结构与git本身存储的_并不完全一致_。此外,“bup save”使用的树格式将来可能会更改,以支持存储文件所有权、更复杂的文件权限等。

如果文件以前是由“bup save”编写的,则其git blob/tree id存储在索引中。这使得“bup save”可以避免读取该文件以生成将来的增量备份,除非有很多文件发生了更改,它可以运行得更快。

这些离谱的玩意我们会修好的

我们非常欢迎您帮助解决这些问题或其他问题。如果你想帮忙,加入邮件列表(见下文)。

  • “bup save”和“bup restore”对元数据支持还不成熟。

    On the plus side, they actually do have support now, but it’s new, and not remotely as well tested as tar/rsync/whatever’s. However, you have to start somewhere, and as of 0.25, we think it’s ready for more general use. Please let us know if you have any trouble.

    Also, if any strip or graft-style options are specified to ‘bup save’, then no metadata will be written for the root directory. That’s obviously less than ideal.

  • bup is overly optimistic about mmap. Right now bup just assumes that it can mmap as large a block as it likes, and that mmap will never fail. Yeah, right… If nothing else, this has failed on 32-bit architectures (and 31-bit is even worse – looking at you, s390).

    To fix this, we might just implement a FakeMmap[1] class that uses normal file IO and handles all of the mmap methods[2] that bup actually calls. Then we’d swap in one of those whenever mmap fails.

    This would also require implementing some of the methods needed to support “[]“ array access, probably at a minimum getitem, setitem, and setslice [3].

    [1] http://comments.gmane.org/gmane.comp.sysutils.backup.bup/613 [2] http://docs.python.org/2/library/mmap.html [3] http://docs.python.org/2/reference/datamodel.html#emulating-container-types

  • ‘bup index’ is slower than it should be.

    It’s still rather fast: it can iterate through all the filenames on my 600,000 file filesystem in a few seconds. But it still needs to rewrite the entire index file just to add a single filename, which is pretty nasty; it should just leave the new files in a second “extra index” file or something.

  • bup could use inotify for really efficient incremental backups.

    You could even have your system doing “continuous” backups: whenever a file changes, we immediately send an image of it to the server. We could give the continuous-backup process a really low CPU and I/O priority so you wouldn’t even know it was running.

  • bup only has experimental support for pruning old backups.

    While you should now be able to drop old saves and branches with bup rm, and reclaim the space occupied by data that’s no longer needed by other backups with bup gc, these commands are experimental, and should be handled with great care. See the man pages for more information.

    Unless you want to help test the new commands, one possible workaround is to just start a new BUP_DIR occasionally, i.e. bup-2013, bup-2014…

  • bup has never been tested on anything but Linux, FreeBSD, NetBSD, OS X, and Windows+Cygwin.

    There’s nothing that makes it inherently non-portable, though, so that’s mostly a matter of someone putting in some effort. (For a “native” Windows port, the most annoying thing is the absence of ssh in a default Windows installation.)

  • bup needs better documentation.

    According to an article about bup in Linux Weekly News (https://lwn.net/Articles/380983/), “it’s a bit short on examples and a user guide would be nice.” Documentation is the sort of thing that will never be great unless someone from outside contributes it (since the developers can never remember which parts are hard to understand).

  • bup is “relatively speedy” and has “pretty good” compression.

    …according to the same LWN article. Clearly neither of those is good enough. We should have awe-inspiring speed and crazy-good compression. Must work on that. Writing more parts in C might help with the speed.

  • bup has no GUI.

    Actually, that’s not stupid, but you might consider it a limitation. See the “Related Projects” list for some possible options.

More Documentation

bup has an extensive set of man pages. Try using ‘bup help’ to get started, or use ‘bup help SUBCOMMAND’ for any bup subcommand (like split, join, index, save, etc.) to get details on that command.

For further technical details, please see ./DESIGN.

How you can help

bup is a work in progress and there are many ways it can still be improved. If you’d like to contribute patches, ideas, or bug reports, please join the bup mailing list:

You can find the mailing list archives here:

1
http://groups.google.com/group/bup-list

and you can subscribe by sending a message to:

1
bup-list+subscribe@googlegroups.com

You can also reach us via the #bup IRC channel at ircs://irc.libera.chat:6697/bup on the libera.chat network or via this web interface.

Please see ./HACKING for additional information, i.e. how to submit patches (hint - no pull requests), how we handle branches, etc.

Have fun,

Avery

下载

  1. 进入FFXIV TexTools 官网,单击 Download Zip
  2. 解压下载好的文件,如果不会可以参考这个
  3. 将解压出来的文件和文件夹移动到任何你希望的文件夹内。
  4. 双击 FFXIV_TexTools.exe 运行。

第一次运行

第一次运行需要选择语言和游戏运行目录。

  1. 第一次运行可能会弹框更新。我们单击 更新 。下载速度视网络情况而定。 更新更新中
  2. 更新后,会弹出这个框。我们选择 汉语(CHINESE)选择语言
  3. 弹框:未找到安装文件夹 。我们单击 OK未找到安装文件夹
  4. 如果你没有在安装FFXIV的时候选择安装到别的文件夹,那么它默认会被安装到[cci]C:\Program Files (x86)\上海数龙科技有限公司\最终幻想XIV[/cci],这样,你就需要选择这个文件夹:[cci]C:\Program Files (x86)\上海数龙科技有限公司\最终幻想XIV\game\sqpack\ffxiv[/cci]。我的FFXIV安装在了D盘,所以我选择[cci]D:\Program Files (x86)\上海数龙科技有限公司\最终幻想XIV\game\sqpack\ffxiv[/cci]。 选择文件夹

如此,FFXIV TexTools就顺利启动了。 主界面

备份材质索引

备份材质索引是一件很重要的事,如果你安装Mod把材质索引搞坏了,最严重的后果就是重新下载客户端

  1. 在FFXIV TexTools的左上角,单击 帮助 ,选择 备份索引文件备份索引文件
  2. 单击 Yes确认备份备份完成

更改DX环境

单击右上角的 DX:9 ,让它变成 DX:11 就行了 DX:9DX:11

安装第一个MOD

相信装这个的人大部分都是没有自己制作mod的能力,所以我们直接开始装现成的Mod。

  1. 单击界面右上角的 Mod仓库 Mod仓库
  2. 在弹出的菜单中选择一个Mod站,然后单击。这里我们以 XIV Mod Archive 为示范,单击 XIV Mod ArchiveXIV Mod Archive
  3. 在弹出的网页中选择一个你想要的Mod,然后单击。这里以这个Mod为例。 Rideable Gaius
  4. 单击右上角的 Download Mod 下载这个Mod。有的Mod点击这个按钮会跳转到Patreon,这种应该是要付费才能下载……如果下载不了,说明你得科学上网
  5. 来到FFXIV TexTools,单击左上角的 Mods ,选择 导入Mod包导入Mod包
  6. 选择刚才下载的Mod 选择Mod
  7. 单击 导入MOD包导入Mod包导入成功
  8. 单击左上角的 Mods ,依次单击 批处理启用所有Mod启用所有Mod
  9. 选择 Yes确认启用所有Mod启用成功 这样,第一个Mod就安装好了,赶紧进入游戏试试看吧~