HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

WikipediaのデータをMySQLに突っ込んだ話

はじめに

Wikipediaのデータを、VitualBoxで立ち上げたCentOS7のMySQLに入れてみました。
クローラーでのコンテンツの取得は禁じられているので、要注意です。

Wikipedia:データベースダウンロード - Wikipedia

クローラを用いてコンテンツを収集しないでください。

その代わり、Wikipediaのデータは圧縮されたXMLファイルで提供されています。
ここでは、そのデータを取り込む方法を書いていきます。

ただし、DBに格納されるデータは、MediaWiki形式で書かれた文字列なので、そのまま他に流用は厳しいです。
(ということがわかりました)

作業の流れ

上記の通り、このXMLのファイルを取り込むのですが、そのためのPHPファイルも提供されています。

Wikipedia:データベースダウンロード - Wikipedia

これらのXMLファイルをMySQLデータベースにインポートするには、MediaWiki配布物に含まれるimportDump.phpスクリプトを使用します。

$ bunzip2 -c pages-articles.xml.bz2 | php maintenance/importDump.php

コマンドを叩くだけなら簡単、と思いますが…これを動かすには、最終的には「LocalSettings.php」というファイルが必要です。
このファイルには、主にDBへの接続情報が書かれています。
接続情報なしにデータベースにはデータを入れることはできないで、当たり前といえばそれまでですが。

そしてその「LocalSettings.php」は、MediaWikiのインストールの過程で作成されるものです。
つまり…

  1. Wikipediaのシステムの元であるMediaWikiを仮想環境にインストールし、
  2. その上でWikipediaのデータをimportさせる。

必要があるということです。ちょっと遠回り。

Wikipediaのデータ

日本語のデータについては、こちらに入っています。
Index of /jawiki/
XML形式のファイルで、UTF-8です。
欲しいデータはWkipediaのごく一部のページでも、どこにあるかはわかりづらくなっています。

記事が入っているデータは、
Index of /jawiki/latest/

jawiki-latest-pages-articles.xml.bz2  

これになります。圧縮された状態で2.8GBくらいありますね。 分割されたデータもあり、それは

jawiki-latest-pages-articles1.xml.bz2  
jawiki-latest-pages-articles2.xml.bz2  
jawiki-latest-pages-articles3.xml.bz2  
...

のように連番になっています。

データを取り込むには?

Wikipedia:データベースダウンロード - Wikipedia

上にも書きましたが、下記コマンドを実行することを目指します。

$ bunzip2 -c pages-articles.xml.bz2 | php maintenance/importDump.php

データを取り込むまでに必要な準備

bzip2のインストール

人によっては入っていないと思いますので、まずはここから…。 CentOSならyumですぐにインストールできます。

$ sudo yum search bzip2
$ sudo yum install bzip2.x86_64
$ bzip2 -V
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

   Copyright (C) 1996-2010 by Julian Seward.

   This program is free software; you can redistribute it and/or modify
   it under the terms set out in the LICENSE file, which is included
   in the bzip2-1.0.6 source distribution.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   LICENSE file for more details.

bzip2: I won't write compressed data to a terminal.
bzip2: For help, type: `bzip2 --help'.

解凍時は、こんなふうに使います。 特別難しいことはありません。

$ bunzip2 jawiki-latest-pages-articles.xml.bz2
記事のダウンロード
$ curl -O https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
importData.php のダウンロード

といいますか、MediaWikiソースコードのダウンロードです。
importData.phpは、MediaWikiソースコード内にある maintenance/importData.php です。
メンテナンスツールの一部なのでしょう。

今回はgit cloneで入手します。
MediaWiki · mediawiki

$ git clone https://phabricator.wikimedia.org/source/mediawiki.git
この時点で試しに実行

私が実行したときは、書かれたコマンドの準備ができたということで、(LocalSettings.phpはないものの)実行してみたのでした。
そうしましたら、

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
Error: You are missing some external dependencies.
MediaWiki now also has some external dependencies that need to be installed
via composer or from a separate git repo. Please see
https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries
for help on installing the required components.

私の場合「LocalSettings.php」がないという以外のエラーが出ました。
「いくつかの外部依存が足りていない。MediaWikiはいくつかの外部依存が必要で、それはcomposerで取ってくるか、gitから取ってきてくれ。詳しくはこのURLを見てね(超意訳)」
とのことなので、URL先を見てみる。

やり方はcomposerを使うか、gitで落としてきてもいいらしい。 composerがなかったので、私はgitで取得することにしました。

vendor/のダウンロード

MediaWikivendor/ ディレクトリをgit cloneしてくるだけなので楽です。

$ cd mediawiki/
$ git clone https://gerrit.wikimedia.org/r/p/mediawiki/vendor.git

そして改めて実行するわけですが、

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
Error: Missing one or more required components of PHP.
You are missing a required extension to PHP that MediaWiki needs.
Please install:
 * xml <https://secure.php.net/xml>

Errorが出ましたが、私の場合はPHPのモジュールとしてのxmlがインストールされてませんでした。
人によって足りないものが異なるでしょうから、一度実行してみるのがよいと思います。

phpの足りない拡張機能をインストール

ここは他のサイトに説明を譲ります。

そして再実行

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml
A copy of your installation's LocalSettings.php
must exist and be readable in the source directory.
Use --conf to specify it.

ここで「LocalSettings.php」が必要だと言われます。
冒頭に書いたとおり、ここで諦めてMediaWikiをインストールして、その過程で生成しようと思います。

MediaWikiをインストール

ということで、まずはMediaWikiをブラウザから見れるように、ソースコードをドキュメントルートに持っていきます。
私の場合、ホームディレクトリに置いていたので移動します。

# cp -rp mediawiki/ /var/www/html/

下記にアクセスして、
http://localhost:8080/mediawiki/index.php

下記の画面が表示されれば、いったん成功になります。 f:id:hrroct:20181008234338p:plain

こんなエラーがCentOSで出る場合はSELinux関連の可能性があります。

[Sun Dec 16 23:21:25.810925 2018] [:error] [pid 12818] [client 10.0.2.2:60328] PHP Warning:  Unknown: failed to open stream: Permission denied in Unknown on line 0
[Sun Dec 16 23:21:25.810984 2018] [:error] [pid 12818] [client 10.0.2.2:60328] PHP Fatal error:  Unknown: Failed opening required '/var/www/html/mediawiki/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

MediaWikiの設定を行う

長い。道のりが長くて記事を分割したくなりますが、まだタイトルに行き着いていないのでがんばります。

f:id:hrroct:20181008234338p:plain

基本的にはポチポチクリックして進めていきます。

f:id:hrroct:20181230115232p:plain

ここは日本語そのままでよいでしょう。

f:id:hrroct:20181230115253p:plain

ここでDBの接続情報、ユーザーの情報を入れます。

f:id:hrroct:20181230115316p:plain

MySQLなので、ストレージエンジンの選択を行います。

f:id:hrroct:20181230115356p:plain

データ取得が目的なので、私の場合は何でもよかったです。

f:id:hrroct:20181230115426p:plain

飽きたので、とにかくインストールしてもらいます。

f:id:hrroct:20181230115546p:plain

これでインストールが完了します。

f:id:hrroct:20181230115624p:plain

ここでようやく、LocalSettings.phpをゲットできます。

ようやく実行

$ php mediawiki/maintenance/importDump.php < jawiki-latest-pages-articles.xml

したのですが…
私の環境では3日経ってもimportが終わりませんでした…
(メモリ8G、Core i5(第8世代)のノートPC)
Wikipediaのデータ量、恐るべし。

私のときは、下記エラーがたくさんできるので、設定しておいたほうが無難かも、です。

PHP Notice:  Undefined index: SERVER_NAME in /var/www/html/mediawiki/includes/GlobalFunctions.php on line 1374

もうひとつのやり方?

xml2sqlを使う手段もあるそうですが、どうやら非推奨のようです。

Data dumps/xml2sql - Meta

最後に

次はデータベースの中身の話ですが…
長くなるので、続きは別記事で。

以上でした!

TeraTermのカラーテーマをSolarizedに変更する

はじめに

私はWindowsを使う機会が多く、ターミナルエミュレータにはTera Termを使用しております。
マクロが便利で、手放せません。 https://ja.osdn.net/projects/ttssh2/

そんなTera Termにもカラースキーム、カラーテーマを変更する手段があります。
そのご紹介です。

変更の仕方

設定ファイルに、手でカラーコードを指定することになります。
これだとどう数字を設定したらいいかがわかりにくいですが…
Solarizedについては、コメントアウトされて既に書いてあります。
DarkもLightもいけます。

Tera Termの設定ファイルは「TERATERM.INI」です。
場所は、Windows7もWindows10も、同じだと思います。

C:\Program Files (x86)\teraterm\TERATERM.INI

2021/07/06 追記:
ないぞという方は、こちらにあるかも知れません。

%LOCALAPPDATA%\VirtualStore\Program Files (x86)\teraterm

このファイルを開いて、「Solarized」を検索してみてください。
コメントアウトされているところが複数あるので、全部Solarizedの設定と入れ替えてください。
例えば…

Before:

;      Text and background colors
;       for Normal characters
VTColor=255,255,255,0,0,0
; Solarized Dark
;VTColor=131,148,150,0,43,54
; Solarized Light
;VTColor=101,123,131,253,246,227

After:

;      Text and background colors
;       for Normal characters
;VTColor=255,255,255,0,0,0
; Solarized Dark
VTColor=131,148,150,0,43,54
; Solarized Light
;VTColor=101,123,131,253,246,227

こんな感じです。
ちょっとわかりづらいとは思いますが…

最後に

以上、小ネタでした。
Tera Termをご利用の方は、ぜひ一度試してみてください。
以上でした。

CygwinでGUI的にファイル/ディレクトリを開きたい場合

はじめに

小ネタです。
便利なので知らない方に共有です。

CUIコマンドラインから、

といったことが可能です。
Macではopenというコマンドで実装されているようです。

やり方

Cygwinを導入していれば、cygstart というコマンドが使えるはずです。
現在のディレクトリをエクスプローラーで開きたい場合には、

cygstart .

テキストファイルをGUIテキストエディタで開きたい場合には、

cygstart --edit sample.txt
# 関連付けされているアプリケーションで開きます

画像も開けます。

cygstart 20180303_001.png

画像をペイントで編集したい場合はこう。

cygstart --edit 20180303_001.png

その他の使い方は、ヘルプをぜひ御覧ください。

cygstart --help

おまけ

cygstart と打つのが煩わしい私は、open で起動できるようにaliasを設定しています。
ご参考までに。

# .bashrc
alias open="cygstart"

以上でした!

VirtualBox + CentOS7 でApacheをインストール

はじめに

Apacheだけを動かすケースはないでしょうが、単発ですが投稿します。
バージョンは下記のとおりです。

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Jun 27 2018 13:48:59

手順

インストールと起動設定

yumで簡単に入れられます。
勝手に起動するように設定も行っておきます。

# yum install httpd

# systemctl start httpd
# systemctl enable httpd

ファイアウォールにポート番号を追加

80を許可してあげます。

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --reload

ポートフォワーディング

VMの場合はこの設定が必要です。
実行中のVMから、「デバイス」→「ネットワーク」とたどって、 f:id:hrroct:20180311212642p:plain

「高度」をクリックして、「ポートフォワーディング」をクリックして、 f:id:hrroct:20180311213122p:plain

ポート番号8080で来たときに、80に転送してあげる。 f:id:hrroct:20180715212131p:plain

最後にアクセス

http://localhost:8080/ にアクセスすれば…

f:id:hrroct:20181002003214p:plain

こんな画面が表示されます。 これで完了です。

以上でした!

VirtualBox + CentOS7 + Nginx + PHP-FPM でPHPを動かすまで

はじめに

登場人物がインストール済みで、設定周りをどうするか、のメモになります。
というわけで、前提条件が結構あります。

  • PHPはインストール済み(記事を書いたものの保存し忘れでサヨウナラ…)
  • PHP-FPMもインストール済み
  • Nginxもインストール済み
  • 前回の記事の続きみたいな感じです。

hrroct.hatenablog.com

ゴール

http://localhost:8080/index.php にアクセスして、index.phpに書いたphpinfo()の結果が表示されるところまで。

やったこと

設定ファイルを変更する前にバックアップを取ることをオススメします。

PHP-FPMの設定

# vi /etc/php-fpm.d/www.conf

Nginxで動かすので、userとgroupの変更を行います。

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
;user = apache
user = nginx
; RPM: Keep a group allowed to write in log dir.
;group = apache
group = nginx

さらに今回の場合、ブラウザからアクセスするときにポート番号を8080にしているので、 listenのポート番号を変更します。

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
listen = 127.0.0.1:8080

忘れずに再起動も行います。

# systemctl restart php-fpm

Nginxの設定

まずrootのindexファイルとして、index.phpを許可します。
rootも必要に応じて変更しましょう。

# vi /etc/nginx/conf.d/default.conf

  location / {
      root   /usr/share/nginx/html;
-     index  index.html index.htm;
+     index  index.html index.htm index.php;
  }

さらに、rootやポート番号、fastcgi_paramを書き換えます。

- #location ~ \.php$ {
- #    root           html;
- #    fastcgi_pass   127.0.0.1:9000;
- #    fastcgi_index  index.php;
- #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
- #    include        fastcgi_params;
- #}
+ location ~ \.php$ {
+     root           /usr/share/nginx/html;
+     fastcgi_pass   127.0.0.1:8080;
+     fastcgi_index  index.php;
+     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+     include        fastcgi_params;
+ }

Nginxの再起動も忘れずに。

# systemctl restart nginx

SELinuxの設定

私の場合はこれも必要でした。

# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled

index.phpを作成する

# vi /usr/share/nginx/html/index.php
<?php
phpinfo();

設定は以上です。

確認

…する前に、ログファイルを監視することをオススメします。
うまくいかない場合、何かしらログに残っているはずです。

# tail -f /var/log/php-fpm/error.log /var/log/nginx/{access,error}.log

エラーコードやエラー内容で検索すれば、きっと解決できることでしょう。

http://localhost:8080/index.php
にアクセスして、インストールされたPHPの情報が表示されればOKです。

最後に

今や検索すれば、設定に困ることはなくなりましたね。
似たようなことをやっている方は、必ずいらっしゃるものですから。

以上でした!