MODxにはまる


今日は土曜日でもあり、MODxをいじりまわしていたのですが、私の知っているCMSとはまったく違っていて、理解の追いついていな現段階での感想は、 
「なんかすごい!」 
そろそろ「XOOPSいじり」を始めようかと思っていたのですが、こりゃ「MODxいじり」になりそーです^^

もう少し理解が進んだら、こちらでも紹介して行こうと思いますが、現在わかっている範囲で目に付いた特徴は、
・AJAXを使っていて、コンテンツ編集が高機能。
・ページの構成は、テンプレートでページ全体を記述し、その中に「パーツ」を埋め込んでいく感じ。
・「パーツ」には、「テンプレート変数」「チャンク」「スニペット」といったものがある。これらは、すべて管理者が定義できる。
・「テンプレート変数」はブログシステムでは、よく使われるもので、テンプレートの中に特定の記法で記述しておくと、記事名とか投稿日時とかに置き換わる。 ・「チャンク」HTMLで記述された部品。例えば、Login用のサイドバーとか・・。
・「スニペット」PHPで記述された関数のようなもの。パラメータを渡すことができる。例えば、コメントフォームやログインフォームの部品など。
・プラグイン可能。(他の部品との違いがまだよくわかってません)
・モジュール可能。(プラグインとどう違うのか・・・?)
・各コンテンツは、階層構造で管理。
・バックアップ機能あり。

まだまだ知らない機能がたくさんありそうですが、玄箱コンテンツは、MODxを使って構築して行こうと思ってます。
Hug-worldの「Linuxいじり」と「玄箱自宅サーバ」の使い分けは、前者が「ブログ」中心、後者が「まとめ」といった方向になると思います。

MODxの基本設定


インストールの後は、MODxの基本的なシステム設定をやってしまいます。 ブラウザから、「MODxルート/manager/」にアクセスすると、次のような画面が表示されます。
MODx

「installディレクトリが残っている」と警告が出ているので、削除しておきます。

# rm -rf install

次に日本語化します。
前回ダウンロードしてきたjapanese-euc.inc.zipを解凍して、「MODxルート/manager/includes/lang/」の下にコピーします。 上の画面の「Administration-System configuration」よりの「Site setting」タブより、
Language: Japanese-euc
Character Encoding: Japanese(EUC)-euc-jpを選択し、「save」します。 上の管理画面は、次のように日本語化されて、作業がやりやすくなりました。
MODx

基本設定を続けます。
管理画面「管理-MODx設定」の「サイト設定」のタブを開き、
・サイト名:momomo.homelinux.com
・公開デフォルト:yes にして「保存」します。
「フレンドリURL」というのが、静的HTML生成に関連するオプションのようです。 「フレンドリURL」タブより、
・フレンドリURLの使用:yes を選ぶと、フレンドリURLを使用した際の詳細オプション入力が現れます。とりあえず、デフォルトのまま「保存」しました。
このフレンドリURLを有効にするには、各ディレクトリにある「ht.access」という名のファイルを「.htaccess」にリネームします。 apacheの設定で、
AllowOverrideが有効になっていること
mod_rewriteモジュールが有効になっていること
を確認します。

基本的な設定は、以上です。 これからは、MODxの使い方を理解しながら、コンテンツを作成して行く予定です。

MODxを使ってみるか・・・


玄箱自宅サーバを何(CMS)で構築しようか、色々迷ってます。
とりあえず当初の予定通りxoopsを入れてみました。

インストール方法は、xoopsが使えるレンタルサーバなどに詳しい説明があるので、ここでは省略します。
(mysqlを導入していなかったので、その前にemerge mysqlしました)

それなりの重さだけれども、xoopsにするか・・・使えないこともないし・・・。公開されているモジュールも多いし・・・。 なにか吹っ切れないものがある・・・。 と ・・・
MODx???
聞きなれない名前・・・ 試しにインストールしてみたら、
これ、行けるかも。

AJAXを使っていてUIが楽しい、何よりも気に入ったのが、mod_rewriteを使った静的HTMLに対応していること。
日本語ドキュメントがほとんどないので、少し時間がかかりましたが、インストール自体は簡単です。
本家サイトから、MODx-0.9.1.tar.gzをダウンロードしてきます。
フォーラムから、EUC日本語化ファイル japanese-euc.inc.zip もダウンロード。
mysqlで、modx用のデータベースとユーザを作成して、

# tar zxvf MODx-0.9.1.tar.gz

ディレクトリMODx-0.9.1を適当な名前に変えてドキュメントルートとする。 ブラウザから、玄箱にアクセスすると

Unable to load configuration settings  Please run the MODx install utility

こんな画面が出たので、install utilityをクリック。

MODx


ほう、なかなか美しい。
[Next]をクリックして、インストールを進めます。 License Agreementのメッセージの画面が出たので、

□ I agree to the terms set out in this license.

のチェックボックスをチェックして[Next]クリック。
次の画面で、New Installationを選んで[Next]クリック。
Database Name: 用意したmysqlデータベース名
Table prefix: modx_ 
Database host: localhost 
Database login name: 用意したmysqlユーザ名 
Database password: 上のユーザ名のパスワード 
Administrator username: 管理者ユーザ名 
Administrator password: 管理者パスワード 
Confirm password: ↑と同じものを入力して、[Next]クリック。
次の画面は、そのまま[Next]クリック。
次の画面で、ファイル属性の警告が出たので、指示通り

# chmod 777 assets/cache assets/images assets/export manager/includes
# chmod 666 assets/cache/*

として、[Retry]をクリック。 チェックはすべてOKになったので、[Install now]をクリックすると・・・ インストールはうまくいったようです。 次は、システムの基本的な設定を行います。

・・・(To be continued)

玄箱Webサーバ稼動


USE="mysql"emerge --newuse worldしたので、apache2phpmysqlによるxoopsが使える環境になりました。 Webサーバを公開するにあたり、ダイナミックDNSを使うことにします。

メジャーなところで、dyndns.comに登録しました。homelinux.comというサブドメインを使ってmomomo.homelinux.comとしました。(現在は利用していません)apacheの設定を少しばかり変更します。

/etc/apache2/httpd.conf

#AddDefaultCharset ISO-8859-1
AddDefaultCharset EUC-JP

バーチャルホストの機能を使い、外からのmomomo.homelinux.comでアクセスされた時のドキュメントを/var/www/momomo下に、LANからプライベートドキュメントとしてアクセスするドキュメントをデフォルトの/var/www/localhost/htdocs下に置くことにします。

/etc/apache2/vhosts.d/00_default_vhostを編集して

NameVirtualHost *:80
ServerAdmin webmaster@momomo.homelinux.com
DocumentRoot /var/www/momomo
ServerName momomo.homelinux.com
ErrorLog /var/log/apache2/momomo-error.log
CustomLog /var/log/apache2/momomo-access.log common
ServerName kuro
DocumentRoot "/var/www/localhost/htdocs"
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from 192.168.11.0/24

これで、LAN内からhttp://kuro/でアクセスした時はプライベートなドキュメントに、http://momomo.homelinux.com/でアクセスされた時は公開用のドキュメントにと、振り分けられるわけです。 
名前ベースのバーチャルホストを使用するには、注意が必要です。 Allow from 192.168.11.0/24とLAN内からのみのアクセスに限定しないと、ちょっとしたおまじないで、プライベートなはずのhttp://kuro/にアクセスされてしまうからです。デフォルトランレベルに登録して

# rc-update add apache2 default

apacheを起動します。

# /etc/init.d/apache2 start

次に、ルータの設定で、ポート80を玄箱に向けて、外からアクセスできるようにします。 DDNSクライアントを立ち上げるところですが、ルータにその機能があったのでDDSNの設定もルータにて行いました。 まだコンテンツまったくなしでつまらないですが、良かったら試しにアクセスしてみて下さい。(現在稼働していません)
http://momomo.homelinux.com/ 

分散クロスコンパイル環境の構築


パワー不足の玄箱でGentooを運用して行くには、少しでもコンパイルの速度を上げないとGentooが生きて来ないだろう、ということで・・・

ボロPC(とは言え、Pentium III 800MHz)に、コンパイルをお手伝いさせようと、前回は、PowerPC(玄箱)のコンパイル環境をPentiumeIII上に構築したわけです。

今回は、分散コンパイルさせるために、distccの導入です。
既に、玄箱には、distccは導入してあるので、ボロPCにも入れます。ついでに、ccacheも入れてしまいます。

ボロPCで:

# emerge distcc ccache

色々と試行錯誤がありましたが、最終的に次のようになりました。

玄箱側の設定:
/etc/make.confの内容:

CFLAGS="-O2 -mcpu=603e -fno-strict-aliasing -pipe -fsigned-char"
CHOST="powerpc-unknown-linux-gnu"
CXXFLAGS="${CFLAGS}"
PORTDIR=/var/portage
DISTDIR=/var/portage/distfiles
PKGDIR=/var/portage/packages
RPMDIR=/var/portage/rpm
PORTDIR_OVERLAY="/var/overlays/kurobox"
RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes
GENTOO_MIRRORS="http://mirror.gentoo.gr.jp/"
SYNC="rsync://192.168.11.101/gentoo-portage"
PORTAGE_TMPDIR=/var/tmp
MAKEOPTS="-j6"
FEATURES="ccache distcc"
DISTCC_DIR="${PORTAGE_TMPDIR}/.distcc"
CCACHE_SIZE="2G"
CCACHE_DIR="/var/tmp/ccache"

ホストの指定:

# distcc-config --set-hosts 192.168.11.101

/usr/lib/distcc/powerpc-unknown-linux-gnu-wrapperを次の内容で新規に作成する。

#!/bin/bash exec /usr/lib/distcc/bin/powerpc-unknown-linux-gnu-g${0:$[-2]} "$@"

これは、powerpc-unknown-linux-gnu-gccのようにフルネームではなく、gccと短い名前で呼ばれたときに、フルネームで呼ばれたかのように見せかけるラッパーです。
コンパイラが起動されたときにdistccを実行するように、シンボリックリンクをはります。

# cd /usr/lib/distcc/bin
# chmod a+x powerpc-unknown-linux-gnu-wrapper
# ln -s powerpc-unknown-linux-gnu-wrapper c++
# ln -s powerpc-unknown-linux-gnu-wrapper cc
# ln -s powerpc-unknown-linux-gnu-wrapper g++
# ln -s powerpc-unknown-linux-gnu-wrapper gcc
# ln -s /usr/bin/distcc powerpc-unknown-linux-gnu-c++
# ln -s /usr/bin/distcc powerpc-unknown-linux-gnu-g++
# ln -s /usr/bin/distcc powerpc-unknown-linux-gnu-gcc

デフォルトランレベルにdistccccacheを登録しておきます。

# rc-update add distcc default
# rc-update add ccache default

ボロPC側の設定:
/etc/make.confの内容:

CFLAGS="-Os -march=pentium4 -pipe"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
GENTOO_MIRRORS="http://mirror.gentoo.gr.jp"
SYNC="rsync://rsync.jp.gentoo.org/gentoo-portage"
PORTDIR_OVERLAY="/usr/local/portage"
PORTAGE_TMPDIR=/var/tmp
MAKEOPTS="-j2"
FEATURES="ccache"
CCACHE_SIZE="2G"
CCACHE_DIR="/var/tmp/ccache"

こちらは、お手伝いをするだけなので、設定はこれだけです。
玄箱と同じくデフォルトランレベルに登録しておきます。

# rc-update add distcc default
# rc-update add ccache default

以上で、設定は終わりです。
それぞれのマシンでdistccccacheを起動した後、玄箱側で何かをemergeしてボロPC側で、powerpc-~cc1・・・などのプロセスが実行されれば、導入は成功です。

ntpによる時刻の同期


コンパイル環境は、ひとまず整ったので、これからは、必要なパッケージを導入して行きます。 まずは、軽いところから、ntpを。

# emerge ntp

(多少は速くなっているのかな・・・) /etc/ntpd.confの編集:

server [ntpサーバの指定] (一番近いであろうプロバイダのNTPサーバを指定しました)
driftfile       /var/lib/ntp/ntp.drift
restrict default nomodify nopeer
restrict 127.0.0.1    # LAN内からアクセスできるようにして、サービスを公開
restrict 192.168.11.0 mask 255.255.255.0
nomodify
nopeer
notrap

/etc/conf.d/ntp-clientの編集:

NTPCLIENT_CMD="ntpdate"
NTPCLIENT_OPTS=" -b -u [NTPサーバの指定]"
NTPCLIENT_TIMEOUT=30

デフォルトランレベルに登録しておきます。

# rc-update add ntpd default
# rc-update add ntp-client default

ボロPC側でも、同様の手順でntpを導入し、[NTPサーバ]指定の箇所には、玄箱のアドレスを指定して、LAN内を同期させるようにしました。

クロスコンパイル環境の構築


ひさびさのGentooいじりの投稿です。Gentoo玄箱は、立ち上がったものの、パッケージ導入の時間のかかること。
少しでも、このボトルネックを解消しようと、ボロPCにクロスコンパイル環境を構築して、distccを使った分散コンパイルを使用するという計画です。
なかなかうまくいかなかったのですが、なんとか動きだしたので、ご報告させていただきます。
ツールチェーンの構築は、何度か経験はあるのですが、「なんか面倒だった」という記憶だけ残っていて、すっかり忘れていました。 いろいろ調べていると、crossdevというツールがあるらしい。今回はこれを試してみることにしました。

# emerge crossdev

このツールは、コマンド一発で、ツールチェーンを構築してくれる優れものです。 まず、最初にやらなければならないのが、ターゲットマシン(すなわち玄箱)のツールチェーン環境のバージョンを調べることから。現在の玄箱にインストールされているバージョンは、次のとおりです。

  • gcc 3.4.4-r1
  • binutils 2.16.1
  • kernel(header) 2.4.26-r1
  • glibc 2.3.5-r3

次に、crossdevを使って

# crossdev -t powerpc --g 3.4.4-r --b 2.16.1 --k 2.4.26-r1 --l 2.3.5-r3

で後は、待つだけ。 のハズなのですが、configure中にエラーが出てしまうのです。ソースを見たり、検索でこんな事例はないか調べたり、まったく検討違いのことばかりの3日間。 結局、ボロPC(ホスト側)のビルドチェーンが玄箱のバージョンに対応できなかったのです。分かってしまえば、こんなもの、とほほ・・・

# emerge -uD system

を実行して、再度crossdevして、無事クロス環境の構築は完了。 crossdev、偉い! 次は、クロスでの、分散コンパイル環境の構築。

・・・(To be continued)