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の使い方を理解しながら、コンテンツを作成して行く予定です。

玄箱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)

Gentoo玄箱、一丁あがり!

英語サイト『kurobox.com』な方法で、玄箱Gentoo化を進めてまいりましたが、システムを最新にすることと、いくつかの設定を行って、Gentoo化の仕上げとします。

EMモードから、通常モードに変更して、リブートして、sshで入ります。・・・・・・
『おお、見事Gentoo化玄箱に入ることができました。』

kurobox.com』のドキュメントは、一応ここまでですが、まずemerge systemを実行して、システムを最新状態にします。
その前に、glibcのコンパイルを少しでも、早くするために、不要なlocaleは、コンパイルしないようにしておきます。

# mkdir -p /etc/portage
# echo "sys-libs/glibc userlocales" >> /etc/portage/package.use

/etc/locales.buildを編集して、

en_US/ISO-8859-1 en_US.UTF-8/UTF-8 de_DE/ISO-8859-1 de_DE@euro/ISO-8859-15
ja_JP.EUC-JP/EUC-JP ja_JP.UTF-8/UTF-8 ja_JP/EUC-JP

以外は、削除します。
次に

# emerge -uD system

を実行して、最新のportageで、ベースシステムをリコンパイルします。これには、かなり時間がかかります。寝る前に、実行して、朝起きたときには、まだ終わってませんでした。ただ、いままでのように途中で固まってセッションが切れてしまわなかったのが幸いです。なんとか、10時ころには、おわりました。

前にも述べましたが、玄箱Gentooは、時間がかかるのがネックです。1パッケージ1日がかりでは、サーバ化は程遠いです。

少しでもコンパイルを早くするために、ccachedistccを導入します。

まずは、ccacheから

# emerge ccache

これは、すんなり終わりました。
/etc/make.confを編集して

FEATURES="ccache" CCACHE_SIZE="2G" CCACHE_DIR="/var/tmp/ccache"

として、ccacheの設定は完了です。

次は、distccです。こちらも、時間はかかるけど、手順は簡単です。(お手伝いさせるボロPCでも、同様にdistccをインストールします)

# emerge distcc

これがなんと、依存モジュールなども引っ張ってくるので、40パッケージもインストールされるようです。12時ころ実行を始めて、今3時をまわったところ・・・
今、6つ目を実行しています 。

設定を、やってしまいます。
/etc/make.confを編集するわけですが、今実行中なので、

# cp /etc/make.conf /etc/make.conf.new

として、/etc/make.conf.newを編集して、後で差し替えることにします。変更箇所は次のとおり

PORTAGE_TMPDIR=/var/tmp MAKEOPTS="-j6" FEATURES="ccache distcc"
 ←distccを追加 DISTCC_DIR="${PORTAGE_TMPDIR}/.distcc"

ホストマシンの登録と、起動スクリプトの登録して、distccの導入は終わりです。

# ditcc-config --set-hosts "192.168.11.101"
# rc-update add distccd default

distccemergeがまだ実行中ではありますが、『kurobox.com』な方法での、玄箱Gentoo化は、完了とします。国内の玄箱いじり諸先輩方は、とっくにいじりつくして、今は下火気味ではありますが、外国(たぶん米国?)では、ここまでいじりまくっているとは・・・びっくりです。

これからは、自宅サーバ化して、Webサーバとして公開したいと思っております。
(現在は、公開をやめております)

玄箱Gentoo化 — 『kurobox.com』の手順 その4

systemの本番emergeは、ブート後にやるとして、設定をやってしまいます。

なれないnanoは使いにくい。vimをいれてしまいます。

KURO-BOX-EM # emerge vim

viを使って、/etc/fstab — 次のように編集します。

/dev/hda1 / ext3 noatime 0 1
/dev/hda2 none swap sw 0 0
/dev/hda3 /var ext3 noatime 0 2
/dev/hda5 /server ext3 noatime 0 2
/dev/hda6 /backup ext3 noatime 0 2
/dev/hda7 /media ext3 noatime 0 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0

マウントディレクトリを作成します。

KURO-BOX-EM /
# mkdir /server KURO-BOX-EM /
# mkdir /backup KURO-BOX-EM /
# mkdir /media

rootパスワードの変更と、一般ユーザの作成

KURO-BOX-EM / # passwd
New UNIX password:
Retype new UNIX password:
passwd: password updated successfully
KURO-BOX-EM / # useradd kuro -m -G users,wheel -s /bin/bash
KURO-BOX-EM / # passwd kuro
New UNIX password:
Retype new UNIX password:
passwd: password updated successfully

/etc/conf.d/netを次のように編集して、IPアドレスを割り当てます。

config_eth0=( "192.168.11.111 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.11.1" )

/etc/hostsは、とりあえず以下のように

127.0.0.1 localhost kuro

telnetは使わず、sshを使います。

KURO-BOX-EM / # /etc/init.d/sshd start

少し時間がかかりますが、公開キー、秘密キーが生成されます。入れるかどうか、テストしておきます。

ボロPCから、

$ ssh root@192.168.11.3 ...
Password:

rootパスワードを入力し、入れればOKです。

ブート時に、ネットワークを有効にすることとsshdが起動するように、defaultランレベルに登録します。

KURO-BOX-EM / # /etc/init.d/sshd stop
KURO-BOX-EM / # rc-update add net.eth0 default
* net.eth0 added to runlevel default
* rc-update complete.
KURO-BOX-EM / # rc-update add sshd default
* sshd added to runlevel default
* rc-update complete. 

マウントを解除して、通常モード(EMモードでない)で起動します。

KURO-BOX-EM / # exit
# umount /gentoo/var
# umount /gentoo/proc
# umount /gentoo
# echo -n "OKOK" > /dev/fl3
# reboot

一応これで、Gentoo化玄箱が、立ち上がるはずですが、次は仕上げとして、システムを最新の状態にすることと各種設定を行って、『kurobox.com』な方法でのGentoo化玄箱完成といたします。

・・・(To be continued)

玄箱Gentoo化 — 『kurobox.com』の手順 その3

これまでの、手順はほとんどボロPCのときと変わりません。それでは、chrootしてGentooシステム内にはいります。

# mount -t proc none /gentoo/proc
# cp -L /etc/resolv.conf /gentoo/etc/
# mount -t proc none /gentoo/proc
# cp -L /etc/resolv.conf /gentoo/etc/
# chroot /gentoo /bin/bash 

KURO-BOX-EM / # source /etc/profile

プロンプトが、変わりました。

しばらくは使いにくいnanoを使うので、TERM変数を設定しておきます。

KURO-BOX-EM / # export TERM=vt100

portageスナップショットは、/varの直下につくります。kurobox.comでは、/var/tree下に作っていますが、今回使用しているファイルでそのようにすると、シンボリックリンクが、1つ深くなってしまってうまくいきません。

KURO-BOX-EM / #

以下の、portage下に必要なディレクトリを作っておきます。

KURO-BOX-EM portage # cd /var/portage
KURO-BOX-EM portage # mkdir distfiles
KURO-BOX-EM portage # mkdir packages
KURO-BOX-EM portage # mkdir rpm
KURO-BOX-EM portage # cd ..
KURO-BOX-EM portage # mkdir overlays

/etc/make.confnanoで開いて、以下のように編集しました。

# Kurobox make.conf

CFLAGS="-O2 -mcpu=603e -fno-strict-aliasing -pipe -fsigned-char"
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.121/gentoo-portage"

PORTAGE_TMPDIR=/var/tmp
MAKEOPTS="-j6"
FEATURES="distcc"
DISTCC_DIR="${PORTAGE_TMPDIR}/.distcc"

ボロPCをrsyncサーバーをして、玄箱ではよく失敗するportage更新を、LAN内で実行するように、SYNC変数を指定しています。
また、玄箱でネックとなる、コンパイルを少しでも、早く実行できるようdistccを利用して、ボロPCに手伝わせる指定もしております。
rsyncサーバの構築とdistccの導入については、別途『Gentooいじり』に書く予定です。

/etc/make.profileにシンボリックリンクをはっておきます。

KURO-BOX-EM portage # rm make.profile
KURO-BOX-EM portage # ln -s ../var/overlays/kurobox/profiles/kurobox make.profile

次に、portageキャッシュをアップデートしておきます。

KURO-BOX-EM portage # emerge metadata

emergeをテストランして、portageの整合性をチェックします。

KURO-BOX-EM portage # emerge -puD system
Calculating system dependencies ...done!

OK!

ついでに、ボロPCにrsyncして、portageを最新状態にしておきます。

KURO-BOX-EM portage # emerge --sync

ふ~む、多少早い気がする・・・。LAN内から、ダウンロードしてるんだから、その分早くなるのは当たり前か。

とりあえず、ここでティーブレイク。

・・・(To be continued)

玄箱Gentoo化 — 『kurobox.com』の手順 その2

パーティション分割は、ドキュメントにならって、160GBのディスクを次のように分割しました。

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        1246    10008463+  83  Linux
/dev/hda2            1247        1309      506047+  82  Linux swap
/dev/hda3            1310        2555    10008495   83  Linux
/dev/hda4            2556       19457   135765315    5  Extended
/dev/hda5            2556        4423    15004678+  83  Linux
/dev/hda6            4424        6291    15004678+  83  Linux
/dev/hda7            6292       19457   105755863+  83  Linux
  • /dev/hda1 --- /
  • /dev/hda2 --- swap
  • /dev/hda3 --- /var
  • /dev/hda5 --- /server
  • /dev/hda6 --- /backup
  • /dev/hda7 --- /media

フォーマットです。

# for i in 1 3 5 6 7 ; do mke2fs -j /dev/hda$i ; done

コマンドラインでforループか、やるなぁ!

swap領域もフォーマット。

# mkswap /dev/hda2

ディスクをマウントして、ルートからのツリーを作成します。

# mkdir /gentoo
# mount -t ext3 /dev/hda1 /gentoo
# mkdir /gentoo/var
# mount -t ext3 /dev/hda3 /gentoo/var

ディスクがマウントされたので、ダウンロードしたファイルをftpで転送します。

ftp> put system-20060108.tar.bz2
ftp> put portage-20060127.tar.bz2
ftp> put overlay-20060122.tar.bz2

ファイルダンプ

# cd /gentoo
# tar xvjf system-20060108.tar.bz2
./bin/
./bin/gawk
./bin/awk
./bin/bunzip2
./bin/pgawk
./bin/igawk
./bin/rc-status
./bin/login
./bin/mount
./bin/umount
[...]
./var/spool/cron/lastrun/.keep
./var/spool/cron/.keep
./var/state/
./var/state/.keep
./var/empty/
./var/empty/.keep

ルートディレクトリは、次のようになってます。

# ls
bin         etc         lost+found  proc        sys         var
boot        home        mnt         root        tmp
dev         lib         opt         sbin        usr

次は、chrootして、新Gentooシステム内に入ります。

・・・(To be continued)