Server: 2006年5月アーカイブ

 MySQLが一段落したので今度はPostgreSQLへ接続してみます。

ソースファイルはこちら(C言語)
Download file

PostgreSQLとMySQLでは値の取り出し方法が違うみたいですね。C++でクラス化する際には共通のほ方法で利用できるように考慮したほうが良いですね。(DBI使ったほうが早いとか置いといて)

もうひとつ重大な問題がこのソースにはあります。SELECTで*を指定しておいて取り出し時に何番目というやり方で行っていること。つまりテーブルのフィールドに追加変更があった場合にプログラムが動かなくなってしまう危険があります。単にSELECTで*を使わなければ良いのですがそれでも要素名でアクセスできないのは可読性に影響します。

C++版は以上を考慮に入れてMySQL版と移植性の高いものを作ってみます。

 ちょっと必要性の問題でひとつのプログラムから同時に2つのDBへ接続するテストを行いました。

ソースはこちら(クラスで使ったほうが楽になるのでC++版のみです。)
Download file

コンパイルした後、実行したらFreeBSDだとライブラリが見つからないとエラー、初期のソースを組んだ後PHPのインストールと設定などで一度reboot掛けていたのでldconfigの効果が消えていたっぽい。

ldconfig -m /usr/local/mysql/lib/mysql

Linuxだと/etc/ld.so.confに書けば済むはず(こっちはreboot掛けたことない)なのに、FreeBSDには該当ファイルなし。findで探したら/usr/compat/linux/etc/ld.so.confに見つかったが編集してreboot掛けても意味なし。/etc/ld.so.confにコピーしてrebootしてもダメ。

結局、.loginに

if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH "${LD_LIBRARY_PATH}:${MYLIB}"
else
setenv LD_LIBRARY_PATH "${MYLIB}"
endif

と追加して解決。

DBクライアントは他のユーザーでも使用するかも知れないから/etc/profileに書いたほうがいいかなー?

 まずはウェブ上でアクセス解析を行うwebalizerをインストールします。よく「ウェブアナライザー」って言う人がいますが綴りから見ると「ウェブアライザー」です。

◇ webalizerのインストールと設定

ダウンロード
http://www.mrunix.net/webalizer/

展開
# tar zxf webalizer-2.01-10-src.tgz

インストール

# cd /usr/local/src/webalizer-2.01-10
# ./configure \
--with-language=japanese \
--with-etcdir=/usr/local/etc \
--with-png=/usr/local/lib
# make
# make install

## webalizerの設定

# cd /usr/local/etc/
# cp webalizer.conf.sample webalizer.conf
# vi webalizer.conf

有効にした設定内容
OutputDir /usr/local/apache/htdocs/管理ディレクトリ/webalizer
Incremental yes
HostName ホスト名

PageType htm*
PageType cgi
PageType php
PageType pl

DNSCache dns_cache.db

HideURL *.gif
HideURL *.GIF
HideURL *.jpg
HideURL *.JPG
HideURL *.png
HideURL *.PNG
HideURL *.ra

IgnoreURL /管理ディレクトリ

ユーザでcrontabに登録

# su - user
$ crontab -e
5 0 * * * シェルファイルのパス/webalizer.sh


実行スクリプトのサンプル
#!/bin/sh
/usr/local/bin/webalizer /usr/local/apache/logs/access_log.`date -v -1d +%Y-%m-%d`

# chmod 755 webalizer.sh


◇ phpMyAdminのインストール

ダウンロード
http://www.phpmyadmin.net/home_page/index.php

展開
# tar zxf phpMyAdmin-2.8.0.4.tar.gz

インストール
展開した内容をWebでアクセス可能な場所にコピー


◇ phpPgAdminのインストール

ダウンロード
http://phppgadmin.sourceforge.net/

展開
# tar zxf phpPgAdmin-4.0.1.tar.gz


インストール
展開した内容をWebでアクセス可能な場所にコピー


Apacheでアクセス制限
http.confを編集
# Basic Auth

AuthType Basic
AuthName "Management Zone"
AuthUserFile ディレクトリ名/.htpasswd
Require user ユーザ名

order allow,deny
allow from 許可するIPアドレス

BASIC認証パスワードを設定(新規)
# htpasswd -c ディレクトリ名/.htpasswd ユーザ名

 最小構成のFreeBSDからなのでPHP導入前にいろいろとインストールする必要があります。

◇libcurlのインストール

ダウンロード
http://curl.haxx.se/

展開
# tar zxf curl-7.15.3.tar.gz

インストール
# cd /usr/local/src/curl-7.15.3
# ./configure
# make
# make install

◇libiconvのインストール

ダウンロード
http://www.gnu.org/software/libiconv/
http://www2d.biglobe.ne.jp/~msyk/software/libiconv-1.9.1-patch.html

展開
# tar zxf libiconv-1.9.1.tar.gz

パッチ適用
# zcat libiconv-1.9.1-ja-patch-1.diff.gz | patch -p0

※私がDLしたパッチはテキストだったのでzcatでなくcat使いました。

インストール
# cd /usr/local/src/libiconv-1.9.1
# ./configure
# make
# make install


◇PHP5のインストールと設定

ダウンロード
http://www.php.net/

展開
# tar zxf php-5.1.4.tar.gz

インストール
# cd /usr/local/src/php-5.1.4
# ./configure \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--prefix=/usr/local \
--with-gd \
--with-jpeg-dir=/usr/local/lib/ \
--with-png-dir=/usr/local/lib/ \
--with-zlib-dir=/usr/lib/ \
--with-dom \
--with-curl \
--enable-xslt \
--with-xslt-sablot \
--with-dom-xslt \
--with-zlib \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pgsql=/usr/local/pgsql

# make
# make install

実はこの時点でwgetが無いとかエラーが発生したが、強行してPHPの導入完了。
まだまだ足りないプログラムがあるみたいなのでそれは後でゆっくり。(makeは正常終了しているので関数が抜けているとかは無いと思う)

Apacheのmime.typesに下記を追加

application/x-httpd-php php
application/x-httpd-php-source phps

Apacheを再起動
# /usr/local/apache/bin/apachectl restart

追記:
この直後にwgetを入れてmake installさせました。その時PEAR関連でアップデータを取り込んでいました。なるほどそういうことなんですね。

◇wgetのインストール

ダウンロード
http://www.gnu.org/software/wget/

展開
# tar zxf wget-1.10.2.tar.gz

インストール
# cd /usr/local/src/wget-1.10.2
# ./configure
# make
# make install

 PHPをインストールする前段階としてGDをインストールします。

◇libXML2のインストール(PHP5に必要)

ダウンロード
http://xmlsoft.org/

展開
# tar zxf libxml2-2.6.24.tar.gz

インストール
# cd /usr/local/src/libxml2-2.6.24
# ./configure
# make
# make install

◇jpeg-6bのインストール

ダウンロード
http://quox.org/install/graphics/jpeg-6b.html

展開
# tar zxf jpegsrc.v6b.tar.gz

インストール
# cd /usr/local/src/jpeg-6b
# ./configure --enable-shared --enable-static
# make
# make install

◇libpngのインストール

ダウンロード
http://www.libpng.org/pub/png/libpng.html

展開
# tar zxf libpng-1.2.10-no-config.tar.gz

インストール
# cd /usr/local/src/libpng-1.2.10
# cp scripts/makefile.linux Makefile
# make
# make install

◇zlibのインストール

ダウンロード
http://www.zlib.net/

展開
# tar zxf zlib-1.2.3.tar.gz

インストール
# cd /usr/local/src/zlib-1.2.3
# ./configure
# make
# make install

◇gdのインストール

ダウンロード
http://www.boutell.com/gd/

展開
# tar zxf gd-2.0.33.tar.gz

インストール
# cd /usr/local/src/gd-2.0.33
# ./configure
# make
# make install

…とうまく行くはずだが、素BSDで./configureするとどうもMakefileの作成がちょっと失敗しているのか、コンパイルオプションにjpegライブラリのパスが入ってなくてエラーになりました。orz...

で下記コマンドをmakeする前に発行することで回避

# setenv INCLUDES -I/usr/local/include

いろいろあるなぁ…

 今日は、日曜日なのにパケット解析という状態。通信関係で独自サーバープログラム作ったりするとパケット解析は必要になってきますね。で、tcpdumpでパケットの内容を取得したのはいいが、もうパケットの仕様なんて忘れてしまったしドキュメントも持ってなかったり(やってたのは学生の時以来だもんな…)

 先頭の20バイトくらいは規則性のある並びだったので多分ここがヘッダだろうといろいろ調「パケットぬり絵」見つけました。一部補足すると、オプションと書かれている4バイトがこちらでは発信ポート(2バイト)、宛先ポート(2バイト)となってました。

 ここまで来ると最初からDBI使ったほうが簡単な気がしますが、ラッパーの繰り返しをする前に基礎理解の為に自作。

C++版のソースコードはこちらから(FreeBSDで確認)
Download file

 ずっと公開するのを忘れていました。MySQLを利用するC言語ソースです。

ダウンロードはこちらから(FreeBSDで確認)
Download file

このアーカイブについて

このページには、2006年5月以降に書かれたブログ記事のうちServerカテゴリに属しているものが含まれています。

前のアーカイブはServer: 2006年4月です。

次のアーカイブはServer: 2006年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1