ごらくらいふ

プログラミングしたりゲームしたり

CentOS6.9にて、Apacheを2.4に更新した

前提

経緯

MastodonApache上で動かすため、WebSocket対応のリバースプロキシを提供するmod_proxy_wstunnelが必要だった。 これは、Apache 2.4.5以降で有効とのことなので、2.4系のパッケージを導入する必要が生まれた。

手順

Software Collcetionを導入する

CentOS6.9の標準ではApache2.2までしかないので、Software Collectionを導入する。

sudo yum install centos-release-scl
sudo yum-config-manager --enable rhel-server-rhscl-6-rpms

必要なパッケージの検索

sudo yum search httpd24を実行して、必要そうなパッケージを選ぶ。 自分の場合は以下。

  • httpd24-httpd
  • httpd24-mod_proxy_html
  • httpd24-mod_session
  • httpd24-mod_ssl

パッケージのインストー

sudo yum install httpd24-httpd httpd24-mod_proxy_html httpd24-mod_session httpd24-mod_ssl
scl enable httpd24 bash

# rootでの作業
su -
echo 'source /opt/rh/httpd24/enable' >> /etc/profile.d/httpd24.sh
exit

コンテンツの移植

Software Collectionで導入すると/opt/rh/httpd/root/の下にFilesystem Hierarchy Standard状のディレクトリ構成が広がっている。 諸々と共存できるようにするためだろうが、いざ旧環境とのすり合わせをするとなると非常にだるい

cp -av {/var/www,/opt/rh/httpd/root/var/www}/#コピーしたいディレクトリを指定する

設定の移植

元々の設定をhttpd.conf.orgで残しているので、当時の設定内容を抽出する。

diff /etc/httpd/conf/httpd.conf{,.org} > httpd.conf.diff
# オリジナルを残しておいてもりもり修正する
sudo cp -v /opt/rh/httpd/root/etc/httpd/conf/httpd.conf{,.org}
sudo vi /opt/rh/httpd/root/etc/httpd/conf/httpd.conf
# includeされるように書くもよし
sudo vi /opt/rh/httpd/root/etc/httpd/conf.d/other.conf

その他、/etc/httpd/conf.d/*.conf/opt/rh/httpd24/root/etc/httpd/conf.d/にコピーする。

cp -av {/etc/httpd/conf.d,/opt/rh/httpd/root/etc/httpd/conf.d}/#コピーしたいconfを指定する

シンボリックリンクの作成

標準の位置にすり替える。

sudo mv -v /etc/{,_}httpd
sudo ln -s /opt/rh/httpd24/root/etc/httpd/ /etc/httpd

sudo mv -v /var/{,_}www
sudo ln -s /opt/rh/httpd24/root/var/www/ /var/www

Apacheの起動

# 起動済みの古いApacheを止める
sudo service httpd stop
sudo chkconfig httpd off

sudo service httpd24-httpd start
sudo chkconfig httpd24-httpd on

トラブルシュート

RewriteLogで怒られる

Apache2.4ではRewriteLogはなくなっている網様。LogLevelを使えとのこと。

LogLevel crit

これまで使っていたPHPが使いまわせない

どうも2.2で動かしていた頃のPHPでは参照できないシンボルがあった模様。

まぁ、SoftwareCollectionのApacheを使うようになるのだから、その上で動くPHPもSoftwareCollection化するのは必然。

apache2.4が動いている状態でinstallすれば特に困らず動かせるはず。

sudo yum install rh-php70-php
scl enable rh-php70 bash
# rootでの作業
su -
echo 'source /opt/rh/rh-php70/enable' >> /etc/profile.d/rh-php70.sh
exit

genomirai.comのWORD_DUMPをパースする

おもむろに http://www.genomirai.com をやりたくなった。

プレイ中DUMPされた文字列が出力される場合があるが、ドラッグして選択しようとするとクリックが反応して先に進んでしまう。

ということでjavascriptコンソールに突っ込んで解決した。chromeでしか確認していない。

var dumps = $$("span")
    .map(el => el.innerText.trim())
    .join("")
    .match(/FF FE.+?(?===DUMP)/g);
if(dumps){
    dumps.map(str => str.replace(/\s/g,""))
        .map(str => str.match(/.{4}/g)
            .map(word => word.match(/.{2}/g)
                .reverse()
                .join("")
            )
            .map(word => "%u"+word)
            .join("")
        )
        .map(str => unescape(str))
        .forEach( str => console.log(str))
}

きょうの元気なうちに集中が切れてもできる仕事を組み立てよう。とかやる暇があったら動いたほうがマシ。

やることリスト書き出しとかするじゃないですか。

ダメになったパーの自分に向けて作業リスト作るのって、まぁ他人に作業指示書を作るのと同じであって、 詳細設計書とかいう机上の空論のかみっぺら。

メソッドひとつとっても本当に想定の値が取得できるか試してみないとわからない。試してみたならもう組み込んでおけよと。

できそうだな。と思ってできなかった時にパーになった自分は役に立たないので、元気なうちに実装入ろう。 パーになったらとっとと帰って寝て早く来てパーになってのサイクルを回せばいいや。

と、パーになった今帰らずブログで垂れ流している。

Minecraftのバックアップが動作していなかったのを修正した作業ログ

放置状態のMinecraft、久しぶりに様子を見てみたらバックアップに失敗していた。 はてどうしたものかとcronからの通知を確認すると

Date: Tue, 21 Feb 2017 04:00:01 +0900 (JST)

minecraft_server.jar is running... suspending saves
Backing up minecraft world...
tar: VPSworld: stat 不能: そのようなファイルやディレクトリはありません
tar: 前のエラーにより失敗ステータスで終了します
Backing up minecraft_server.jar
minecraft_server.jar is running... re-enabling saves
Compressing backup...
Done.

oh…

どこがトラブルポイントなのか調べる

まずはcronの確認から。現象は4時に報告されている。

# crontab -l
30 4 * * * /etc/init.d/minecraft restart
0 4 * * * /etc/init.d/minecraft backup

4時に実行されるコマンドはminecraft backup

もうどこから持ってきたか忘れてしまったminecraftコマンドの中身を漁る。

case "$1" in
  # 略
  backup)
    mc_backup
    ;;
  # 略
esac

mc_backupのみ

mc_backup() {
  mc_saveoff

  NOW=`date "+%Y-%m-%d_%Hh%M"`
  BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  echo "Backing up minecraft world..."
  #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"

  echo "Backing up $SERVICE"
  as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""

  mc_saveon

  echo "Compressing backup..."
  as_user "gzip -f \"$BACKUP_FILE\""
  echo "Done."
}

echoの内容から、as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"になにかあったことがわかる。

tar コマンドのオプション

  • -C : change directory
  • -c : 書庫の作成モードとして動作する
  • -f ファイル名 : 指定した書庫ファイルまたはデバイスを(書き込みに)使用する

Linuxコマンド集 - 【 tar 】 ファイルを書庫化・展開する(拡張子.tarなど):ITpro

あやしいわーるど

$WORLDは何を指しているのか
# grep "WORLD=" minecraft
WORLD='VPSworld'
minecraftはどのサーバを使っているのか
# grep "level-name" server.properties
level-name=world

全部こいつのせいだ。

対応ログ

ワールドディレクトリを変更して対応

# 作業に入る前にminecraftを確実に停止させる

# sudo service minecraft stop
minecraft_server.jar was not running.
minecraft_server.jar is stopped.


# ワールドディレクトリの名前変更

#  mv -v world VPSworld
`world' -> `VPSworld'


# サーバー設定の変更

# cp -v server.properties{,.org}
`server.properties' -> `server.properties.org'

# vi server.properties

#  diff server.properties{,.org}
28c28
< level-name=VPSworld
---
> level-name=world

バックアップの動作確認

# sudo service minecraft backup
minecraft_server.jar is not running. Not suspending saves.
Backing up minecraft world...
Backing up minecraft_server.jar
minecraft_server.jar is not running. Not resuming saves.
Compressing backup...
Done.

# ll -h backup/
#  ======省略======
-rw-r--r-- 1 minecraft minecraft  184  221 04:00 2017 VPSworld_2017-02-21_04h00.tar.gz
-rw-rw-r-- 1 minecraft minecraft 109M  221 13:36 2017 VPSworld_2017-02-21_13h36.tar.gz

圧倒的容量差

稼働開始

# sudo service minecraft start
Starting minecraft_server.jar...
minecraft_server.jar is now running.

PS4のHDDを2TBに換装した

DL版主体でやってきた結果、ついに付属HDDの容量が尽きた。

わりと持ったほうだけど、FFXVやBloodBorneやら50GB級のもの買い出すと恐ろしいほど容量が減る。

作業は4Gamerを参考にしたら出来た。

www.4gamer.net

以上。

以下買ったHDDのアフィ。

ニコニコマイリストRSSをSlackに吸い上げて貰うようにした

yajamon.hatenablog.com

feedlyで受けるの止めました。

記事の末尾にあるけど、通知先にSlackを選択したのなら、RSSインテグレーションで十分なのよね。

基本的にfeedlyRSSを登録するのは以下を目的にしている。

  • 新着を素早く受信するため
  • 加えて、読むか読まないかの仕分けをするため
    • 読む記事はPocketに送る(IFTTT経由
      • Pocketを使うのは、RSSフィード以外にも後で読む記事があり、それと統合するため

で、マイリストの新着なんて基本全部観たいし、通知先プラットフォームをSlackにしてるし、feedlyを外した。

Windows10でヘルプ(.hlp)が見れないので.chmを介してhtml化した

TSXBINのマクロヘルプが見たかったんだけれど、windowsお前ええ加減にしいや。

環境

  • Windows 10
  • Universal Extractor 2 Beta 4
  • HTML Help Workshop 4.74.8702.0
  • chmdecoder 2.2 (13.03.2014)

手順

chromeだかセキュリティソフトだかが「こんな得体の知れんしクソ広告塗れのサイトなんぞセキュリティリスクじゃ!あかんあかん!」って言うもんだから有志がforkしたっつーUniversal Extractor 2を使った。

「いやそいつヤバイよ。こっち使いな」とあったら教えて。

.hlpを.chmに変換する

  1. Universal Extractor 2を入手、インストール
  2. 対象の.HLPファイルを選択し、OKで展開する
  3. HTML Help Workshopを入手、インストールする
  4. HTML Help Workshopを起動する
  5. [File]->[New]、ダイアログでは「Project」を選択してOK
  6. 「Convert WinHelp project」にチェックを入れ、次へ
    • f:id:yajamon:20170214142952p:plain
  7. さきほど展開したディレクトリ内に.HPJファイルがあるので、それを選択するし、次へ
    • f:id:yajamon:20170214143014p:plain
  8. 下部の入力欄には適当なプロジェクト名を入力し、次へ。(例: macro.hhp
  9. 完了ボタンをクリック
  10. [File]->[Compile]。.hhpファイルが指定されているので、そのままCompile。
    • 「Indexに使う"なんとか.hhk"がないぞ!」とか言われる場合がある
    • それでもとりあえず.chmファイルは生成されている

.chmを.htmlに変換する

  1. chmdecoderをインストール
  2. chmdecoderにて、「Open…」から生成した.chmファイルを選択する
  3. Output folderを変更する(しなくてもいい)
  4. 「Generate Menu」にチェックを入れる
  5. 「Go」ボタンをクリックする

.htmlに変換してから

いろいろおかしいので直す。

左メニューのリンクが機能しない

{OutputFolder指定先}\プロジェクト名\__left.htmを修正する

  • バックスラッシュを出力できていない点を修正する
  • d.add(1,0,"macr04j4.htm","html\macr04j4.htm");などと、エスケープになっている
文字コードUTF-8に変換する

せっかくブラウザで開くので

  1. 文字コード一括変換ソフトのインストール
  2. 対象htmlをすべて変換する
  3. htm内のメタタグを修正する
    • before: <META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
    • after: <META HTTP-EQUIV="Content-Type" Content="text/html; charset=UTF-8">

とりあえず読めるようになった

めんどくさすぎる。

残課題

  • .htm -> .html
  • ファイル名の修正