何の記事?
本記事は、AmazonLinux2でのMinecraftDiscordChatSyncの利用手順です。
MinecraftDiscordChatSyncとは
Minecraft上のチャットやイベントをDiscordチャンネル上で表示したり、逆にDiscord上のチャットをMinecraft上に表示できます。
Nodejsとか触ったことがない自分はいくらか時間をかけてしまった箇所があるので共有のために記事に残します。
環境
Amazon Linux 2
arn
t4g.small
手順
1. gitをインストール
sudo yum install git
2. Minecraftのインストールディレクトリで以下を実行する。
git clone https://github.com/Gakuto1112/MinecraftDiscordChatSync.git
3. 公式手順に則ってnvmをインストールします。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
. ~/.nvm/nvm.sh
パスを通す必要があるので、各自で実施。
4. nvmをインストールします。互換性の関係で16を指定する必要があります。
nvm install 16
5.npm installを実行しようとすると・・・・
npm install
うわあああああああああああああああああああああ
npm notice
npm notice New major version of npm available! 8.19.4 -> 9.6.7
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.6.7
npm notice Run npm install -g npm@9.6.7 to update!
npm notice
npm ERR! code 1
npm ERR! path /home/ec2-user/minecraft/MinecraftDiscordChatSync/node_modules/iconv
npm ERR! command failed
npm ERR! command sh -c -- node-gyp rebuild
npm ERR! make: Entering directory `/home/ec2-user/minecraft/MinecraftDiscordChatSync/node_modules/iconv/build'
npm ERR! CC(target) Release/obj.target/iconv/binding.o
npm ERR! make: Leaving directory `/home/ec2-user/minecraft/MinecraftDiscordChatSync/node_modules/iconv/build'
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@9.1.0
npm ERR! gyp info using node@16.20.0 | linux | arm64
npm ERR! gyp info find Python using Python version 3.7.16 found at "/usr/bin/python3"
npm ERR! gyp http GET https://nodejs.org/download/release/v16.20.0/node-v16.20.0-headers.tar.gz
npm ERR! gyp http 200 https://nodejs.org/download/release/v16.20.0/node-v16.20.0-headers.tar.gz
npm ERR! gyp http GET https://nodejs.org/download/release/v16.20.0/SHASUMS256.txt
npm ERR! gyp http 200 https://nodejs.org/download/release/v16.20.0/SHASUMS256.txt
npm ERR! gyp info spawn /usr/bin/python3
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args '/home/ec2-user/.nvm/versions/node/v16.20.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args 'binding.gyp',
npm ERR! gyp info spawn args '-f',
npm ERR! gyp info spawn args 'make',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/home/ec2-user/minecraft/MinecraftDiscordChatSync/node_modules/iconv/build/config.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/home/ec2-user/.nvm/versions/node/v16.20.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/home/ec2-user/.cache/node-gyp/16.20.0/include/node/common.gypi',
npm ERR! gyp info spawn args '-Dlibrary=shared_library',
npm ERR! gyp info spawn args '-Dvisibility=default',
npm ERR! gyp info spawn args '-Dnode_root_dir=/home/ec2-user/.cache/node-gyp/16.20.0',
npm ERR! gyp info spawn args '-Dnode_gyp_dir=/home/ec2-user/.nvm/versions/node/v16.20.0/lib/node_modules/npm/node_modules/node-gyp',
npm ERR! gyp info spawn args '-Dnode_lib_file=/home/ec2-user/.cache/node-gyp/16.20.0/<(target_arch)/node.lib',
npm ERR! gyp info spawn args '-Dmodule_root_dir=/home/ec2-user/minecraft/MinecraftDiscordChatSync/node_modules/iconv',
npm ERR! gyp info spawn args '-Dnode_engine=v8',
npm ERR! gyp info spawn args '--depth=.',
npm ERR! gyp info spawn args '--no-parallel',
npm ERR! gyp info spawn args '--generator-output',
npm ERR! gyp info spawn args 'build',
npm ERR! gyp info spawn args '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp info spawn make
npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
npm ERR! make: cc: Command not found
npm ERR! make: *** [Release/obj.target/iconv/binding.o] Error 127
npm ERR! gyp ERR! build error
npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2
npm ERR! gyp ERR! stack at ChildProcess.onExit (/home/ec2-user/.nvm/versions/node/v16.20.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:201:23)
npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:513:28)
npm ERR! gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:293:12)
npm ERR! gyp ERR! System Linux 5.10.179-166.674.amzn2.aarch64
npm ERR! gyp ERR! command "/home/ec2-user/.nvm/versions/node/v16.20.0/bin/node" "/home/ec2-user/.nvm/versions/node/v16.20.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd /home/ec2-user/minecraft/MinecraftDiscordChatSync/node_modules/iconv
npm ERR! gyp ERR! node -v v16.20.0
npm ERR! gyp ERR! node-gyp -v v9.1.0
npm ERR! gyp ERR! not ok
npm ERR! A complete log of this run can be found in:
npm ERR! /home/ec2-user/.npm/_logs/2023-05-25T13_34_24_785Z-debug-0.log
6. c++のコンパイラが無いことが原因らしいので、インストール
sudo yum install gcc-c++
7. ts-nodeもインストールしないと怒られる。ちなみにグローバルオプションつけないと失敗する。何故かは知らん。
npm install -g ts-node
8. 二度目の正直・・・
npm install
よっしゃ!あとは手順通りに設定するだけ。
ts-node MinecraftDiscordChatSync.ts
プラグインを読み込んでいます...
読み込まれたプラグイン
- [正常] -> Advancements.ts
- [正常] -> Death.ts
- [正常] -> DiscordMessage.ts
- [正常] -> PlayerJoin.ts
- [正常] -> PlayerLeave.ts
- [正常] -> PlayerMessage.ts
- [正常] -> RconStart.ts
- [正常] -> ServerStart.ts
- [正常] -> ServerStop.ts
全てのプラグインが正常に読み込まれました。
設定ファイル検証をしています...
設定ファイル「Settings.json」が存在しません。
「Settings.json」を生成しました。ファイルを開いて必要な情報を入力して下さい。
まとめ
以上がAmazonLinux2でMinecraftDiscordChatSyncを使う方法です。
nodejs知ってる人なら詰まることはないでしょうけど、何も知らない人は結構詰まるんじゃ・・・?
おまけ
自動起動シェル
実行シェルを作ります。実行ユーザーはec2-userの想定。
sudo vi /home/ec2-user/discord_script.sh
シェル内容(stopは予備で置いてあるだけ)
#!/bin/bash
start() {
if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi
cd /home/ec2-user/minecraft/MinecraftDiscordChatSync
screen -AmdS discord ts-node MinecraftDiscordChatSync.ts -r
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
esac
ここでbash_profileの読み込みしないとシェルが実行できないんだけど、詳しいこと書こうとすると長くなっちゃうから・・・ここ読んで・・・
要はコマンドラインから実行するときとcron/systemctlから実行するときとでいろいろ設定が違うって話・・・
もう一つ、サービスユニットを設定します。
sudo vi /etc/systemd/system/discord.service
内容はこう!
[Unit]
Description=Discord
After=network.target local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
User=ec2-user
WorkingDirectory=/home/ec2-user/
ExecStart=/home/ec2-user/discord_script.sh start
[Install]
WantedBy=multi-user.target
systemctlの有効化を行えば、自動起動設定は完了です。
sudo systemctl enable discord.service
sudo systemctl daemon-reload
次回起動時に自動で立ち上がってくれます。Minecraft側も自動起動しておけば、運用量がグッと減りますね!