LinuxでMT鯖縦2

お約束:当局はいっさい関知せず。




ルータを別に用意して、分業体制。



ルータでやること。

鯖でやること。

ルータと分業する理由は3つ。
  1. DebianでなぜかPPPoEがうまく動かない。
  2. PPPoEが重い処理のため、鯖と分離したほうが処理能力が上げられる。
  3. 鯖が落ちててもネトゲができる。



Woodyのインストール

懲りずにDebian。 例によってJigdoでイメージを持ってきて焼いて、それでブートしてインストール。
ネットワークインストールするから1枚目だけ焼けばいい。
手順:
http://www.debian.org/CD/jigdo-cd/
jigdoファイルのありか:
ftp://ftp.fsn.hu/pub/CDROM-Images/
ちなみにSidのイメージを持って来ようとしてもなぜかエラーが出て構築がコケる。

インストール手順:
http://www.nofuture.tv/linux/debian/install/
http://www.orca.med.or.jp/receipt/tec/woody/woody_install_jma.rhtml
素人にとっては、こういうドキュメントがあるとないとでは大違い。

NICは今回1枚だけ。
3comは2枚セットでキープしたいので、今回はIntel EtherExpress100で。
モジュール選択でドライバはEtherExpress/100を選択。
一応NAT系のフィルタは全部突っ込んでおく。
(ドライバ以外については、どうせカーネル再構築のときに 再度指定するんだし適当に。)
taskselではC/C++、標準鯖、jaパッケージのみ選択。



各種設定とインストール

キーバインド変更

http://www-ana.ist.osaka-u.ac.jp/~t-eguti/linux/thinkpad_r31.html
みたまんま。

inetd.conf編集でいらんサービスを停止。

telnetとかfingerとかsmtpとかpop3とか閉じる。

sudoインストール

参照:http://www2.i-e-c.co.jp/common1.html

aptでいれる。
その後、visudoコマンドを実行し、
# User privilege specification
root ALL=(ALL) ALL
となっていますので、この後に、
bar ALL=(ALL) ALL
といれるといいらしい。
これをやると、
ユーザーbarは、
sudo apt-get install なんたら
で、「ユーザーのパスワードによる認証で」root権限のコマンドが実行可能になる。
一見すごそうだが、
個人の管理のサーバで、そこまでする必要があるかどうかは微妙。
ただ、かける手間はたいしたことないのでまあやっとけ。

proftpdインストール

例によってaptで。
インストール時にconfの編集を「する」。
スタンドアロン動作。anonは開けない。
このインストールでwu-ftpdはきえてくれる。
proftpd.confの編集を。
鯖名を適当にする。
デフォルトのポートは普通過ぎるので開けるポートは変える。
(わたしゃよくやります。)
DefaultRoot ~/を追加。(みえすぎ対策)

いらんサービスをアンインストールする

telnetとかfingerとか。
apt-get removeで。

Apacheのインストール

http://www2.i-e-c.co.jp/intro1.html
例によってaptで。

予備知識。
関連参照ディレクトリ、ファイル
設定ファイル:/etc/apache/httpd.conf
htmlファイル置き場:/var/www/以下。
cgiはhttpd.confでOptionsにExecCGIを指定したディレクトリに。
(普通はcgi-binとかでしょうかね。)

さてApacheはインストールしてからが大変なんですが。
/etc/apache/httpd.confをいろいろいじる。

日本語文字化け系1:
<IfModule mod_negotiation.c>
LanguagePriority ja en da nl et fr de el it pl pt pt-br ltz ca es sv
</IfModule>
冒頭にjaをもってくる。
日本語文字化け系2:
AddDefaultCharset off
offにしないとサーバのデフォルトフォントが設定されて日本語が以下略。
無い腹を探られるのを防ぐ1:
http://www.deer-n-horse.jp/linux/tips/apache.html

index.htmlが無い場合のディレクトリ表示をさせない。
<IfModule mod_autoindex.c>
(略)
</IfModule>
の部分をコメントアウト...するのだが、
範囲が広くてコメントアウトをミスするので放置してたり。
んで、
LoadModule userdir_module /usr/lib/apache/1.3/mod_autoindex.so
もコメントアウト。
実際にはモジュールのロードさえ止めれば問題ないのだ。セキュリティレベルは下がるが。
無い腹を探られるのを防ぐ2:
http://www.deer-n-horse.jp/linux/tips/apache.html

ユーザーディレクトリのpublic_htmlより上のディレクトリを表示させない。
LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
をコメントアウト。
さらに以下もコメントアウト。
<IfModule mod_userdir.c>
UserDir public_html
</IfModule>

MySQLのインストール

http://llama.logos.k.u-tokyo.ac.jp/~simokawa/archives/000134.html
ここは重要な情報が詰まっているが、あまりに詰まりすぎているので
読み解くには多少がんばる必要がある。
でも読むだけの価値はあるしいたずらにハードルが高いわけでもない。

つまり以下のパッケージをaptで拾って来い、と。

mysql-server
  以前のdbをpurgeするか?みたいなこと聞かれたのでnoにした
  boot時にmysqlを起動するか聞かれたのでyesにした
libdbi-perl(mysql-server入れたら入ってた)
libdbd-mysql-perl(mysql-server入れたら入ってた)
imagemagick
perlmagick
webmagick
  なんかわからんが紙のサイズ聞かれたのでa4にした
libmagick5
  (なんか知らんが上記パッケージいれたら入ってた)
libdps1
  いるらしい。これ入れないとImage::Magickがつかえないぽ。
  (http://www.rbdn.com/mt/archives/cat_1.html参照)

MySQLのユーザー設定

MySQLの設定は基本的にコマンドラインから行う。
adminのパス設定
mysqladmin -u root password ルートのパスワード

データベースの作成
mysqladmin -p -u root create データベース名

MySQLにログイン
mysql -p -u root mysql

データベースに権限を持つユーザー(適当)を作成
mysql>grant select,insert,update,delete,create on データベース名.* to ユーザー名@localhost;
最後のセミコロンをわすれないように。

抜ける
mysql>exit

作ったユーザのパスワードを設定する
mysqladmin -u ユーザー名 password ユーザーのパスワード

httpd.confでのMySQL関連の記載

上記webサイトの記載からほんのわずかだけ変更してある。
これはルートのwebページ置き場にMovableTypeを展開する場合。
ユーザーサイトに置く場合はExecCGIの問題が面倒なのでしらん。
Alias /mtt/ "/var/www/mt-cgi/"
<Directory "/var/www/mt-cgi">
AddHandler cgi-script .cgi
Options ExecCGI
Order Allow,Deny
Allow from all
</Directory>
<Location /mtt/db/>
Order Deny,Allow
Deny from all
</Location>

ただ、このLocationディレクティブは必要かどうかわからない。
なぜなら、MySQLは専用のファイル置き場をユーザーで用意する 必要がなさそうだからだ。
おそらくキモはDirectoryディレクティブで、 ここでcgiの実行許可とアクセス設定を行っている。
まあ、縁起物ということで。



MovableTypeのインストールと設定

MovableTypeと日本語化パッケをもってきて展開する。

http://llama.logos.k.u-tokyo.ac.jp/~simokawa/archives/000134.html
http://rebecca.ac/milano/mt/readme/
http://home.impress.co.jp/reference/1812.htm(本)

結局、1つの資料でバッチリということはないので、
いくつかの資料を見比べつつ自分の環境に読み替えたり試行錯誤することになる。

必要になるディレクトリを掘る。

ディレクトリ構成だが、
プログラム置き場(mt-cgi)
構成要素置き場(mt-static)
ブログ置き場(mt)
の3つが最低必要。(カッコ内は例)
これ以外に、使用するデータベースによってはデータベース置き場が必要らしいが、 今回使用するMySQLではいらんらしい。
それぞれの名称は設定で指定することになるので適当に。

この構成が、調べている資料ごとにてんでバラバラで、
さらにパーミッションとかも絡むので困る。

というわけで、 上記3つのディレクトリは、すべて/var/www/の下におく。
もちろん、これを行うのは自分がそのサーバの管理者であることが必須となる。
ユーザーディレクトリ(/home/だれか/public_html)以下に置こうとすると、 cgiの実行権限やらsuEXECの設定やらなんやらでわけわからん。

というわけで
/var/www/mt-cgi/
/var/www/mt-static/
/var/www/mt/
の3つが必要になる。

mt-cgiの名前は、先にhttpd.confで追記したExecCGI属性ほかの設定で決まる。
他の名前や場所がよければ適当に。

/var/www/mt/は、パーミッションを777に変更しておくこと。
chmod 777 /var/www/mt

必要なアーカイブを取ってくる。
悲しいことにapt-getではインストールできないので手動である。

Movable Type本体:http://www.movabletype.org/
日本語化パッチ:http://rebecca.ac/milano/mt/archives/000168.html
日本語関連perl:http://search.cpan.org/CPAN/authors/id/D/DA/DANKOGAI/Jcode-0.82.tar.gz

念のため、解凍はすべてサーバ上で行う。
Windowsで解凍するとパーミッションなどが狂いそうだからだ。

解凍コマンドはtar zxvf。
他の場所で解凍をしてから上記ディレクトリにコピーしたほうが何かと安全。

さて、まずは本体を解凍する。
解凍したら、全部をmt-cgiに放り込む。
次に日本語化パッチを解凍する。
/var/www/mt-cgi/images/以下にlang-jaというディレクトリを作成する。
解凍した日本語化パッチの中のmt-ja/images/以下をさきほどのlang-ja以下にコピーする。
解凍した日本語化パッチの中のMT.utf8.patchを/var/www/mt-cgi/にコピーする。
パッチを当てる。
patch -p1 < MT.utf8.patch(実際には不等号は半角)
そして、日本語関連perlを解凍する。
解凍したらJcodeディレクトリまるごととJcode.pmを、/var/www/mt-cgi/extlib/以下にコピー。

次に、スタティックデータの再配置。
理由はよくわからないが、cgi実行権限を与えているmt-cgiディレクトリからは、 外部アクセスの可能性のある部分は切り出してしまう。
/var/www/mt-cgi以下の、
imagesディレクトリ、docsディレクトリ、styles.cssを /var/www/mt-static/に移動する。
こいつらがページのデザインに絡む部分。
はじめから場所を移動しないのは、 ひょっとしたら日本語パッチがこいつらを書き換えてるかもしれないと思ったから。

MTの初期駆動

適当なクライアントから、mt-cgi下のmt-check.cgiを叩く。
1)ソースがそのまま見えてしまった場合:
MovableTypeの実行属性指定がうまくいっていない。
これは、httpd.confのどこかにとにかくエラーがある場合におこる。
MySQL関連のディレクティブを末尾に追加した場合、
httpd.confがエラーなしで実行できなければともかくコケる。
対策:とにかく記載ミスを見つけて防ぐ。
単に「apache」と打って実行した場合、
httpd.confにエラーがあればメッセージを表示してくれるので、 それを頼りにとにかくバグ潰す。
もちろん、実際のOptionsでのExecCGI指定周りが ミスっている場合もある。

2)きちんとcgiが実行されたが、足りないパッケージがあると言われた場合
なにかインストールぬけがあるぽい。

3)cgiも実行され、必要なパッケージは導入されていると言われた場合
次に進む。
mt.cfgの編集
http://llama.logos.k.u-tokyo.ac.jp/~simokawa/archives/000134.html
http://rebecca.ac/milano/mt/readme/
http://home.impress.co.jp/reference/1812.htm(本)
例によって情報はチャンポン。
順を追っていくには本を参考にするのがよい。

CGIPathの設定(書き換え)

CGIPath http://www.なんとか.jp/mt-cgi/
ここにはいわゆるurlとしてのMovable Type本体のパスを書く。
このへんはDNSやらバーチャルホストやらが絡むので、
まあがんばってちょ。

DataSourceのコメントアウト

MySQLを使用している場合はコメントアウトする。

SQL絡みの設定(追記)
さきのDataSourceのコメントアウトの後くらいに書くのがよさげ。

ObjectDriver DBI::mysql
Database データベース名
DBUser データベースユーザ名

ここのデータベース名、ユーザ名は、MySQLの設定で記載したもの。

SQL絡みの設定(別ファイル)

さらにmt.cfgとは別に、mt-db-pass.cgiに データベースのパスワードを記載する。

StaticWebPathの設定(書き換え)

StaticWebPath /var/www/mt-static/
この設定がなければMovableTypeはこのディレクトリを参照できない。

NoHTMLEntitiesの設定(書き換え)

NoHTMLEntities 1
文字化け対策。

ImageDriverの設定(書き換え)

ImageDriver ImageMagick
サムネイル画像関連設定。

PublishCharset(書き換え)

PublishCharset UTF-8
パッチのときもそうだが、UTF-8のほうがいろいろと便利らしい。
mt-load.cgiの実行
http://rebecca.ac/milano/mt/readme/

ここで「All went well」と表示されれば、 Movable Typeのインストールは完了らしい。
そのくせFAILURE TO DELETEとか書かれてて非常にまぎらわしかったりするが、 これでいいらしい。

この画面がでたら、mt-load.cgiは削除するのがよいそうだ。

mt.cgiの実行

これでログイン。
初期状態ではMelody, Nelsonと書くそうだ。
ログインしたらさっさと書き換えを。

ただし、
うちのルータはダイナミックDNSで割り当てられたWAN側のアドレスを LAN側で解決できないためか、 保存とかするとエラーが出ます。
保存はされてるぽいですが。

ちょっと面倒ね。

管理画面からとりあえずやっておくこと。
日本語カテゴリ表示への対応
基本設定>ウェブログの設定>アーカイブの設定>Category
テンプレートに「cat_<$MTCategoryID$>.html」(不等号は本来は半角) と記載。



ここまでやったらMT使えます。



以下記載予定:
・カーネルのアップデート(現在は完了。apt lineにちょいと書くことがある)
・LAN内マシンからのDNS問題の対策法(現在は対策できました)
・スタイルシートとテンプレートの編集(現在も苦闘中)