sashimi4’s diary

日々の雑多なメモを書きます

ネットワーク越しのADB接続をスクリプト化

業務でTOUGHPADに関するアプリ開発を行っているのですが、MicroUSBコネクタの接触不良が激しく… 端末をちょっと触っただけでも接続が瞬断してプロセスからデバッガがデタッチされたりと、仕事にならないためADBをWi-Fi経由で接続しています。

常時ADBを無線で接続するとなると、コマンドを打つのが段々と面倒になってきたのでスクリプトを書きました。

スクリプト

一応これを毎日使っています。

$ cat ~/adb_ota.sh # パスは任意で
#!/bin/bash
# adb kill-server
device_ip=`adb shell ip a | grep wlan0 | grep -oE '([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})' | head -n 1`
adb tcpip 5555
adb connect ${device_ip}
adb devices

MacOSにて動確済

適当に Over The Airota です。

使い方

$ adb devices
List of devices attached
HOGEHOGE    device

現在の状態。 USBで接続されている端末が確認できる。

$ ~/adb_ota.sh
restarting in TCP mode port: 5555
connected to 172.xx.xx.233:5555
List of devices attached
172.xx.xx.233:5555 device

スクリプト実行。 無事にWi-Fi経由で接続がされた。

以上。

TOUGHPAD(FZ-N1/FZ-X1)のバーコードリーダを制御する

最近はこの類を"スマートターミナル"と呼ぶのでしょうか? Panasonic製の頑丈端末TOUGHPAD(FZ-N1/FZ-X1)のバーコードリーダを制御してみた記録を残したいと思います。 TOUGHPAD SDK内にサンプルコードはあるのですが、 Fragment で書かれているので Activity に落としてみました。

Qiitaに書こうか迷いましたが、限りなく需要がなさそうなのでここに書くことにしました。

製品レビューっぽいことは行いません。

詳細はPanasonicの公式ページを参照ください。 panasonic.biz panasonic.biz

必要なもの

実装手順

Android Studioで新規プロジェクトを作成

手順は省略。

TOUGHPADライブラリ読み込み

TOUGHPAD SDKをダウンロードし、 Toughpad.jar をプロジェクトの libs (無ければ掘る)にコピー。 .exe で落ちてくるので、MacLinuxをお使いの際はなんとかしてWindowsで展開してください…。

app モジュールの方の build.gradle に下記記載があることを確認。無ければ追記。 (AndroidStudioのバージョンによっては自動記述されない時期があったため。)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ...

バーコード読み取りClass(Activity)を作成

TOUGHPAD SDK同梱のサンプルコードをそのまま Activity に落としたものです。

ダラダラと書いてありますが要約すると、

バーコードを読み取りたい画面( Activity )で BarcodeReadableActivity を継承すると、 onRead(BarcodeData barcodeData) {...} コールバックで読み取り値を受け取れるようになります。

ということです。

読み取り結果を受け取ってみる

レイアウト

コード

以上の実装で、簡単に読み取り値を受け取れます。 かなり雑ですが、こんな感じです。

サンプルコードを GitHubにあげています。

以上です。

マイクラマルチサーバーの入退室をSlackに通知する

もっと頑張ればLightweightになる気がしているんですが、妥協で運用しているのでなかなか手間がかかる方法になっています。
本記事の内容は非推奨とします。
新しく書いたこちらの記事をご参照ください。
sashimi4.hatenablog.com

どうも、おさしみです。 今回は、下記記事のおまけで、タイトルの通り、やっていきたいと思います。 sashimi4.hatenablog.com

※ 前回とは違い、もはやエンジニアでないと理解できない内容になっていると思います。 ご参考までに(強め)。

手順(ざっくり)

  • Rubyをインストール

2.3を使用します。 私はanyenvからのrbenvでインストールしました。

# ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
  • Guard(Ruby gem)をインストール
$ gem install guard-rspec --no-ri --no-doc
$ gem install guard-shell --no-ri --no-doc

と言った感じでインストールします。

  • Guardfileを設置

イクラのサーバーのログが溜まる場所と同ディレクトリに設置します。

$ cat  Guardfile
guard :shell do
  ll = ''
  watch(/latest.log/) {|m|
    # regexp joined|left|drown|slain
    ll = `tail -n 1 #{m[0]}`

    if ll.include?('joined') || ll.include?('left')
      message = ':white_check_mark: ' + ll.gsub(/(\r\n|\r|\n|\f)/,"") if ll.include?('joined')
      message = ':black_square_for_stop: ' + ll.gsub(/(\r\n|\r|\n|\f)/,"") if ll.include?('left')
      message = "[マイクラ鯖の通知だよ!] #{message}"
      channel = '#minecraft'
      username = 'Minecraft'
      icon = ':minecraft:'
      token = 'SLACK_INCOMING_WEBHOOK_TOKEN'

      cmd = %Q{curl -X POST --data-urlencode 'payload={"channel": \"#{channel}\", "username": \"#{username}\", "text": \"#{message}\", "icon_emoji": \"#{icon}\"}' https://hooks.slack.com/services/#{token}}

      `#{cmd}` unless message.nil?
    end
  }
end

こんな感じのファイルを設置します。

SLACK_INCOMING_WEBHOOK_TOKEN の部分は、ご自分のSlackチームでIncoming-Webhookを追加・設定し、トークンで置き換えてください。

  • Guardを実行
$ guard -p -l 5

といった感じで実行します。 screenセッション上などで実行すると良いと思います。

以上で設定が完了するはずです。

結果

イクラへjoin/leftすると、このように通知がされるはずです! f:id:sashimi4:20171116230353p:plain

余談

Guardはファイルを監視し、差分を検知した時に任意のスクリプトを実行できます。 通常は、RSpecなどのテストを駆動するために用いるんですが…こういう使い方もできなくはないです。 まあこのためだけにRubyやらなにやらをセットアップするのは微妙ですね…。 CRONでもwatchでもなんでも良いんですけどね…。

はい、ざっくりですが、以上です。 何かあればコメントで。批判は頂けません><。

コピペ一発で!さくらのVPSでマイクラマルチサーバー

追記 : 公式からJava版 統合版 それぞれスクリプトが公開されました。本記事の内容は非推奨とします。

Javavps-news.sakura.ad.jp 統合版 vps-news.sakura.ad.jp


はじめまして、おさしみです。 今回は、 さくらのVPSでマインクラフトのマルチサーバーを簡単に構築する方法を紹介したいと思います。

注意

  • 本ページ内容はMojang社の公式情報ではありません。 本ページ内容の手順を用いたことによって問題や損害が発生しても責任を負いかねます。 予めご了承ください。

  • 今回はver 1.12.1を利用しています。 気が向いたら本ページ内容・スクリプトも更新したいと思います。

関連知識

今回はコスパの面から、さくらのVPSを用います。下記の記事を読んでおくと、より理解が深まるかと思います。 参考までに。

作業手順

1. さくらのVPSの申込み

まずはじめに、さくらのVPSの申し込みが済んでいることが必要です。 上にも上げた、こちらの記事が参考になるかと思います。

ちなみにさくらのVPSでは、後からスペックをアップすることができるスケールアップ機能が提供されているので、 低価格なプランからのスモールスタートすると良いと思います。(「もたつく。処理落ちする。」等あれば後からスペックアップすれば良い)

2. スタートアップスクリプトの登録

さくらのVPSでは、最近スタートアップスクリプト機能がリリースされました。 今回は、このスタートアップスクリプト機能を利用して "簡単に" マインクラフトサーバーを構築します。

スタートアップスクリプト機能とは、サーバー作成完了後の初回起動時に任意スクリプトを実行し、 パッケージのインストールや各種設定作業の自動化などを簡単に実現できる機能です。

まずはマイクラマルチサーバーを起動するためのカスタムスクリプトを登録します。 3分クッキングですが、以下のスクリプトをキャプチャのようにまるまるコピー&ペーストします。

「なんて書いてあるかわからないけど、とにかくマイクラサーバーが起動すればいいんだ!」という方は、おまじないとでも思ってください…。←

なお、このスクリプトを使用する前に必ず次の許諾に目を通し、同意してください。https://account.mojang.com/documents/minecraft_eula

##############################
# It works on Ubuntu 16.04
# Agree to the license before using this script : https://account.mojang.com/documents/minecraft_eula
##############################

# Open serving port(25565) with SAKURA VPS Ubuntu16.04 default iptables config
cat > "/etc/iptables/iptables.rules" <<EOF
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
EOF
iptables-restore < /etc/iptables/iptables.rules

apt -y update

# Install Java for running Minecraft server
apt -y install openjdk-8-jdk
# Screen as background task executor
apt -y install screen

# Make server dir
mkdir /home/ubuntu/minecraft/
cd /home/ubuntu/minecraft/

wget -O minecraft_server.jar https://s3.amazonaws.com/Minecraft.Download/versions/1.12.1/minecraft_server.1.12.1.jar

# Agree to the license
cat <<EOF > eula.txt
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#$(date)
eula=true
EOF

# Generate a server start-up script
cat <<EOF > start_minecraft_server.sh
#!/bin/bash
screen -AdmS minecraft-server /bin/bash -lc 'cd /home/ubuntu/minecraft/ && java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui'
EOF

chmod +x start_minecraft_server.sh

# Set to start automatically at reboot
cat <<EOF > /var/spool/cron/crontabs/ubuntu
@reboot    /bin/bash -lc /home/ubuntu/minecraft/start_minecraft_server.sh 2>&1 >> /home/ubuntu/minecraft/cron.log
EOF
chown ubuntu /var/spool/cron/crontabs/ubuntu
chmod 600 /var/spool/cron/crontabs/ubuntu

chown -R ubuntu .**

# Reboot to trigger CRON
reboot

↓コピー&ペースト↓

コントロールパネルからスクリプトを追加。 f:id:sashimi4:20170808010955p:plain

コピー&ペーストで入力。 f:id:sashimi4:20170808011006p:plain 保存を押して完了です。

スクリプト内容について

このスクリプトは、サーバー(OS)が再起動するたびに自動でマイクラサーバーが立ち上がるようになっています。 不調時や、マイクラサーバーが落ちてしまった時は、サーバー(OS)を再起動するだけで自動で立ち上がります。

イクラサーバーは screen によってバックグラウンドで動作しています。 マイクラサーバーの設定を行う方法は、後述の マイクラサーバーの設定を変更する方法 を確認してください。

3. OSの再インストール

続いて、先程追加したスクリプトを実行するためにOSを再インストールします。

メニューから"OSインストール"を選んで、 f:id:sashimi4:20170808012415p:plain

ダイアログで"標準OS"を選択。 f:id:sashimi4:20170808012432p:plain

各種項目を入力します。 f:id:sashimi4:20170808012453p:plain

  • 名前 : お好みの名前をどうぞ
  • パスワード : 簡易なものではなく、推測されにくいものを設定してください。※忘れないように注意してください

入力内容が間違っていないかを確認し、実行ボタンを押します。 f:id:sashimi4:20170808012538p:plain

インストール完了を待ちます。 コントロールパネルのマークが"起動中"になればインストール完了です。 (停止した状態でインストール実行した場合は、電源をONにしてください。) f:id:sashimi4:20170808012554p:plain

動作確認

実際に繋いでみます。 コントロールパネルに表示されているアドレスを接続先として入力します。 f:id:sashimi4:20170808012644p:plain ↓入力↓ f:id:sashimi4:20170808013309p:plain ↓接続↓ f:id:sashimi4:20170808013323p:plain 無事接続されました!

おまけ

ちょうど目の前に村があったので、seed値を公開しておこうと思います。

/seed
[00:16:22] [Server thread/INFO]: Seed: 5456644412029101600

イクラサーバーの設定を変更する方法

設定ファイルを書き換える

まず、シリアルコンソールにログインします。

vi minecraft/server.properties

次に、このコマンドを実行すると、VIというエディタで設定ファイルが開かれます。 VIの操作は特殊なので、こちら等を参考に、任意の項目を書き換えてください。

イクラのサーバーコマンドから設定を変更する

今回紹介したスクリプトでは、サーバーをバックグラウンドで動かすために screen というツールを利用しています。 こちらもシリアルコンソールにログインして作業を行います。 サーバーの設定を変更するために下記のコマンドを実行して、既に起動しているscreenのセッションに入り(attachし)ます。

ubuntu@***-***-*****:~$ screen -r minecraft-server
[16:51:40] [Server thread/INFO]: Default game type: SURVIVAL
[16:51:40] [Server thread/INFO]: Generating keypair
[16:51:40] [Server thread/INFO]: Starting Minecraft server on *:25565
[16:51:40] [Server thread/INFO]: Using epoll channel type
[16:51:40] [Server thread/INFO]: Preparing level "world"
[16:51:41] [Server thread/INFO]: Loaded 488 advancements
[16:51:41] [Server thread/INFO]: Preparing start region for level 0
[16:51:43] [Server thread/INFO]: Preparing spawn area: 0%
[16:51:44] [Server thread/INFO]: Preparing spawn area: 42%
[16:51:45] [Server thread/INFO]: Done (4.456s)! For help, type "help" or "?"

attachすると、実行中のマイクラサーバーログが表示されます。

あとは通常どおり、 / でマイクラのコマンドを実行します。

/help
[16:54:45] [Server thread/INFO]: --- Showing help page 1 of 10 (/help <page>) ---
[16:54:45] [Server thread/INFO]: /advancement <grant|revoke|test> <player>
[16:54:45] [Server thread/INFO]: /ban <name> [reason ...]
[16:54:45] [Server thread/INFO]: /ban-ip <address|name> [reason ...]
[16:54:45] [Server thread/INFO]: /banlist [ips|players]
[16:54:45] [Server thread/INFO]: /blockdata <x> <y> <z> <dataTag>
[16:54:45] [Server thread/INFO]: /clear [player] [item] [data] [maxCount] [dataTag]
[16:54:45] [Server thread/INFO]: /clone <x1> <y1> <z1> <x2> <y2> <z2> <x> <y> <z> [maskMode] [cloneMode]
[16:54:45] [Server thread/INFO]: Tip: Use the <tab> key while typing a command to auto-complete the command or its arguments

/op sashimi3
[16:55:35] [Server thread/INFO]: Opped sashimi3

/banlist
[16:54:45] [Server thread/INFO]: There are 0 total banned players:
[16:54:45] [Server thread/INFO]:

設定が済んだら、 Ctrl + A キーを押した後に一旦離してから、 D キーを押すと離れることができます。

バージョンアップデート方法

サーバー実行ファイルのダウンロードページにアクセスし、ダウンロードリンクをコピーします。 https://minecraft.net/ja/download/server f:id:sashimi4:20170810162333p:plain

次に、シリアルコンソールにログインし、下記のように入力して実行します。

cd /home/ubuntu/minecraft && wget -O minecraft_server.jar [コピーしたダウンロードリンク]
ubuntu@xxx-xxx-xxxxx:~$ cd /home/ubuntu/minecraft && wget -O minecraft_server.jar https://s3.amazonaws.com/Minecraft.Download/versions/1.12/minecraft_server.1.12.jar
--20xx-xx-xx xx:xx:xx--  https://s3.amazonaws.com/Minecraft.Download/versions/1.12/minecraft_server.1.12.jar
Resolving s3.amazonaws.com (s3.amazonaws.com)... xx.xxx.xx.xx
Connecting to s3.amazonaws.com (s3.amazonaws.com)|xx.xxx.xx.xx|:xxx... connected
.
HTTP request sent, awaiting response... 200 OK
Length: xxxxxxxx (xxM) [application/octet-stream]
Saving to: ‘minecraft_server.jar’

minecraft_server.ja 100%[===================>]  xx.x0M  x.xxMB/s    in x.xs

20xx-xx-xx xx:xx:xx (x.xx MB/s) - ‘minecraft_server.jar’ saved [xxxxxxxx/xxxxxxxx]

ubuntu@xxx-xxx-xxxxx:~/minecraft$

このように表示されたら、アップデートのダウンロードは成功です。 サーバー(OS)を再起動すれば新しいバージョンでマイクラサーバーが起動されます。

雑感

  • 主題はゲームっぽかったが、個人的にはシェルスクリプト等々で色々と悩み勉強になりました...(つかれた)
  • 普段からマイクラ鯖管しているので、移行先作ったりとか楽になる〜
  • 普段からヘビーに使ってるだけあってステマっぽくなってしまったが、他の業者のVPS/クラウドにも対応できたらしようと思います。
  • イクラたーのしー!!!

  • スクリプトに関する補足説明と、マイクラサーバーの設定変更手順を後ほど追記しようと思います。(ゲームモード変更など)