2006.12.17

php5-5.2.0のインストール・・・(php)

(2012/1/30 FreeBSD 9.0へのインストールにともない以前の記述に加筆修正した)

mysqlのインストールが、なんとか終了したので、次にphpを入れることとした。

このphpも言語指定、2バイト文字の処理、perl互換の正規表現処理で幾度か苦労した。
まず、portsを最新にしてから/usr/ports/lang/php52に移動し、make configでオプションを指定

# cd /usr/ports/lang/php52
# make config

ここで、少なくともAPATCH, MULTIBYTEにチェックマークを入れ、

# make install clean

次いで、phph52-extensionsに移動してmake config

# cd ../php52-extensions
# make config

ここで、DBASE, MBSTRING, MYSQL, PCREにチェックを付けインストール

# make install clean

途中でエラーが出て、make deinstallしてmake installをやり直すか、FORCE_PKG_REGISTERをコマンドラインに使えとメッセージがでることがある。
make deinstallしてもinstallがうまく行かないので、FORCE_PKG_REGISTERを使って

# make FORCE_PKG_REGISTER=1 install

とするとうまく行った。

ここで、/usr/local/etcにあるphp.ini-distをphp.iniに名前を変えて編集

# cd /usr/local/etc
# cp php.ini-dist php.ini
# chmod +w php.ini
# vi php.ini

まず、Language OptionsのShort oen tagをOnに修正

short_open_tag = On
   これでphp文の始まりの<?phpを<? で済ませられる。 

次に[mbstring]の項目を下記に修正

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.encoding_translation = On
mbstring.detect_order = auto

ここで、Apacheのhttpd.confのLoadModuleに下記の1行が追加されていることを確認し、AddTypeとしてphpを追加

LoadModule php5_module        libexec/apache2/libphp5.so ← 確認
    Addtype application/x-httpd-php .php ← 追加

そして、apacheを再起動し、check.phpの名前で以下の1行を書いたファイルを作りwebから見える位置においてアクセス。

<?php phpinfo(); ?>

phpの設定状態の表示画面が出て、無事成功。mbstringの項目も表示されていることも確認する。


2006.12.10

mysql-5.0.27のインストール(obsolete)・・・(Database)

(obsolete) MySQL バージョン5.5.6 を御覧ください
11月の中旬にmysqlとphpを用いた頼まれもののアプリを書いているときに、うっかりmysqlを壊してしまった。
最初は簡単に復帰でいるだろうと思っていたが、日本語処理でトラブルがでて、大変な目に会ってしまった。
解ってしまえば簡単なことであったのだが、時間に追われる中で混乱を来たし、私のところのサーバでブログを開設している5人ほどの人にも大変な迷惑をかけてしまった。
前置きはこれぐらいで、本筋に戻るが、どうせ壊れたのだからmysql-4.1をmysql-5.0.27に上げようと、/ports/databases/mysql50-serverとmysql50-clientを入れようとした。
調べるとEUCを使うにはコンパイルオプションで以下のように、デフォルトの文字コードのujis(EUC)とその他の文字を以下のように指定すれば良いことが分かった。

# make WITH_CHARSET=ujis WITH_XCHARSET=all install clean

次に/etcにmy.cnfを作って、修正

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# cd /etc
# chmod +w my.cnf
# vi my.cnf
[mysqld]
datadir = /usr/db/mysql
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

mysqlをuserとgroupに追加

#vipwして次の1行を追加

mysql:*:88:88::0:0:MySQL Daemon:/nonexistent:/sbin/nologin

次に/etc/groupにmysqlを追加

# vi /etc/group して次の1行を追加

mysql:*:88:

そして、DBをインストールして起動

# mkdir /usr/db
# mysql_install_db
# chown -R mysql /usr/db/mysql
# cd /usr/local/etc/rc.d
# cp /usr/local/share/mysql/mysql.server ./mysql-server.sh
# ./mysql-server.sh start

無事起動したら、mysql-clientからパスワードを設定

# mysql -u root
mysql > use mysql;
mysql > set password for root@localhost=password('xxxxx');
mysql> flush privileges;
mysql > exit;

パスワードの設定は以前は set password for root=password(‘xxxxx’); で良かったが、今回は
root@localhost=password(‘xxxxx’); と
@localhostが必要であった。
最初の起動でrootのパスワードの設定を行わずに抜けると、後からloginできず酷い目に会う。
筆者も、うっかりやってしまって、大変な思いをした。
一応loginが出来なくなった場合の対処方法を下記に書いておく。

# mysqld_safe --skip-grant-tables &
# mysql -u root mysql
mysql > UPDATE user SET Password=PASSWORD('mynewpassword')
      -> WHERE User='root';
mysql > flush privileges;

この後、mysql;を停止(kill)して、正規に立ち上げる。
さて、無事にインストールして念のために文字コードを調べたら、

# mysql -u root -p
Password xxxxxxx
mysql > SHOW VARIABLES LIKE 'character_set_%';
+----------------------------------+-------+
| Variable_name                 | Value  |
+----------------------------------+--------+
| character_set_client          | latin1 |
| character_set_connection    | latin1 |
| character_set_filesystem             | binary |
| character_set_database       | latin1 |
| character_set_results           | latin1 |
| character_set_server         | latin1 |
| character_set_system         | utf8   |
+----------------------------------+--------+
6 rows in set (0.00 sec)

ujis(EUC)になっていないので、/etc/my.cnfで指定するのだろうと思って、[mysqld]の中で、[mysqld]のセクションに、

default-character-set=ujis

を入れて、起動しようとすると、ujisなんて無いよと怒られる。
だって、WITH_CHARSET=ujisを入れたじゃないかと叫んでも、どうにもならない。
結局、http://www.mysql.com からソースをダウンロードして自前でコンパイルして入れることにした。
サイトのダウンロードページには、WindowsやLinuxのPrecompiled Binaryのファイルがずらっと並んでいるが、一番下に、Tarball (in 5.1 both Unix & Windows, tar.gz)があったので、これをダウンロードする。
そして、以下のようにしてインストール、

# tar xvzf mysql-5.0.27.tar.gz
# cd mysql-5.0.27
# ./configure --prefix=/usr/local --with-charset=ujis 
--with-extra-charset=all --with-mysqld-user=mysql

無事configureが終わり、いよいよインストール

# make install

clientは問題なさそうなので、早速起動して文字コードを調べてみる。

mysql> SHOW VARIABLES LIKE 'character_set_%';
+----------------------------------+--------+
| Variable_name                 | Value  |
+----------------------------------+--------+
| character_set_client                   | ujis       |
| character_set_connection          | ujis       |
| character_set_database        | ujis       |
| character_set_filesystem            | binary  |
| character_set_results                 | ujis       |
| character_set_server                 | ujis       |
| character_set_system         | utf8      |
+----------------------------------+--------+

systemはデフォルトでutf8、filesystemはbinaryで問題ないとのことなので、無事ujsi(EUC)が使えるようになっている。
早速ブログ用のmtdbを作って(mysqlの導入参照)、念のために再立ち上げして文字コードを調べる。

mysql > use mtdb;
mysql> SHOW VARIABLES LIKE 'character_set_%';
+------------------------------------+---------+
| Variable_name                  | Value   |
+-------------------------------------+--------+
| character_set_client            | ujis       |
| character_set_connection       | ujis       |
| character_set_database          | latin1   |
| character_set_filesystem                | binary  |
| character_set_results            | ujis       |
| character_set_server             | ujis      |
| character_set_system              | utf8     |
+-------------------------------------+-------+

databaseがlatin1(うろ覚えなのでbinaryだったかも知れない)になっている。
どうも、以前の古いデータを参照しているようなので、一度 mtdbを破棄して、改めて作成する。
そして、文字コードを調べる。

mysql> SHOW VARIABLES LIKE 'character_set_%';
+------------------------------+--------+
| Variable_name                     | Value   |
+------------------------------+--------+
| character_set_client             | ujis       |
| character_set_connection    | ujis       |
| character_set_database       | ujis       |
| character_set_filesystem      | binary   |
| character_set_results           | ujis        |
| character_set_server            | ujis       |
| character_set_system           | utf8      |
+------------------------------+--------+

めでたし、めでたしsystemとfilesystemを除き、全てujsiになっている。
しかし、ブログのデータを飛ばしたのは申し訳ないことをした・・・


2006.10.17

spamメール対策(その2)・・・(mail)

前のエントリーでスパム対策として、accessに加えてGreeting pauseの設定について書きました。
しかし、次々に すり抜けて来ます。
こうなったら、Spam Assasinでも入れるかと考えたのですが、ただ入れただけではスパムが判定できても、スパムメールを受けた旨の通知は届くので、これならThunderbirdのスパム判定とあまり変わりなく、キッチリと機能させるためには、Procmailと組み合わせて自動的に捨てる仕組を作る必要があります。
チョット厄介だなぁーと思って二の足を踏んでいたのですが、世の中にはRBL(Real Time Black List)というものがあり、適宜Black Listを更新してくれています。
しかし、海外のRBLはNiftyがRBLに登録されたり(NiftyをかたってSpamを出すのもあるので)で、あまりよろしくないなぁーと思っていたら、日本発の”all.rbl.jp”というのがあり、手堅く運営している(それだけすり抜けよいが)ようなので,これを使ってみることにしました。
設定は、いたって簡単で、以前にメール設定ファイルのfreebsd2.mcに入れたGreeting Pauseの設定の前にでも、1行追加するだけです。

FEATURE(dnsbl,`all.rbl.jp')dnl
FEATURE(`greet_pause',`5000')dnl

入れたら、前回と同じで、次のようにmakeして出来たfreebsd2.cfをsendmail.cfとしてコピーします。

# make freebsd2.cf
# cp freebsd2.cf sendmail.cf

あとはsendmailを再起動しておしまいです。
maillogを見ると次のように、引っ掛かっています。 Spamの5〜7割りぐらいは防げてます。

Oct 16 21:46:14 uls sm-mta[6129]: ruleset=check_relay,
arg1=[222.170.195.25], arg2=127.0.0.4, relay=[222.170.195.25],
reject=550 5.7.1 Rejected: 222.170.195.25 listed at all.rbl.jp
Oct 16 21:46:36 uls sm-mta[6130]: ruleset=check_relay,
arg1=[222.170.195.25], arg2=127.0.0.4, relay=[222.170.195.25],
reject=550 5.7.1 Rejected: 222.170.195.25 listed at all.rbl.jp

2006.07.29

Spamメール対策・・・(mail)

メールを良く使う人は誰でも「迷惑メール」に悩まされていることでしょう。
プロバイダーのメールアカウントを使っている方は、最近ではプロバイダーが「迷惑メール」対策サービスを提供しているので、それらを利用されている方も多いと思いますが、自前でメールサーバを立てていると、自分で防ぐ以外に方法はありません。 以下に小生のサーバで行っている対策について記述します。

1. accessファイルで制限

FreeBSDでは/etc/mailにaccessというファイルがあるので、この中に制限したいメールアドレスを書きます。

From:hotmail.co.jp                    REJECT ・・・・・・・?
tw               REJECT・・・・・・・・?
From:abcdxyz@        REJECT・・・・・・・・?
From:xyz@aaa.bbb.com        REJECT・・・・・・・?

などですが、上の例の?ではhotmai.co.jpから来るメールを全て拒絶しますし、?ではtw(台湾)からくるメールは全て拒絶します。
?はドメイン名によらず、abcdxydのアカウント名もつメールを拒絶するもので、fuck@とかpussy@などのエッチなアカウント名を拒絶するのに便利です。
?はずばり決め打ちでの拒絶例です。
しかし、知り合いでhotmailを使っている、台湾に友人がいるなどのときは困りますので、知人、友人だけは通すように設定します。 下記は例外を付けた例ですが、chijinn, yuujinをそれぞれの方のアカウント名とします。

chijin@                     RELAY
yuujin@              RELAY
From:hotmail.co.jp              REJECT
tw                  REJECT
From:abcdxyz@              REJECT
From:xyz@aaa.bbb.com            REJECT

これで、まずchijinn@, yuujin@が評価され、それ以降の設定によらず受け取れます。
また、REJECTの変わりに 550 User unknownと書けば相手には受け取れない理由として
User unknownとして通知されます。
もちろん、特定アドレス向けを拒絶することもでき、

To:stuv@xxxx.cccc.co.jp         REJECT

と書くことも出来ます。
accessのファイルが出来たら、sendmailが参照できるようにするため、access.dbを作成し、sendmailを再起動すれば設定が反映されます。

# makemap hash /etc/mail/access < /etc/mail/access
# kill -HUP <PID>

<PID>はsendmailのPIDで cat /var/run/sendmail.pidで番号を調べておきます。

2. Greet Pauseの設定

spamメールの送信者は次々と新しいアドレスで送りつけてくるのでaccessによる制限だけでは、なかなか防げません。
そこで、有効なのがGreet Pauseを入れるという方法です。
Grret Pauseを理解するために、メールの送受信のやり方を知る必要がありますが、例えばabc@xxx.yyyy.comにメールを送信するときは、送信側のサーバが相手側にメールを送信しても良いか問い合わせ、相手側から受け取れる旨の返事を待って実際のメールを送信します。
この相手からの返事をグリーティングメッセージと呼んでいます。
ところが、グリーティングメッセージは相手のメールサーバが忙しいと返事が遅れますので「迷惑メール」の送信者は数を稼ぐために、グリーティングメッセージを待つことなく勝手にメールを送り出します。
そこで、メール送信の問い合わせがあったとき、グリーティングメッセージをわざと少し遅らせ、返事を返していないのに勝手に送りつけてくるメールは「迷惑メール」と判断して捨ててしまうようにします。
通常のメールサーバなら1〜2分程度でも問題なく待ってくれるのですが、小生のところではとりあえず5秒遅らせることにしました。
それでは、設定ですが、簡単です。 sendmailにはGreet Pause機能が用意されています。
/etc/mailにsendmail.mcの名前のファイルがあるので、次の1行を追加します。

FEATURE(`greet_pause',`5000')dnl

mSec単位なので、5000で5秒遅らせることになります。
あとは、以下のようにfreebsd2.mcからfreebsd2.cfを作ってfreebsd2.cfをsendmail.cfにコピーしsendmaiを再起動でお終いです。 /etc/mailディレクトリー内で作業します。

# make freebsd2.cf
# cp freebsd2.cf sendmail.cf

効果はテキメンでした。 ほとんと拒否できています。
なお、デフォルト値は5秒ですが、acccessに以下のように書いておくと、特定のアドレスを0にしたり、もっと大きくしたり出来ます。

GreetPause:nakama.yoiserver.co.jp 0
GreetPause:abc.xyz.co.jp                 200

はっきりと問題ないと分かっているサーバは0にしておくのもエチケットでしょうか(相手の処理を遅らせるので)。


2006.05.01

FreeBSD-6.1RC1でXwindow・・・(FreeBSD)

今まで、FreeBSDはserverとしての利用に重きをおいていたため、Xwindow 関係の設定については書かないできた。 私のClient PCのグラフィックカードがsis630でFreeBSD-6.0では Xwindowがうまく立ち上がらないということもあった。
ところが、 FreeBSD-6.1RC1を入れたら簡単に立ち上がったので、少しXwindowをいじくってみた。

1.インストール

distributions.jpg
インストール自体は6.0と同じだが、Xwindowを使うためインストールはX-developerを選択する。

2. Window Managerのインストールと日本語関係の準備

  (1) Window Manager
     Window Managerはやはり一番洗練されていると思われるKDEを選んだ。
     packageからkde-3.5.1, ja-kde-i18n-3.5.1.tbzを選んでインストールする。
  (2) kterm, kinput2, canna, jvim3
     日本語の使用を可能とするため、packageからja-kterm-6.2.0_7.tbz,   
     ja-kinput2-canna-3.1_2.tbz, ja-jvim-canna-3.0.j2.1a_1を入れておく。 
     これでcannaも同時に入る。

3.Xwindowの立ち上げ

xorg1.jpg
Xwindowを立ち上げるためxorgcfgコマンドを打ち、mouse, keybord, graphic cardならびにdisplayの同期周波数を設定し、結果を/etc/X11に保存する。
/etc/X11にxorg.confが出来あがるので、これでXwindowが立ち上がる準備が出来たので、startxと打ってDefaultのtwm(一番簡単なWindow Manager)が立ち上がることを確認する。

4.日本語関係の設定

(1) cannaの起動を自動化するため、/etc/rc.confに canna_enable=”YES”の1行を追加する。
(2) 自分のHome Directoryにある.profileに次の3行を追加する。

LC_ALL=ja_JP.eucJP;    export LC_ALL
LANG=ja_JP.eucJP;      export LANG
XMODIFIERS=@im=kinput2; export XMODIFIERS

  (3) .inputrcファイル
      自分のHome Directoryに.inputrcのファイルを作成し下記の3行を入れておく。

set convert-meta off
set meta-flag on
set output-meta on

5.KDEの立ち上げ準備

/usr/X11R6/lib/X11/xinitrcの中にあるxinitrcを自分のHome Directoryにコピーし、ファイル名を.xinitcに変え以下のように最後の部分を修正する。

# start some nice programs
#/usr/X11R6/bin/twm &
#/usr/X11R6/bin/xclock -geometry 50x50-1+1 &
#/usr/X11R6/bin/xterm -geometry 80x50+494+51 &
#/usr/X11R6/bin/xterm -geometry 80x20+494-0 &
#exec /usr/X11R6/bin/xterm -geometry 80x66+0+0 -name login
kinput2 -canna &
sleep 3
exec startkde

ここまで準備が出来たら、一度rebootしてcannaも起動させloginしてstartxでKDEを起動する。
起動の過程で国と言語を選択する画面が出るので国は日本、言語は日本語を選んでおく。
もちろん、この設定はコントロールセンタで「国と言語」を選べば後でも自由に選択できる。

6.ktermの設定

無事KDEが起動したら、今後の作業に備えてまず最初にktermを使えるようにします。
タスクバーもしくは画面上にktermのiconを置き、これをクリックするとktermが起動するようにする。
タスクバー上でマウスの左クリックで非KDEアプリケイションの追加を選び、追加するアプリケーションのファイル選択で/usr/X11R6/bin/ktermを選び以下のように記述しておく。

/usr/X11R6/bin/kterm -sb -sl 250 -fn 10x20 -km euc

パラメータの意味を説明すると、

-sb     スクロールバーをつける
-sl 250  スクロールバッファーを250行確保する
-fn 使用文字を指定
-km 使用文字コードを指定

kterm -hと打つとその他にも沢山のオプションが存在するのが表示される。

7.その他のアプリケーション

後は好みだが、私はpackageでfirefoxの日本語版とgimpを入れ、portsからxineと、linux-realplayerを入れて動画再生も出来るようにした。
なお、xineをportsから入れるにはpackageのdevelのカテゴリーからlibtoolを入れておく必要があり、無いと途中でエラーで止まってしまう。
linux-realplayerを使うためにはインストールでlinux互換機能を入れておく必要があるが、入れていなければ
/usr/sbin/sysinstallを起動してdistributionからlinuxを追加でインストールする必要がある。

8.問題点

firefoxでどうしてもflashplayer-7.0がうまく動きません。
macromediaがacrobatのAdobeに吸収されてたときの騒動で、flashplayerの使用可能OSからFreeBSDが抜け落ちたため、律儀にFreeBSDで使えるようにportsを作らなかったようである。
署名運動も起こっているようで、いずれ誤解が解けて使えるようになると思っている。


« Previous | Next »