投稿者アーカイブ: hakubun

CentOS上のPHPからOracle10gへ接続

お久しぶりの投稿です(笑)

サーバのリプレースも終わり、社内システムの環境も一新されようとしています。
一部のシステムは今後PHPへの移行と考えています。

テスト環境でUbuntuからOracleへの接続をしてPHPで書いていたのですが、
今回CentOSに移行することにしました。
前回はテスト環境の為にとりあえず動きゃいいやと思っていたのでメモを取らず・・・案の定接続にはまりました。

と、いう事でメモ書きを残しておきます。
※2014.1.15段階です
—–
(環境)
CentOS 6.5(64bit)
Oracle10g

※前提としてApacheとPHPのインストールは終わっている物とします。
—–

1.OracleInstantClientをダウンロード&インストール
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
まずここではまりました。
どうやら最新バージョンではつながらないようです。
私が使用したバージョンは「Version 11.2.0.4.0 」です。

ここから下記の物をダウンロードしました。
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

サーバの適当なフォルダに置きコマンドを実行
# rpm -ivh oracle-instantclient11.2-*

2.peclのインストール
# yum install php-devel
※既にインストールしている場合は必要ありません。

3.PHPへの組み込み
# pecl install oci8

途中下記のメッセージが出てきて入力を求められます。
Please provide the path to the ORACLE_HOME directory. Use ‘instantclient,/path/to/instant/client/lib’ if you’re compiling with Oracle Instant Client [autodetect] :

その際、下記の通り入力します。(環境によりディレクトリは変わると思いますのでチェック)
instantclient,/usr/lib/oracle/11.2/client64/lib

このメッセージが出てくればoci8のインストールは完了です。
Build process completed successfully
Installing ‘/usr/lib64/php/modules/oci8.so’
install ok: channel://pecl.php.net/oci8-2.0.6
configuration option “php_ini” is not set to php.ini location
You should add “extension=oci8.so” to php.ini

メッセージの通り「php.ini」にextensionの記述を行います。
php.iniに直接記述しても良いようですが、いろいろなサイトを参考にしますと
/etc/php.dにoci8.iniというファイルを作ればよいようです。

(oci8.ini)
———
extension=oci8.so

[OCI8]
———

その後、httpdの再起動を
# service httpd restart

phpinfoにてOCI8が認識されている事を確認します。

4.SELINUXの無効化
ここで再びはまりました。
Oracleにアクセスしようとすると
「ORA-12546: TNS:permission denied」
と出て接続が出来ません。

tnsnames.oraが必要なのかと思い記述してみましたがダメ。
ORACLE_HOMEのパスかと思い試しましたがダメ。

Webで検索をしてみると、SELINUX?!
止めてたつもりだったものが動いていました(^_^;
# setenforce 0
当然以降動かないように
/etc/selinux/config内の記述を

SELINUX=disabled

に変更しました。

これで無事接続が完了しましたε-(´∀`*)ホッ

なお、設定にあたり下記のサイトを参考にさせていただきました。
[Setup OCI8 Extension for PHP by pecl php-pear with Oracle instant Client]
http://www.milliondollarserver.com/setup-oci8-for-php-by-pecl-php-pear-with-oracle-instant-client/

これらの事は私のメモ書きです。
人それぞれ環境は違うと思いますが、参考になれば幸いです。

CentOSで迷惑メール対策 その5(milterなど)

さて前からだいぶ時間が経ってしまいました。
一応稼働させている状態で、英語表記のspamがたまにすり抜けて来ますが、ユーザからは「迷惑メールが減りました!」との声をいただいてます。
稼働を急いでいたために覚えている範囲での設定メモです

========================
私の環境ではmilter-managerからspamassassinからの呼び出しがどうしても動いてくれなく(たぶんパーミッションの関係)、結局はmilter-managerを経由せずに直接、子milterを呼ぶ方法にしました。

基本はその4で貼っているリンクの手順で、spamassassinとClamAVをインストールします。

(上記ページと違う事をした設定)
—–
・spamass-milterの設定
ファイルソケットの呼び出しにする
/etc/sysconfig/spamass-milter
SOCKET=/var/run/spamass.sock

—–
・spamass-milterの起動スクリプトの変更
ファイルソケットにpostfixからアクセス出来るようにパーミッション変更。 startファンクションに下記を追加。
chown postfix:postfix $SOCKET
場所は「RETVAL=$?」と「echo」の間に入れました。

—–
・postfixの設定ファイルの変更
postfixはリレー用(メールボックスは持たない)の為メールの動きはこうなります。
[外部]-[フィルタ前のSMTP]-[フィルタ後のSMTP]-[本サーバ]
SMTPサーバが二つ動いているような形です。

下記のファイルを設定しました。
(master.cf) smtpの項目を下記を追記
#==============
# フィルタ前SMTP
#==============
smtp inet n – n – 20 smtpd
-o smtpd_proxy_filter=
-o smtpd_client_connection_count_limit=10 #(接続数を10に制限)
#================
# フィルタ後SMTP
#================
127.0.0.1:10026 inet n – n – – smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks

(main.cf)
一番下のところに追記
####### milter Settings ######
milter_protocol = 2
milter_default_action = accept

smtpd_milters =
#SpamAssassin
unix:/var/run/spamass.sock
#Clamav
unix:/var/clamav/clmilter.socket

—–
・SpamAssassinの設定
ルールファイルをダウンロードしてSpamAssassinの設定ファイルに変更
作業ディレクトリは/etc/mail/spamassassin

(local.cfを入れ替え)
# wget http://www.flcl.org/~yoh/user_prefs
# cp -pc local.cf{,.orig}
# mv user_prefs local.cf

(v320.pre)
下記を追記かコメントアウトを解除
loadplugin Mail::SpamAssassin::Plugin::ImageInfo

—–
・SpamAssassin用のアカウントを作成
# useradd spamd -s /bin/false -d /var/spamd

—–
・spamassassinのオーナー変更
#chown spamd.spamd /root/.spamassassin

—–
各SpamassAssinの自動起動の設定
#chkconfig spamassassin on
#chkconfig spamass-milter on

—–
#SpamAssassinの起動
#service spamassassin start
#service spamass-milter start

========================
かなり端折ってますがこんなところだったと思います。
また思い出せば追記します。

CentOSで迷惑メール対策 その4(milterインストール)

milterのインストールに入ります。

基本はこの設定どおり進めていけば良いようです。
http://milter-manager.sourceforge.net/reference/ja/install-to-centos.html

が、パスが違ったり、Permissionが違ったりでふんだりけったり。

まだ嵌まってます(笑)

CentOSで迷惑メール対策 その3(SMTPサーバのリレー)

友人から教えてもらったリンク先を参考にする。
http://milter-manager.sourceforge.net/reference/ja/install-to-centos.html

・・・ 
・・・

・・・諸先輩方の設定を見ていると、
フィルタリングサーバ=メールサーバ
が多いんですよ。
うちの場合は、フィルタリングサーバからのリレーの設定が必要なわけです。

設定を見ているとPostfixが分かりやすそうなのと、最近ではこっちを使ってる事が多いようなので、
フィルタリングのSMTPサーバはPostfixにすることにしました。

(設定してきたメモ)※思い出しながらなので間違いがあるかも
==========
・Postfixをインストール
# yum install -y postfix

==========
・標準ではSendMailが入っている為、MTAをPostfixに変更する
# alternatives –config mta
2 プログラムがあり ‘mta’ を提供します。

選択 コマンド
———————————————–
+ 1 /usr/sbin/sendmail.postfix
* 2 /usr/sbin/sendmail.sendmail

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1

==========
・Postfixの設定

サーバ名はこれらを使います
メールサーバ:mail.******.co.jp
フィルタサーバ:filter.******.co.jp

設定ファイル類は「/etc/postfix/」にある「main.cf」、「transport」を触る。
———————————————————–
(main.cf)
### サーバ名です###
myhostname = filter.******.co.jp

### サーバのあるドメイン名###
mydomain = ******.co.jp

### smtpを受け付けるインターフェース。 インターネットから受けるのですべて許可 ###
inet_interface = all       

### リレー許可先の設定###
#自分と同一ドメインのメールサーバのみに許可間違えるとspamの踏み台になるので間違えないように
# $myhostname,localhost.$mydomain,localhost ・・・このサーバ  
#$mydomain ・・・同じドメイン(上で指定したドメインが入っている)
mydestination = $myhostname,localhost.$mydomain,localhost,$mydomain

###上に似ているがリレー先として認識させるために自ネットワークを設定###
mynetworks_style = class #同じクラス(192.168.1.10が自IPなら、192.168.1.xxxを指定していることになる)

###自分の居るネットワーク空間###
mynetworks = xxx.xxx.xxx.xxx/xx

###リレー先の最終ドメイン###
relay_domains = $mydestination #上で指定した物

###リレー先メールサーバ###
#書き方はいろいろありますが、ホストを指定している場合はそのまま記載
#また「[ ]」で囲うとDNSのMX参照を行わないそうです。
relay_host = [mail:*****.co.jp] 

###—–以下リレーなら必要っぽい—–###
#転送先を指定。同じファイルのtransportを読み込む
transport_maps = hash:/etc/postfix/transport

———————————————————–
(transport) 転送先ホストの記述(だと思う)
一番下の行に追加した。
******.co.jp smtp:[mail.*****.co.jp] #同じく「[ ]」で囲むとDNS参照をしない

保存後忘れないようにハッシュ化(テストだからとこれを無視してたら嵌まった)
# postmap /etc/postfix/transport

==========
postfixを起動する
# sudo service postfix start(既に起動してたらrestart)

==========
クライアントから(ローカルからでもOK) TELNETでつないでみる
>TELNET (フィルタサーバのIPアドレス) 25
HELO hogehoge
MAIL FROM:aaa@aaa.co.jp
RCTP TO:bbb@******.co.jp
DATA
テスト
.
quit
==========
これでmail.******.co.jpから受信出来ればリレーの設定は完了です。

TELNETがつながらない場合はiptablesの設定を見るか一時的に止めてください。

CentOSで迷惑メール対策 その2(構成)

弊社では既にSendMailが稼働しています。

ありがちですが、導入したのが数年前のこと。
社員は会社のメールを遊びに使っていたわけで、いろいろなサイトに登録し迷惑メールが多数届いています。
それの尻を拭け・・・です(笑)

それはさておき・・・
最近はメールサーバは外に置くのが主流ですが、OP25B等々の関係で設置が難しいのです(社員にその程度の変更が出来るスキルも無い)。

なので現行のSendMailを生かしつつフィルタリングサーバを構築しようと考えました。
——-
(インターネット)-->[フィルタリングサーバ]-->[メールサーバ]-->[クライアント]
——-
弊社は外部とのメールのやり取りがほとんどありません。予算もありません。
引き揚げてきたPCにCentOSを入れて動かそうと企んでいます。

CentOSで迷惑メール対策 その1(友人からのアドバイスメモ)

Twitterで友人からアドバイスをもらったのでメモ。

—–

CentOSへのMilterインストール
http://milter-manager.sourceforge.net/reference/ja/install-to-centos.html

個人的にはIPソケットの方がファイルソケットよりも設定が楽で安定している気がする。が、昔読んだ記事だとファイルソケットの方が速いとか。IP経由するからそのぶんオーバーヘッドが…という理由なのだが、ファイルの設定狂った時に全く動かなくなるのも辛かった<Milter

そうそう。記事にあるgreylistは(内容にもよるが)企業運用ではとりあえずやめておいた方が吉。SpamAssassinの判定ルールで対応しないと来て欲しいメールが来なくなる(特に海外とのやりとりがある場合)

折角MilterセットアップしたらGoogleでつかっているDKIM,Yahooで使われているDomainKeysあたりを入れてみるのも面白いかもしれない。おもったより復旧してないがなりすまし判定には効果がある。ただしメーリングリストがおおいサイトではやめておいたほうがいい。

—–

Milterとやらでやれという事ですな。

jQuery(JavaScript?)でメモリ解放

jQueryでAJAXをやっています。みなさんよく使う機能ですよね。

画面遷移無しで動的に画面を変えれるので便利です。

さて、ここで問題発生。

何度かDB抽出→表示を繰り返すとレスポンスが悪くなるんです。

私のところのサーバはメモリが512MBで動いている考えられない仕様。

DB廻りで解放してないのかなぁ・・・とチェックしてみてもちゃんと解放している。

調べてみたらJavaScriptってメモリリークがあるんですね(^^;

ってことで先人たちの知恵を拝借。

どうやらjQueryのイベントに対して解放するロジックを手で書いてやらないとダメみたいです。

————————————————————-

$(document).ready(function() {

$(‘#btnExecute’).click(function() {
//画面初期化
$(“#Tab1”).html(‘hogehoge’);

 $(‘#btnExecute’).click() = null;  //イベントに対してnullを送る

})

});

————————————————————-

これで解決しました。見る限りちゃんと解放されているようです。

C言語時代ではこの手の処理は当たり前だったそうですね。

#C言語は挫折した者です(^^;

Classic ASP と jQuery

前回にも書きました新システムの開発。
ClassicASP(以下ASP)とjQueryとの組み合わせで始めたわけですが、
やはり文字コードのところで嵌まりました(笑)

—–
IIS(ASP) → Shift_JIS
Ajax → UTF-8
DB(Oracle10g) →Shift_JIS
—–

Oracleは現行で基幹が動いているので文字コードの変更は不可能です。(実はOracleあまり詳しくない)
ASPで生成されたフォームからjQueryでデータを投げてOracleに更新。Oracleからデータを抽出してASPにて表示。
要はこれだけ出来ればOK。

で、解決方法は・・・
—–
・ASPとAjaxの記述がされたJavaScriptのファイルはUTF-8で保存。
・ASPの一行目におまじないの書き込み。
<%@CODEPAGE=”65001″%>
↑UTF-8ですよ~という宣言らしい
—–
エディタによっては標準の文字コードがShift_JISなのをUTF-8で作る事を忘れないようにですね。
なので既存システムに組み込むには少々手間かもしれません(Shift_JISで書かれたページの日本語が文字化けする)

これでOracleにデータを書き込んだら文字化けしなくなりました。
ただAccess2010からODBC接続でも文字化けは無しの模様です。

基本の部分が出来たのであとは増殖させるのみです。

※この内容は私のメモです。利用の際は自己責任で。

新システム開発 序章

会社にて新規システムの開発案件があります。

私は入社して1年ほどなので口出しは出来ませんが、わかっているのは実行環境が5年前以上前に導入された物(WindowsServer2003のSP無し!)
さらに20世紀に開発されたと思われる某社製の常駐アプリが基幹で動いている為に、変にサービスパックを入れるとどうなるかわからない状況。これはベンダーにも確認済み。
ASP.NETでの開発が出来ればと思っていたのですが、SP3を入れれないので.Net Framework4が入れれない。(ツールはVS2010があるのですが・・・)

そして予算が無いのでサーバは当面使い回し・・・どうにも出来ない(^_^;
クライアントも10年選手が多数あり、同じく.Net Frameworkなんぞ入れたら笑える状況になります。

営業所が多いので配布の事も考えるとWEBで開発がいいのかなと。
理想はPHPで開発なんですが、環境が作れないのでClassic ASPでどうにかしのごうと思っています。

でもそれだけでは面白くないので環境は下のようにします(というかこれ以上出来ない)。
———-
IIS5.0+ASP+jQuery+Oracle10g
———-
はい。非同期通信をやります。文字コードまわりで悩むかと(笑)
ASPとOracleに入っているデータはShift-JIS、jQueryはUTF-8。

がんばってまいります(笑)

Windows 8 + SONAR 4 LE + UA-20(ROLAND)

意外とこの情報は転がっていなかったので載せておきます。

Windows 8 が発売されましたね。
私の自宅PCはCore2Duoの6000番台という今では古いマシン。
Windows VISTA Home Premiumを入れていたのですが、動作が遅くなってきまして・・・
Windows 7 に移行したかったんですが、少ないお小遣いではちょっとツライ値段。

なんとWindows 8 のアップグレード版が期間限定で安く買える!
パッケージ版が6000円、ダウンロード版だと4000円ぐらい。
むむむ、これはチャンス。さっそくAmazonにてポチっ。

しかし問題がありました。
趣味でやっているDTMの関係が動作しなくなる可能性があるということ。
OSを変える為にソフト&キャプチャーを変えるのもなぁ・・・しかも5万ぐらい。
メーカーの対応状況ではソフト&キャプチャーともにリストにすら上がってない。
海外サイトにも当然掲載されていなかった。
安物の機材だしちょうどいい買い替えタイミングかな・・・と、あきらめかけた時、
なんとVISTAのドライバで動くという情報を発見。

万全を期すためにWin8のPreview版をVIrtualBoxで動かしていたので、
それでオーディオキャプチャーの動作確認をしましたが動かない・・・
仮想上ではやっぱりなぁと思い、実環境にインストールしてみた。

Win 7のドライバで試しましたがやっぱりダメ。
ところがVISTAのドライバでは問題なく認識!

さて、あとは対応不可と書かれてあるSONAR 4 LE
どこを見てもSONAR X1 LEしか載っていない。
実はVISTAでも少し不具合があったのでダメだろうなぁと思い試しにインストール。
なんと問題なく動作した! しいて言えばレベルメーターの反応が遅いぐらい。
レイテンシーも問題なし。
なお、SONARは互換モードと管理者権限で起動してください。シリアルNo.が登録できません。

ということで、結論はほぼ問題なく動きます。
なお環境は下記の通りです。
—–
OS:Windows 8 Pro(64bit)

オーディオキャプチャー:ROLAND UA-20
http://www.roland.co.jp/products/dtm/UA-20.html

DTMソフト:SONAR 4 LE(SONAR LEとも言われてる模様)
http://www.cakewalk.jp/Products/SonarLE/
—–

ご参考になれば。
ただし環境によっては動かないかもしれないので自己責任でお願いします。

まっきぃのがらくた箱

なんかの備忘録だったり書きかけEvaSS貯蔵庫だったりする(予定)