CentOS6.3のインストール
DVDからインストール
まず、公式サイトに行き、CentOS-6.3-x86_64-bin-DVD1.isoとCentOS-6.3-x86_64-bin-DVD2.isoをダウンロードします。HTTPで1KBしかダウンロードできない時はFTPを選び右クリック→「フォルダにコピー」を選択します。
CentOS5.6のインストールの時に「CentOS6はまだマイナーバージョンが低いので使用を見合わせます」と書きましたが、もう.3までマイナーバージョンが進んだので、そろそろ大丈夫でしょう。(あの記事を書いた時は、ま6.0しかありませんでしたので。)
ダウンロードが終了したら、Nero8等を使ってDVD-Rに焼きます。終わったら、Disc1をセットしてサーバーにセットします。(以下、まっさらなハードディスクの入ったサーバーにインストールするものとします。)
起動時のメニューは、そのままEnterキーで良いでしょう。古いビデオカードが入っている場合、Instrall Fedora in basic graphics modeにしないと強制テキストモードにされてしまうかもしれません(未確認ですが)
CentOS5までは、私はデーターセンターで作業する事を想定して、CentOSはテキストモードでインストールを行っていました。データーセンターのサーバーラックの前でマウスを動かせる作業スペースを確保できない場合や、グラフィックスモードを表示できないディスプレイしか借りられない場合を考慮する必要があったためです。しかし、CentOS6では、テキストモードにするとハードディスクのパーティションの切り方を指定できないだけでなく、インストールするパッケージも選択できないので(注:方法があったのかもしれませんが、私は発見できませんでした)、仕方なくグラフィックスモードでインストールする事にします。
■DVDのテスト
なぜかここだけテキストモードになるので、「しまった、テキストモードになってしまった」と焦るかもしれませんが、ここを過ぎればGUIになるのでご安心を。ここで、間違ってOKをクリックしてしまうとひたすら長時間(数十分?)待たされてしまうので、うっかりOKをクリックしてしまったらリセットしてやり直します。(その方が早いです。)ここではSkipをクリックしましょう。
■パーティションの設定
sda
/boot ext4 100MB 基本パーティションにする
ソフトRAID 2048MB
ソフトRAID 950000MB
sdb
/boot2 ext4 100MB 基本パーティションにする
ソフトRAID 2048MB
ソフトRAID 950000MB
md0 ext4 / 950000MB
md1 SWAP 2048MB
基本パーティションというのはよくわかりませんが、多分、今までの「第一パーティションとして強制指定する」と同じ意味でしょう。/bootパーティションをソフトRAIDにすると、どういうわけか1/3の確率でブートローダーの書き込みに失敗してしまうので、/bootパーティションだけはソフトRAIDにしていません。後でsdbのディスクには手動でブートローダーをインストールする必要があります。でないと、運悪くsdaが故障した時にブートできなくなってしまいますので。
/パーティションは、今までは「残り全ての容量」で良かったのですが、どういうわけかCentOS6からは固定容量にしないとRAID1にできないみたいなので、仕方なく手動で固定値を指定しています。
「スワップをRAIDにする必要はないんじゃないのか?」「スワップはむしろRAID0にした方がいいのでは?」という方がいるかもしれませんが、スワップがRAID1になっていれば、運悪くスワップの領域に不良セクタが発生しても、サーバーをダウンさせずに運用を続ける事ができるので、安全のためにスワップもソフトRAIDにしています。
■パッケージの選択
パッケージの選択のところで「今すぐカスタマイズする」(英語インストールでは「Customize Now」)をクリックせずに[→次へ]を押してしまうと、もうインストールが始まってしまい、リセットするしかなくなってしまいます。
今回サーバーとして運用するので、GUI関係は全てチェックを外します。また、これはかなり個人的な好みが強いですが、apache、PHP、PostgreSQL、Sambaは.tar.gzからコンパイルする主義なのでチェックを外します。世の中のサーバーにはCDやDVDに最初から入っているバージョンをそのままずっと使い続ける人が圧倒的に多い(多分)ので、あえてCDやDVDに最初から入っているバージョンを使うのを避けています。また、.rpmができているバージョンもなるべく避けます。また、最新版の.tar.gzが出たらすぐに差し替えます。そのため、apache、PHP、PostgreSQL、SambaはCDやDVDに入っているバージョンは使いません。「そこまで言うなら他のも全部.tar.gzから入れろ」と言われそうですが、さすがに私のサーバーのインストールにかけられる時間にも限りがありますので・・・・・。
これまで、私がRedHat9からやっていた手法がなるべく使えるようにするために、レガシーUNIXの互換性にチェックを入れます。
ここで、tcp-wrappers、telnet-server、xinetdにチェックを入れます。
開発関係のパッケージは、なるべくチェックを入れておきます。
なにしろ、apacheやPHPをコンパイルする際に、なんとかlibやなんとか.soが足りないとか言われると面倒な事になりますので・・・。
あとは30分ほど放置します。「おめでとうございます。CentOSのインストールが完了しました」と表示されたら、DVDをイジェクトして「再起動」をクリックしてください。
もしここで、Missing Operation systemと表示されたら、ブートローダーの書き込み失敗です。他にも、インストール中にフリーズしてしまうなど、色々な不具合が発生する場合がありますが、大抵の場合、もう1回やり直すと直ります。これは、RedHatにしろCentOSにしろFedoraにしろSlackwareにしろ、あんまり珍しい事ではありません。そういうものだと思ってください。
CentOS5.6のインストールの時に「CentOS6はまだマイナーバージョンが低いので使用を見合わせます」と書きましたが、もう.3までマイナーバージョンが進んだので、そろそろ大丈夫でしょう。(あの記事を書いた時は、ま6.0しかありませんでしたので。)
ダウンロードが終了したら、Nero8等を使ってDVD-Rに焼きます。終わったら、Disc1をセットしてサーバーにセットします。(以下、まっさらなハードディスクの入ったサーバーにインストールするものとします。)
起動時のメニューは、そのままEnterキーで良いでしょう。古いビデオカードが入っている場合、Instrall Fedora in basic graphics modeにしないと強制テキストモードにされてしまうかもしれません(未確認ですが)
CentOS5までは、私はデーターセンターで作業する事を想定して、CentOSはテキストモードでインストールを行っていました。データーセンターのサーバーラックの前でマウスを動かせる作業スペースを確保できない場合や、グラフィックスモードを表示できないディスプレイしか借りられない場合を考慮する必要があったためです。しかし、CentOS6では、テキストモードにするとハードディスクのパーティションの切り方を指定できないだけでなく、インストールするパッケージも選択できないので(注:方法があったのかもしれませんが、私は発見できませんでした)、仕方なくグラフィックスモードでインストールする事にします。
■DVDのテスト
なぜかここだけテキストモードになるので、「しまった、テキストモードになってしまった」と焦るかもしれませんが、ここを過ぎればGUIになるのでご安心を。ここで、間違ってOKをクリックしてしまうとひたすら長時間(数十分?)待たされてしまうので、うっかりOKをクリックしてしまったらリセットしてやり直します。(その方が早いです。)ここではSkipをクリックしましょう。
■パーティションの設定
sda
/boot ext4 100MB 基本パーティションにする
ソフトRAID 2048MB
ソフトRAID 950000MB
sdb
/boot2 ext4 100MB 基本パーティションにする
ソフトRAID 2048MB
ソフトRAID 950000MB
md0 ext4 / 950000MB
md1 SWAP 2048MB
基本パーティションというのはよくわかりませんが、多分、今までの「第一パーティションとして強制指定する」と同じ意味でしょう。/bootパーティションをソフトRAIDにすると、どういうわけか1/3の確率でブートローダーの書き込みに失敗してしまうので、/bootパーティションだけはソフトRAIDにしていません。後でsdbのディスクには手動でブートローダーをインストールする必要があります。でないと、運悪くsdaが故障した時にブートできなくなってしまいますので。
/パーティションは、今までは「残り全ての容量」で良かったのですが、どういうわけかCentOS6からは固定容量にしないとRAID1にできないみたいなので、仕方なく手動で固定値を指定しています。
「スワップをRAIDにする必要はないんじゃないのか?」「スワップはむしろRAID0にした方がいいのでは?」という方がいるかもしれませんが、スワップがRAID1になっていれば、運悪くスワップの領域に不良セクタが発生しても、サーバーをダウンさせずに運用を続ける事ができるので、安全のためにスワップもソフトRAIDにしています。
■パッケージの選択
パッケージの選択のところで「今すぐカスタマイズする」(英語インストールでは「Customize Now」)をクリックせずに[→次へ]を押してしまうと、もうインストールが始まってしまい、リセットするしかなくなってしまいます。
今回サーバーとして運用するので、GUI関係は全てチェックを外します。また、これはかなり個人的な好みが強いですが、apache、PHP、PostgreSQL、Sambaは.tar.gzからコンパイルする主義なのでチェックを外します。世の中のサーバーにはCDやDVDに最初から入っているバージョンをそのままずっと使い続ける人が圧倒的に多い(多分)ので、あえてCDやDVDに最初から入っているバージョンを使うのを避けています。また、.rpmができているバージョンもなるべく避けます。また、最新版の.tar.gzが出たらすぐに差し替えます。そのため、apache、PHP、PostgreSQL、SambaはCDやDVDに入っているバージョンは使いません。「そこまで言うなら他のも全部.tar.gzから入れろ」と言われそうですが、さすがに私のサーバーのインストールにかけられる時間にも限りがありますので・・・・・。
これまで、私がRedHat9からやっていた手法がなるべく使えるようにするために、レガシーUNIXの互換性にチェックを入れます。
ここで、tcp-wrappers、telnet-server、xinetdにチェックを入れます。
開発関係のパッケージは、なるべくチェックを入れておきます。
なにしろ、apacheやPHPをコンパイルする際に、なんとかlibやなんとか.soが足りないとか言われると面倒な事になりますので・・・。
あとは30分ほど放置します。「おめでとうございます。CentOSのインストールが完了しました」と表示されたら、DVDをイジェクトして「再起動」をクリックしてください。
もしここで、Missing Operation systemと表示されたら、ブートローダーの書き込み失敗です。他にも、インストール中にフリーズしてしまうなど、色々な不具合が発生する場合がありますが、大抵の場合、もう1回やり直すと直ります。これは、RedHatにしろCentOSにしろFedoraにしろSlackwareにしろ、あんまり珍しい事ではありません。そういうものだと思ってください。
もう1個のハードディスクにブートローダーをインストールする
ソフトRAIDで1番目のハードディスクが破損した場合に備えて、パラレルATAの場合はスレーブ、シリアルATAの場合はSATA2以降にブートローダーをインストールしておきます。
grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf
grub> quit
なお、これは例です。お使いの環境に合わせて読み替えてください。例えば、パラレルATAなら、/dev/hdbや/dev/hdcになります。また、/bootパーティションが2番目にある時は、(hd0,0)は(hd0,1)になると思います。
ここを参考にしました。
https://www.miraclelinux.com/technet/faq/data/00080.html
インストールコマンドの意味は、
install <stage-1> <install-disk> <stage-2> p config-file
ここを参考にしました。
http://docs.redhat.com/docs/ja-JP/Red_Hat_Enterprise_Linux/5/html/Installation_Guide/s1-grub-commands.html
grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf
grub> quit
なお、これは例です。お使いの環境に合わせて読み替えてください。例えば、パラレルATAなら、/dev/hdbや/dev/hdcになります。また、/bootパーティションが2番目にある時は、(hd0,0)は(hd0,1)になると思います。
ここを参考にしました。
https://www.miraclelinux.com/technet/faq/data/00080.html
インストールコマンドの意味は、
install <stage-1> <install-disk> <stage-2> p config-file
ここを参考にしました。
http://docs.redhat.com/docs/ja-JP/Red_Hat_Enterprise_Linux/5/html/Installation_Guide/s1-grub-commands.html
外部から接続できるようにする
基本的に、サーバーはデーターセンターのラックに収めたら、あとは自社に戻ってWindows端末からtelnetの窓にコピペして設定するわけですが、自社から遠隔操作できるようになるまでは、実機で直接操作しなければなりません。
iptablesをオフにする
/etc/rc.d/init.d/iptables start
iptables -F
/etc/rc.d/init.d/iptables save
え?iptablesをオフにしちゃってていいのかって??いや、これはサーバーをラックに収めてから、自社で遠隔操作するまでの一時的な措置です。終わったらソッコーで自社に戻ってiptablesを設定しましょうね。大丈夫、iptablesなしでもtcp_wrapperさえ効いていればそう1時間、2時間で壊されるってわけじゃないですからな。(逆に1日2日放置すると危ないです)
SELinuxをオフにする
vi /etc/sysconfig/selinux
iptablesをオフにする
/etc/rc.d/init.d/iptables start
iptables -F
/etc/rc.d/init.d/iptables save
え?iptablesをオフにしちゃってていいのかって??いや、これはサーバーをラックに収めてから、自社で遠隔操作するまでの一時的な措置です。終わったらソッコーで自社に戻ってiptablesを設定しましょうね。大丈夫、iptablesなしでもtcp_wrapperさえ効いていればそう1時間、2時間で壊されるってわけじゃないですからな。(逆に1日2日放置すると危ないです)
SELinuxをオフにする
vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
reboot
SELinuxの設定がイマイチわかりませんで、私はオフにしています。ファイアウォールはiptablesに任せましょう。
telnet-serverを有効にする
vi /etc/xinetd.d/telnet
SELinuxの設定がイマイチわかりませんで、私はオフにしています。ファイアウォールはiptablesに任せましょう。
telnet-serverを有効にする
vi /etc/xinetd.d/telnet
# default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no }
CUIの画面モードを640x480にする
/boot/grub/grub.confにvga=0x301を追加すればよいという情報があちこちにあるが、まったく変わらず。とりあえず今はあきらめ。
いや、安物のデーターセンターだと、640x480しか対応してないディスプレイしか置いてないトコがあるんですよ。(○o○○○○とか) まあ、まさか今は改善されているとは思いますけどね。一応、念のため640x480にしておくと安心なんですけどね。
ネットワークカード(NIC)を有効にする
インストール時に設定できるみたいなのですが、どこにあったのかわかりませんで、多分私が見落としたんだと思いますが・・・・。とりあえず、ここではインストール後に手動で設定するって事で。
vi /etc/sysconfig/network-scripts/ifcfg-eth0
/boot/grub/grub.confにvga=0x301を追加すればよいという情報があちこちにあるが、まったく変わらず。とりあえず今はあきらめ。
いや、安物のデーターセンターだと、640x480しか対応してないディスプレイしか置いてないトコがあるんですよ。(○o○○○○とか) まあ、まさか今は改善されているとは思いますけどね。一応、念のため640x480にしておくと安心なんですけどね。
ネットワークカード(NIC)を有効にする
インストール時に設定できるみたいなのですが、どこにあったのかわかりませんで、多分私が見落としたんだと思いますが・・・・。とりあえず、ここではインストール後に手動で設定するって事で。
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" BOOTPROTO="static" HWADDR=ナイショ NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID=ナイショ IPADDR=192.168.0.40 NETWORK=192.168.0.0 BROADCAST=192.168.0.255 NETMASK=255.255.255.0 DNS1=(ネームサーバー1) DNS2=(ネームサーバー2)
※IPアドレス等は例です。お使いのネットワークに合わせてくださいね。
/etc/rc.d/init.d/network restart
デフォルトのゲートウェイの追加
vi /etc/sysconfig/network
/etc/rc.d/init.d/network restart
デフォルトのゲートウェイの追加
vi /etc/sysconfig/network
NETWORKING=yes HOSTNAME=ホスト名 GATEWAY=デフォルトのゲートウェイ
telnetでログインするユーザーの追加
useradd ユーザー名
passwd ユーザー名
tcp_wrapperの設定
サーバーを自社から遠隔操作するまでは、iptablesを一時的にオフにしてしまうので、それまでの間はtcp_wrapperに食い止めておいてもらいましょう。
vi /etc/hosts.allow
useradd ユーザー名
passwd ユーザー名
tcp_wrapperの設定
サーバーを自社から遠隔操作するまでは、iptablesを一時的にオフにしてしまうので、それまでの間はtcp_wrapperに食い止めておいてもらいましょう。
vi /etc/hosts.allow
# # hosts.allow This file describes the names of the hosts which are # allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # vsftpd : (自社のIP) : allow sshd : (自社のIP) : allow in.telnetd : (自社のIP) : allow all : all : deny
自社のIPは間違えないようにしてください。じゃないと、自社に戻ってから操作できなくて「しまった」って事になります。なにしろ、サーバー室への入室は手続きが面倒ですからな。それに、できる事ならあんな所には入りたくないです。
なので、帰る前にサーバー室から電話して、社内の人間に接続を試してもらってくださいね。
なので、帰る前にサーバー室から電話して、社内の人間に接続を試してもらってくださいね。
wgetのインストール
CentOS4だと「テキストベースインターネット」というパッケージを選択すると自動的にwgetがインストールされたのですが、6.3のインストーラーでは見当たらなかったので(見落としただけかもしれませんが)、wgetを入れます。まず、wgetをネットから取得します。どうやって??いや、ですから、だからwgetで・・・。
というトホホな状態になってしまうので、wgetは実機を操作してDVDからインストールします。
cd /usr/local/src
mkdir RPMS
cd RPMS
ここでDVDをセットする
mount -rt iso9660 /dev/dvd /media
cp /media/Packages/wget-1.12-1.4.el6.x86_64.rpm .
rpm -ivh wget-1.12-1.4.el6.x86_64.rpm
umount /media
DVDを取り出す
あとは、必要なパッケージはrpmfindから取れるので、DVDは不要になると思います。
というトホホな状態になってしまうので、wgetは実機を操作してDVDからインストールします。
cd /usr/local/src
mkdir RPMS
cd RPMS
ここでDVDをセットする
mount -rt iso9660 /dev/dvd /media
cp /media/Packages/wget-1.12-1.4.el6.x86_64.rpm .
rpm -ivh wget-1.12-1.4.el6.x86_64.rpm
umount /media
DVDを取り出す
あとは、必要なパッケージはrpmfindから取れるので、DVDは不要になると思います。
molocateのインストール
ここからはtelnetでWindows端末から遠隔で作業しているものとします。
以下は全てルート権限で操作しているものとします。そういう事をするのは良くないと思う方は、ご面倒でもrpm -ivhコマンドのようなどうしてもルートでなければならない時だけsudoコマンドを使うかsu - でルートになるようにしてください。
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/mlocate-0.22.2-3.el6.x86_64.rpm
rpm -ivh mlocate-0.22.2-3.el6.x86_64.rpm
updatedb
updatedbを毎日朝4時に動かす
crontab -e
以下は全てルート権限で操作しているものとします。そういう事をするのは良くないと思う方は、ご面倒でもrpm -ivhコマンドのようなどうしてもルートでなければならない時だけsudoコマンドを使うかsu - でルートになるようにしてください。
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/mlocate-0.22.2-3.el6.x86_64.rpm
rpm -ivh mlocate-0.22.2-3.el6.x86_64.rpm
updatedb
updatedbを毎日朝4時に動かす
crontab -e
mailto="" 0 4 * * * updatedb
デフォルトの言語をEUC-JPに変更
今の時代、端末の文字コードはUTF-8と相場が決まっているのかもしれませんが、私個人としてはeucの方が都合が良いので、eucにします。そういうこだわりのない人は、この設定は必要ありません。
vi /etc/sysconfig/i18n
vi /etc/sysconfig/i18n
LANG="ja_JP.eucJP" SUPPORTED="ja_JP.UTF-8:ja_JP:ja" SYSFONT="latarcyrheb-sun16"
vi /etc/man.config
PAGER /bin/more
man ls
で、ページャーが正しく動作する事を確認します。
終わったら、いったんtelnetを抜けて、Poderosa等のターミナルソフトの文字コードをEUCに変更してログインしなおしてください。
で、ページャーが正しく動作する事を確認します。
終わったら、いったんtelnetを抜けて、Poderosa等のターミナルソフトの文字コードをEUCに変更してログインしなおしてください。
ホスト名の設定
ホスト名の設定
hostname ホスト名
自ホスト名を逆引きさせます。
vi /etc/hosts
hostname ホスト名
自ホスト名を逆引きさせます。
vi /etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.0.40 ホスト名
ping ホスト名
自分にpingを打つか確認してください。
自ホスト名を逆引きさせていないと、/etc/rc.d/init.d/sendmail startとやってもsendmailが起動しません。
自分にpingを打つか確認してください。
自ホスト名を逆引きさせていないと、/etc/rc.d/init.d/sendmail startとやってもsendmailが起動しません。
vsftpdをxinetd経由に変更する
スタンドアロンのvsftpdを止める。
/etc/rc.d/init.d/vsftpd stop
chkconfig vsftpd off
vi /etc/xinetd.d/ftp
/etc/rc.d/init.d/vsftpd stop
chkconfig vsftpd off
vi /etc/xinetd.d/ftp
# default: on # description: The ftp server serves ftp sessions; it uses \ # unencrypted username/password pairs for authentication. service ftp { instances = 200 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/vsftpd server_args = /etc/vsftpd/vsftpd.conf log_on_failure += USERID disable = no }
vi /etc/vsftpd/vsftpd.conf
変更のある箇所だけ
変更のある箇所だけ
anonymous_enable=NO chroot_local_user=YES listen=NO
/etc/rc.d/init.d/xinetd restart
動作確認
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ftp-0.17-51.1.el6.x86_64.rpm
rpm -ivh ftp-0.17-51.1.el6.x86_64.rpm
ftp localhost
ユーザー名とパスワードを入れる。
Fedora17にあった「listen_ipv6=NOを追加しないとxinetd経由で起動しない」「500 OOPS: vsftpd: refusing to run with writable root inside chroot()というエラーが出る」という問題は、CentOS6.3に入ってるvsftpdには発生しないようです。ただし、今後CentOSのバージョンが進むと、同様の問題が発生するかもしれません。
動作確認
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ftp-0.17-51.1.el6.x86_64.rpm
rpm -ivh ftp-0.17-51.1.el6.x86_64.rpm
ftp localhost
ユーザー名とパスワードを入れる。
Fedora17にあった「listen_ipv6=NOを追加しないとxinetd経由で起動しない」「500 OOPS: vsftpd: refusing to run with writable root inside chroot()というエラーが出る」という問題は、CentOS6.3に入ってるvsftpdには発生しないようです。ただし、今後CentOSのバージョンが進むと、同様の問題が発生するかもしれません。
シスログローテーションの設定
vi /etc/logrotate.conf
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 30 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp rotate 1 }
シスログローテーションの動作確認
/etc/logrotate.confや、/etc/logrotate.d/内のファイルをいじった時は、必ず
logrotate -d /etc/logrotate.conf
として、エラーがない事を確認します。でないと、エラーがあるのを放置すると、ローテーションがまったく行われず、apacheのログが2Gオーバーしてapacheが止まってしまう可能性があります。
/etc/logrotate.confや、/etc/logrotate.d/内のファイルをいじった時は、必ず
logrotate -d /etc/logrotate.conf
として、エラーがない事を確認します。でないと、エラーがあるのを放置すると、ローテーションがまったく行われず、apacheのログが2Gオーバーしてapacheが止まってしまう可能性があります。
sendmailのチューニング
RedHat9やCentOS4の頃は、標準で入っているパッケージがi686ではなくi386で最適化されていたため、sendmailを再コンパイルしてi686用に最適化していました。今は最初から、32ビット版ではi686、64ビット版ではx86_64用に最適化したパッケージが入っているので、必要はないでしょう。しかし、一応私は以前からの名残りで最適化を行っています。特に意味はありません。
依存性の解決
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/tcp_wrappers-devel-7.6-57.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/hesiod-3.1.0-19.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/hesiod-devel-3.1.0-19.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ghostscript-8.70-14.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ghostscript-fonts-5.50-23.1.el6.noarch.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/urw-fonts-2.4-10.el6.noarch.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/xorg-x11-font-utils-7.2-11.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libXfont-1.4.1-2.el6_1.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libfontenc-1.0.5-2.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/procmail-3.22-25.1.el6.x86_64.rpm
rpm -ivh tcp_wrappers-devel-7.6-57.el6.x86_64.rpm
rpm -ivh hesiod-3.1.0-19.el6.x86_64.rpm hesiod-devel-3.1.0-19.el6.x86_64.rpm
rpm -ivh ghostscript-8.70-14.el6.x86_64.rpm ghostscript-fonts-5.50-23.1.el6.noarch.rpm urw-fonts-2.4-10.el6.noarch.rpm xorg-x11-font-utils-7.2-11.el6.x86_64.rpm libXfont-1.4.1-2.el6_1.x86_64.rpm libfontenc-1.0.5-2.el6.x86_64.rpm
リビルド
cd /usr/local/src/
mkdir SRPMS
cd SPRMS
wget ftp://ftp.pbone.net/mirror/vault.centos.org/6.2/os/Source/SPackages/sendmail-8.14.4-8.el6.src.rpm
rpmbuild --rebuild --target=x86_64 --define 'dist .el6' sendmail-8.14.4-8.el6.src.rpm
インストール
cd /usr/local/src/RPMS
rpm -ivh /root/rpmbuild/RPMS/x86_64/sendmail-8.14.4-8.el6.x86_64.rpm procmail-3.22-25.1.el6.x86_64.rpm
rpm -ivh /root/rpmbuild/RPMS/noarch/sendmail-cf-8.14.4-8.el6.noarch.rpm
スタート
/etc/rc.d/init.d/sendmail start
ここで動かない場合は/etc/hostsを確認して自ホスト名が逆引きされているか確認する。
確認ができたら、
chkconfig sendmail on
として自動起動にする。自ホスト名が逆引きされてないのに自動起動にしてしまうと、サーバー自体が起動しなくなってしまうので注意。
動作テスト
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/mailx-12.4-6.el6.x86_64.rpm
rpm -ivh mailx-12.4-6.el6.x86_64.rpm
mail root
Subject: test
test
.
でルート宛にメールが届くか確認する。
デリバリーモードの変更
デフォルトではデリバリーモードはi(即配信)になっています。メルマガ等、スクリプトでメールを一度に大量に送信する場合、即配信ではなくキューイングしてから配信するようにデリバリーモードをqに変更します。
cd /etc/mail
vi sendmail.mc
依存性の解決
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/tcp_wrappers-devel-7.6-57.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/hesiod-3.1.0-19.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/hesiod-devel-3.1.0-19.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ghostscript-8.70-14.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ghostscript-fonts-5.50-23.1.el6.noarch.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/urw-fonts-2.4-10.el6.noarch.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/xorg-x11-font-utils-7.2-11.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libXfont-1.4.1-2.el6_1.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libfontenc-1.0.5-2.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/procmail-3.22-25.1.el6.x86_64.rpm
rpm -ivh tcp_wrappers-devel-7.6-57.el6.x86_64.rpm
rpm -ivh hesiod-3.1.0-19.el6.x86_64.rpm hesiod-devel-3.1.0-19.el6.x86_64.rpm
rpm -ivh ghostscript-8.70-14.el6.x86_64.rpm ghostscript-fonts-5.50-23.1.el6.noarch.rpm urw-fonts-2.4-10.el6.noarch.rpm xorg-x11-font-utils-7.2-11.el6.x86_64.rpm libXfont-1.4.1-2.el6_1.x86_64.rpm libfontenc-1.0.5-2.el6.x86_64.rpm
リビルド
cd /usr/local/src/
mkdir SRPMS
cd SPRMS
wget ftp://ftp.pbone.net/mirror/vault.centos.org/6.2/os/Source/SPackages/sendmail-8.14.4-8.el6.src.rpm
rpmbuild --rebuild --target=x86_64 --define 'dist .el6' sendmail-8.14.4-8.el6.src.rpm
インストール
cd /usr/local/src/RPMS
rpm -ivh /root/rpmbuild/RPMS/x86_64/sendmail-8.14.4-8.el6.x86_64.rpm procmail-3.22-25.1.el6.x86_64.rpm
rpm -ivh /root/rpmbuild/RPMS/noarch/sendmail-cf-8.14.4-8.el6.noarch.rpm
スタート
/etc/rc.d/init.d/sendmail start
ここで動かない場合は/etc/hostsを確認して自ホスト名が逆引きされているか確認する。
確認ができたら、
chkconfig sendmail on
として自動起動にする。自ホスト名が逆引きされてないのに自動起動にしてしまうと、サーバー自体が起動しなくなってしまうので注意。
動作テスト
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/mailx-12.4-6.el6.x86_64.rpm
rpm -ivh mailx-12.4-6.el6.x86_64.rpm
mail root
Subject: test
test
.
でルート宛にメールが届くか確認する。
デリバリーモードの変更
デフォルトではデリバリーモードはi(即配信)になっています。メルマガ等、スクリプトでメールを一度に大量に送信する場合、即配信ではなくキューイングしてから配信するようにデリバリーモードをqに変更します。
cd /etc/mail
vi sendmail.mc
define(`confDELIVERY_MODE', `q')dnl
m4 sendmail.mc > sendmail.cf
vi /etc/sysconfig/sendmail
vi /etc/sysconfig/sendmail
DAEMON=yes QUEUE=16s
この設定は、/etc/rc.d/init.d/sendmailスクリプト内で使うものです。なので、systemctl を使うFedora17ではSENDMAIL_OPTS="-q16s"という設定になります。もし、将来的にCentOSがsystemctl
を採用するようになった場合は、やはりFedora17と同じように設定する必要があります。
cd /var/spool/clientmqueue/
mail root
Subject: test
test
.
ls
ここで、16秒後に再びlsとしてキューがなくなる事を確認します。
cd /var/spool/clientmqueue/
mail root
Subject: test
test
.
ls
ここで、16秒後に再びlsとしてキューがなくなる事を確認します。
NTPのインストール
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ntp-4.2.4p8-2.el6.centos.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ntpdate-4.2.4p8-2.el6.centos.x86_64.rpm
rpm -ivh ntp-4.2.4p8-2.el6.centos.x86_64.rpm ntpdate-4.2.4p8-2.el6.centos.x86_64.rpm
cd /etc
mv ntp.conf ntp.conf_org
vi /etc/ntp.conf
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ntp-4.2.4p8-2.el6.centos.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ntpdate-4.2.4p8-2.el6.centos.x86_64.rpm
rpm -ivh ntp-4.2.4p8-2.el6.centos.x86_64.rpm ntpdate-4.2.4p8-2.el6.centos.x86_64.rpm
cd /etc
mv ntp.conf ntp.conf_org
vi /etc/ntp.conf
restrict default ignore restrict 127.0.0.1 restrict 210.173.160.27 mask 255.255.255.255 nomodify notrap noquery restrict 210.173.160.57 mask 255.255.255.255 nomodify notrap noquery restrict 210.173.160.87 mask 255.255.255.255 nomodify notrap noquery server 210.173.160.27 # MFEED(ntp1.jst.mfeed.ad.jp) server 210.173.160.57 # MFEED(ntp2.jst.mfeed.ad.jp) server 210.173.160.87 # MFEED(ntp3.jst.mfeed.ad.jp) driftfile /etc/ntp/drift authenticate no broadcastdelay 0.008
touch /etc/ntp/drift
touch /etc/ntp/drift.TEMP
chmod 666 /etc/ntp/drift
chmod 666 /etc/ntp/drift.TEMP
/etc/rc.d/init.d/ntpd start
chkconfig ntpd on
動作確認
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp1.jst.mfeed. 210.173.160.56 2 u 59 64 7 9.973 -324250 2.073
ntp2.jst.mfeed. 210.173.160.56 2 u 59 64 7 9.154 -324250 3.081
ntp3.jst.mfeed. 210.173.176.4 2 u 59 64 7 8.360 -324250 2.466
ここで、値が全て0でなければ動作しているはず。
Fedora17では「restrict localhost」という設定を追加しないとntpqコマンドを拒否されましたが、CentOS6.3ではrestrict 127.0.0.1さえあれば大丈夫みたいですね。
ここを参考にしました。
http://www.aconus.com/~oyaji/ntp/ntp.htm
touch /etc/ntp/drift.TEMP
chmod 666 /etc/ntp/drift
chmod 666 /etc/ntp/drift.TEMP
/etc/rc.d/init.d/ntpd start
chkconfig ntpd on
動作確認
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp1.jst.mfeed. 210.173.160.56 2 u 59 64 7 9.973 -324250 2.073
ntp2.jst.mfeed. 210.173.160.56 2 u 59 64 7 9.154 -324250 3.081
ntp3.jst.mfeed. 210.173.176.4 2 u 59 64 7 8.360 -324250 2.466
ここで、値が全て0でなければ動作しているはず。
Fedora17では「restrict localhost」という設定を追加しないとntpqコマンドを拒否されましたが、CentOS6.3ではrestrict 127.0.0.1さえあれば大丈夫みたいですね。
ここを参考にしました。
http://www.aconus.com/~oyaji/ntp/ntp.htm
QPOPPERのインストール
Fedora17と同様、CentOS6も$6$から始まるshadowパスワードを使っているため、QPOPPERのバージョンは4.1以上である必要があります。
cd /usr/local/src
mkdir targz
cd targz
wget http://core.ring.gr.jp/archives/net/mail/qpopper/qpopper4.1.0.tar.gz
tar xvzf qpopper4.1.0.tar.gz
cd qpopper4.1.0
./configure --enable-special-auth --enable-log-login --enable-shy --disable-ipv6
make
make install
vi /etc/xinetd.d/popper
cd /usr/local/src
mkdir targz
cd targz
wget http://core.ring.gr.jp/archives/net/mail/qpopper/qpopper4.1.0.tar.gz
tar xvzf qpopper4.1.0.tar.gz
cd qpopper4.1.0
./configure --enable-special-auth --enable-log-login --enable-shy --disable-ipv6
make
make install
vi /etc/xinetd.d/popper
# default: on # description: The wu-ftpd FTP server serves FTP connections. It uses \ # normal, unencrypted usernames and passwords for authentication. service pop3 { disable = no socket_type = stream wait = no user = root server = /usr/local/sbin/popper server_args = -t /var/log/pop3.log }
/etc/rc.d/init.d/xinetd restart
動作テスト
telnet localhost 110
user ユーザー名
pass パスワード
quit
動作テスト
telnet localhost 110
user ユーザー名
pass パスワード
quit
sshdをxinetd経由にする
sshdをスタンドアロンでは実行させずにxinetd経由に変更します。
sshdは、同時に大量のコネクションをかけるとルート権限を乗っ取られるという不具合が発見された事があり、
それ以降慣習としてxinetd経由で実行させています。もちろん、xinetdにもしも脆弱性があれば、そのせいでかえってルート権限を乗っ取られるかもしれませんが。
/etc/rc.d/init.d/sshd stop
chkconfig sshd off
vi /etc/xinetd.d/ssh
/etc/rc.d/init.d/sshd stop
chkconfig sshd off
vi /etc/xinetd.d/ssh
# default: on # description: The ssh server serves ssh sessions; it uses \ # unencrypted username/password pairs for authentication. service ssh { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/sshd server_args = -i log_on_failure += USERID }
チューニング
vi /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
Protocol 2,1 PermitRootLogin no PermitEmptyPasswords no
/etc/rc.d/init.d/xinetd restart
プロトコル1を追加する理由は単に私がいつもプロトコル1を使うからです。自分はプロトコル2しか使わないぞという方は、プロトコル1を追加する必要はありません。
ルートログインを禁止する理由は、パスワード総当りでログインを試みる輩がいたとして、「ユーザーID」と「パスワード」の組み合わせが当たらないとログインできない場合に比べて、ルートログインではユーザーIDがrootに固定されているため、パスワードをaaaaa~zzzzzまで総当りで試された場合にパスワードを破られるリスクが高まるためです。
プロトコル1を追加する理由は単に私がいつもプロトコル1を使うからです。自分はプロトコル2しか使わないぞという方は、プロトコル1を追加する必要はありません。
ルートログインを禁止する理由は、パスワード総当りでログインを試みる輩がいたとして、「ユーザーID」と「パスワード」の組み合わせが当たらないとログインできない場合に比べて、ルートログインではユーザーIDがrootに固定されているため、パスワードをaaaaa~zzzzzまで総当りで試された場合にパスワードを破られるリスクが高まるためです。
viを標準でカラーにする
Poderosaからtelnet/sshでアクセスした時に、viがカラーで出ると見やすいので、標準でカラーで出るようにします。TeraTermだとこの設定ではうまくいかないみたいなのでTeraTermを使う人はこの設定はしないでください。
vim-enhancedのインストール
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/vim-enhanced-7.2.411-1.8.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/vim-common-7.2.411-1.8.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/gpm-libs-1.20.6-12.el6.x86_64.rpm
rpm -ivh vim-enhanced-7.2.411-1.8.el6.x86_64.rpm vim-common-7.2.411-1.8.el6.x86_64.rpm gpm-libs-1.20.6-12.el6.x86_64.rpm
カラーのviを起動させるvi2というコマンドを新設
/usr/bin/vim -u /etc/vimrc /usr/local/bin/vi2
vim-enhancedのインストール
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/vim-enhanced-7.2.411-1.8.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/vim-common-7.2.411-1.8.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/gpm-libs-1.20.6-12.el6.x86_64.rpm
rpm -ivh vim-enhanced-7.2.411-1.8.el6.x86_64.rpm vim-common-7.2.411-1.8.el6.x86_64.rpm gpm-libs-1.20.6-12.el6.x86_64.rpm
カラーのviを起動させるvi2というコマンドを新設
/usr/bin/vim -u /etc/vimrc /usr/local/bin/vi2
#!/bin/sh /usr/bin/vim -u /etc/vimrc $1
chmod 755 /usr/local/bin/vi2
viと入力するとvi2が起動するように設定
vi /etc/profile.d/vi2.sh
viと入力するとvi2が起動するように設定
vi /etc/profile.d/vi2.sh
alias vi=vi2
chmod 755 /etc/profile.d/vi2.sh
いったんログアウトして再ログイン
su -
パスワード
alias | grep vi2
alias vi='vi2'が登録されている事を確認。
vi /etc/aliases
でカラーになる事を確認。
コメントのオートインデントを解除
ここでは、メモ帳等のテキストエディタからPoderosaのウインドウへコピペするのを前提としています。その際に、オートインデントしてしまうのは都合が悪いので、解除します。
vi /etc/vimrc
いったんログアウトして再ログイン
su -
パスワード
alias | grep vi2
alias vi='vi2'が登録されている事を確認。
vi /etc/aliases
でカラーになる事を確認。
コメントのオートインデントを解除
ここでは、メモ帳等のテキストエディタからPoderosaのウインドウへコピペするのを前提としています。その際に、オートインデントしてしまうのは都合が悪いので、解除します。
vi /etc/vimrc
(一番下の行に) autocmd FileType * set comments=
ここを参考にしました。
http://d.hatena.ne.jp/dayflower/20081208/1228725403
http://d.hatena.ne.jp/dayflower/20081208/1228725403
bindのインストール
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/bind-9.8.2-0.10.rc1.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/portreserve-0.0.4-9.el6.x86_64.rpm
rpm -ivh bind-9.8.2-0.10.rc1.el6.x86_64.rpm portreserve-0.0.4-9.el6.x86_64.rpm
/etc/rc.d/init.d/named start
chkconfig named on
ついでにnslookupコマンドもインストールします。
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/bind-utils-9.8.2-0.10.rc1.el6.x86_64.rpm
rpm -ivh bind-utils-9.8.2-0.10.rc1.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/bind-9.8.2-0.10.rc1.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/portreserve-0.0.4-9.el6.x86_64.rpm
rpm -ivh bind-9.8.2-0.10.rc1.el6.x86_64.rpm portreserve-0.0.4-9.el6.x86_64.rpm
/etc/rc.d/init.d/named start
chkconfig named on
ついでにnslookupコマンドもインストールします。
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/bind-utils-9.8.2-0.10.rc1.el6.x86_64.rpm
rpm -ivh bind-utils-9.8.2-0.10.rc1.el6.x86_64.rpm
IPTABLESの設定
vi /etc/rc.d/rc.local
# # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /root/scripts/firewall-setting.sh
vi /root/scripts/firewall-setting.sh
: (ファイアウォールの設定いろいろ) : /sbin/modprobe ip_conntrack_ftp
chmod 755 /root/scripts/firewall-setting.sh
サーバーを再起動させて、
lsmod | grep ftp
で動作確認してみる。
え?なんでファイアウォールの設定を書いてないのかって?そりゃ、ここに書いちゃうとこのサーバーのセキュリティーの脆弱性がバレるからですよ。
なお、この設定をミスると遠隔操作ができなくなるので、この作業はなるべくデーターセンターにいる時に、ラックのサーバーにキーボードとディスプレイをつないた状態でやりましょう。 じゃないと、ミスるとデーターセンターに行くハメになります。あそこはサーバー室に入るまでの手続きが面倒なので、できればあんな所何度も行きたくないですね。
サーバーを再起動させて、
lsmod | grep ftp
で動作確認してみる。
え?なんでファイアウォールの設定を書いてないのかって?そりゃ、ここに書いちゃうとこのサーバーのセキュリティーの脆弱性がバレるからですよ。
なお、この設定をミスると遠隔操作ができなくなるので、この作業はなるべくデーターセンターにいる時に、ラックのサーバーにキーボードとディスプレイをつないた状態でやりましょう。 じゃないと、ミスるとデーターセンターに行くハメになります。あそこはサーバー室に入るまでの手続きが面倒なので、できればあんな所何度も行きたくないですね。
apache2.4のインストール
apache2.4をインストールする前に、まずは依存性を解決します。
aprのインストール
cd /usr/local/src/targz
wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.4.6.tar.gz
tar xvzf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure
make
make install
cd ..
apr-utilのインストール
wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.4.1.tar.gz
tar xvzf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1
./configure --with-apr=/usr/local/apr
make
make install
pcreのインストール
wget http://ftp.exim.llorien.org/pcre/pcre-7.8.tar.gz
tar xvzf pcre-7.8.tar.gz
cd pcre-7.8
./configure
make
make install
apache2.4.2のインストール
cd /usr/local/src/targz
wget http://ftp.riken.jp/net/apache/httpd/httpd-2.4.2.tar.gz
tar xvzf httpd-2.4.2.tar.gz
cd httpd-2.4.2
./configure --enable-modules=all --enable-ssl
make
make install
SSLキー作成
cd /usr/local/apache2/conf
mkdir sslkey
cd sslkey
openssl md5 /var/log/messages > rand.dat
openssl genrsa -rand rand.dat -des3 1024 > key.pem
(パスフレーズは123456)
cp key.pem key_in_pass.pem
openssl rsa -in key.pem -out key.pem
(パスフレーズは123456)
openssl req -new -days 365 -key key.pem -out csr.pem
(ここで全ての項目をエンターキーで送る)
openssl x509 -in csr.pem -out jiko_cert.pem -req -signkey key.pem -days 365
これはあくまで自己証明なので、公式なサイトではcsr.pemはちゃんと正確なユーザー情報を入れましょう。 また、IE11では自己証明では警告が表示されるだけでサイトを表示してくれません。今SSLを使うのであれば、きちんと証明機関に証明書を発行してもらってください。
あと、パスフレーズは私は面倒くさいので123456とした後、すぐに削除しちゃってますが、セキュリティーを気にするならapacheを起動する度に手動でパスフレーズを入れてください。ただ、休みの日にサーバーがリブートして、管理者が携帯で呼び出されてもいいんなら・・・。
ログディレクトリ作成と、ローテーションの設定
mkdir /var/log/apache
useradd apache
chown apache.apache /var/log/apache
vi /etc/logrotate.d/apache
aprのインストール
cd /usr/local/src/targz
wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.4.6.tar.gz
tar xvzf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure
make
make install
cd ..
apr-utilのインストール
wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.4.1.tar.gz
tar xvzf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1
./configure --with-apr=/usr/local/apr
make
make install
pcreのインストール
wget http://ftp.exim.llorien.org/pcre/pcre-7.8.tar.gz
tar xvzf pcre-7.8.tar.gz
cd pcre-7.8
./configure
make
make install
apache2.4.2のインストール
cd /usr/local/src/targz
wget http://ftp.riken.jp/net/apache/httpd/httpd-2.4.2.tar.gz
tar xvzf httpd-2.4.2.tar.gz
cd httpd-2.4.2
./configure --enable-modules=all --enable-ssl
make
make install
SSLキー作成
cd /usr/local/apache2/conf
mkdir sslkey
cd sslkey
openssl md5 /var/log/messages > rand.dat
openssl genrsa -rand rand.dat -des3 1024 > key.pem
(パスフレーズは123456)
cp key.pem key_in_pass.pem
openssl rsa -in key.pem -out key.pem
(パスフレーズは123456)
openssl req -new -days 365 -key key.pem -out csr.pem
(ここで全ての項目をエンターキーで送る)
openssl x509 -in csr.pem -out jiko_cert.pem -req -signkey key.pem -days 365
これはあくまで自己証明なので、公式なサイトではcsr.pemはちゃんと正確なユーザー情報を入れましょう。 また、IE11では自己証明では警告が表示されるだけでサイトを表示してくれません。今SSLを使うのであれば、きちんと証明機関に証明書を発行してもらってください。
あと、パスフレーズは私は面倒くさいので123456とした後、すぐに削除しちゃってますが、セキュリティーを気にするならapacheを起動する度に手動でパスフレーズを入れてください。ただ、休みの日にサーバーがリブートして、管理者が携帯で呼び出されてもいいんなら・・・。
ログディレクトリ作成と、ローテーションの設定
mkdir /var/log/apache
useradd apache
chown apache.apache /var/log/apache
vi /etc/logrotate.d/apache
/var/log/apache/*log { create 0644 apache apache missingok sharedscripts postrotate /bin/kill -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true endscript }
ogrotate -d /etc/logrotate.conf
でエラーにならない事を確認する。
自動起動スクリプト作成
vi /etc/rc.d/init.d/apache
でエラーにならない事を確認する。
自動起動スクリプト作成
vi /etc/rc.d/init.d/apache
#!/bin/bash # # /etc/rc.d/init.d/apache # # Starts the at daemon # # chkconfig: 345 95 5 # description: Runs commands scheduled by the at command at the time \ # specified when at was run, and runs batch commands when the load \ # average is low enough. # processname: apache # Source function library. . /etc/init.d/functions RETVAL=0 start() { echo "Starting apache..." /usr/local/apache2/bin/apachectl start } stop() { echo "Stopping apache..." /usr/local/apache2/bin/apachectl stop } restart() { echo "Restarting apache..." /usr/local/apache2/bin/apachectl restart } configtest() { /usr/local/apache2/bin/apachectl configtest } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) restart ;; configtest) configtest ;; *) echo "Usage: apache {start|stop|restart|configtest}" exit 1 esac exit $RETVAL
chmod 755 /etc/rc.d/init.d/apache
chkconfig apache on
/etc/rc.d/init.d/apache start
ここで、
ps ax | grep http
として、apacheが起動したかどうか確認しましょう。startして数秒間してから確認しないと常駐してないかもしれません。常駐してないようであれば、エラーログ(/var/log/apache/error.log)を確認しましょう。
apacheはバージョン2.2からはSSLを使う場合でもstartsslではなくstartで起動するようになったので、自動起動スクリプトにstartsslと書かないように注意しましょう。
チューニング
vi /usr/local/apache2/conf/httpd.conf
chkconfig apache on
/etc/rc.d/init.d/apache start
ここで、
ps ax | grep http
として、apacheが起動したかどうか確認しましょう。startして数秒間してから確認しないと常駐してないかもしれません。常駐してないようであれば、エラーログ(/var/log/apache/error.log)を確認しましょう。
apacheはバージョン2.2からはSSLを使う場合でもstartsslではなくstartで起動するようになったので、自動起動スクリプトにstartsslと書かないように注意しましょう。
チューニング
vi /usr/local/apache2/conf/httpd.conf
User apache Group apache ServerAdmin 管理者のメールアドレス ServerName ホスト名 <IfModule mod_dir.c> DirectoryIndex index.php index.cgi index.html index.htm </IfModule> AddType application/x-httpd-php .php .html ErrorLog /var/log/apache/error.log CustomLog /var/log/apache/access.log combined <Directory /> Options FollowSymLinks AllowOverride None </Directory>
▽以下はコメントアウトを解除 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule socache_dbm_module modules/mod_socache_dbm.so LoadModule socache_memcache_module modules/mod_socache_memcache.so LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf Include conf/extra/httpd-vhosts.conf
これは、あとでPHPをインストールする場合の例です。拡張子.phpだけでなく.htmlもPHPスクリプトとして認識させます。当然、PHPがインストールされてないとエラーでapacheが起動しないので、この設定をしたらPHPをインストールしましょう。
vi /usr/local/apache2/conf/extra/httpd-ssl.conf
vi /usr/local/apache2/conf/extra/httpd-ssl.conf
SSLCertificateFile /usr/local/apache2/conf/sslkey/jiko_cert.pem SSLCertificateKeyFile /usr/local/apache2/conf/sslkey/key.pem ServerAdmin 管理者のメールアドレス ServerName ホスト名 ErrorLog /var/log/apache/ssl-error.log TransferLog /var/log/apache/ssl-access.log CustomLog /var/log/apache/ssl_request_log \
ここで、jiko_cert.pemというのはあくまで自己証明です。正式な証明書を使うサイトでは、当然ですがちゃんとベリサインとかに発行してもらった証明書を入れましょう。
また、ベリサインでは中間証明が必要になる場合があります。この場合、ベリサインのサイトから中間証明書をコピペした後、
SSLCertificateChainFile
に続いて中間証明のファイルの入ったパスを書いてください。
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
最初から書いてあるバーチャルホストの設定は全てコメントアウト。
最後の行に
また、ベリサインでは中間証明が必要になる場合があります。この場合、ベリサインのサイトから中間証明書をコピペした後、
SSLCertificateChainFile
に続いて中間証明のファイルの入ったパスを書いてください。
vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
最初から書いてあるバーチャルホストの設定は全てコメントアウト。
最後の行に
Include virtconf.d/*.conf
cd /usr/local/apache2
mkdir virtconf.d
cd virtconf.d
vi そのサーバーのIPアドレス.conf
mkdir virtconf.d
cd virtconf.d
vi そのサーバーのIPアドレス.conf
<VirtualHost *:80> ServerName (そのサーバーのIP) DocumentRoot (ドキュメントルート) CustomLog /var/log/apache/access.log combined ErrorLog /var/log/apache/error.log </VirtualHost>
ここで、アクセスログをバーチャルホスト毎に別々にしたい時は、access.logやerror.logの部分を書き換えてください。
この後、apacheを再起動、といきたい所ですが、まだPHPを入れてないのでエラーになってしまうので、以下のPostgreSQL、PHPのインストール後に行ってください。
パスを通す
vi /etc/profile.d/apache.sh
この後、apacheを再起動、といきたい所ですが、まだPHPを入れてないのでエラーになってしまうので、以下のPostgreSQL、PHPのインストール後に行ってください。
パスを通す
vi /etc/profile.d/apache.sh
PATH="$PATH":/usr/local/apache2/bin
ただし、/etc/profile.dに記述したスクリプトはログイン時に有効になるので、いったんtelnetを抜けて入り直します。
PostgreSQL
cd /usr/local/src/targz
wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v9.1.4/postgresql-9.1.4.tar.gz
tar xvzf postgresql-9.1.4.tar.gz
cd postgresql-9.1.4
./configure
make
make install
データーベース初期化
useradd postgres
chmod 777 /usr/local/pgsql
su - postgres
/usr/local/pgsql/bin/initdb --encoding=EUC_JP --no-locale -D /usr/local/pgsql/data
exit
chmod 755 /usr/local/pgsql
ログのローテーションの設定
mkdir /var/log/pgsql
chown postgres.postgres /var/log/pgsql
vi /etc/logrotate.d/postgres
wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v9.1.4/postgresql-9.1.4.tar.gz
tar xvzf postgresql-9.1.4.tar.gz
cd postgresql-9.1.4
./configure
make
make install
データーベース初期化
useradd postgres
chmod 777 /usr/local/pgsql
su - postgres
/usr/local/pgsql/bin/initdb --encoding=EUC_JP --no-locale -D /usr/local/pgsql/data
exit
chmod 755 /usr/local/pgsql
ログのローテーションの設定
mkdir /var/log/pgsql
chown postgres.postgres /var/log/pgsql
vi /etc/logrotate.d/postgres
/var/log/pgsql/*log { create 0644 postgres postgres missingok sharedscripts postrotate /bin/kill -HUP `head -1 /usr/local/pgsql/data/postmaster.pid 2> /dev/null` 2> /dev/null || true endscript }
この後、
logrotate -d /etc/logrotate.conf
で、エラーが出ない事を確認する。
自動起動スクリプトの作成
vi /etc/rc.d/init.d/postgresql
logrotate -d /etc/logrotate.conf
で、エラーが出ない事を確認する。
自動起動スクリプトの作成
vi /etc/rc.d/init.d/postgresql
#!/bin/bash # # /etc/rc.d/init.d/postgres # # Starts the at daemon # # chkconfig: 345 95 5 # description: Runs commands scheduled by the at command at the time \ # specified when at was run, and runs batch commands when the load \ # average is low enough. # processname: postgres # Source function library. . /etc/init.d/functions RETVAL=0 start() { echo "Starting PostgreSQL" /bin/su - postgres -c "/usr/local/pgsql/bin/pg_ctl \ -D /usr/local/pgsql/data -l /var/log/pgsql/postgres.log start" } stop() { echo "Stopping PostgreSQL" /bin/su - postgres -c "/usr/local/pgsql/bin/pg_ctl \ -D /usr/local/pgsql/data -m fast stop" } restart() { echo "Restarting PostgreSQL" /bin/su - postgres -c "/usr/local/pgsql/bin/pg_ctl \ -D /usr/local/pgsql/data -m fast restart" } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) restart ;; *) echo "Usage: postgres {start|stop|restart|reload}" exit 1 esac exit $RETVAL
chmod 755 /etc/rc.d/init.d/postgresql
chkconfig postgresql on
/etc/rc.d/init.d/postgresql start
ps ax | grep postgres
でpostgresが常駐しているか確認する。もしpostgresが常駐してないようなら、ログを見て問題を修正する
cat /var/log/pgsql/postgres.log
パスを通す
PostgreSQL関係のコマンド(psqlやpg_dumpやvacuumdbなど)をフルパスで入力しなくても良いように、パスを通しておきます。
vi /etc/profile.d/postgresql.sh
chkconfig postgresql on
/etc/rc.d/init.d/postgresql start
ps ax | grep postgres
でpostgresが常駐しているか確認する。もしpostgresが常駐してないようなら、ログを見て問題を修正する
cat /var/log/pgsql/postgres.log
パスを通す
PostgreSQL関係のコマンド(psqlやpg_dumpやvacuumdbなど)をフルパスで入力しなくても良いように、パスを通しておきます。
vi /etc/profile.d/postgresql.sh
export POSTGRES_HOME=/usr/local/pgsql export PGLIB=$POSTGRES_HOME/lib export PGDATA=$POSTGRES_HOME/data export MANPATH="$MANPATH":$POSTGRES_HOME/man export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB" PATH="$PATH":/usr/local/pgsql/bin
ただし、/etc/profile.dに記載したスクリプトはログイン時に有効になるので、いったんtelnetを抜けて入りなおします。入りなおしたら、
psql -U postgres -l
としてパスが通っている事を確認します。
また、.soファイルの場所をシステムに記憶させます。そうしないと、DBD::Pg等でエラーが出る場合があります。
vi /etc/ld.so.conf.d/postgres.conf
psql -U postgres -l
としてパスが通っている事を確認します。
また、.soファイルの場所をシステムに記憶させます。そうしないと、DBD::Pg等でエラーが出る場合があります。
vi /etc/ld.so.conf.d/postgres.conf
/usr/local/pgsql/lib
ldconfig
チューニング
vi /usr/local/pgsql/data/postgresql.conf
vi /usr/local/pgsql/data/postgresql.conf
listen_addresses = '*' work_mem = 4MB maintenance_work_mem = 20MB effective_cache_size = 200MB log_connections = off log_duration = off log_statement = 'none' default_with_oids = on standard_conforming_strings = off backslash_quote = on escape_string_warning = off
listen_addresses = '*'
は、接続を受け付けるIPアドレスを指定します。ここで、'*'は「全てのIPアドレスからの接続を受け入れる」という意味なので、別途IPTABLESで5432ポートへの接続を制限しないと、 データーベースの中身がだだ漏れになるので注意が必要です。
work_mem = 4MB
maintenance_work_mem = 20MB
effective_cache_size = 200MB
は、いずれもPostgreSQLを実行させるのにどれぐらいのメモリーを使うかを指定しています。 データーベースサーバーにはできるだけ大量のメモリーを搭載した上で、 この値を大きくすればそれだけパフォーマンスが良くなります。 ただし、大きくしすぎるとPostgreSQL自体が動かなかったり、サーバーのスワップが頻繁になりすぎて、かえって遅くなります。
log_connections = off
log_duration = off
log_statement = 'none'
は、ログに端末情報、かかった時間、SQLステートメントを残すかどうかを設定します。この場合はいずれもオフやnoneにしています。巨大サイトではログを残しすぎると2GBを超えて止まってしまうのでオフにしていますが、デバッグ中や開発サーバーではオンにしておくと都合が良いでしょう。
default_with_oids = on
は、各行にオブジェクトID(oid)をつけるかどうか。大抵はオフで良いのですが、過去に作られたソースを流用するのであればonにしておきます。これから作るプログラムでは、oidに頼らず別途serial型のフィールドをつける等してoidに頼らないような設計にしましょう。
backslash_quote = on
は、シングルクォート'を\でエスケープできるかどうかの設定です。PostgreSQLでは'を''とエスケープしなければならないのですが、以前のバージョンでは\'というふうに\でもエスケープする事が認められていたので、古いソースを流用するのであればonにしておきます。
standard_conforming_strings = off
は、\を単なる文字として扱うか、エスケープとして扱うか。onなら単なる文字、offならエスケープとして扱います。
escape_string_warning = off
は、\をエスケープとして使おうとしている(\\や\'など)場合に警告を発するかどうか。古いソースの中にある\をエスケープとして使う箇所を発見するのに役立ちます。onで警告を発するようになりますが、古いソースを直さずにそのまま流用するのであればoffにします。
PostgreSQLの再起動
/etc/rc.d/init.d/postgresql stop
/etc/rc.d/init.d/postgresql start
自動起動の設定
chkconfig postgresql on
動作確認
head -1 /usr/local/pgsql/data/postmaster.pid
psql -U postgres -l
ワークメモリーが多すぎたり、設定ファイルの記載ミスがあると再起動時にエラーになるので、その場合はログを見てエラー箇所を修正します。
は、接続を受け付けるIPアドレスを指定します。ここで、'*'は「全てのIPアドレスからの接続を受け入れる」という意味なので、別途IPTABLESで5432ポートへの接続を制限しないと、 データーベースの中身がだだ漏れになるので注意が必要です。
work_mem = 4MB
maintenance_work_mem = 20MB
effective_cache_size = 200MB
は、いずれもPostgreSQLを実行させるのにどれぐらいのメモリーを使うかを指定しています。 データーベースサーバーにはできるだけ大量のメモリーを搭載した上で、 この値を大きくすればそれだけパフォーマンスが良くなります。 ただし、大きくしすぎるとPostgreSQL自体が動かなかったり、サーバーのスワップが頻繁になりすぎて、かえって遅くなります。
log_connections = off
log_duration = off
log_statement = 'none'
は、ログに端末情報、かかった時間、SQLステートメントを残すかどうかを設定します。この場合はいずれもオフやnoneにしています。巨大サイトではログを残しすぎると2GBを超えて止まってしまうのでオフにしていますが、デバッグ中や開発サーバーではオンにしておくと都合が良いでしょう。
default_with_oids = on
は、各行にオブジェクトID(oid)をつけるかどうか。大抵はオフで良いのですが、過去に作られたソースを流用するのであればonにしておきます。これから作るプログラムでは、oidに頼らず別途serial型のフィールドをつける等してoidに頼らないような設計にしましょう。
backslash_quote = on
は、シングルクォート'を\でエスケープできるかどうかの設定です。PostgreSQLでは'を''とエスケープしなければならないのですが、以前のバージョンでは\'というふうに\でもエスケープする事が認められていたので、古いソースを流用するのであればonにしておきます。
standard_conforming_strings = off
は、\を単なる文字として扱うか、エスケープとして扱うか。onなら単なる文字、offならエスケープとして扱います。
escape_string_warning = off
は、\をエスケープとして使おうとしている(\\や\'など)場合に警告を発するかどうか。古いソースの中にある\をエスケープとして使う箇所を発見するのに役立ちます。onで警告を発するようになりますが、古いソースを直さずにそのまま流用するのであればoffにします。
PostgreSQLの再起動
/etc/rc.d/init.d/postgresql stop
/etc/rc.d/init.d/postgresql start
自動起動の設定
chkconfig postgresql on
動作確認
head -1 /usr/local/pgsql/data/postmaster.pid
psql -U postgres -l
ワークメモリーが多すぎたり、設定ファイルの記載ミスがあると再起動時にエラーになるので、その場合はログを見てエラー箇所を修正します。
GD
PNGライブラリのインストール
cd /usr/local/src
wget http://files.directadmin.com/services/custombuild/libpng-1.2.8-config.tar.gz
tar xvzf libpng-1.2.8-config.tar.gz
cd libpng-1.2.8-config
./configure
make
make install
JPEGライブラリのインストール
32ビットシステムの場合
cd /usr/local/src
wget http://files.directadmin.com/services/custombuild/jpegsrc.v6b.tar.gz
tar -zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-shared
make
mkdir /usr/local/include
mkdir /usr/local/man/man1/
make install
64ビットシステムの場合
cd /usr/local/src
wget http://www.imagemagick.org/download/delegates/jpegsrc.v8b.tar.gz
tar -zxvf jpegsrc.v8b.tar.gz
cd jpeg-8b/
./configure --enable-shared
make
make install
freetype2のインストール
cd /usr/local/src
wget http://www.pd-admin.de/download/src/freetype-2.1.8.tar.gz
tar xvzf freetype-2.1.8.tar.gz
cd freetype-2.1.8
./configure --enable-static
make
make install
expatのインストール
cd /usr/local/src
wget http://pkgs.fedoraproject.org/repo/pkgs/expat/expat-2.0.1.tar.gz
tar xvzf expat-2.0.1.tar.gz
cd expat-2.0.1
./configure
make
make install
Fontconfigのインストール
cd /usr/local/src/RPMS
wget ftp://fr2.rpmfind.net/linux/centos/6.3/os/x86_64/Packages/expat-devel-2.0.1-11.el6_2.x86_64.rpm
rpm -ivh expat-devel-2.0.1-11.el6_2.x86_64.rpm
cd /usr/local/src
wget http://freedesktop.org/software/fontconfig/release/fontconfig-2.2.3.tar.gz
tar xvzf fontconfig-2.2.3.tar.gz
cd fontconfig-2.2.3
./configure
make
make install
gd2.0のインストール
cd /usr/local/src
wget http://ring.u-toyama.ac.jp/archives/graphics/gd/oldreleases/gd-2.0.33.tar.gz
tar xvzf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure \
--prefix=/usr/local \
--with-png=/usr/local \
--with-freetype=/usr/local \
--with-fontconfig=/usr/local \
--with-jpeg=/usr/local
Support for PNG library: yes
Support for JPEG library: yes
Support for Freetype 2.x library: yes
Support for Fontconfig library: yes
Support for Xpm library: no
XpmはGUI環境が整ってないとインストールできないので、CUIで使っているサーバーではnoのままで構いません。その他の項目はPHPで画像を処理する場合や、画像に文字を入れたい場合に使いますので、yesになるように事前にライブラリを入れておきました。
make
make install
その後、.soファイルの場所をシステムに記憶させます。でないと、GD::Barcode等でエラーが出る場合があります。
vi /etc/ld.so.conf.d/gd.conf
cd /usr/local/src
wget http://files.directadmin.com/services/custombuild/libpng-1.2.8-config.tar.gz
tar xvzf libpng-1.2.8-config.tar.gz
cd libpng-1.2.8-config
./configure
make
make install
JPEGライブラリのインストール
32ビットシステムの場合
cd /usr/local/src
wget http://files.directadmin.com/services/custombuild/jpegsrc.v6b.tar.gz
tar -zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-shared
make
mkdir /usr/local/include
mkdir /usr/local/man/man1/
make install
64ビットシステムの場合
cd /usr/local/src
wget http://www.imagemagick.org/download/delegates/jpegsrc.v8b.tar.gz
tar -zxvf jpegsrc.v8b.tar.gz
cd jpeg-8b/
./configure --enable-shared
make
make install
freetype2のインストール
cd /usr/local/src
wget http://www.pd-admin.de/download/src/freetype-2.1.8.tar.gz
tar xvzf freetype-2.1.8.tar.gz
cd freetype-2.1.8
./configure --enable-static
make
make install
expatのインストール
cd /usr/local/src
wget http://pkgs.fedoraproject.org/repo/pkgs/expat/expat-2.0.1.tar.gz
tar xvzf expat-2.0.1.tar.gz
cd expat-2.0.1
./configure
make
make install
Fontconfigのインストール
cd /usr/local/src/RPMS
wget ftp://fr2.rpmfind.net/linux/centos/6.3/os/x86_64/Packages/expat-devel-2.0.1-11.el6_2.x86_64.rpm
rpm -ivh expat-devel-2.0.1-11.el6_2.x86_64.rpm
cd /usr/local/src
wget http://freedesktop.org/software/fontconfig/release/fontconfig-2.2.3.tar.gz
tar xvzf fontconfig-2.2.3.tar.gz
cd fontconfig-2.2.3
./configure
make
make install
gd2.0のインストール
cd /usr/local/src
wget http://ring.u-toyama.ac.jp/archives/graphics/gd/oldreleases/gd-2.0.33.tar.gz
tar xvzf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure \
--prefix=/usr/local \
--with-png=/usr/local \
--with-freetype=/usr/local \
--with-fontconfig=/usr/local \
--with-jpeg=/usr/local
Support for PNG library: yes
Support for JPEG library: yes
Support for Freetype 2.x library: yes
Support for Fontconfig library: yes
Support for Xpm library: no
XpmはGUI環境が整ってないとインストールできないので、CUIで使っているサーバーではnoのままで構いません。その他の項目はPHPで画像を処理する場合や、画像に文字を入れたい場合に使いますので、yesになるように事前にライブラリを入れておきました。
make
make install
その後、.soファイルの場所をシステムに記憶させます。でないと、GD::Barcode等でエラーが出る場合があります。
vi /etc/ld.so.conf.d/gd.conf
/usr/local/lib
ldconfig
PHP
libxsltとlibcryptのインストール
libxsltとlibcryptのdevelパッケージを入れてないと./configureでエラーになってしまうので、前もって入れておきます。DVDからCentOSをインストールする際にインストールするように指定していた場合は不要です。
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libxslt-1.1.26-2.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libxslt-devel-1.1.26-2.el6.x86_64.rpm
rpm -ivh libxslt-1.1.26-2.el6.x86_64.rpm libxslt-devel-1.1.26-2.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libgcrypt-1.4.5-9.el6_2.2.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libgcrypt-devel-1.4.5-9.el6_2.2.x86_64.rpm
rpm -ivh libgcrypt-1.4.5-9.el6_2.2.x86_64.rpm libgcrypt-devel-1.4.5-9.el6_2.2.x86_64.rpm
db4のインストール
32ビットシステムの場合rpmからdb4、db4-develをインストールすれば良いのですが、64ビットシステムの場合phpのconfigureスクリプトが/lib64からライブラリを探してくれないので、ソースからコンパイルしてインストールします。
cd /usr/local/src/targz
wget http://pkgs.fedoraproject.org/repo/pkgs/db4/db-4.7.25.tar.gz/ec2b87e833779681a0c3a814aa71359e/db-4.7.25.tar.gz
tar xvzf db-4.7.25.tar.gz
cd db-4.7.25
cd build_unix
../dist/configure --prefix=/usr
make
make install
※ここを参考にしました
http://www.kozupon.com/db/db2.html
openldapのインストール
32ビットシステムの場合rpmからopenldap、openldap-develをインストールすれば良いのですが、64ビットシステムの場合phpのconfigureスクリプトが/lib64からライブラリを探してくれないので、ソースからコンパイルしてインストールします。
cd /usr/local/src/targz
wget http://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.23.tgz
tar xvzf openldap-2.4.23.tgz
cd openldap-2.4.23
./configure --prefix=/usr --enable-ldbm
make depend
make
make install
※ここを参考にしました
http://www015.upp.so-net.ne.jp/unixlife/practical/openldap-install.html
phpのインストール
wget http://ftp.wayne.edu/php/php-5.4.5.tar.gz
tar xvzf php-5.4.5.tar.gz
cd php-5.4.5
vi mkphpconf
32ビットシステムの場合
libxsltとlibcryptのdevelパッケージを入れてないと./configureでエラーになってしまうので、前もって入れておきます。DVDからCentOSをインストールする際にインストールするように指定していた場合は不要です。
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libxslt-1.1.26-2.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libxslt-devel-1.1.26-2.el6.x86_64.rpm
rpm -ivh libxslt-1.1.26-2.el6.x86_64.rpm libxslt-devel-1.1.26-2.el6.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libgcrypt-1.4.5-9.el6_2.2.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libgcrypt-devel-1.4.5-9.el6_2.2.x86_64.rpm
rpm -ivh libgcrypt-1.4.5-9.el6_2.2.x86_64.rpm libgcrypt-devel-1.4.5-9.el6_2.2.x86_64.rpm
db4のインストール
32ビットシステムの場合rpmからdb4、db4-develをインストールすれば良いのですが、64ビットシステムの場合phpのconfigureスクリプトが/lib64からライブラリを探してくれないので、ソースからコンパイルしてインストールします。
cd /usr/local/src/targz
wget http://pkgs.fedoraproject.org/repo/pkgs/db4/db-4.7.25.tar.gz/ec2b87e833779681a0c3a814aa71359e/db-4.7.25.tar.gz
tar xvzf db-4.7.25.tar.gz
cd db-4.7.25
cd build_unix
../dist/configure --prefix=/usr
make
make install
※ここを参考にしました
http://www.kozupon.com/db/db2.html
openldapのインストール
32ビットシステムの場合rpmからopenldap、openldap-develをインストールすれば良いのですが、64ビットシステムの場合phpのconfigureスクリプトが/lib64からライブラリを探してくれないので、ソースからコンパイルしてインストールします。
cd /usr/local/src/targz
wget http://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.4.23.tgz
tar xvzf openldap-2.4.23.tgz
cd openldap-2.4.23
./configure --prefix=/usr --enable-ldbm
make depend
make
make install
※ここを参考にしました
http://www015.upp.so-net.ne.jp/unixlife/practical/openldap-install.html
phpのインストール
wget http://ftp.wayne.edu/php/php-5.4.5.tar.gz
tar xvzf php-5.4.5.tar.gz
cd php-5.4.5
vi mkphpconf
32ビットシステムの場合
./configure \ --with-config-file-path=/etc \ --enable-gd-native-ttf \ --with-openssl \ --with-zlib \ --enable-exif \ --enable-ftp \ --enable-magic-quotes \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-wddx \ --with-kerberos \ --enable-ucd-snmp-hack \ --enable-shmop \ --enable-calendar \ --with-libxml-dir=/usr \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-gd \ --with-pgsql=/usr/local/pgsql \ --with-regex=php \ --enable-zend-multibyte \ --disable-debug \ --with-layout=GNU \ --with-pear=/usr/share/php \ --enable-bcmath \ --with-bz2 \ --enable-ctype \ --with-db4 \ --with-iconv \ --with-gettext \ --enable-mbstring \ --with-pcre-regex \ --with-libexpat-dir=/usr/local/apr \ --with-xmlrpc \ --with-pgsql \ --with-mime-magic=/usr/share/magic.mime \ --with-exec-dir=/usr/lib/php4/libexec \ --enable-shared \ --enable-static \ --with-zlib-dir=/usr \ --with-jpeg-dir=shared,/usr \ --with-png-dir=shared,/usr \ --with-freetype-dir=shared,/usr \ --with-ldap=shared,/usr \ --with-xsl \ --with-ttf=shared \ --enable-soap
64ビットシステムの場合
./configure \ --with-config-file-path=/etc \ --enable-gd-native-ttf \ --with-openssl \ --with-zlib \ --enable-exif \ --enable-ftp \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-wddx \ --with-kerberos \ --enable-shmop \ --enable-calendar \ --with-libxml-dir=/usr \ --with-apxs2=/usr/local/apache2/bin/apxs \ --with-gd \ --with-pgsql=/usr/local/pgsql \ --with-regex=php \ --disable-debug \ --with-layout=GNU \ --with-pear=/usr/share/php \ --enable-bcmath \ --with-bz2 \ --enable-ctype \ --with-iconv \ --with-gettext \ --enable-mbstring \ --with-pcre-regex \ --with-libexpat-dir=/usr/local/apr \ --with-xmlrpc \ --with-pgsql \ --enable-shared \ --enable-static \ --with-zlib-dir=/usr \ --with-jpeg-dir=shared,/usr \ --with-png-dir=shared,/usr \ --with-freetype-dir=shared,/usr \ --with-ldap=shared,/usr \ --with-db4=shared,/usr \ --with-xsl \ --enable-soap
従来あった
--enable-magic-quotes
--enable-ucd-snmp-hack
--enable-zend-multibyte
--with-mime-magic
--with-exec-dir
--with-ttf
は廃止されたので、現バージョンでは指定できません。--enable-magic-quotesが廃止されたため、従来のマジッククォートされている事を前提としたソースが動かないので、そういう場合は修正が必要になります。 具体的には、SQL文を生成する際に、insertやupdateする文字列中にある'を''にする処理を追加する必要があります。そのためには、pg_escape_string関数等を利用します。 PostgreSQLではbackslash_quote= onは廃止する方向なので、PHPのaddslashes関数は使わないようにしましょう。
--with-libexpat-dir=/usr/local/apr
apacheをインストールする時に先だってapr-1.4.6.tar.gzをインストールしている事を前提としています。
--with-ldap=shared,/usr
--with-db4=shared,/usr
これらは64ビットシステムではconfigureスクリプトが/lib64からライブラリを探してくれずエラーになってしまうので、別途ソースからコンパイル・インストールして、インストールしたディレクトリを指定する必要があります。ここでは、--with-ldap=shared,/usrと、--with-db4=shared,/usrを指定しています。
chmod 755 mkphpconf
./mkphpconf
make
make install
コンパイルが通ったらphp.iniをコピーします。
cp php.ini-development /etc/php.ini
チューニング
vi /etc/php.ini
--enable-magic-quotes
--enable-ucd-snmp-hack
--enable-zend-multibyte
--with-mime-magic
--with-exec-dir
--with-ttf
は廃止されたので、現バージョンでは指定できません。--enable-magic-quotesが廃止されたため、従来のマジッククォートされている事を前提としたソースが動かないので、そういう場合は修正が必要になります。 具体的には、SQL文を生成する際に、insertやupdateする文字列中にある'を''にする処理を追加する必要があります。そのためには、pg_escape_string関数等を利用します。 PostgreSQLではbackslash_quote= onは廃止する方向なので、PHPのaddslashes関数は使わないようにしましょう。
--with-libexpat-dir=/usr/local/apr
apacheをインストールする時に先だってapr-1.4.6.tar.gzをインストールしている事を前提としています。
--with-ldap=shared,/usr
--with-db4=shared,/usr
これらは64ビットシステムではconfigureスクリプトが/lib64からライブラリを探してくれずエラーになってしまうので、別途ソースからコンパイル・インストールして、インストールしたディレクトリを指定する必要があります。ここでは、--with-ldap=shared,/usrと、--with-db4=shared,/usrを指定しています。
chmod 755 mkphpconf
./mkphpconf
make
make install
コンパイルが通ったらphp.iniをコピーします。
cp php.ini-development /etc/php.ini
チューニング
vi /etc/php.ini
display_errors = On log_errors = On html_errors = Off error_log = /var/log/apache/php-error.log file_uploads = On session.auto_start = 1 session.gc_maxlifetime = 3600 session.use_trans_sid = 1 session.cache_limiter = private, must-revalidate upload_max_filesize = 100M memory_limit = 128M post_max_size = 200M date.timezone = Asia/Tokyo mbstring.http_output = SJIS-win mbstring.internal_encoding = SJIS-win short_open_tag = On error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
upload_max_filesize = 100M
post_max_size = 200M
今時デフォルトのアップロードのサイズ2Mではほとんど何もアップできない(大げさ?)でしょうから、ここは100Mぐらいんにしておきます。同時にPOSTできるサイズも増やしておきます。これはアップロードできるサイズより大きくしないと、アップロードはできてもその他の情報(hiddenタグの情報など)が途中切れになってしまいます。
date.timezone = Asia/Tokyo
PHP5.1から追加された設定で、この設定をしていないとdate()関数を使った時にタイムゾーンが設定されていないというエラーが出ます。古いスクリプトを流用する場合はこの設定を入れます。これから作る新しいスクリプトではdate()関数にタイムゾーンを指定してください。
mbstring.http_output = SJIS-win
mbstring.internal_encoding = SJIS-win
大抵はSJISだけで良いのですが、携帯サイトを作る場合にドコモの絵文字にも対応させたいので、SJIS-winとします。
※2015.9.20追記 この記事はガラケー全盛期に書いたものですので、今の時代(2015年)にスマホ対応サイト(ガラケー非対応)を作るのであれば、UTF-8と設定した上で、サイトはUTF-8で作成する方が良いかと思われます。ちなみに、このサイトは全てSJISで記述しています。
short_open_tag = On
<?をPHPスクリプトの開始と認識させます。 この設定をすると、<?xmlという行が全てエラーになってしまうので、<?xmlという行はechoやprint文で出力させます。 これから作る新しいスクリプトでは<?phpと書くようにしましょう。
※2015.9.20追記 PHP5.4以降では、short_open_tagの設定は廃止され、常時onとみなされるようになりました。 そのかわり、<?xmlと書いてある場合はphpとはみなされずにエラーにならなくなりました。 要するに、<?xmlさえエラーにならなければ、なにもショートタグ全てを受け付けないようにする必要もなかろう、という事なのでしょう。
ここを参考にしました。
http://www.coalice.info/blog/programming/php/920.html
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
split関数を使っても非推奨エラーが出ないようにします。古いスクリプトを流用する場合はこの設定を入れます。これから作る新しいスクリプトでは、explodeやpreg_splitを使うようにしてください。
register_globals =
ありません。 PHP 5.4.0 で削除されました。したがって、古いスクリプトを流用する場合、スクリプトの頭でextract("$_GET")やextract("$_PUT")を使って配列を展開する必要があります。
/etc/rc.d/init.d/apache configtest
エラーがなければ
/etc/rc.d/init.d/apache stop
/etc/rc.d/init.d/apache start
post_max_size = 200M
今時デフォルトのアップロードのサイズ2Mではほとんど何もアップできない(大げさ?)でしょうから、ここは100Mぐらいんにしておきます。同時にPOSTできるサイズも増やしておきます。これはアップロードできるサイズより大きくしないと、アップロードはできてもその他の情報(hiddenタグの情報など)が途中切れになってしまいます。
date.timezone = Asia/Tokyo
PHP5.1から追加された設定で、この設定をしていないとdate()関数を使った時にタイムゾーンが設定されていないというエラーが出ます。古いスクリプトを流用する場合はこの設定を入れます。これから作る新しいスクリプトではdate()関数にタイムゾーンを指定してください。
mbstring.http_output = SJIS-win
mbstring.internal_encoding = SJIS-win
大抵はSJISだけで良いのですが、携帯サイトを作る場合にドコモの絵文字にも対応させたいので、SJIS-winとします。
※2015.9.20追記 この記事はガラケー全盛期に書いたものですので、今の時代(2015年)にスマホ対応サイト(ガラケー非対応)を作るのであれば、UTF-8と設定した上で、サイトはUTF-8で作成する方が良いかと思われます。ちなみに、このサイトは全てSJISで記述しています。
short_open_tag = On
<?をPHPスクリプトの開始と認識させます。 この設定をすると、<?xmlという行が全てエラーになってしまうので、<?xmlという行はechoやprint文で出力させます。 これから作る新しいスクリプトでは<?phpと書くようにしましょう。
※2015.9.20追記 PHP5.4以降では、short_open_tagの設定は廃止され、常時onとみなされるようになりました。 そのかわり、<?xmlと書いてある場合はphpとはみなされずにエラーにならなくなりました。 要するに、<?xmlさえエラーにならなければ、なにもショートタグ全てを受け付けないようにする必要もなかろう、という事なのでしょう。
ここを参考にしました。
http://www.coalice.info/blog/programming/php/920.html
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
split関数を使っても非推奨エラーが出ないようにします。古いスクリプトを流用する場合はこの設定を入れます。これから作る新しいスクリプトでは、explodeやpreg_splitを使うようにしてください。
register_globals =
ありません。 PHP 5.4.0 で削除されました。したがって、古いスクリプトを流用する場合、スクリプトの頭でextract("$_GET")やextract("$_PUT")を使って配列を展開する必要があります。
/etc/rc.d/init.d/apache configtest
エラーがなければ
/etc/rc.d/init.d/apache stop
/etc/rc.d/init.d/apache start
Perlモジュールのインストール
基本的にはPerlモジュールのインストールは、
tar xvzf モジュール名.tar.gz
cd モジュール名
perl Makefile.PL
make
make test
make install
cd ..
この作業の繰り返しになります。Perlモジュールは大抵はconfigureスクリプトはシェルスクリプトではなくperlで記述されているため、Makefileを生成するためにはperl Makefile.PLとします。
Perlモジュールは普通はCPANのシェルを使って取得するのが一般的で、その方が依存性を自動的に解決してくれて便利なのですが、DBIやGDみたいにmake testでは失敗するけど実は使えるみたいな場合にエラーで途中で止まってしまうので、ここでは手動でインストールしています。
複数台のサーバーをインストールするようなサーバー管理者の仕事をしている方は、都度wgetで取得するのではなく、ローカルのWindows端末に保存しておいてFTPでサーバーにアップした方が作業が早く終わります。
Googleからファイル置場を探す時は、ファイル名の後にindex of をつけて絞り込むと早く見つかります。
TimeDateのインストール
cd /usr/local/src
mkdir Perl-modules
cd Perl-modules/
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-TimeDate/TimeDate-1.16.tar.gz/b3cc35a7cabd106ac8829d2f2ff4bd9d/TimeDate-1.16.tar.gz
tar xvzf TimeDate-1.16.tar.gz
cd TimeDate-1.16
perl Makefile.PL
make
make test
make install
cd ..
Time Hiresのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-Time-HiRes/Time-HiRes-1.65.tar.gz/2d1a744ab6b31b86db1610d091c760ae/Time-HiRes-1.65.tar.gz
tar xvzf Time-HiRes-1.65.tar.gz
cd Time-HiRes-1.65
perl Makefile.PL
make
make test
make install
cd ..
File-Tailのインストール
wget http://backpan.perl.org/authors/id/M/MG/MGRABNAR/File-Tail-0.98.tar.gz
tar xvzf File-Tail-0.98.tar.gz
cd File-Tail-0.98
perl Makefile.PL
make
make test
make install
cd ..
これはmake testに妙に時間がかかりますが異常ではありません。
MIME-BASE-64のインストール
wget http://backpan.perl.org/authors/id/G/GA/GAAS/MIME-Base64-3.05.tar.gz
tar xvzf MIME-Base64-3.05.tar.gz
cd MIME-Base64-3.05
perl Makefile.PL
make
make test
make install
cd ..
Test-Sinmpleのインストール
wget http://backpan.perl.org/authors/id/M/MS/MSCHWERN/Test-Simple-0.47.tar.gz
tar xvzf Test-Simple-0.47.tar.gz
cd Test-Simple-0.47
perl Makefile.PL
make
make test
make install
cd ..
File-ReadBackwardsのインストール
wget http://gitpan.integra.net/backpan/authors/id/U/UR/URI/File-ReadBackwards-1.02.tar.gz
tar xvzf File-ReadBackwards-1.02.tar.gz
cd File-ReadBackwards-1.02
perl Makefile.PL
make
make test
make install
cd ..
DBIのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-DBI/DBI-1.48.tar.gz/87396e1a9c06d1190f1ca70e1da1163e/DBI-1.48.tar.gz
tar xvzf DBI-1.48.tar.gz
cd DBI-1.48
perl Makefile.PL
make
make test
make install
cd ..
make testで [make: *** [test_dynamic] エラー 255]が出ますが 誰も気にしない 。ちゃんと使えますのでご心配なく。
DBD-Pgのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-DBD-Pg/DBD-Pg-1.43.tar.gz/1ddefc3cb5f8c0d20eaf6ba7aa11049d/DBD-Pg-1.43.tar.gz
tar xvzf DBD-Pg-1.43.tar.gz
cd DBD-Pg-1.43
perl Makefile.PL
export DBI_DSN='dbi:Pg:dbname=template1;port=5432'
export DBI_USER=postgres
make test
make install
cd ..
tar xvzf モジュール名.tar.gz
cd モジュール名
perl Makefile.PL
make
make test
make install
cd ..
この作業の繰り返しになります。Perlモジュールは大抵はconfigureスクリプトはシェルスクリプトではなくperlで記述されているため、Makefileを生成するためにはperl Makefile.PLとします。
Perlモジュールは普通はCPANのシェルを使って取得するのが一般的で、その方が依存性を自動的に解決してくれて便利なのですが、DBIやGDみたいにmake testでは失敗するけど実は使えるみたいな場合にエラーで途中で止まってしまうので、ここでは手動でインストールしています。
複数台のサーバーをインストールするようなサーバー管理者の仕事をしている方は、都度wgetで取得するのではなく、ローカルのWindows端末に保存しておいてFTPでサーバーにアップした方が作業が早く終わります。
Googleからファイル置場を探す時は、ファイル名の後にindex of をつけて絞り込むと早く見つかります。
TimeDateのインストール
cd /usr/local/src
mkdir Perl-modules
cd Perl-modules/
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-TimeDate/TimeDate-1.16.tar.gz/b3cc35a7cabd106ac8829d2f2ff4bd9d/TimeDate-1.16.tar.gz
tar xvzf TimeDate-1.16.tar.gz
cd TimeDate-1.16
perl Makefile.PL
make
make test
make install
cd ..
Time Hiresのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-Time-HiRes/Time-HiRes-1.65.tar.gz/2d1a744ab6b31b86db1610d091c760ae/Time-HiRes-1.65.tar.gz
tar xvzf Time-HiRes-1.65.tar.gz
cd Time-HiRes-1.65
perl Makefile.PL
make
make test
make install
cd ..
File-Tailのインストール
wget http://backpan.perl.org/authors/id/M/MG/MGRABNAR/File-Tail-0.98.tar.gz
tar xvzf File-Tail-0.98.tar.gz
cd File-Tail-0.98
perl Makefile.PL
make
make test
make install
cd ..
これはmake testに妙に時間がかかりますが異常ではありません。
MIME-BASE-64のインストール
wget http://backpan.perl.org/authors/id/G/GA/GAAS/MIME-Base64-3.05.tar.gz
tar xvzf MIME-Base64-3.05.tar.gz
cd MIME-Base64-3.05
perl Makefile.PL
make
make test
make install
cd ..
Test-Sinmpleのインストール
wget http://backpan.perl.org/authors/id/M/MS/MSCHWERN/Test-Simple-0.47.tar.gz
tar xvzf Test-Simple-0.47.tar.gz
cd Test-Simple-0.47
perl Makefile.PL
make
make test
make install
cd ..
File-ReadBackwardsのインストール
wget http://gitpan.integra.net/backpan/authors/id/U/UR/URI/File-ReadBackwards-1.02.tar.gz
tar xvzf File-ReadBackwards-1.02.tar.gz
cd File-ReadBackwards-1.02
perl Makefile.PL
make
make test
make install
cd ..
DBIのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-DBI/DBI-1.48.tar.gz/87396e1a9c06d1190f1ca70e1da1163e/DBI-1.48.tar.gz
tar xvzf DBI-1.48.tar.gz
cd DBI-1.48
perl Makefile.PL
make
make test
make install
cd ..
make testで [make: *** [test_dynamic] エラー 255]が出ますが 誰も気にしない 。ちゃんと使えますのでご心配なく。
DBD-Pgのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-DBD-Pg/DBD-Pg-1.43.tar.gz/1ddefc3cb5f8c0d20eaf6ba7aa11049d/DBD-Pg-1.43.tar.gz
tar xvzf DBD-Pg-1.43.tar.gz
cd DBD-Pg-1.43
perl Makefile.PL
export DBI_DSN='dbi:Pg:dbname=template1;port=5432'
export DBI_USER=postgres
make test
make install
cd ..
Jcodeのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-Jcode/Jcode-2.03.tar.gz/8d285ebf5e5d4f60938829a2c11bdef6/Jcode-2.03.tar.gz
tar xvzf Jcode-2.03.tar.gz
cd Jcode-2.03
perl Makefile.PL
make test
make install
cd ..
CGIのインストール
wget http://openwebmail.org/openwebmail/download/packages/CGI.pm-3.05.tar.gz
tar xvzf CGI.pm-3.05.tar.gz
cd CGI.pm-3.05
perl Makefile.PL
make test
make install
cd ..
GDのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-GD/GD-2.23.tar.gz/131a84d37921a18c87e7d994d72165b2/GD-2.23.tar.gz
tar xvzf GD-2.23.tar.gz
cd GD-2.23
perl Makefile.PL
make
make test
make install
cd ..
make test時に[make: *** [test_dynamic] エラー 2]が出るけど 誰も気にしない。 ちゃんと使えますのでご心配なく。
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-Jcode/Jcode-2.03.tar.gz/8d285ebf5e5d4f60938829a2c11bdef6/Jcode-2.03.tar.gz
tar xvzf Jcode-2.03.tar.gz
cd Jcode-2.03
perl Makefile.PL
make test
make install
cd ..
CGIのインストール
wget http://openwebmail.org/openwebmail/download/packages/CGI.pm-3.05.tar.gz
tar xvzf CGI.pm-3.05.tar.gz
cd CGI.pm-3.05
perl Makefile.PL
make test
make install
cd ..
GDのインストール
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-GD/GD-2.23.tar.gz/131a84d37921a18c87e7d994d72165b2/GD-2.23.tar.gz
tar xvzf GD-2.23.tar.gz
cd GD-2.23
perl Makefile.PL
make
make test
make install
cd ..
make test時に[make: *** [test_dynamic] エラー 2]が出るけど 誰も気にしない。 ちゃんと使えますのでご心配なく。
GD-Barcodeのインストール
wget http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/modules/by-module/GD/KWITKNR/GD-Barcode-1.15.tar.gz
tar xvzf GD-Barcode-1.15.tar.gz
cd GD-Barcode-1.15
perl Makefile.PL
make
make test
make install
cd ..
このままでは「QRコードのバージョンを指定しなかった場合には自動判別になる」という機能が働かず、QRコードのバージョンを指定しなかった場合に1になってしまうというバグがあるので、以下のように修正します。
chmod 755 /usr/local/share/perl5/GD/Barcode/QRcode.pm
vi /usr/local/share/perl5/GD/Barcode/QRcode.pm
40行目
wget http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/modules/by-module/GD/KWITKNR/GD-Barcode-1.15.tar.gz
tar xvzf GD-Barcode-1.15.tar.gz
cd GD-Barcode-1.15
perl Makefile.PL
make
make test
make install
cd ..
このままでは「QRコードのバージョンを指定しなかった場合には自動判別になる」という機能が働かず、QRコードのバージョンを指定しなかった場合に1になってしまうというバグがあるので、以下のように修正します。
chmod 755 /usr/local/share/perl5/GD/Barcode/QRcode.pm
vi /usr/local/share/perl5/GD/Barcode/QRcode.pm
40行目
$oSelf->{Version} = $rhPrm->{Version} || 1;
↓
$oSelf->{Version} = $rhPrm->{Version};
ImageMagiclのインストール
他のモジュールのようにソースコードからコンパイルして生成したかったんですけど、うまくいかなくてすいません。rpmパッケージからインストールします。
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ImageMagick-perl-6.5.4.7-6.el6_2.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ImageMagick-6.5.4.7-6.el6_2.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libwmf-0.2.8.4-22.el6.centos.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libwmf-lite-0.2.8.4-22.el6.centos.x86_64.rpm
rpm -ivh ImageMagick-perl-6.5.4.7-6.el6_2.x86_64.rpm \
ImageMagick-6.5.4.7-6.el6_2.x86_64.rpm \
libwmf-0.2.8.4-22.el6.centos.x86_64.rpm \
libwmf-lite-0.2.8.4-22.el6.centos.x86_64.rpm
CentOSインストール時に「開発」関係を比較的多めに指定したので、依存性の解決がこの程度で済みましたが、インストール時の指定によっては以下のパッケージを要求してくる場合があります。
gd
ghostscript
ghostscript-devel
ghostscript
lcms
lcms-devel
libcroco
libgnomeui
libgnomeui-devel
libgsf
librsvg2
urw-fonts
他のモジュールのようにソースコードからコンパイルして生成したかったんですけど、うまくいかなくてすいません。rpmパッケージからインストールします。
cd /usr/local/src/RPMS
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ImageMagick-perl-6.5.4.7-6.el6_2.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/ImageMagick-6.5.4.7-6.el6_2.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libwmf-0.2.8.4-22.el6.centos.x86_64.rpm
wget ftp://rpmfind.net/linux/centos/6.3/os/x86_64/Packages/libwmf-lite-0.2.8.4-22.el6.centos.x86_64.rpm
rpm -ivh ImageMagick-perl-6.5.4.7-6.el6_2.x86_64.rpm \
ImageMagick-6.5.4.7-6.el6_2.x86_64.rpm \
libwmf-0.2.8.4-22.el6.centos.x86_64.rpm \
libwmf-lite-0.2.8.4-22.el6.centos.x86_64.rpm
CentOSインストール時に「開発」関係を比較的多めに指定したので、依存性の解決がこの程度で済みましたが、インストール時の指定によっては以下のパッケージを要求してくる場合があります。
gd
ghostscript
ghostscript-devel
ghostscript
lcms
lcms-devel
libcroco
libgnomeui
libgnomeui-devel
libgsf
librsvg2
urw-fonts
MySQL
CentOSの最初から入ってるMysqlを削除
DVDからCentOSをインストールする時に「SQLサーバー」や「POSTFIXサーバー」を指定してしまうと、パッケージのMySQLがインストールされてしまうので、まずは削除します。いや、パッケージのままで良いという場合はそのままでも良いのですが、私はPostgreSQLやMySQLはソースからコンパイルして生成する事にしています。
rpm -e mysql-libs-5.1.61-4.el6.x86_64 mysql-devel-5.1.61-4.el6.x86_64 mysql-5.1.61-4.el6.x86_64 postfix-2.6.6-2.2.el6_1.x86_64
この後、いったんtelnetから抜けて入りなおします。(/usr/bin以下にあるmysqlコマンドを読もうとしてしまうため)
ユーザー作成
useradd mysql
コンパイル
cd /usr/local/src/targz
wget http://download.softagency.net/MySQL/Downloads/MySQL-5.0/mysql-5.0.92.tar.gz
tar xvzf mysql-5.0.92.tar.gz
cd mysql-5.0.92
./configure --with-charset=sjis --with-extra-charsets=all --with-mysqld-user=mysql
make
make install
雛型をコピー
cp support-files/my-medium.cnf /etc/my.cnf
ライブラリの場所をシステムに記憶させる
この作業は、DBD::mysqlを使う時に必要になります。
vi /etc/ld.so.conf.d/mysql.conf
DVDからCentOSをインストールする時に「SQLサーバー」や「POSTFIXサーバー」を指定してしまうと、パッケージのMySQLがインストールされてしまうので、まずは削除します。いや、パッケージのままで良いという場合はそのままでも良いのですが、私はPostgreSQLやMySQLはソースからコンパイルして生成する事にしています。
rpm -e mysql-libs-5.1.61-4.el6.x86_64 mysql-devel-5.1.61-4.el6.x86_64 mysql-5.1.61-4.el6.x86_64 postfix-2.6.6-2.2.el6_1.x86_64
この後、いったんtelnetから抜けて入りなおします。(/usr/bin以下にあるmysqlコマンドを読もうとしてしまうため)
ユーザー作成
useradd mysql
コンパイル
cd /usr/local/src/targz
wget http://download.softagency.net/MySQL/Downloads/MySQL-5.0/mysql-5.0.92.tar.gz
tar xvzf mysql-5.0.92.tar.gz
cd mysql-5.0.92
./configure --with-charset=sjis --with-extra-charsets=all --with-mysqld-user=mysql
make
make install
雛型をコピー
cp support-files/my-medium.cnf /etc/my.cnf
ライブラリの場所をシステムに記憶させる
この作業は、DBD::mysqlを使う時に必要になります。
vi /etc/ld.so.conf.d/mysql.conf
/usr/local/lib/mysql
ldconfig
DB初期化
mysql_install_db --user=mysql
MySQL起動スクリプト作成
vi /etc/rc.d/init.d/mysql
DB初期化
mysql_install_db --user=mysql
MySQL起動スクリプト作成
vi /etc/rc.d/init.d/mysql
#!/bin/bash # # /etc/rc.d/init.d/mysql # # Starts the at daemon # # chkconfig: 345 95 5 # description: Runs commands scheduled by the at command at the time \ # specified when at was run, and runs batch commands when the load \ # average is low enough. # processname: mysql # Source function library. . /etc/init.d/functions RETVAL=0 start() { /usr/local/share/mysql/mysql.server start } stop() { /usr/local/share/mysql/mysql.server stop } restart() { /usr/local/share/mysql/mysql.server restart } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) restart ;; *) echo "Usage: mysql {start|stop|restart|reload}" exit 1 esac exit $RETVAL
chmod 755 /etc/rc.d/init.d/mysql
chkconfig mysql on
MySQL起動
/etc/rc.d/init.d/mysql start
ルートパスワード設定
mysql
mysql>set password for (ユーザー名)@localhost=old_password('パスワード');
なんでold_passwordにしてるかというと、PHP4でパスワードを認識しなかったからです。PHP5では未確認です。rootパスワードは、セキュリティーのためには設定しておくべきですが、DBD::mysqlをインストールする時には解除しておかないとmake testで失敗します。
ユーザー追加
mysql>GRANT ALL ON *.* TO (ユーザー名);
データーベースの文字コードをシフトJISにする
vi /etc/my.cnf
chkconfig mysql on
MySQL起動
/etc/rc.d/init.d/mysql start
ルートパスワード設定
mysql
mysql>set password for (ユーザー名)@localhost=old_password('パスワード');
なんでold_passwordにしてるかというと、PHP4でパスワードを認識しなかったからです。PHP5では未確認です。rootパスワードは、セキュリティーのためには設定しておくべきですが、DBD::mysqlをインストールする時には解除しておかないとmake testで失敗します。
ユーザー追加
mysql>GRANT ALL ON *.* TO (ユーザー名);
データーベースの文字コードをシフトJISにする
vi /etc/my.cnf
[client] default-character-set=sjis [mysqld] default-character-set=sjis
/etc/rc.d/init.d/mysql restart
DBD::mysqlをインストールする際に、文字コードがシフトJISになっているとmake testが失敗するので、DBD::mysqlをインストールする時は文字コード指定をいったん解除してください。
現在のキャラクターセットを確認する
mysql
mysql>SHOW VARIABLES LIKE '%character\_set%';
デフォルトのデーターベースのタイプをInnoDBにする
vi /etc/my.cnf
DBD::mysqlをインストールする際に、文字コードがシフトJISになっているとmake testが失敗するので、DBD::mysqlをインストールする時は文字コード指定をいったん解除してください。
現在のキャラクターセットを確認する
mysql
mysql>SHOW VARIABLES LIKE '%character\_set%';
デフォルトのデーターベースのタイプをInnoDBにする
vi /etc/my.cnf
[mysqld] default-table-type=InnoDB
/etc/rc.d/init.d/mysql restart
ログを/var/log/mysql以下に残すようにする
mkdir /var/log/mysql
mkdir /var/log/mysql-bin
chown mysql.mysql /var/log/mysql
chown mysql.mysql /var/log/mysql-bin
vi /etc/my.cnf
ログを/var/log/mysql以下に残すようにする
mkdir /var/log/mysql
mkdir /var/log/mysql-bin
chown mysql.mysql /var/log/mysql
chown mysql.mysql /var/log/mysql-bin
vi /etc/my.cnf
[mysqld] log = /var/log/mysql/mysql.log log-error = /var/log/mysql/mysql-error.log log-slow-queries = /var/log/mysql/mysql-slow.log log-bin = /var/log/mysql-bin sync_binlog=1 expire_logs_days=30 max_binlog_size =1G
/etc/rc.d/init.d/mysql restart
ログのローテーションの設定
vi /etc/logrotate.d/mysql
ログのローテーションの設定
vi /etc/logrotate.d/mysql
/var/log/mysql/*log { create 660 mysql mysql missingok sharedscripts postrotate /usr/local/bin/mysqladmin -uroot -p'ルートパスワード' -hlocalhost flush-logs endscript }
ここで、-p'ルートパスワード'は、設定したパスワードを設定してください。ルートパスワードを設定してない時は-p'ルートパスワード'は不要です。
ログローテーションの設定が終わったら、
logrotate -d /etc/logrotate.conf
でエラーがない事を確認してください。
また、
/usr/local/bin/mysqladmin -uroot -p'ルートパスワード' -hlocalhost flush-logs
の行だけコピペしてコマンドライン上で実行させ、
ps ax | grep mysql
でエラーでデーモンが落ちてないか確認してくだい。
ログローテーションの設定が終わったら、
logrotate -d /etc/logrotate.conf
でエラーがない事を確認してください。
また、
/usr/local/bin/mysqladmin -uroot -p'ルートパスワード' -hlocalhost flush-logs
の行だけコピペしてコマンドライン上で実行させ、
ps ax | grep mysql
でエラーでデーモンが落ちてないか確認してくだい。
samba
cd /usr/local/src/targz
wget http://www.samba.org/samba/ftp/stable/samba-4.0.3.tar.gz
tar xvzf samba-4.0.3.tar.gz
cd samba-4.0.3
./configure
make
make install
注意:samba3まではsource3以下にあるconfigureスクリプトを実行したのですが、samba4にあるsource3以下のディレクトリは前バージョンのソースを流用するために入っているだけなので、source3以下にあるconfigureスクリプトはここでは使いません。使おうとするとmake installの途中で止まります。展開したディレクトリ直下のconfigureスクリプトを実行してください。
雛形のコピー
cp examples/smb.conf.default /usr/local/samba/etc/smb.conf
注意:samba3までは、smb.confファイルは/usr/local/samba/lib/以下に入れていたのですが、samba4では/usr/local/samba/etc/以下に入れる必要があります。これはエラーログ(/var/log/samba/log.nmbd)を見ると判明します。
ライブラリの場所をシステムに覚えさせる
vi /etc/ld.so.conf.d/samba.conf
wget http://www.samba.org/samba/ftp/stable/samba-4.0.3.tar.gz
tar xvzf samba-4.0.3.tar.gz
cd samba-4.0.3
./configure
make
make install
注意:samba3まではsource3以下にあるconfigureスクリプトを実行したのですが、samba4にあるsource3以下のディレクトリは前バージョンのソースを流用するために入っているだけなので、source3以下にあるconfigureスクリプトはここでは使いません。使おうとするとmake installの途中で止まります。展開したディレクトリ直下のconfigureスクリプトを実行してください。
雛形のコピー
cp examples/smb.conf.default /usr/local/samba/etc/smb.conf
注意:samba3までは、smb.confファイルは/usr/local/samba/lib/以下に入れていたのですが、samba4では/usr/local/samba/etc/以下に入れる必要があります。これはエラーログ(/var/log/samba/log.nmbd)を見ると判明します。
ライブラリの場所をシステムに覚えさせる
vi /etc/ld.so.conf.d/samba.conf
/usr/local/samba/lib64 /usr/local/samba/lib
ldconfig
自動起動スクリプトの作成
vi /etc/rc.d/init.d/samba
自動起動スクリプトの作成
vi /etc/rc.d/init.d/samba
#!/bin/sh # # chkconfig: - 91 35 # description: Starts and stops the Samba smbd and nmbd daemons \ # used to provide SMB network services. # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 0 fi # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # Check that smb.conf exists. [ -f /usr/local/samba/etc/smb.conf ] || exit 0 RETVAL=0 start() { # If CUPS is used as printing system, reload smb after a 1 minute delay # to allow the printers to appear properly as samba shares. if killall -0 cupsd 2>/dev/null; then ( sleep 60 && killproc smbd -HUP ) & fi export TMPDIR="/var/tmp" echo -n "Starting SMB services: " daemon /usr/local/samba/sbin/smbd -D RETVAL=$? echo echo -n "Starting NMB services: " daemon /usr/local/samba/sbin/nmbd -D RETVAL2=$? echo [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \ RETVAL=1 return $RETVAL } stop() { echo -n "Shutting down SMB services: " killproc smbd RETVAL=$? echo echo -n "Shutting down NMB services: " killproc nmbd RETVAL2=$? [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb echo "" return $RETVAL } restart() { stop start } reload() { export TMPDIR="/var/tmp" echo -n "Reloading smb.conf file: " killproc smbd -HUP RETVAL=$? echo return $RETVAL } mdkstatus() { status smbd status nmbd } case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; status) mdkstatus ;; condrestart) [ -f /var/lock/subsys/smb ] && restart || : ;; *) echo "Usage: $0 {start|stop|restart|status|condrestart}" exit 1 esac exit $?
これはsamba4用です。smb.confの設置場所の変更に伴い、一部がsamba3用とは異なります。
起動
chmod 755 /etc/rc.d/init.d/samba
chkconfig samba on
/etc/rc.d/init.d/samba start
パスを通す
vi /etc/profile.d/samba.sh
起動
chmod 755 /etc/rc.d/init.d/samba
chkconfig samba on
/etc/rc.d/init.d/samba start
パスを通す
vi /etc/profile.d/samba.sh
PATH="$PATH":/usr/local/samba/bin
いったんtelnetから抜けて入りなおす。
ユーザーの作成
useradd ユーザー名
smbpasswd -a ユーザー名
New SMB password: パスワード
Retype new SMB password: パスワード
チューニング
vi /usr/local/samba/etc/smb.conf
ユーザーの作成
useradd ユーザー名
smbpasswd -a ユーザー名
New SMB password: パスワード
Retype new SMB password: パスワード
チューニング
vi /usr/local/samba/etc/smb.conf
[global] server string = サーバー名 workgroup = ワークグループ名 log file = /var/log/samba/%m.log max log size = 0 os level = OSレベル domain master = no preferred master = no load printers = no unix charset = EUC-JP dos charset = SHIFT_JIS
server stringはWindowsのエクスプローラでいうところの「詳細」欄に表示する名前を指定します。エクスプローラでいうところのサーバー名は、ホスト名が自動的に使われます。
max log sizeは0にしておくと無限に肥大してしまうので、別途logrotatedに設定してローテーションさせます。
os levelは33以上にすればWindows2000Serverの32に勝ってマスターブラウザになります。ただし、他にもsambaサーバーがあってマスターブラウザにしたくない場合は低くしておきます。
domain master、preferred master は、このサーバーをドメインマスターやブラウザーマスターにする場合はyesにします。ここではnoにしています。
load printersはsambaサーバーに接続したプリンターを共有として使うかどうか。使わないのでnoにしています。
display charset はSWATで使う文字コードの指定・・・だったんですが、samba4ではUTF8に固定されたらしく、この指定自体ができなくなりました。
ログの管理
mkdir /var/log/samba
useradd samba
chown samba.samba /var/log/samba
vi /etc/logrotate.d/samba
max log sizeは0にしておくと無限に肥大してしまうので、別途logrotatedに設定してローテーションさせます。
os levelは33以上にすればWindows2000Serverの32に勝ってマスターブラウザになります。ただし、他にもsambaサーバーがあってマスターブラウザにしたくない場合は低くしておきます。
domain master、preferred master は、このサーバーをドメインマスターやブラウザーマスターにする場合はyesにします。ここではnoにしています。
load printersはsambaサーバーに接続したプリンターを共有として使うかどうか。使わないのでnoにしています。
display charset はSWATで使う文字コードの指定・・・だったんですが、samba4ではUTF8に固定されたらしく、この指定自体ができなくなりました。
ログの管理
mkdir /var/log/samba
useradd samba
chown samba.samba /var/log/samba
vi /etc/logrotate.d/samba
/var/log/samba/*log /var/log/samba/*mbd { create 0644 samba samba missingok sharedscripts postrotate /bin/kill -HUP `cat /usr/local/samba/var/run/smbd.pid 2>/dev/null` 2> /dev/null || true /bin/kill -HUP `cat /usr/local/samba/var/run/nmbd.pid 2>/dev/null` 2> /dev/null || true endscript }
注意:samba3ではpidファイルは/usr/local/samba/var/locksにあったのですが、samba4では/usr/local/samba/var/runに変更になりました。その関係で一部をsamba4用に変更してあります。(・・・っていうか、こういうのってあまり変えないでほしいよね・・・・)
エラーがない事を確認します。
logrotate -d /etc/logrotate.conf
エラーがない事を確認します。
logrotate -d /etc/logrotate.conf
自作ソフトのインストール
urldec、pg_csv、dump2はけっこう便利なのでインストールします。ほとんどの人は使わないと思いますけど・・・。下記のツールが必要ない方は、ここは飛ばしてくださいね。
urldecのインストール
urldecはurlencodeされた文字列をデコードします。apacheのログを解析する時に使います。
cd /usr/local/src/tatgz
wget http://software.aufheben.info/linux/urldec-1.02.tar.gz
tar xvzf urldec-1.02.tar.gz
cd urldec-1.02
make
make install
cd ..
pg_csvのインストール
pg_csvはPostgreSQLのデーターをCSV形式で出力します。エクセル用に強制文字列指定もできます。
wget http://software.aufheben.info/linux/pg_csv-1.03.tar.gz
tar xvzf pg_csv-1.03.tar.gz
cd pg_csv-1.03
./configure
make
make install
cd ..
hexdump2のインストール
hexdump2はファイルの16進ダンプをMS-DOSのDUMPコマンドふうに表示します。
wget http://software.aufheben.info/linux/hexdump2-1.02.tar.gz
tar xvzf hexdump2-1.02.tar.gz
cd hexdump2-1.02
make
make install
urldecのインストール
urldecはurlencodeされた文字列をデコードします。apacheのログを解析する時に使います。
cd /usr/local/src/tatgz
wget http://software.aufheben.info/linux/urldec-1.02.tar.gz
tar xvzf urldec-1.02.tar.gz
cd urldec-1.02
make
make install
cd ..
pg_csvのインストール
pg_csvはPostgreSQLのデーターをCSV形式で出力します。エクセル用に強制文字列指定もできます。
wget http://software.aufheben.info/linux/pg_csv-1.03.tar.gz
tar xvzf pg_csv-1.03.tar.gz
cd pg_csv-1.03
./configure
make
make install
cd ..
hexdump2のインストール
hexdump2はファイルの16進ダンプをMS-DOSのDUMPコマンドふうに表示します。
wget http://software.aufheben.info/linux/hexdump2-1.02.tar.gz
tar xvzf hexdump2-1.02.tar.gz
cd hexdump2-1.02
make
make install
watcher2のインストール
自宅や外出先からサーバーのSMTPを使ってメールする場合、自宅や外出先が固定IPなら良いのですが、動的IPだった場合/etc/mail/access.dbに許可IPを書くことができません。そこで、QPOPPERのログを監視して、POP3が成功したIPアドレスに一定期間メールの送信権を与えます。
まずQPOPPERをwatcher対応にコンパイルします。以前はパッチを当てて対応していたのですが、今は./configure時に --enable-log-login をつけるだけで良いです。
次に公式サイトに行ってwatcher2のv1.6をテキストエディターで開きます。
最初の方を少し変更します。
$popperlog = "/var/log/pop3.log"; # logfile for popper
$popauthlog = "/var/log/popauthlog"; # logfile for myself
$syslogpid = "/etc/syslog.pid"; # syslog pid file
$popauth = "/etc/mail/access"; # sendmail database
$makemap = "/usr/etc/makemap"; # makemap command
$mapclass = "hash"; # database class
これはあくまで例です。お使いの環境に合わせて変更してください。
また、このままの状態では、常にPOP3に成功したIPアドレスのみが許可され、常時許可されるデフォルトのIPアドレス、たとえば、192.168.0などが設定できません。ある程度自分が使いやすいようにカスタマイズする必要があります。たとえば、192.168.0は常時許可させる、といったカスタマイズが必要になると思います。
カスタマイズが終わったら、名前をつけて保存します。名前は、例えばwatcher2dlなどとします。改行コードはLFのみにします。それを、バイナリモードでサーバーにアップします。それを、適当なパス(たとえば、/usr/local/bin)にコピーして、
chmod 755 /usr/local/bin/watcher2d
として実行権限を与えます。
さて、問題はこれをどうやって常駐させるか。CentOS5まではinittabに
pbs:345:respawn:/usr/local/bin/watcher2d
というふうに記述して常駐させていたのですが、CentOS6ではこの手が通用しなくなりました。なぜなら、
まずQPOPPERをwatcher対応にコンパイルします。以前はパッチを当てて対応していたのですが、今は./configure時に --enable-log-login をつけるだけで良いです。
次に公式サイトに行ってwatcher2のv1.6をテキストエディターで開きます。
最初の方を少し変更します。
$popperlog = "/var/log/pop3.log"; # logfile for popper
$popauthlog = "/var/log/popauthlog"; # logfile for myself
$syslogpid = "/etc/syslog.pid"; # syslog pid file
$popauth = "/etc/mail/access"; # sendmail database
$makemap = "/usr/etc/makemap"; # makemap command
$mapclass = "hash"; # database class
これはあくまで例です。お使いの環境に合わせて変更してください。
また、このままの状態では、常にPOP3に成功したIPアドレスのみが許可され、常時許可されるデフォルトのIPアドレス、たとえば、192.168.0などが設定できません。ある程度自分が使いやすいようにカスタマイズする必要があります。たとえば、192.168.0は常時許可させる、といったカスタマイズが必要になると思います。
カスタマイズが終わったら、名前をつけて保存します。名前は、例えばwatcher2dlなどとします。改行コードはLFのみにします。それを、バイナリモードでサーバーにアップします。それを、適当なパス(たとえば、/usr/local/bin)にコピーして、
chmod 755 /usr/local/bin/watcher2d
として実行権限を与えます。
さて、問題はこれをどうやって常駐させるか。CentOS5まではinittabに
pbs:345:respawn:/usr/local/bin/watcher2d
というふうに記述して常駐させていたのですが、CentOS6ではこの手が通用しなくなりました。なぜなら、
# inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
って書いてあるからです。え?意味がわからない?えっと、これには、「inittabは起動時のランレベルを判別するためだけに使います。以降、何書いても効果はありません。」っていう意味です。なので、当然watcher2を常駐させる記載をしても無駄です。
仕方ないので、apacheのapachectrlみたいなのを作りました。以下をwatcher2ctrlとして、改行コードLFのみでセーブした後、バイナリモードでアップロードしてください。
仕方ないので、apacheのapachectrlみたいなのを作りました。以下をwatcher2ctrlとして、改行コードLFのみでセーブした後、バイナリモードでアップロードしてください。
#!/usr/bin/perl $option1 = shift @ARGV; $option2 = shift @ARGV; # 初期設定 # ここをお使いの環境に合わせて変更してください $WATCHER2="/usr/local/bin/watcher2d"; # 常駐チェック ==================================================================== $jochu_cnt=0; $line_cnt=0; $status_str=""; $watcher2_process_id=0; $watcher2_process_cnt=0; open(IN, "ps axwwww |"); while (<IN>) { $line_cnt++; if ( /\s*(\d+)\s.*($WATCHER2)/ ) { $jochu_cnt++; $watcher2_process_cnt++; $watcher2_process_id=$1; $status_str.="$&\n"; } } close(IN); # psコマンド失敗なら終了 if ($line_cnt==0){ die("psコマンド失敗"); } # 多重起動チェック ==================================== $dame=0; if ($watcher2_process_cnt>1){ $dame=1; die("watcher2が多重起動しています"); } #実行フラグ初期化 ==================================== $done_flg=0; # ストップモード ===================================== if ($option1 eq "stop") { if ($jochu_cnt==0) { printf("watcher2は常駐していません\n"); } if ($watcher2_process_id>0){ system("kill -KILL $watcher2_process_id"); printf("watcher2を止めました\n"); } $done_flg=1; } # リスタートモード ===================================== if ($option1 eq "restart") { if ($watcher2_process_id>0){ system("kill -KILL $watcher2_process_id"); printf("watcher2を止めました\n"); } sleep 3; system("$WATCHER2 &"); printf("watcher2を起動させました\n"); $done_flg=1; } # スタートモード ========================================= if ($option1 eq "start"){ if ($watcher2_process_id>0){ printf("watcher2は既に動いてます - %s\n", $watcher2_process_id); } else { system("$WATCHER2 &"); printf("watcher2を起動させました\n"); } $done_flg=1; } # ステータス表示 ========================================= if ($option1 eq "status"){ if ($jochu_cnt>0) { if ($watcher2_process_id>0){ printf("watcher2は常駐しています - %s\n",$watcher2_process_id); } else { printf("watcher2は常駐していません\n"); } } else { printf("watcher2は常駐していません\n"); } $done_flg=1; } # ヘルプ ============================================================== if ($done_flg==0){ printf("使い方:\n"); printf("watcher2ctrl start または stop または restart または status\n"); } exit();
これをサーバーの/usr/local/binにコピーして、パーミッションを755にします。あとは、apachectrlみたいに使えます。
例)
watcher2ctrl start ・・・・watcher2を起動させます。
watcher2ctrl stop ・・・・watcher2を終了させます。
watcher2ctrl restart ・・・watcher2を再起動させます。
また、サーバー起動時にwatcher2を起動させるために、/etc/rc.d/init.d/watcher2というスクリプトを作成します。
例)
watcher2ctrl start ・・・・watcher2を起動させます。
watcher2ctrl stop ・・・・watcher2を終了させます。
watcher2ctrl restart ・・・watcher2を再起動させます。
また、サーバー起動時にwatcher2を起動させるために、/etc/rc.d/init.d/watcher2というスクリプトを作成します。
#!/bin/sh # # chkconfig: 345 81 35 # description: Starts and stops the watcher2 daemons # used to provide watcher2 network services. # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 CONFIG=/usr/local/bin/watcher2d # Check that smb.conf exists. [ -f $CONFIG ] || exit 0 # See how we were called. case "$1" in start) echo "Starting watcher2..." /usr/local/bin/watcher2d & ;; stop) echo "Stopping watcher2 ..." killall watcher2d ;; restart) echo "Restarting watcher2 services: " $0 stop /bin/sleep 3 $0 start echo "done." ;; *) echo "Usage: watcher2 {start|stop|restart}" exit 1 esac
ここで注意してほしいのは、watcher2のデーモンの名前と、このスクリプトの名前を同じにしてはいけないという事です。なぜなら、restartのところでkillall
watcher2dとしているからです。ここで、このスクリプトもwatcher2dという名前だとこのスクリプト自体がkillallされて止まってしまいます。必ずwatcher2本体とこの起動スクリプトは別名にしてください。
このスクリプトをviかなんかでコピペして、/etc/rc.d/init.d/watcher2に保存して、
chmod 755 /etc/rc.d/init.d/watcher2
chkconfig watcher2 on
とすると、サーバー起動時にwatcher2が自動起動します。
・さらなるカスタマイズ
watcher2はperlで記述されており、可読性も良いです。なので、さらにカスタマイズする事も可能です。たとえば、access.dbだけでなく、hosts.allowやhosts.denyを生成するようにすれば、POP3認証が成功したIPアドレスに一定時間telnet、ssh、FTPの接続権を与えることができます。ただし、その分セキュリティは脆弱になるので、穴の開け過ぎは禁物です。
このページの先頭へ
このスクリプトをviかなんかでコピペして、/etc/rc.d/init.d/watcher2に保存して、
chmod 755 /etc/rc.d/init.d/watcher2
chkconfig watcher2 on
とすると、サーバー起動時にwatcher2が自動起動します。
・さらなるカスタマイズ
watcher2はperlで記述されており、可読性も良いです。なので、さらにカスタマイズする事も可能です。たとえば、access.dbだけでなく、hosts.allowやhosts.denyを生成するようにすれば、POP3認証が成功したIPアドレスに一定時間telnet、ssh、FTPの接続権を与えることができます。ただし、その分セキュリティは脆弱になるので、穴の開け過ぎは禁物です。
広告