Ubuntu 22.04 で OpenSSL 1.1 が無くて Minecraft Bedrock Server が動かない対処
$ sudo curl -o libssl.deb -k -L http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1l-1ubuntu1.3_amd64.deb $ sudo dpkg -i libssl.deb
参考: github.com
Python で標準入力を取ると IPython の embed() とか pdb が動かない件
とりあえず解決方法だけ書く。
また一つ新しいジャンクフードを吐き出してインターネットを汚してごめんなさい。
if __name__ == '__main__': stdin = sys.stdin.read() # /dev/tty でも環境によっては動くがDocker上などは /dev/tty がないため /dev/stdin とするのが無難だと思う. # sys.stdin = open('/dev/tty') sys.stdin = open('/dev/stdin') dispatch_something(stdin)
Minecraft Java サーバーのMOTDに文字化けさせずに日本語を入れる
MOTD は Message Of The Day の略ですが, ゲームサーバではサーバ名の表示欄として利用されることが多いですね. Minecraft Java サーバーの MOTD は, マルチバイト文字を入力してサーバーを起動すると設定ファイルが勝手にUnicodeエスケープされるようですが, どうも日本語だとうまくエンコードできず文字化けしてしまいます. バグでしょうかね.
なので自分でUnicodeエスケープする方法を示しておきます. PHPで書かれたエンコードツールも存在していますが, OSにバンドルされている python を使うのがスマートだと思います.
以下のコマンドをシェルにコピペすれば設定できると思います.
MOTD='ここにあなたの好きな文字列を入れます。シングルクォートは残してください。' # これは例です MOTD='俺のサーバー' # ディストリビューションによってはpythonのバージョンが異なるので有効な方を利用します PYTHON=$(command -v python3 || command -v python) # デフォルトの MOTD を削除します # 設定ファイルのパスは環境により異なります! sed -i "/^motd.*$/d" /opt/minecraft/server.properties # MOTD をエスケープします MOTD_ESCAPED=$($PYTHON -c "print('$MOTD'.encode('unicode-escape').decode())") # 設定ファイルで MOTD を設定します # sed を使うと記号が解釈されてしまう場合があるので echo で挿入します # 設定ファイルのパスは環境により異なります! echo motd=$MOTD_ESCAPED >> /opt/minecraft/server.properties # あとはサーバーを再起動します(環境によりコマンドは異なります)
以上.
Ruby で今年の進捗率を計算する
% irb irb(main):001:0> require 'active_support/time' => true irb(main):002:0> current = Time.now irb(main):003:0> beginning_of_year = current.beginning_of_year.to_f irb(main):004:0> end_of_year = current.end_of_year.to_f irb(main):005:0> irb(main):006:0> progress = current.to_f - beginning_of_year irb(main):007:0> whole = end_of_year - beginning_of_year irb(main):008:0> progress_percentage = progress / whole * 100 irb(main):009:0> puts progress_percentage 49.65312263257749 => nil
まだ50%行ってないですね。
irb(main):010:0> current = Time.now.tomorrow irb(main):011:0> beginning_of_year = current.beginning_of_year.to_f irb(main):012:0> end_of_year = current.end_of_year.to_f irb(main):013:0> irb(main):014:0> progress = current.to_f - beginning_of_year irb(main):015:0> whole = end_of_year - beginning_of_year irb(main):016:0> progress_percentage = progress / whole * 100 irb(main):017:0> progress_percentage => 49.926780593177945
24時間後も50%未満じゃん、、。
irb(main):034:0> Time.at(beginning_of_year + whole/2) => 2020-07-02 00:00:00 +0900
50%を迎えるのは 7/2 0時ジャストっぽいですね。
残りも頑張ろー。
さくらのVPSのMinecraftサーバーの設定方法・データ転送方法(Linux初心者向け)
公式手順ではSCPコマンドなどCUIを利用する方法しか記載されていません。
「さくらのGaming script:Minecraft」について – さくらのVPSニュース さくらのGaming script:Minecraft Server(統合版) – さくらのVPSニュース
そこで、今回は初心者向けにSFTPでファイル転送する方法を紹介しようと思います。
前提条件
さくらのVPSが契約中で、Minecraft(Java版 または 統合版)のスクリプトでサーバーを構築していること。
手順
WinSCPのインストール
SFTPというプロトコルで接続するために、WinSCP というソフトウェアをインストールします。 下記ダウンロードページからセットアップファイルをダンロードし、インストールを行います。
WinSCP で さくらのVPSへ接続
WinSCP を起動すると下図のようなウィンドウが表示されます。
セッション 欄に下記の項目を下図のように入力し、ログイン ボタンを押します。
転送プロトコル: SFTP
ホスト名: ... (VPSのIPアドレスを入力します)
ポート番号: 22
ユーザ名: ubuntu (ローマ字読みで ウブンツ になります。間違えないように。)
パスワード: ******** (OSインストール時に 新しい管理ユーザのパスワード として設定したパスワードです。)
下図のような警告が出たら、 "はい" を押して閉じます。
ログインに成功すると下図のようなウィンドウが表示されます。 左側がパソコン側、右側がサーバー側のファイルを表示しています。
Minecraftのファイルがあるディレクトリに移動するために、右側の
のアイコンを2回、ダブルクリッして、 "/" ディレクトリまで移動します。
"/" ディレクトリに移動すると下図のような表示になります。
続いて、 "opt" 、 "minecraft" の順にダブルクリックして、 "/opt/minecraft" ディレクトリに移動します。 移動すると下図のように設定ファイル一覧が表示されます。(※ 画像はJava版の場合の例です)
設定ファイルの書き換え
サーバー設定ファイルを変更するには、対象のファイルをダブルクリックします。
下図のようなエディターが表示されるので、設定を書き換え、 Ctrl+Sで 上書き保存してください。設定の変更を反映するには、 さくらのVPS のコントロールパネルからサーバーを再起動してください。
※ 設定に誤りがある場合等はゲームサーバーの起動に失敗する場合があります。間違いがないよう、よく確認してください。
ワールドの転送
既にPC上にあるワールドデータをVPS上に上げたい場合は、 WinSCP の右側の枠に PC側のフォルダーからドラッグアンドドロップでコピーします。
PC側のMinecraftセーブデータが保存されているディレクトリは下記ページを確認してください。
Java版の場合は、VPS側の world
ディレクトリを予め削除しておき、PC側から world
ディレクトリごとコピーしてください。
統合版の場合は、VPS側の worlds
ディレクトリ内にコピーを行ってください。
なお、アップロードするワールド名が Bedrock level
の場合は、事前にVPS側のワールドを削除しておいてください。
アップロードしたワールド名が Bedrock level
と異なる場合は、 server.properties
で起動するワールド名を修正する必要があります。先ほどと同様に、設定ファイルをダブルクリックしてエディタを開き、 level-name=Bedrock level
の部分を任意のワールド名に変更してください。
設定の変更を反映するには同様に、 さくらのVPS のコントロールパネルからサーバーを再起動してください。
以上が初心者の方でもわかる簡易的な設定変更・ワールドデータ転送手順 の紹介でした。
Nginx の Fancy Index を最も手っ取り早く使う方法
Fancy Index について: Fancy Index | NGINX
自分で Nginx のソースと当該モジュールを持ってくる必要があると思いがちだが、実は既にバンドルされているパッケージが存在する。
パッケージ名は nginx-extras 、apt (apt-get) でそのままインストール可能だ。
Debian -- sid の nginx-extras パッケージに関する詳細
Ubuntu – xenial の nginx-extras パッケージに関する詳細
確認していないが、RHEL系でも同様のパッケージが提供されていると思われる。
Fancy Index の設定
既に nginx が導入済みの場合でも、 apt -y install nginx-extras
でそのまま導入することができる。
location コンテキスト内に下記のように記載するだけ。なお autoindex系の設定は削除して置く必要がある。
# cat /etc/nginx/conf.d/foo.conf location /foo { # ... fancyindex on; # Enable fancy indexes. fancyindex_exact_size off; # Output human-readable file sizes. fancyindex_localtime on; # ... } # ...
systemctl reload nginx.service
で設定を再読み込みすれば、下図のようにFancyな表示が行われる。
おまけ
リンクが見ずらいので雑にスタイルを当ててみる。
# cat /usr/share/nginx/html/fancy_href.css a:-webkit-any-link { color: -webkit-link; cursor: pointer; text-decoration: underline; } a:-webkit-any-link:focus {text-decoration: underline; color: #f4ee41;} a:-webkit-any-link:hover {color: #e33;} td:hover { background-color: #FFEEFF; }
# cat /etc/nginx/conf.d/foo.conf server { # ... location /foo { # ... fancyindex_css_href /fancy_href.css; # ... } }
以上。
アパートの治安が悪いのでドアスコープに防犯カメラを構築した
いろいろあって隣人の愚行を録画するためにドアスコープに防犯カメラを自前構築しました。 いつか追い出したくなった時に管理会社に証拠として提出するために使おうと思います。
要件
- 動体検知で自動録画
- オンラインにバックアップ(マジの泥棒が来ちゃった時用)
- 音も欲しいけど一旦要らない
前提条件など
- Raspberry Piには固定IPが降るようにルータ側に設定が入っている
- Raspberry PiにはRaspbianがインストール済みである
- Raspberry Piにカメラモジュールが接続済みで、raspi-configからカメラが有効化されていること
準備したもの
- Raspberry Pi3 Model B https://www.amazon.co.jp/gp/product/B01CSFZ4JG/
- Raspberry Pi カメラモジュール https://www.amazon.co.jp/gp/product/B00KAAEBWI/
- 広角ドアスコープ(200度)
- USB ACアダプタ(Raspberry Piが動くだけの電源容量があるもの)
- Micro USB Type-Bケーブル(Raspberry Pi給電用)
広角ドアスコープは是非おすすめしたい。カメラをつけなかったとしても是非オススメしたい。マジで真横まで見える。 ただし、自分で取り付ける場合は締めが甘いと外から外されて鍵開け工具突っ込まれたりするので注意してください。
やったこと
物理設置
ドアスコープ内にレンズが入るように Raspberry Pi3 と カメラモジュールを設置した。
色々見苦しいがご勘弁を。 水道屋さんのマグネットシートがちょうど溜まっていたので、それを貼付した上から養生することによってカメラの脱着可能を実現した()。
motion周りの設定
最終的な構成は、
motion で動体検知録画 => inotifywait で録画ファイルの差分を検知し rsync でさくらのVPSに同期する
といった感じにした。
まずは必要なツールをインストール。
# apt -y install motion vim
motion の基本的な設定する。
/etc/motion/motion.conf
を編集。以下、自分でいじった記憶があるところを抜粋。
# Start in daemon (background) mode and release terminal (default: off) daemon on # Image width (pixels). Valid range: Camera dependent, default: 320 # ドアスコープなので適当に幅を絞る width 1080 # Image height (pixels). Valid range: Camera dependent, default: 240 height 1080 # Threshold for number of changed pixels in an image that # triggers motion detection (default: 1500) threshold 3000 # Container/Codec output videos # Valid values: mpeg4, msmpeg4, swf,flv, ffv1, mov, mp4, mkv, hevc ffmpeg_video_codec mp4 # Target base directory for pictures and films # Recommended to use absolute path. (Default: current working directory) target_dir /tmp/motion # Restrict stream connections to localhost only (default: on) stream_localhost off # Parameters to include on webcontrol. 0=none, 1=limited, 2=advanced, 3=restricted # Default: 0 (none) webcontrol_parms 2
/etc/default/motion
を編集
# set to 'yes' to enable the motion daemon start_motion_daemon=yes
motion を起動
# systemctl start motion && systemctl enable motion
ここまで来ると、 ブラウザでRaspberry Pi のIPアドレス:8080 / :8081 に行くと映像を見たり設定を確認できるようになっているはず。
眩しい問題
ドアスコープに突っ込んでいるが故、映像の殆どが黒くなっている。そのため、夜が明け日が昇ると明るさ調整がうまくいかず、映像がホワイトアウト(眩しくて何も見えない)してしまう事象が度々あった。(明るさ自動調整は設定で切っているはずなのに…) 再起動すると即座に改善されることがわかったので、しばらくはCRONジョブにより定期的に再起動することで様子を見ることにした。
# crontab -l 0 */2 * * * systemctl reload motion
バックアップ設定
必要なツールをインストール。
# apt -y install inotify-tools screen
録画データ保管用に、さくらのVPS を1インスタンス用意した。 OSは Ubuntu 18.04 とした。 Raspbian の root のSSH公開鍵を Ubuntu の root の authorized_keys に挿入した。
つづいて、以下のようにRaspbian の rc.local に、自動で rsync するタスクを追記した。
# cat /etc/rc.local ...(省略)... sudo -u motion mkdir /tmp/motion/ ; /usr/bin/screen -dmS screen /bin/bash -c "inotifywait -m /tmp/motion/ | xargs -I{} rsync -r /tmp/motion/ ${VPSのアドレス}:/tmp/motion/" exit 0
まとめたほうが分かりやすいと思ったのでCRONに追記した。
結果下記の設定になった。
NOTE: 再起動後は /tmp
がまっ更になっているので mkdir しておかないとディレクトリ監視が不正終了してしまう。
# crontab -l 0 */2 * * * systemctl reload motion @reboot sudo -u motion mkdir /tmp/motion/ ; /usr/bin/screen -dmS screen /bin/bash -c "inotifywait -m /tmp/motion/ | xargs -I{} rsync -r /tmp/motion/ mcsv.tokyo:/tmp/motion/" &> /tmp/rc.local.log
続いてVPS側の設定。
# apt -y install apache2-utils nginx-extras # fancyindex を使いたいので nginx-extras を入れる # htpasswd -c /etc/nginx/.htpasswd username
htpasswd 周りの参考文献 : qiita.com
カメラ録画映像を一覧表示できる様に、以下のように設定ファイルを作成した。
# cat /etc/nginx/conf.d/motion.conf server { listen 80; server_name ${ドメイン名}; location /motion { # autoindex on; # autoindex_exact_size on; # autoindex_localtime on; fancyindex on; # Enable fancy indexes. fancyindex_exact_size off; # Output human-readable file sizes. alias /tmp/motion; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; } }
設定読み込み。
# systemctl reload nginx.service
完成!
VPSのアドレス/motion/ にアクセスしてみると先ほど設定した認証情報を求められる。
認証情報を入力して進むと、録画一覧が表示される。
任意のファイルを選択すると、ブラウザ上で再生できる。