2009年10月20日火曜日
CentOS5 にあれこれインストール

ちょっと別のサーバの環境をいじる機会があったので、忘れないようにメモしておきます。

OSはCentOS5です。

色々とあってPerl+SQLiteの環境が欲しかったので、とりあえずSQLiteのファイルを作って、アクセス確認用のファイルを書いてみた。

SQLite - Perl
http://www.tuyudaku.net/sqlite/perl.html

「PerlでSQLiteに接続」という記事を参考にしてみた。

とりあえずVirtualHostの設定を確認するのも面倒なので、コマンドラインからアクセスしてみる。

# perl -f sqlite.pl
Can't connect to data source SQLite:dbname=test.db, no database driver specified and DBI_DSN env var not set at sqlite.pl line 5
#


まぁ、SQLiteのモジュールがないんだろうなって思って、インストール。
ここを参考にしました。
CPAN経由でLinuxにモジュールを組み込む
http://y-kit.jp/saba/xp/cpan.htm


# perl -MCPAN -e shell
Are you ready for manual configuration? [yes]
CPAN build and cache directory? [/root/.cpan]
Cache size for build directory (in MB)? [10]
Perform cache scanning (atstart or never)? [atstart]
Cache metadata (yes/no)? [yes]
Your terminal expects ISO-8859-1 (yes/no)? [yes]
File to save your history? [/root/.cpan/histfile]
Number of lines to save? [100]
Policy on building prerequisites (follow, ask or ignore)? [ask]


プログラムのパスを指定する箇所が続くけど、いくつかは無視した。

Where is your gzip program? [/bin/gzip]
Where is your tar program? [/bin/tar]
Where is your unzip program? [/usr/bin/unzip]
Where is your make program? [/usr/bin/make]
Where is your links program? [/usr/bin/links]
Where is your wget program? [/usr/bin/wget]
Warning: ncftpget not found in PATH
Where is your ncftpget program? []
Warning: ncftp not found in PATH
Where is your ncftp program? []
Where is your ftp program? [/usr/kerberos/bin/ftp]
Where is your gpg program? [/usr/bin/gpg]
What is your favorite pager program? [/usr/bin/less]
What is your favorite shell? [/bin/bash]

'perl Makefile.PL'コマンドのパラメタ

Your choice: []

今度は'make'コマンドのパラメタ

Your choice: []

今度は'make install'コマンドのパラメタ

Your choice: [] UNINST=1

あと少し…

Timeout for inactivity during Makefile.PL? [0]
Your ftp_proxy?
Your http_proxy?
Your no_proxy?


このあとサイトを探しに行くみたい。
(1) Africa
(2) Asia
(3) Australasia
(4) Central America
(5) Europe
(6) North America
(7) Oceania
(8) South America
Select your continent (or several nearby continents) [] 2
Sorry! since you don't have any existing picks, you must make a
geographic selection.

(1) China
(2) Hong Kong
(3) India
(4) Indonesia
(5) Japan
(6) Kazakhstan
(7) Republic of Korea
(8) Russia
(9) Singapore
(10) Taiwan
(11) Thailand
(12) Turkey
Select your country (or several nearby countries) [] 5
Sorry! since you don't have any existing picks, you must make a
geographic selection.

(1) ftp://ftp.dti.ad.jp/pub/lang/CPAN/
(2) ftp://ftp.jaist.ac.jp/pub/CPAN/
(3) ftp://ftp.kddilabs.jp/CPAN/
(4) ftp://ftp.nara.wide.ad.jp/pub/CPAN/
(5) ftp://ftp.riken.jp/lang/CPAN/
(6) ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
(7) ftp://ftp.u-aizu.ac.jp/pub/CPAN
(8) ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/
Select as many URLs as you like (by number),
put them on one line, separated by blanks, e.g. '1 4 5' [] 1 2 3 4 5 6 7 8

なんか問題あるとイヤだから、全部指定してみた。

Enter another URL or RETURN to quit: []
New set of picks:
ftp://ftp.dti.ad.jp/pub/lang/CPAN/
ftp://ftp.jaist.ac.jp/pub/CPAN/
ftp://ftp.kddilabs.jp/CPAN/
ftp://ftp.nara.wide.ad.jp/pub/CPAN/
ftp://ftp.riken.jp/lang/CPAN/
ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
ftp://ftp.u-aizu.ac.jp/pub/CPAN
ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/


commit: wrote /usr/lib/perl5/5.8.8/CPAN/Config.pm
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan>


これでCPANの準備が終わった。んでDBD::SQLiteをインストールするんだけど…
cpan> install DBD::SQLite
(中略)
CPAN.pm: Going to build A/AD/ADAMK/DBD-SQLite-1.25.tar.gz

DBI 1.57 is required to configure this module, please install it or upgrade your CPAN/CPANPLUS shell
make: *** ターゲットが指定されておらず, makefile も見つかりません. 中止.
/usr/bin/make -- NOT OK
Running make test
Can't test without successful make
Running make install
make had returned bad status, install seems impossible

cpan>


はぁ…
DBIがない(or 古い)ってこと?
じゃぁ
cpan> install DBI
(中略)
gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION=\"1.609\" -DXS_VERSION=\"1.609\" -fPIC "-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE" -W -Wall -Wpointer-arith -Wbad-function-cast -Wno-comment -Wno-sign-compare -Wno-cast-qual -Wmissing-noreturn -Wno-unused-parameter Perl.c
/bin/sh: gcc: command not found
make: *** [Perl.o] エラー 127
/usr/bin/make -- NOT OK
Running make test
Can't test without successful make
Running make install
make had returned bad status, install seems impossible

cpan>


まさか、gccがないなんて!

ってことで、今度はgccを入れるぜ!
いろんなサイトでyumを使ってgccを入れるにはこれだ!みたいなのがあったので、コピペしてみる。
# yum install gcc* compat-gcc* compat-glibc* compat-lib*
Loaded plugins: downloadonly, fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository addons is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* epel: ftp.iij.ad.jp
* rpmforge: apt.sw.be
epel | 3.4 kB 00:00
rpmforge | 1.1 kB 00:00
primary.xml.gz | 0 B 00:30
http://apt.sw.be/redhat/el5/en/i386/rpmforge/repodata/primary.xml.gz: [Errno 4] Socket Error: timed out
Trying other mirror.
(以下省略)

つまり、yumがダメ。
管理者に訊いてみると、どうもyumがタイムアウトするらしい。
最初はサイトが悪いのかと思って、yumの設定を変えてみたりするもダメ。

gccのrpmとかって、どこに落ちてんだ?

そろそろ諦めようかと、ちょっとした息抜きの後にグーグル先生に尋ねてみたら、このページに行き当たった。
教えて!Ziddyちゃん gccのダウンロードインストールのやりかたを教えてください。
http://ziddy.japan.zdnet.com/qa5360918.html


そこに、こんなコマンドが書かれていた。
「# yum --disablerepo=\* --enablerepo=base groupinstall "Development Tools"」
とりあえず、実行してみる。
# yum --disablerepo=\* --enablerepo=base groupinstall "Development Tools"
Loaded plugins: downloadonly, fastestmirror
Loading mirror speeds from cached hostfile
base | 1.1 kB 00:00
(中略)
Install 57 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 59 M
Is this ok [y/N]:

あ、動く!?

でも59MBもインストールしてられない。
モノは試しだ。
# yum --disablerepo=\* --enablerepo=base install gcc
(中略)
Installed: gcc.i386 0:4.1.2-44.el5
Dependency Installed: glibc-devel.i386 0:2.5-34 glibc-headers.i386 0:2.5-34 kernel-headers.i386 0:2.6.18-128.el5 libgomp.i386 0:4.3.2-7.el5
Complete!
#

は…入った?
# which gcc
/usr/bin/gcc
#

スゲー。

あとはCPANで「install DBI」やって「install DBD::SQLite」をやればOK。
「perl -f sqlite.pl」で正常にSQLiteのデータが読み出せました。

あー、疲れた。



0 コメント | コメントを書く | コメントの表示
2009年10月16日金曜日
PHP4とSQLite2とか3とか

久しぶりにてこずったので、忘れないようにメモしておく。
てこずったといっても、半分くらいは自分の責任なんだけど…

現在、お仕事でwebサーバのお引越しをしていて、前の環境と新しい環境を同じにしようとあれこれやってました。
んで、phpinfo()を見ると、どうやらSQLITE3が入ってるようなので、同じように入れてみた。

/usr/ports/databases/sqlite3/ に移動して、make config → make install clean を実施。

あれ?
Apache再起動しても、phpinfo()に反映されねー!

よく調べてみたら、PHP用のsqliteは /usr/ports/database/php-sqlite3/ にあるじゃないか。
再びインストール。

テキトーにphpを書いて、動作確認。

Fatal error: Call to undefined function: sqlite_open() in /xxx/xxx/public_html/test.php on line 5

えぇー!!
undefinedって…

元のサーバも、念のために実行してみました。

Fatal error: Call to undefined function: sqlite_open() in /xxx/xxx/public_html/test.php on line 5

あぁ、そういうことですか。
確かにSQLite使ってる箇所がなかったけど、動かないモジュール入れてるとは想像しませんでした。

でも、こうなったらなんとしてもSQLiteを動くようにしてやるってんで、SQLite2を導入することに。


とりあえず /usr/ports/databases/sqlite2/ でインストール!

案の定、phpでSQLiteが動きません。

じゃ、どっかからtgzを落としてこなきゃならないの??とかって検索しまくった結果…

東西社ホームページ -開発日誌-(http://www.tozaisya.jp/archive/200706.html)にこんな記載がありました。

FreeBSD 6で、Apach + PHP 4でsqliteを動かすには、portsのpecl-sqliteをインストールすれば動くようです。

東西社ホームページ -開発日誌- PHP 4とsqlite 2 2007年6月13日


天の助けとはこのことか。

無事動きました。



0 コメント | コメントを書く | コメントの表示
2009年9月18日金曜日
PHPでPOSTの漢字が文字化けっつーか壊れる?

担当しているサイトがボチボチリリースです。

で、社内から文字化けが起きると指摘が。

調べてみると、検索処理のところで漢字を入れると文字化け…というか「??」とかって表示されたり、値そのものが消えてなくなる。

で、かな混じりだと、正常に値が受け取れる。
あれこれ試したり考えたりした結果、に日本語を埋めるというその場しのぎの対応を入れてみた。

仕事が落ち着いたので、Google先生にお伺いを立ててみると、こういうのが出てきた。

[2378] 文字コードの検出に失敗 - PHPの基礎体力掲示板
http://www.sound-uz.jp/php/bbs/thread/2378?view=flat#


どうも、「mbstring.http_input」の設定が悪さしてる可能性があるらしい。
ってことで、お客さんのサーバを確認すると、案の定「auto」になっていた。

XAMPPで実行していたローカル環境はどうかというと、「pass」だった。
じゃ、社内のテストサーバは? と思ったけど、こっちは「auto」で正常に動作してた。
む… テスト環境ではUTF-8で動かしてたのを客先に合わせてEUC-JPに慌てて変換したのがいかんかった?

php.iniの変更をお願いする?
ちょっと難しいなかぁ?
仕方ないから、暫定対応で行くか…
公開は短期間だし、いいよね?



0 コメント | コメントを書く | コメントの表示
2009年7月16日木曜日
C:\fakepath

勢い余って、IE8にアップグレードしてしまった。

でもって、ぼちぼちサイトの開発してたら問題が…

<input type="file"> のvalueが「C:\fakepath\ファイル名」になる。

これって、きちんとアップロードできるの?

そう思って、ググってみると、どうも無理っぽい(サイト構築し始めなので、ディレクトリ作ったりするのが面倒なので、本当に無理かは試してない)。
しかもIE8になってセキュリティ面の強化の賜物だとか。

でもって回避方法をメモっておく。


(1)セキュリティレベルの変更
「インターネットオプション」を開き、「セキュリティ」タブを選択。
ゾーンの中から「インターネット」を選択し、「レベルのカスタマイズ」を押下する。
で、ずーっと下の方の「その他」の中になある「サーバにファイルをアップロードするときにローカルのディレクトリパスを含める」を無効から有効に変更する。

(2)信頼済みサイト
同じく、「セキュリティ」タブのゾーンから「信頼済みサイト」を選択し、ゾーンの右下あたりにある「サイト」ボタンを押下する。
で、アップしたいサイトを信頼済みとして登録する。
「https」ではなく「http」の場合には、きちんとチェックボックスをオフにする、と。

まぁ、どうなんでしょう?

----------------------------------------------

ちょっと追記。
PHPとかはフツーにパスが取れるので、誤解なきよう。



0 コメント | コメントを書く | コメントの表示
2009年5月27日水曜日
.htaccessで覚書

ちょっとお手伝いをしたので、忘れないようにメモしておこうと思う。

.htaccessで一時的にアクセス制限をかけたいらしいのだけど、どうも上手くいかないってんで、ちょっと手伝ってみる。

Digest認証のダイアログをキャンセルすると、エラーに飛ばしたいんだけど、どうも上手く動かない。

最初にアレ?と思ったのは、エラーログ(error_log)を確認して「 ErrorDocument not allowed here」というエラーを見つけたとき。
結局犯人はhttpd.conf(を設定した人)だったという話。

ドキュメントルートのディレクトリ設定は
<Directory />
AllowOverride All
</Directory>
となっていたため、OKかと思われたが、実際に適用したいディレクトリにも個別に設定がしてあった。

<Directory "該当するディレクトリ">
AllowOverride AuthConfig
</Directory>

ようするに、認証に関する設定しかダメよってことですか。
これを
<Directory "該当するディレクトリ">
AllowOverride All
</Directory>
に直すことで、正常に動作しました。

あぁ…
ちょっと違うな。
上位ディレクトリ(この場合ドキュメントルート)の設定に上書きできるのが、認証だけよってことか。
AllowOverrideをAuthConfigのままにして、httpd.conf内部にErrorDocumentを追記するのでも、いいのかな?(試してないけど)



137 コメント | コメントを書く | コメントの表示
2009年4月10日金曜日
サニタイジングとは言わないけど

困った困った。

まぁ、基本的に無知なのがいけないんだけどさ。

誰もいなかったから僕がやったっていう発端もどうかって話だけどさ。
それなりにPGできるから、かえっていけなかったね。
たいして知りもしないで、作るものではないってことで。
知ってる人がほとんどいないって時点で、救いの手はどこに求めたらいいのか判らないという…


ユーザの入力に対して、チェックを入れたりするんだけど、これがどーもよく判らなくて。
最初に参考にした本が、SQLにINSERTするための処理として、htmlspecialchars()とmysql_real_escape_string()をかましてたもんだから、そういうもんかと思って…

結局htmlsp(ry は表示の前にやるのがいいというのは、納得できた。
たしかにDBには生のデータ(実際にはエスケープされてるけど)を入れるべきだろうな。

入力
↓
確認表示(表示用にhtmlspecialchars()を入れるけど、実際のデータはそのまま)
↓
登録(INSERTする段階でエスケープ)

リクエスト
↓
表示(DBから引っ張ってきたエスケープ済みの内容をhtmlspcialchars()で表示)

こういうこと?



0 コメント | コメントを書く | コメントの表示
2009年4月6日月曜日
プリペアードクエリ

PHP+PostgreSQLについてのメモ。

本当は、pg_prepareとか使えるといいんだけど、今の環境がPHPのバージョンが5じゃないので
、仕方なく…

pg_query($db, "PREPARE sample (text) AS SELECT hoge FROM hoge_tbl WHERE col_hoge=$1");
$result = pg_query($db, "EXECUTE sample ('{$number}')");
pg_query($db, "DEALLOCATE sample");


まぁ、「PREPARE」でクエリを作成するんだけど、ここで指定する変数の型(ASの前に括弧書きしてるヤツね)が曲者で(自分の確認が不十分なのを責任転嫁)、「EXECUTE」の時に入れる変数の値がintってことに全然気が付かなくて、エライ大変な思いをしたものです。



0 コメント | コメントを書く | コメントの表示
Template Design: © 2007 Envy Inc.