赞
踩
要把 MC 服务器从 Windows 改成 Linux,搞了这么久,大大小小的问题,尤其是那个端口明明开了但是连不上的问题,真是服了……
RetuEase
然后就出现问题了,无论是 FTP 还是 SFTP 协议都根本连不上去,被 Windows 防火墙给挡了。但是真懒得设置 Windows 防火墙,于是上传到百度网盘再下载到工作机了(Windows 好感度-1)。
- # 查看所有用户
- cat /etc/passwd
-
- # 仅查看用户名
- cut -d: -f1 /etc/passwd
本来 Ubuntu 乱七八糟的自带用户就多,我用的是腾讯云,装 Ubuntu 系统还给我额外建一堆奇奇怪怪的用户,什么 ubuntu、lighthouse 就不说了,还有很多其他腾讯云版 Ubuntu 22.0 特色用户,看着就很不舒服……赶紧自己也建一个用户。
- # 创建新用户
- sudo useradd -m retuease
-
- # 设置密码
- sudo passwd retuease
-
- # 给予"sudo"权限
- sudo usermod -aG sudo retuease
在腾讯云,root 用户的初始密码你根本不知道,要在腾讯云的面板重置密码。
可以用 Termius,集 Linux SSH 连接和 SFTP 连接于一身,我试着用 Windows 自带的 mstsc (Microsoft Terminal Service Client),首先要在服务器上装 xrdp (X Remote Desktop Protocol) 。
- # 我一开始还以为腾讯源不行,结果是忘了 update
- sudo apt update
-
- # 用 apt 安装 xrdp
- sudo apt get xrdp
-
- # 启动 xrdp 系统服务
- sudo systemctl start xrdp
-
- # 启用(自动启动) xrdp 系统服务
- sudo systemctl enable xrdp
貌似因为 xrdp 需要系统提供的服务行使功能,所以需要用 systemctl(系统控制指令)。
etc 文件夹下全是配置文件,包括用户配置文件放在 passwd 文件夹,apt 自身的配置文件放在 apt 文件夹,还有(系统级的)bash shell 的配置文件放在 bash.bashrc、profile 等文件夹。
然后就可以用 mstsc 远程访问了(腾讯云已默认开启 3389 端口),结果没装 Ubuntu Desktop 导致进去了还是命令行……那还不如 Termius 呢。
我通过 Termius 的 SFTP 连接功能把服务端压缩包上传到了服务器,放在 ~/mc_server 下了。听信了 browei 的谣言(他说 ubuntu 自带 zip,但实际上它自带了 python3.10、git,都没自带 zip,也没自带 java),我当时压缩用的 zip 格式,不过 ubuntu 鬼使神差地有 unzip(腾讯云的 Ubuntu 22.0.4 镜像有,微软应用商店的 Ubuntu 22.0.4 镜像就没有),于是解压~
- # 如果想要解压到 target 文件夹,加上 "-d target/" 即可
- unzip fabric-1.20.1-0.xx.x.zip
非常顺利。
Java 不同版本的包名简直乱七八糟,看的闹心,刚好 chatGPT 安利了一个包版本管理器(可以管理包括 jdk 在内的一些包的版本)SDKMAN,于是欣然接受。
- # 按 bash 执行网页内容,但是我在工作机的 WSL2 Ubuntu 上执行不了,不知为何
- curl -s "https://get.sdkman.io" | bash
-
- # 下面这条命令在上面装好后会提示你(只为本用户安装是要这样,不过挺有意思的,
- # 比如配置文件为 "$HOME/.sdkman/etc/config")
- source "$HOME/.sdkman/bin/sdkman-init.sh"
-
- # 浏览 Java 版本(还有不同供应商的版本)
- sdk list java
-
- # 安装特定的 Java 版本(我选的是 Java-20.0.1 亚马逊版)
- sdk install java 20.0.1-amzn
-
- # 装好后会成为默认 Java 版本,如果要切换默认可以用下面这条
- sdk default java 20.0.1-amzn
-
- # 临时切换
- sdk use java 20.0.1-amzn
这时我去洗澡了,browei 想要用 ufw 给自己开端口,想多了,这个是一个和腾讯云独立的防火墙,当他启用的那一刻,除了 ufw 开放了的端口就都被 block 了。
但是我当时并不知道,但是各种端口包括 22 号端口都连不上了,这导致我无法通过 SSH 远程登录服务器了,而腾讯云的 22 号端口始终开着,browei 对自己开了 ufw 也缄口不言,于是只好各种测试。
- # 查看 socket 开放情况-方案1
- netstat -anlp|grep sshd
-
- # 查看 socket 开放情况-方案2
- ss -tuln
-
- # 查看22端口的打开情况
- lsof -i:22
-
- # 查看 SSH 服务开放情况
- service sshd status
但是服务器的 22 号端口始终显示开放,SSH 服务也一直是 active。最后终于意识到是 ufw 的问题,于是把 ufw 关掉了
- # 查看 ufw 状态
- sudo ufw status
-
- # 禁用 ufw
- sudo ufw disable
我的理解:腾讯云的防火墙和服务器的端口开闭是绑定在一起的,但是 ufw 是更内一层的防火墙,导致虽然腾讯云开放了但是 ufw 却挡住了端口访问请求。也就是防火墙套防火墙的问题……
万事俱备,mc 启动!
- # 使用 Java 运行 mc 服务端
- java -Xmx6G -jar fabric-server-mc.1.20.1-loader.0.14.23-launcher.0.11.2.jar
前台运行看起来没问题,群友 fufu 居然在开服的一瞬间就连进来了,我还要转后台呢!
在 browei 的指导下,执行以下指令:
- # -dm: 这意味着创建一个分离的 session 并且在后台运行
- # -S mc: 为这个 session 命名为 mc,这样以后就更容易地与其交互
- screen -dm -S mc java -Xmx6G -jar fabric-server-mc.1.20.1-loader.0.14.23-launcher.0.11.2.jar
-
- # 查看后台运行的名为 mc 的 session
- screen -r mc
使用 Ctrl+A+D 即可返回。
最后写成 Bash 脚本格式,加一条 echo,然后运行脚本。
- # 创建 bash 脚本文件
- touch run_server.sh
-
- # 编辑脚本
- vim run_server.sh
-
- # 运行脚本
- bash run_server.sh
成功返回 echo,并测试客户端可连接上(记得开放 25565 端口),大功告成!
【记录完毕】
2023.10.23 于荔园6栋1104C
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。