2015年8月19日水曜日

ZeroC Ice のインストール

CentOS6に ZeroC Ice をインストールした。公式 rpm も出てて最初はそれを入れていたのだが、非標準のライブラリなども入れる必要があってそれが標準のライブラリと干渉することがあるので、ソースからビルドしてインストールすることにした。

ちなみにバージョンは公式rpmと同じ 3.5.1 にしている。もしかしたら最新の 3.6 でもphpMumbleAdmin は動くかもしれないけど、様子がわからないので動作確認がとれている 3.5.1 で実行することに決めた。

参考にしたのは Ice 3.5 と Ice 3.6 のインストールドキュメント。
ビルドに必要なライブラリがいくつかあるが、用意しないといけないのは Berkeley DB 5.3 と mcpp 2.7.2 (with patches) の2つ。どちらも ZeroC Ice のサイトからダウンロードできる。ほかは CentOS 標準のライブラリでよい。

まず DB 5.3 のビルドとインストール。今回 Java を使う予定はないので --enable-java は指定していない。/opt/db53 にインストールする。

$ wget https://zeroc.com/download/berkeley-db/db-5.3.28.NC.tar.gz
$ tar xzf db-5.3.28.NC.tar.gz
$ cd db-5.3.28.NC/build_unix
$ ../dist/configure --enable-cxx --prefix=/opt/db53
$ make
$ sudo make install
$ cd /opt/db53
$ sudo ln -s lib lib64

次に mcpp をビルドする。mcpp は静的ライブラリになるのでインストールはしない。 ソースは https://github.com/zeroc-ice/mcpp.git からダウンロードする。

$ wget https://github.com/zeroc-ice/mcpp/archive/master.zip
$ unzip master.zip
$ cd mcpp-master
$ make

最後に Ice-3.5.1 のビルドとインストール。インストール場所はデフォルトの /opt/Ice-3.5.1 。ただし、インストールドキュメント通りにしたらランタイムライブラリのパスがなぜか /opt/Ice-3.5 になってしまったので emmbedd_runpath_prefix=/opt/Ice-3.5.1 を指定してパスが正しくなるように修正している。

$ tar xvfz Ice-3.5.1.tar.gz
$ cd Ice-3.5.1/cpp
$ make DB_HOME=/opt/db53 MCPP_HOME=(絶対パス)/mcpp-master embedded_runpath_prefix=/opt/Ice-3.5.1
$ sudo make install
$ cd ../php
$ make PHP_HOME=/opt/rh/rh-php56/root/usr emmbedd_runpath_prefix=/opt/Ice-3.5.1
$ sudo make install
あとは PHP に IcePHP.so を読み込ませて /opt/Ice-3.5.1/php にパスを通せばよい。次のような内容のファイルを /etc/opt/rh/rh-php56/php.d/IcePHP.ini として作成する。
; Enable Ice extension module
extension = /opt/Ice-3.5.1/php/IcePHP.so

; Add to include_path
include_path = ${include_path}":/opt/Ice-3.5.1/php"
PHP の ini ファイルの中で既存の ini 変数を参照できるんだね、今知ったわ。

2015年8月18日火曜日

MariaDB10にしてみた

Software Collections のサイトが復活したので調子に乗って MariaDB10 を入れてみた。

rhscl-rh-mariadb100-epel-6-x86_64.noarch.rpm をダウンロードして、

$ yum install rhscl-rh-mariadb100-*.noarch.rpm
$ yum install rh-mariadb100

で、

$ mysqldump --single-transaction -u root -p --all-databases > mysqldump_all_database.dump

$ service mysqld stop
$ service rh-mariadb100-mariadb

$ scl enable rh-mariadb100 'mysql -u root' < mysqldump_all_database.dump

として mediawiki のページにアクセスしてみるとデータベースエラー、接続できないときた。

mediawiki ユーザのパスワードを再設定してみようとしたら、そんなユーザは知らないと言われる。'select user,host from mysql.user;' ではちゃんと表示されるのに!

ERROR 1133 (28000): Can't find any matching row in the user table

バックアップデータを戻したあと、flush privilieges; を実行していなかったのが原因だった。

MariaDB [(none)]> flush privileges;

mediawiki もちゃんと動作した。

2015年8月17日月曜日

301リダイレクト

MediaWiki でショートURL表記にする で301リダイレクトを返す R=301 の指定をしたのだが、"一度301リダイレクトにしてしまうと、「やっぱりやめた」というのは利きません" という罠があるらしい。

なんでも、301リダイレクトがブラウザにキャッシュされるのでブラウザにキャッシュが残っている限りはサーバで変更しても参照されない、キャッシュはデフォルトで無期限、コンテンツのサイズが0なのでキャッシュから追い出されることは期待できない、のコンボでサーバの設定をどういじっても修正できなくなるそうだ。

おそろしい。


2015年8月8日土曜日

Windows 10 のネットワークアダプタ優先順位

うっかりノートPC を Windows10 にアップグレードしてしまった。

しばらく使っていると、有線LAN接続してるのにいつの間にかWiFiに切り替わっていることがあることに気づいた。

8.1 のときは特に何もしなくても有線LANの方が優先されていたのであまり深く考えなかったが、このあたりどうなっているのだろう。

調べてみると、 http://www.lifehacker.jp/2013/05/130508force_cable_connection.html 優先順位の設定というものがあるらしい。知らなかった。初めて見た。

で Windows 10 でも 8.1 と同じ所にその設定はあった。WiFi の優先順位が有線LANより高くなっている。以前の設定はわからないがここで有線LANの優先順位を上げればよいのだろう。

(追記)
優先順位変更してもダメだった。というか変更が反映されない。
WiFiアダプタのメトリックを増やす、というのをやっても効果なし。
とりあえず手動でWiFiをOffにするか…

(追記2)
しばらく使ってみたけどその後この症状は発生していない。
あのときはISPのDNSがやや調子悪かったので有線LANが切れて無線LANにフォールバックしてたのかもしれないと想像してる。
ちなみに無線LANは2.4Gと5Gの両方あって、有線LANの識別名は2.4Gの方と同じになっている。この辺りの仕組みはよくわからない。無線LANの方はSSIDだけど、有線LANの方はなんだろう?

2015年8月6日木曜日

CentOS6 のリポジトリ

CentOS6標準のソフトがあまりにも古すぎるのでいろいろ検索したり試行錯誤したりして適当なサードパーティリポジトリをいれるという手段を選んだのだが、案の定依存するパッケージなどが喰違ってインストールできないケースがでてしまった。容易に予想されることではあるけれども。

今日調べたところ http://wiki.centos.org/AdditionalResources/Repositories によれば、適当な野良リポジトリは不整合を招くのでよくないとある。標準パッケージが古くてこまるというときは Software Collections (SCLリポジトリ) を使え、とある。

なんだ、そういうのがあるんなら早く言ってくれよ。なんでみんな黙ってるんだ?って思ったのだが、使えるようになたのが去年の終わりごろのようで、まだあまり広まっていない (ブログなどに書く人がいない) からのもよう。しゃーない。

それでも CentOS + SCL で検索するとそれなりに引っかかる。CentOS だと埋もれてしまうんだな。

さっそくやってみる。SCL で入れたパッケージは他の標準パッケージなどを壊さないように独自のディレクトリ構成の中にインストールされるので、インストールするだけなら既存の環境を壊すことがなくて安心だ。実行がちょっとめんどくさいが。

前準備
$ yum install centos-release-SCL

Apache24のインストール
SCL のページから CentOS 6 に対応する rhscl-httpd24-epel-6-x86_64.noarch.rpm をダウンロードしてくる。

$ yum install rhscl-httpd24-epel-6-x86_64.noarch.rpm
$ yum install httpd24
$ yum install httpd24-mod_ssl

設定ファイルはに置かれる。
/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf


'apachectl configtest' コマンドの実行は以下のように行う。'httpd24' はパッケージグループの名前。
$ scl enable httpd24 'apachectl configtest'

サービスとして実行するときはもう少し簡単。'httpd24-' がプレフィクスにつく。
$ service httpd24-httpd start

PHP56のインストール
SCL のページから CentOS 6 に対応する rhscl-rh-php56-epel-6-x86_64.noarch.rpm をダウンロードしてくる。

$ yum install rhscl-rh-php56-epel-6-x86_64.noarch.rpm
$ yum install rh-php56
$ yum install rh-php56-php
$ yum install rh-php56-php-intl
$ yum install rh-php56-php-mysqlnd
$ yum install rh-php56-php-mbstring

MediaWiki で必要な APCはPHP56moreの方に入っていた。こちらも同様に remi-php56more-epel-6-x86_64.noarch.rpm をダウンロード。


$ yum install remi-php56more-epel-6-x86_64.noarch.rpm
$ yum install more-php56-php-pecl-apcu

プレフィクスが 'more-' なのに注意。

2015年8月3日月曜日

Postfix の設定

freenom でとった .tk ドメインでもメールを受け取れるようにしてみる。

main.cf に外部からメールを受け付ける設定と、指定ドメイン宛のメールを自分宛と認識させる設定を行う。下の例では追加で受け取るドメインを example.com としている。

inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost,
        example.com

/etc/aliases で root 宛のメールを gmail に転送するようにして newaliases でデータベースを更新。

root:    どこか@gmail.com

aliases ファイルの本体は Git で管理してるディレクトリに置いて、/etc/aliases はそこへのシンボリックリンクにしてるんだけど最初 newaliases がエラーで動かなかった。

postalias: fatal: open /etc/aliases.db: Permission denied

/etc/aliases.db のパーミッションが悪いわけではなく、/etc/aliases のオーナーが root でないとこんなエラーが出る。これはエラーメッセージが不親切。

MediaWiki での CSS カスタマイズ

MediaWiki の デフォルトの文字の大きさがちょっと小さすぎるような気がしたので修正した。

MediaWikiのデフォルトのデザイン (Vectorスキン) のカスタマイズはCSSファイルを編集するのではなく MediaWiki の MediaWiki:Common.css とMediaWiki:Vector.css のページに追加のCSS記述を行う。

MediaWiki:Common.css と MediaWiki:Vector.css の使い分けははっきりしないが、スキンに依存するような修正は MediaWiki:Vector.css で行うのがよいのだろう。

Firefox の開発ツールを使うと、指定した要素にどんなCSSがどんなルールで適用されているのかがわかるのでそれを見ながら作業する。

MediaWiki:Common.css ではこんな感じ。デフォルトで h1, h2 要素が明朝体になってるのでゴシックに変更。

.mw-body h1, .mw-body h2 { font-family: sans-serif; }
.mw-body-content { font-size: inherit; }

MediaWiki:Vecor.css では左サイドバーの幅をちょっと大きめにして、本文フォントサイズをちょっと大きめに。

div#mw-panel { width: 14em; }
div#footer, #mw-head-base, div#content { margin-left: 14em; }
#left-navigation { margin-left: 14em; }

div#mw-panel div.portal h3 { font-size: inherit; }
div#mw-panel div.portal div.body ul li { font-size: 95%; }

で、これだけだとログインページヘは反映されない。安全のため、ログインページなどはデフォルトでカスタマイズCSSが反映されないようになってるとのこと。

変なCSSを注入されるおそれがない場合には LocalSettings.php で $wgAllowSiteCSSOnRestrictedPages を true に設定すると反映される。

$wgAllowSiteCSSOnRestrictedPages = true;